Для неанглоязычного сайта на одном языке по-прежнему рекомендуется писать t()-строки в теме на английском языке?
На Drupal 7 с модулями i18n, на каком языке должны быть написаны строки по умолчанию? В модулях очевидно, что все строки должны быть на английском языке (для возможности повторного использования) и использовать t().
Но пользовательская тема будет использоваться только для конкретного сайта. Если сайт не на английском языке, кажется лике неудобной практикой сначала писать все на английском, а затем переводить на конкретный язык.
3 answers
Если вы на 100% уверены, что вам не нужно (повторно) использовать этот код в многоязычной среде, сейчас или в будущем, вы можете безопасно использовать строки на иностранном языке. Лично я считаю, что лучше всего всегда использовать t(), потому что вы никогда не знаете, что произойдет в будущем.
Имейте в виду, что строки в коде, которые являются , проходят через t(), предполагается, что они на английском языке, поэтому вам нужно выбирать между t('English text')
или 'Svensk text'
. Никогда не используйте t('Svensk text')
.
Лично я бы не хотел использовать английский язык в теме, если бы не ожидалось, что сайт когда-либо будет использовать этот язык. Я думаю, что это замедлило бы мое первоначальное кодирование, замедлило бы обновление текста, и если бы сайт позже нуждался в английском языке, я сомневаюсь, что качество первоначальных переводов было бы на должном уровне (потому что я никогда не ожидал, что они будут использоваться вживую). Сказав это, очевидно, что если вы собираетесь использовать i18n в любой момент, вам нужно будет следовать правилам и использовать Английский, аналогично, если вы хотите выпустить тему на d.o (сейчас или в будущем) или повторно использовать ее в проекте с участием i18n. Одно предложение: я думаю, что мог бы создать функцию, например.
function ct($string, array $args = array(), array $options = array()) {
return t($string, $args, $options);
}
И используйте это вместо t()
. Поэтому, чтобы продолжить с marcvangend, вы можете использовать ct('Svensk text')
. Таким образом, вы получаете удобство использования конечного языка, но вы можете легко найти примеры того, где вы это сделали, и быстро изменить их, если вам это понадобится позже.
Нет никакой разницы между использованием t()
в модулях или темах; в обоих случаях функция ожидает, что строка, переданная в качестве аргумента, будет на английском языке.
Между использованием t()
, даже если вы знаете, что страница всегда отображается на определенном языке, и использованием строки на языке, который вы знаете, чтобы использовать, предпочтительнее использовать t()
.
Почему? Потому что в первом случае строка будет жестко закодирована в коде темы, что означает, что вы не можете ее изменить без необходимости менять код. Если страница, которую вы сейчас показываете на каком-либо языке, должна отображаться на другом языке, вам следует изменить код вашей темы, чтобы изменить строки. Это именно то, чего t()
избегает.
Предположим, что один и тот же код используется для нескольких сайтов, и на одном сайте одна из строк должна отличаться. Без использования t()
вам понадобились бы две разные темы, в то время как при использовании t()
вы использовали бы один и тот же код для обоих сайтов.
Достаточно того, что в settings.php файл, в который вы добавляете строки, похожие на следующие:
$conf['locale_custom_strings_en'][''] = array(
'forum' => 'Discussion board',
'@count min' => '@count minutes',
);
Пример предназначен для изменения строк, используемых для английского языка, но то же самое можно сделать для любого языка; достаточно изменить часть "_en" в "locale_custom_strings_en" с идентификатором языка для интересующего вас языка. Первая строка на английском языке, а вторая строка является переводом первой строки на этом языке.
Предположим, что ваша тема содержит print t('forum')
. Добавление этого кода в тот settings.php файл, который пользователь увидит, когда текущий язык для этой страницы - английский, - это "Доска обсуждений"; если ваша тема содержит print 'forum'
, пользователь всегда будет видеть "форум", и чтобы изменить это, вам нужно изменить код вашей темы.
Я также мог бы использовать следующий код:
$conf['locale_custom_strings_it'][''] = array(
'forum' => 'Tavola di discussione',
'@count min' => '@count minuti primi',
);
В этом случае, когда для страницы задан итальянский язык, а тема содержит print t('forum')
, пользователи увидят "Тавола ди дискуссионе".