h4d / i18n
v1.0.7
2016-11-21 16:03 UTC
Requires
- php: >=5.5.9
Requires (Dev)
- phpunit/phpunit: ^4.8
This package is not auto-updated.
Last update: 2024-09-14 19:53:11 UTC
README
这是一个用于字符串翻译以及与系统国际化("locales")相关的基本库。
通过 composer 安装
该库可以通过执行以下命令通过 composer 安装:
$ composer require h4d/i18n
注意:为了正确运行此库,必须在系统上安装 gettext 库以及相应的本地化包(对于要支持的所有语言)。例如,在 Ubuntu 上,需要
-
安装 gettext
apt-get install gettext -
安装所需的本地化包,例如,对于西班牙语
apt-get install language-pack-es
使用翻译器的示例
从 csv 文件中提取翻译器
以下是一个示例,演示如何从一个位于 ./data 目录中的 CSV 文件中提取基本翻译器。文件名必须与语言名称匹配。例如,在本例中,必须在 ./data 目录中存在一个名为 es_ES.csv 的文件。
use H4D\I18n\Translator;
use H4D\I18n\Translator\Adapters\CsvAdapter;
try
{
// New CSV adaptor instance (CSV file: ./data/es_ES.csv)
$adapter = new CsvAdapter('es_ES', [CsvAdapter::OPTION_TRANSLATIONS_DIRECTORY=>__DIR__.'/data']);
// New translator instace
$translator = new Translator($adapter);
// Translate a simple string
$translated = $translator->translate('Simple string.');
printf('Translated string: %s' . PHP_EOL, $translated);
// Translate a string with vars
$translated = $translator->translate('Hello %s!', 'Pakito');
printf('Translated string: %s' . PHP_EOL, $translated);
}
catch (\Exception $e)
{
printf('EXCEPTION!!: %s'.PHP_EOL, $e->getMessage());
}
为了在文件中捕获没有翻译的字符串,可以使用以下选项(适配器构造函数的第二个参数)
- OPTION_LOG_UNTRANSLATED_STRING (bool): true=>捕获没有翻译的字符串,false=>不捕获没有翻译的字符串。
- OPTION_UNTRANSLATED_STRING_LOG_FILE (string): 存储没有翻译的字符串的文件路径。
// New CSV adaptor instance (CSV file: ./data/es_ES.csv) + capture untranslated strings to ./untranslated.txt
$adapter = new CsvAdapter('es_ES', [CsvAdapter::OPTION_TRANSLATIONS_DIRECTORY=>__DIR__.'/data',
CsvAdapter::OPTION_LOG_UNTRANSLATED_STRING=>true,
CsvAdapter::OPTION_UNTRANSLATED_STRING_LOG_FILE=>__DIR__.'/untranslated.txt']);
从 gettext 提取翻译器
以下是一个示例,演示如何从一个位于 ./data 目录中的 gettext 文件(.mo)中提取基本翻译器。
由于 gettext 的要求,在指定目录中必须存在以下目录结构
.
├── en_GB
│ └── LC_MESSAGES
│ ├── test.mo
│ └── test.po
└── es_ES
└── LC_MESSAGES
├── test.mo
└── test.po
语言目录应遵循 ll_cc 格式,其中 ll 是表示语言的 ISO-639 两字母代码,cc 是表示国家的 ISO-3166 两字母代码。*.po 和 *.mo 文件可以取任何我们想要的名称。
use H4D\I18n\Translator;
use H4D\I18n\Translator\Adapters\GettextAdapter;
try
{
// New Gettext adaptor instance (use .mo file located in ./data/es_ES/LC_MESSAGES directory with name "test")
$adapter = new GettextAdapter('es_ES.UTF-8',
[GettextAdapter::OPTION_TRANSLATIONS_DIRECTORY => __DIR__ . '/data',
GettextAdapter::OPTION_TRANSLATIONS_DOMAIN => 'test']);
// New translator instace
$translator = new Translator($adapter);
// Translate a simple string
$translated = $translator->translate('Simple string.');
printf('Translated string: %s' . PHP_EOL, $translated);
// Translate a string with vars
$translated = $translator->translate('Hello %s!', 'Pakito');
printf('Translated string: %s' . PHP_EOL, $translated);
}
catch (\Exception $e)
{
printf('EXCEPTION!!: %s'.PHP_EOL, $e->getMessage());
}
与文件适配器类似,可以使用选项 OPTION_LOG_UNTRANSLATED_STRING 和 OPTION_UNTRANSLATED_STRING_LOG_FILE 捕获没有翻译的字符串。
$adapter = new GettextAdapter('es_ES.UTF-8',
[GettextAdapter::OPTION_TRANSLATIONS_DIRECTORY => __DIR__ . '/data',
GettextAdapter::OPTION_TRANSLATIONS_DOMAIN => 'test',
GettextAdapter::OPTION_LOG_UNTRANSLATED_STRING => true,
GettextAdapter::OPTION_UNTRANSLATED_STRING_LOG_FILE => __DIR__
. '/unstranslated.txt']);