2012-10-04 2 views
7

Is gettext - лучший способ локализовать сайт в php? Я не использую каких-либо фреймворков, и не так много слов для перевода, просто две разные версии на английском языке.Is gettext лучший способ локализовать сайт в php? (требуется только небольшая локализация)

ответ

12

Вы можете просто использовать lang_XX.php и включить его в приложении.

$lang = array(
    "welcome" => "Welcome", 
    "bye" => "Bye" 
); 

Для других языков, говорят lang_fr.php, только что-то вроде:

$lang = array(
    "welcome" => "Accueil", 
    "bye" => "Au revoir" 
); 

Для небольшого случая использования, это должно быть хорошо, и нет необходимости идти с .po файлов. Также вы можете определить его следующим образом:

function _($l) 
{ 
    return $lang[$l]; 
} 
+6

+1 Хорошее решение для простого сайта – Tchoupi

+6

Хотя решение хорошее, я бы по-прежнему рекомендовал маршрут gettext. Вы никогда не знаете, куда пойдет ваш сайт. Он может стать быстрее, и вам может потребоваться добавить дополнительные языки. Gettext не собирается занимать гораздо больше времени, чем это предлагаемое решение. – eakkas

+0

Еще приятнее, что @NatlsGleek, так как эти файлы перевода могут быть отправлены другим людям для завершения. –

1

Для статического контента, который никогда/крайне редко меняется, конечно.

Для динамического контента, ни в малейшей степени. Компиляция файлов .po и т. Д. - это путь сверху, и я бы предложил вместо него какое-то решение JSON или XML и шаблонов с кэшированными скомпилированными шаблонами.

+2

Не могли бы вы рассказать о том, что вы подразумеваете под «Компиляция файлов .po наверху "? – dsas

+0

Для меня это очень важный случай статического контента. –

3

С точки зрения производительности, gettextExtension быстрее, чем при использовании строкового массива, который отображает как строковые идентификаторы для локализованного текста (например "WelcomeText" => "Welcome to our homepage." будут включены использовать что-то <?= $strings["WelcomeText"] >. Чистый PHP реализация Gettext медленнее и не рекомендуется, если вам можно использовать PHP Extension. Подробнее здесь Localizing PHP web sites using gettext и Benchmarking PHP Localization – Is gettext fast enough?

10

gettext - лучший способ. Для небольшого сайта с небольшим количеством строк, который, как ожидается, не будет расти, реализация чего-то похожего на решения, опубликованные уже на самом деле, может быть быстрее, чем изучение того, как использовать gettext и настраивать его.

Т.Л., д-р:

Люди думали трудно в течение многих лет, чтобы создать систему перевода, которая работает, вы могли бы потратить возрасты заново изобретать что колесо, или вы могли бы потратить некоторое время, чтобы научиться использовать Gettext ,

В мире с открытым исходным кодом gettext практически является стандартом де-факто.

Вот несколько причин, почему Gettext лучше, чем обычная альтернатива сохранения больших списков перевода массивов

  1. Это быстрее
  2. Это не требует загрузок каждой строки в память один раз в поток
  3. В нем много инструментов для переводчиков, таких как poedit, поэтому вы не полагаетесь на своих переводчиков, понимающих, как редактировать PHP-код.
  4. У него есть поддержка инструментов для вас, msgmerge и т. Д., Что означает, что вы можете отправить свой файл для перевода в процессе работы, добавив новый переводный текст и легко слить его обратно вместе.
  5. Нужно дать комментарий переводчику о контексте строки? gettext будет комментировать код, в котором он используется, и скопировать его в файл перевода
  6. Ключи перевода - это текст на английском языке, если он еще не переведен, но текст по-прежнему отображается на простом английском языке, ни один из них решения, данные по этому ответу на сегодняшний день, получают это право.
  7. Он поддерживает множественное число, если строка зависит от целого числа, на английском языке существует только две формы: if n != 1 "There was a person" else "There were n people". Для других языков правило не так просто, как если бы (n! = 1), у русских есть 3 разных варианта, и правило равно n%100/10==1 ? 2 : n%10==1 ? 0 : (n+9)%10>3 ? 2 : 1;
+0

Для больших переводов я думаю, что это лучший вариант, но в моем случае это слишком много. –

+1

Вы по-прежнему придерживаетесь своей рекомендации на сегодняшний день (февраль 2015 г.)? Что-нибудь еще появилось с 2012 года? – alexw

+0

Компонент перевода symfony выглядит очень хорошо продуманным, но я никогда не использовал его. – dsas

Смежные вопросы