【发布时间】:2013-05-11 04:58:13
【问题描述】:
我正在使用 cakephp 2.3.4 开发一个应用程序,它是多语言的。
管理员可以添加任意数量的新语言。
我的问题是,当管理员决定添加新语言时,应如何定义生成的语言环境名称。
区域名称可以是任意名称,由管理员给出,或者它应该是一个包含所有语言代码的下拉列表。
【问题讨论】:
标签: cakephp internationalization
我正在使用 cakephp 2.3.4 开发一个应用程序,它是多语言的。
管理员可以添加任意数量的新语言。
我的问题是,当管理员决定添加新语言时,应如何定义生成的语言环境名称。
区域名称可以是任意名称,由管理员给出,或者它应该是一个包含所有语言代码的下拉列表。
【问题讨论】:
标签: cakephp internationalization
很遗憾,您的问题有点“含糊”,即管理员是否能够添加 GNU 语言环境文件 (*.po),或者您是在谈论在 数据库 中添加翻译。
无论如何,CakePHP 使用符合 ISO 639-3 标准的语言环境,请参阅here 和here 了解更多信息。这些语言环境的完整列表可以在 I10n 类中找到。
由于您在切换语言环境时可能还想切换 PHP 的语言环境自身,因此,例如,日期、货币和时间格式将遵循该语言环境的正确格式,这是最好的坚持使用这些语言环境,不“发明”你自己的语言环境。
见setlocale()。但请注意,PHP 使用的语言环境代码可能与 CakePHP 使用的略有不同。这取决于您的服务器上安装了哪些语言环境。
要获取服务器上安装的语言环境列表,请在命令行上使用locale -a。有关更多信息,请参阅此页面:https://wiki.archlinux.org/index.php/Locale
使用技术的快速总结;
通常,语言环境文件用于短 段文本。因此,语言环境文件主要用于 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 它效率不高,因为它存储每个字段的翻译,每个型号)。
【讨论】:
I10n 链接,并使用protected $_l10nCatalog 数组来创建下拉菜单。还有一件事,我会根据用户提供的timezone更改datetime,currency将固定$,所以当用户更改语言时它不会有任何影响。