h4d/i18n

H4D i18n

v1.0.7 2016-11-21 16:03 UTC

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 上,需要

  1. 安装 gettext

     apt-get install gettext
    
  2. 安装所需的本地化包,例如,对于西班牙语

     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_STRINGOPTION_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']);