【问题标题】:Dynamic locale name in multi-language site多语言站点中的动态语言环境名称
【发布时间】:2013-05-11 04:58:13
【问题描述】:

我正在使用 cakephp 2.3.4 开发一个应用程序,它是多语言的。

管理员可以添加任意数量的新语言。

我的问题是,当管理员决定添加新语言时,应如何定义生成的语言环境名称。

区域名称可以是任意名称,由管理员给出,或者它应该是一个包含所有语言代码的下拉列表。

【问题讨论】:

    标签: cakephp internationalization


    【解决方案1】:

    很遗憾,您的问题有点“含糊”,即管理员是否能够添加 GNU 语言环境文件 (*.po),或者您是在谈论在 数据库 中添加翻译。

    无论如何,CakePHP 使用符合 ISO 639-3 标准的语言环境,请参阅herehere 了解更多信息。这些语言环境的完整列表可以在 I10n 类中找到。

    由于您在切换语言环境时可能还想切换 PHP 的语言环境自身,因此,例如,日期、货币和时间格式将遵循该语言环境的正确格式,这是最好的坚持使用这些语言环境,“发明”你自己的语言环境。

    setlocale()。但请注意,PHP 使用的语言环境代码可能与 CakePHP 使用的略有不同。这取决于您的服务器上安装了哪些语言环境。

    要获取服务器上安装的语言环境列表,请在命令行上使用locale -a。有关更多信息,请参阅此页面:https://wiki.archlinux.org/index.php/Locale

    使用哪些技术进行本地化

    使用技术的快速总结;

    短消息(界面/UI)

    通常,语言环境文件用于 段文本。因此,语言环境文件主要用于 fixed 字符串, 例如,界面中使用的字符串(如'are you sure you want to delete this file?' => 'weet u zeker dat u dit bestand wilt verwijderen?)。

    更长(固定)文本

    对于您的应用程序中的更长段文本,它们不是'内容'的一部分(不是 博客文章,但例如带有免责声明的固定页面), 例如,最好为翻译的内容使用单独的视图

    app/Views/MyController/disclaimer_eng.ctp
    app/Views/MyController/disclaimer_deu.ctp
    app/Views/MyController/disclaimer_fre.ctp
    

    内容

    对于您网站的内容(由网站“用户”管理的网站部分), 将翻译放入数据库中。这些数据可能会经常更新,所有翻译也应该更新。

    如何实现这一点,完全取决于您并取决于您的情况。 CakePHP 提供了一个 Translate 行为,您可以使用 (http://book.cakephp.org/2.0/en/core-libraries/behaviors/translate.html),但在我的大多数情况下,该行为并不能真正满足我们的需求(IMO 它效率不高,因为它存储每个字段的翻译,每个型号)。

    【讨论】:

    • 感谢您的回答,很抱歉不清楚。当管理员想要添加新语言时,我正在向管理员展示一个 Web 表单。现在我应该给管理员一个输入框,他将在其中提供该语言的任何名称,并且该名称将用于为该语言区域创建一个容器文件夹。或者我应该采用任何其他不同的方法。
    • @Danial 这里最好的方法是提供一个dropdown,其中包含您的系统和CakePHP 支持的语言。该下拉列表的 values 应该与我的回答中描述的语言环境相匹配。 标签(可见值)可以任意命名。使用有效的语言环境代码很重要,否则 CakePHP 或 PHP 本身可能不知道如何处理它们(如我的回答中所述)。
    • 感谢@thaJeztah 的回复,我是否应该按照您的描述使用I10n 链接,并使用protected $_l10nCatalog 数组来创建下拉菜单。还有一件事,我会根据用户提供的timezone更改datetimecurrency将固定$,所以当用户更改语言时它不会有任何影响。
    • 由于我是第一次通过 cakephp 语言环境实现多语言,您的评论对我来说非常有价值。我还想知道哪种方法好,将特定语言的内容存储在数据库中或使用语言环境文件。多语言网站的最佳方法是什么。管理员可以在其中添加任意数量的语言。对不起,如果我在取笑你。但我想学习最好的方法。
    • @Danial 我添加了一些建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    相关资源
    最近更新 更多