Для неанглоязычного сайта на одном языке по-прежнему рекомендуется писать t()-строки в теме на английском языке?


На Drupal 7 с модулями i18n, на каком языке должны быть написаны строки по умолчанию? В модулях очевидно, что все строки должны быть на английском языке (для возможности повторного использования) и использовать t().

Но пользовательская тема будет использоваться только для конкретного сайта. Если сайт не на английском языке, кажется лике неудобной практикой сначала писать все на английском, а затем переводить на конкретный язык.

 6
Author: D. Wroblewski, 2011-12-09

3 answers

Если вы на 100% уверены, что вам не нужно (повторно) использовать этот код в многоязычной среде, сейчас или в будущем, вы можете безопасно использовать строки на иностранном языке. Лично я считаю, что лучше всего всегда использовать t(), потому что вы никогда не знаете, что произойдет в будущем.

Имейте в виду, что строки в коде, которые являются , проходят через t(), предполагается, что они на английском языке, поэтому вам нужно выбирать между t('English text') или 'Svensk text'. Никогда не используйте t('Svensk text').

 3
Author: marcvangend, 2011-12-09 15:57:12

Лично я бы не хотел использовать английский язык в теме, если бы не ожидалось, что сайт когда-либо будет использовать этот язык. Я думаю, что это замедлило бы мое первоначальное кодирование, замедлило бы обновление текста, и если бы сайт позже нуждался в английском языке, я сомневаюсь, что качество первоначальных переводов было бы на должном уровне (потому что я никогда не ожидал, что они будут использоваться вживую). Сказав это, очевидно, что если вы собираетесь использовать i18n в любой момент, вам нужно будет следовать правилам и использовать Английский, аналогично, если вы хотите выпустить тему на d.o (сейчас или в будущем) или повторно использовать ее в проекте с участием i18n. Одно предложение: я думаю, что мог бы создать функцию, например.

function ct($string, array $args = array(), array $options = array()) {
    return t($string, $args, $options);
}

И используйте это вместо t(). Поэтому, чтобы продолжить с marcvangend, вы можете использовать ct('Svensk text'). Таким образом, вы получаете удобство использования конечного языка, но вы можете легко найти примеры того, где вы это сделали, и быстро изменить их, если вам это понадобится позже.

 2
Author: Andy, 2011-12-10 14:12:58

Нет никакой разницы между использованием 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'), пользователи увидят "Тавола ди дискуссионе".

 1
Author: kiamlaluno, 2011-12-09 16:43:33