国际化Internationalization

Phalcon是用C编写的PHP扩展。有一个PECL_扩展PHP应用程序称为intl_提供国际化功能。从PHP 5.4/5.5这个扩展与PHP绑定。它的文档的页面可以找到官方 PHP manual

Phalcon is written in C as an extension for PHP. There is a PECL extension that offers internationalization functions to PHP applications called intl. Starting from PHP 5.4/5.5 this extension is bundled with PHP. Its documentation can be found in the pages of the official PHP manual.

Phalcon没有提供这个功能,因为创建这样一个组件将复制现有的代码。

Phalcon does not offer this functionality, since creating such a component would be replicating existing code.

在下面的例子中,我们将向您展示如何实现intl_扩展的功能到Phalcon驱动的应用程序中。

In the examples below, we will show you how to implement the intl extension’s functionality into Phalcon powered applications.

本指南并不打算成为一个完整的文档的intl_扩展。请访问其documentation_扩展的参考。

This guide is not intended to be a complete documentation of the intl extension. Please visit its the documentation of the extension for a reference.

匹配最佳的区域设置Find out best available Locale

有几种方法可以使用intl_找出最有效的语言环境。其中之一是检查HTTP“Accept-Language”的头:

There are several ways to find out the best available locale using intl. One of them is to check the HTTP “Accept-Language” header:

  1. <?php
  2. $locale = Locale::acceptFromHttp($_SERVER["HTTP_ACCEPT_LANGUAGE"]);
  3. // Locale could be something like "en_GB" or "en"
  4. echo $locale;

下面的方法返回一个语言环境。它是用来获得语言、文化、地区API或当地特有的行为。  标识符的例子包括:

Below method returns a locale identified. It is used to get language, culture, or regionally-specific behavior from the Locale API. Examples of identifiers include:

  • en-US (English, United States)
  • zh-Hant-TW (Chinese, Traditional Script, Taiwan)
  • fr-CA, fr-FR (French for Canada and France respectively)

基于区域设置格式化信息Formatting messages based on Locale

创建一个本地化的应用程序的一部分是产生连接,与语言无关的消息。MessageFormatter 允许产生这些消息。

Part of creating a localized application is to produce concatenated, language-neutral messages. The MessageFormatter allows for the production of those messages.

打印格式化数字基于一些语言环境:

Printing numbers formatted based on some locale:

  1. <?php
  2. // Prints € 4 560
  3. $formatter = new MessageFormatter("fr_FR", "€ {0, number, integer}");
  4. echo $formatter->format(array(4560));
  5. // Prints USD$ 4,560.5
  6. $formatter = new MessageFormatter("en_US", "USD$ {0, number}");
  7. echo $formatter->format(array(4560.50));
  8. // Prints ARS$ 1.250,25
  9. $formatter = new MessageFormatter("es_AR", "ARS$ {0, number}");
  10. echo $formatter->format(array(1250.25));

消息格式使用日期和时间模式:

Message formatting using time and date patterns:

  1. <?php
  2. //Setting parameters
  3. $time = time();
  4. $values = array(7, $time, $time);
  5. // Prints "At 3:50:31 PM on Apr 19, 2012, there was a disturbance on planet 7."
  6. $pattern = "At {1, time} on {1, date}, there was a disturbance on planet {0, number}.";
  7. $formatter = new MessageFormatter("en_US", $pattern);
  8. echo $formatter->format($values);
  9. // Prints "À 15:53:01 le 19 avr. 2012, il y avait une perturbation sur la planète 7."
  10. $pattern = "À {1, time} le {1, date}, il y avait une perturbation sur la planète {0, number}.";
  11. $formatter = new MessageFormatter("fr_FR", $pattern);
  12. echo $formatter->format($values);

特定区域设置的字符串比较Locale-Sensitive comparison

Collator_类提供字符串比较功能根据匹配的语言环境的排序方法。查看下面的例子使用这个类:

The Collator class provides string comparison capability with support for appropriate locale-sensitive sort orderings. Check the examples below on the usage of this class:

  1. <?php
  2. // Create a collator using Spanish locale
  3. $collator = new Collator("es");
  4. // Returns that the strings are equal, in spite of the emphasis on the "o"
  5. $collator->setStrength(Collator::PRIMARY);
  6. var_dump($collator->compare("una canción", "una cancion"));
  7. // Returns that the strings are not equal
  8. $collator->setStrength(Collator::DEFAULT_VALUE);
  9. var_dump($collator->compare("una canción", "una cancion"));

音译Transliteration

Transliterator 提供音译的字符串:

Transliterator provides transliteration of strings:

  1. <?php
  2. $id = "Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();";
  3. $transliterator = Transliterator::create($id);
  4. $string = "garçon-étudiant-où-L'école";
  5. echo $transliterator->transliterate($string); // garconetudiantoulecole