我正在开发cakephp 2.3.4中的一个应用程序,它是多语言的。
管理员可以添加任意数量的新语言。
我的问题是,当管理员决定添加新语言时,应该如何定义生成的区域设置名称。
语言环境名称可以是由admin给出的任意名称,也可以是根据语言包含所有语言代码的下拉列表。
答案 0 :(得分:1)
不幸的是,你的问题有点'模糊',即管理员是否可以添加GNU-locale文件(*.po
),或者你是在谈论在数据库中添加翻译
在任何情况下,CakePHP都会根据ISO 639-3标准使用区域设置,请参阅here和here以获取更多信息。可以在I10n
类中找到这些语言环境的完整列表。
由于您可能还希望在切换区域设置时切换PHP 本身的区域设置,因此,例如,日期,金钱和时间格式将遵循正确的区域设置格式,这是最好的坚持使用这些语言环境而不'发明'你自己的语言环境。
见setlocale()
。但请注意,PHP可能会使用与CakePHP使用略有不同的语言环境代码。它取决于您的服务器上安装的区域设置。
要获取服务器上安装的语言环境列表,请在命令行中使用locale -a
。有关详细信息,请参阅此页面:https://wiki.archlinux.org/index.php/Locale
使用技巧的快速摘要;
通常,区域设置文件用于短文本。因此,区域设置文件主要用于修复字符串,
例如,接口中使用的字符串(如'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它不是非常有效,因为它存储了翻译 - 领域,每个模型)。