【问题标题】:gettext() equivalent in Intl library?国际库中的gettext()等价物?
【发布时间】:2011-08-04 09:41:49
【问题描述】:

我正在寻找一种方法来做 i18n 和 l10n。

我之前使用过gettext,这很好:我只需创建不同语言的 .mo 文件,需要翻译的所有内容都使用这种表示法:

echo __('string to be translated');

我知道现在 PHP 中内置了 Intl 库,有人告诉我应该使用它而不是 gettext()

在阅读了 php.net 上的everything there is about Intl 之后,我发现它有一些不错的功能,例如语言环境处理、字符串比较、数字格式化等。

我不知道如何使用 Intl 库处理常规字符串到字符串的转换。有什么想法吗?

【问题讨论】:

    标签: php gettext intl


    【解决方案1】:

    那个建议不是很真实。 intl 函数可以与 gettext 结合使用,而不是作为替代。

    MessageFormatter 是人​​们在将 INTL 与文本翻译相关联时所想到的。这些例子表明了这一点。但实际上,它只是类固醇上的sprintf。它将数字注入现有字符串。 (我什至不确定语言环境支持在那里有什么用处,因为它只是用作内部开关。)

    【讨论】:

      【解决方案2】:

      这是我使用 intl 进行翻译的方式(在 php v. 5.3.10 和 5.4.7 上测试):

      intl.php

      namespace Example;
      class Intl {
      
        private $resource;
      
        public function __construct() {
          $bundle_location = "./locales";
          $user_locale = \Locale::acceptFromHttp( $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
          $this->resource = new \ResourceBundle( $user_locale, $bundle_location );
        }
      
       ...
      

      display.php

       use Example\Intl;
      
       $intl = new Intl();
       $r = $intl->resource;
      
       echo $r['string_to_be_translated'];
      
       ...
      

      资源包

      locales 目录中,我有我的资源文件:

      root.res - 根语言(英语)

      root { 
        string_to_be_translated {String to be translated } 
      }
      

      ja.res - 日语

      ja { 
        string_to_be_translated {\u5909\u63DB\u3055\u308C\u308B\u6587\u5B57\u5217 }
      }
      

      sp.res - 西班牙语

      sp { 
        string_to_be_translated {Cadena a ser traducido }
      }
      

      (等)

      【讨论】:

        【解决方案3】:

        你会使用 gettext。 Intl(就像它下面的 ICU)用于 l10n,不加载翻译。

        【讨论】:

        • stackoverflow.com/questions/8051104/… 上查看我的回答——我不同意这种说法。您可以选择使用 gettext,但下面的 ICU 用于加载翻译。 (Steven R. Loomis,ICU 项目)
        • 我很想知道您是如何得出结论的。或者我理解错了。
        • 我可能没有意识到“ResourceBundle”是用于字符串的,因为“resource”在我的编程经验中具有更广泛的含义。
        • 谢谢,这很好。我对“我们的”定义太熟悉了(从 java.util.ResourceBundle 开始)......会尽量确保文档更清晰。
        猜你喜欢
        • 2011-10-07
        • 1970-01-01
        • 2010-10-09
        • 2011-07-12
        • 2019-05-10
        • 2020-08-30
        • 1970-01-01
        • 1970-01-01
        • 2020-06-25
        相关资源
        最近更新 更多