我必须说 cakephp(使用 1.3 版本,因为项目是用它设置的)有一个奇怪的 i18n 概念。
我确实成功地翻译了静态字符串,但是动态字符串.. cake 的如何管理多语言内容的想法对我来说似乎有点尴尬。
我确实设置了 i18n 表(稍后当我让它工作时将它分成几个表)并将翻译行为附加到所需的模型。
到目前为止一切顺利,然后,在添加操作中,我添加了一个包含语言环境(en_us,de_de...)的选择字段,以便用户可以决定保存哪一个。
在保存记录之前,我做了一个 $this->Modelname->locale = $locale;
告诉模型使用哪个语言环境。
记录保存成功,但是问题来了:
$this->Modelname->bindTranslation(...)
在我需要获取语言环境名称(存在哪些翻译)以便用户可以决定要编辑哪个操作的内部操作中,是否有另一种更优雅的方法来完成此操作?另外,当我这样做时:$this->Modelname->bindTranslation(...);
然后我没有使用 find() 方法,而是使用 paginate(),它不返回任何翻译... 最佳答案
我有一个适用于 Cakephp2.0 的解决方案,它可能也适用于 Cakephp1.3,我也从未测试过。您必须重命名内容并编辑某些内容,但它可能会起作用。
以防万一:只要您处于项目的早期状态,我建议您更新到 Cakephp2.0。自从 Cakephp2.1 最终发布以来,1.3 就被弃用了。
我经历了大约两到三次更新过程,这是一天的工作,也许是两天。在我的情况下,从头开始重新启动项目。我并不真正相信更新后的外壳,尽管它做得非常好。
长话短说。
我的方法包括覆盖现有的 TranslateBehavior,添加一个新的 TranslationBehavior、一个助手和一个组件。
这是包含文件的 zip。
http://www.func0der.de/cakephp/MultiLanguageForms.zip
一旦我弄清楚如何正确使用 GIT,我就会向他们提出请求。
带有文件的票证已在:http://cakephp.lighthouseapp.com/projects/42648/tickets/2463-multi-language-forms#ticket-2463-4 ;)
用法很简单。
在 Controller 中,您包含组件和助手。模型获得翻译和翻译行为。由于回调问题,Translatio 先行。但是脚本无论如何都会抛出异常。
该组件将自行查找“Locale”文件夹中存在的所有语言,并将它们安全地保存到 Configure 类中。
在 View 中,您使用 $this->Translation->inputs('Modelname.field');。
模型名称很重要,因为我还没有找到自动确定的方法,因为我不确定我的助手中的 FormHelper 实例是否与 View 中的相同。我有时间泄漏。 ^^
TranslationBehavior 将验证每个!基于字段名称的语言字段。
如果有任何问题:问^^
由于我不经常在这里,我会尝试看看这个问题;)
问候
函数器
关于Cakephp i18n 获取翻译语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9609908/