Подтвердить что ты не робот

Gettext() в библиотеке Intl?

Я ищу способ сделать i18n и l10n.

Я использовал gettext раньше, и это было хорошо: я просто создавал файлы .mo на разных языках, и все, что нужно было перевести, было бы в этих обозначениях:

echo __('string to be translated');

Я знаю, что теперь есть встроенная в PHP библиотека Intl, и мне сказали, что я должен использовать ее вместо gettext().

Прочитав все, что есть о Intl на php.net, я вижу, что у него есть некоторые интересные функции, такие как обработка локали, сравнение строк, форматирование чисел и т.д.

Что я не могу понять, так это то, как я буду обрабатывать регулярную строку для перевода строк с использованием библиотеки Intl. Любые идеи?

4b9b3361

Ответ 1

Вы используете gettext. Intl (как ICU под ним) для l10n, а не для загрузки переводов.

Ответ 2

Это совет не очень правдиво. Внутренние функции могут использоваться в сочетании с gettext, а не как замена.

MessageFormatter - это то, что люди имеют в виду, когда они связывают INTL с текстовыми переводами. Примеры показывают это. Но на самом деле это просто sprintf на стероидах. Он вводит числа в существующие строки. (Я даже не знаю, как там поддерживается локальная поддержка, поскольку он просто служит внутренним переключателем.)

Ответ 3

Вот как я использовал intl для переводов (проверенных на php v. 5.3.10 и 5.4.7):

intl.php

namespace Example;
class Intl {

  private $resource;

  public function __construct() {
    $bundle_location = "./locales";
    $user_locale = \Locale::acceptFromHttp( $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
    $this->resource = new \ResourceBundle( $user_locale, $bundle_location );
  }

 ...

display.php

 use Example\Intl;

 $intl = new Intl();
 $r = $intl->resource;

 echo $r['string_to_be_translated'];

 ...

ресурсные пакеты

В каталоге locales у меня есть файлы ресурсов:

root.res - корневой язык (английский)

root { 
  string_to_be_translated {String to be translated } 
}

ja.res - Японский

ja { 
  string_to_be_translated {\u5909\u63DB\u3055\u308C\u308B\u6587\u5B57\u5217 }
}

sp.res - испанский

sp { 
  string_to_be_translated {Cadena a ser traducido }
}

(и т.д.)