fisharebest / localization
一个轻量级的本地化数据库和翻译工具,包含CLDR、IANA、ISO等数据。
1.17.0
2022-10-24 15:23 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- ext-simplexml: *
- php-coveralls/php-coveralls: *
- phpunit/phpunit: *
This package is auto-updated.
Last update: 2024-09-11 02:36:58 UTC
README
本地化标准和数据
此软件包结合了来自许多标准的本地化数据,包括Unicode CLDR、RFC5646 / IANA子标签注册表、ISO-3166、ISO-639、ISO-15924等,以帮助您制作适用于世界各地访问者的应用程序。
包含超过800个区域的定义。
区域、语言、脚本和领土
一个区域由三部分组成:一种语言、一种脚本和一个领土。脚本和领土通常可以从语言中隐含得出。
通常您只需要处理区域,可以忽略语言和脚本。
$locale = new LocaleJa; // Create a locale for Japanese. $locale = Locale::create('ja'); // Create a locale for Japanese, from its code. $locale->code(); // "ja_JP" (territories are always included in locale codes) $locale->languageTag(); // "ja" (redundant territories are omitted in tags) $locale->endonym(); // "日本語" (Japanese name for Japanese) // Languages - extract from the locale, or create with "new LanguageXx" $locale->language(); // LanguageJa $locale->language()->code(); // "ja" (ISO-639 code) // Scripts - extract from the locale, or create with "new ScriptXxxx" $locale->script(); // ScriptJpan $locale->script()->code(); // "Jpan" (ISO-15924 code) $locale->script()->direction(); // "ltr" (left to right) // Territories - extract from the locale, or create with "new TerritoryXx" $locale->territory(); // TerritoryJp $locale->territory()->code(); // "JP" (ISO-3166 code) // A few locales can also specify variants. $locale = new LocaleCaValencia; // The Valencian dialect of Catalan $locale->variant(); // VariantValencia $locale->variant()->code(); // "valencia"
本地化
创建一个区域并使用它来本地化您应用程序中的数据。
// Many ways to create locales $locale = new LocaleEnGb; $locale = Locale::create('en-GB'); // Use upper/lower case, hyphens/underscores/@ $locale = Locale::httpAcceptLanguage($_SERVER, $available_locales, $default_locale); // Markup for HTML elements containing this locale $locale->htmlAttributes(); // lang="ar" dir="rtl" // Is text written left-to-right or right-to-left $locale->direction(); // "ltr" or "rtl" // Days of the week. $locale->firstDay(); // 0=Sunday, 1=Monday, etc. $locale->weekendStart(); // 0=Sunday, 1=Monday, etc. $locale->weekendEnd(); // 0=Sunday, 1=Monday, etc. // Measurement systems and paper sizes. $locale->measurementSystem(); // "metric", "UK" or "US" $locale->paperSize(); // "A4" or "US-Letter" // Formatting numbers $locale = new LocaleGr; // Gujarati $locale->digits('2014'); // "૨૦૧૪" $locale = new LocaleItCh; // Swiss Italian $locale->number('12345678.9'); // "12'345'678.9" $locale->percent(0.123); // "12.3%" // To sort data properly in MySQL, you need to specify a collation sequence. // See https://dev.mysqlserver.cn/doc/refman/8.0/en/charset-unicode-sets.html $locale->collation(); // "unicode_ci", "swedish_ci", etc.
翻译
为每个区域定义了复数规则。以下示例显示,尽管英语和法语都有两种复数形式,但英语认为零是复数,而法语认为它是单数。
$locale = new LocaleEn; $locale->pluralRule()->plurals(); // 2 (English has two plural forms) $locale->pluralRule()->plural(0); // 1 (zero is plural in English "zero apples") $locale = new LocaleFr; $locale->pluralRule()->plurals(); // 2 (French also has two plural forms) $locale->pluralRule()->plural(0); // 0 (zero is singular in French "zero apple")
注意,CLDR中的一些复数定义与传统的gettext
用法不同。我们使用gettext版本为br、fa、fil、he、lv、mk、pt和se。
翻译函数与gettext
相同。
// We need to translate into French $locale = new LocaleFr; // Create the translation $translation = new Translation('/path/to/fr.mo'); // Can use .CSV, .PHP, .PO and .MO files // Create the translator $translator = new Translator($translation->asArray(), $locale->pluralRule()); // Use the translator $translator->translate('the fish'); // "le poisson" $translator->translateContext('noun', 'fish'); // "poisson" $translator->translateContext('verb', 'fish'); // "pêcher" $translator->plural('%d fish', '%d fishes', 4); // "%d poissons"
提示:如果您的翻译存储在多个文件中,您可以轻松地将它们合并。
// Create the translation $translation1 = new Translation('/path/to/core/fr.mo'); $translation2 = new Translation('/path/to/extra/fr.mo'); // Create the translator $translator = new Translator(array_merge($translation1->asArray(), $translation2->asArray()), $locale->pluralRule());
提示:从.PHP文件加载翻译比从.MO文件加载要快一些。您可以使用这种方法进行转换和/或缓存。
$translation = new Translation('/path/to/fr.mo');
file_put_contents('/path/to/fr.php', '<?php return ' . var_export($translations->asArray(), true) . ';');
欢迎更新
请提供来源的引用,例如