🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 国际化 Phalcon是用C语言编写的PHP的扩展。有一个[PECL](http://pecl.php.net/package/intl)扩展,称为`intl`的PHP应用程序提供国际化功能。从PHP 5.4 / 5.5开始,此扩展与PHP捆绑在一起。它的文档可以在官方PHP手册的页面中找到。 Phalcon不提供此功能,因为创建此类组件将复制现有代码。 在下面的示例中,我们将向您展示如何在Phalcon支持的应用程序中实现intl扩展的功能。 >[warning] 本指南不是 [intl](http://pecl.php.net/package/intl) 扩展的完整文档。 请访问该扩展程序的[文档](http://www.php.net/manual/en/book.intl.php) 以获取参考。 ## 找出最佳的Locale 有几种方法可以使用intl找出最佳的可用语言环境。 其中之一是检查HTTP `Accept-Language`标头: ```php <?php $locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']); // Locale可能类似于'en_GB'或'en' echo $locale; ``` 以下方法返回标识的区域设置。它用于从Locale API获取语言,文化或区域特定的行为。 标识符的示例包括: * en-US(英语,美国) * ru-RU(俄罗斯,俄罗斯) * zh-Hant-TW(中文,繁体字,台湾) * fr-CA,fr-FR(法语分别为加拿大和法国) ## 根据区域设置格式化消息 创建本地化应用程序的一部分是生成连接的,与语言无关的消息。`MessageFormatter`允许生成这些消息。 打印基于某些区域设置格式化的数字: ```php <?php // Prints € 4 560 $formatter = new MessageFormatter('fr_FR', '€ {0, number, integer}'); echo $formatter->format([4560]); // Prints USD$ 4,560.5 $formatter = new MessageFormatter('en_US', 'USD$ {0, number}'); echo $formatter->format([4560.50]); // Prints ARS$ 1.250,25 $formatter = new MessageFormatter('es_AR', 'ARS$ {0, number}'); echo $formatter->format([1250.25]); ``` 使用时间和日期模式格式化消息: ```php <?php // 设置参数 $time = time(); $values = [7, $time, $time]; // 打印 'At 3:50:31 PM on Apr 19, 2015, there was a disturbance on planet 7.' $pattern = 'At {1, time} on {1, date}, there was a disturbance on planet {0, number}.'; $formatter = new MessageFormatter('en_US', $pattern); echo $formatter->format($values); // 打印 'À 15:53:01 le 19 avr. 2015, il y avait une perturbation sur la planète 7.' $pattern = 'À {1, time} le {1, date}, il y avait une perturbation sur la planète {0, number}.'; $formatter = new MessageFormatter('fr_FR', $pattern); echo $formatter->format($values); ``` ## 区域敏感比较 Collator类提供字符串比较功能,支持适当的区域设置敏感排序顺序。请查看以下有关此类用法的示例: ```php <?php // 使用西班牙语语言环境创建collator $collator = new Collator('es'); // 返回字符串相等,尽管强调'o' $collator->setStrength(Collator::PRIMARY); var_dump($collator->compare('una canción', 'una cancion')); // 返回字符串不相等 $collator->setStrength(Collator::DEFAULT_VALUE); var_dump($collator->compare('una canción', 'una cancion')); ``` ## 音译 Transliterator提供字符串的音译: ```php <?php $id = 'Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();'; $transliterator = Transliterator::create($id); $string = "garçon-étudiant-où-L'école"; echo $transliterator->transliterate($string); // garconetudiantoulecole ```