【问题标题】:Cakephp i18n get translation localesCakephp i18n 获取翻译语言环境
【发布时间】:2012-03-25 11:28:59
【问题描述】:

我必须说 cakephp(使用 1.3 版本,因为项目是用它设置的)有一个奇怪的 i18n 概念。

我确实成功地翻译了静态字符串,但动态字符串.. cake 的如何管理多语言内容的想法对我来说似乎有点尴尬。 我确实设置了 i18n 表(稍后当我让它工作时将它分成几个表)并将翻译行为附加到所需的模型。 到目前为止一切顺利,然后,在添加操作中,我添加了一个包含语言环境(en_us,de_de...)的选择字段,以便用户可以决定保存哪一个。 在保存记录之前,我做了一个$this->Modelname->locale = $locale; 来告诉模型使用哪个语言环境。

记录保存成功,但是问题来了:

  • 我有一个包含很多记录的索引操作,我希望用户能够为每个项目提供不同的翻译(假设:一个项目被翻译成英语(美国)和德语,另一个被翻译成英语(美国)、意大利语和法语,如何让用户能够编辑/删除单个翻译?
  • 我确实使用了$this->Modelname->bindTranslation(...) 内部操作,我需要在其中获取语言环境名称(存在哪些翻译),以便用户可以决定要编辑哪个,是否有另一种更优雅的方法来完成此操作?另外,当我这样做时:$this->Modelname->bindTranslation(...); 然后我不使用 find() 方法,而是使用 paginate(),它不会返回任何翻译...

【问题讨论】:

  • 这样的复杂问题更适合以下情况: 1- 问题中的更多格式而不是单个长段落。 2- 代码示例来帮助演示您正在做什么,因此助手不必将所有内容可视化或尝试从描述中重新创建它。
  • 好的,让我们以更简单的方式尝试:首先,我有多个翻译的记录,我想获取每行存在的现有语言/区域设置名称。例如:我有 4 行数据,每行可以有不同语言的翻译,我想知道每行存在哪些语言。

标签: cakephp internationalization cakephp-1.3


【解决方案1】:

我有一个适用于 Cakephp2.0 的解决方案,它可能也适用于 Cakephp1.3,我也从未测试过。您必须重命名内容并编辑某些内容,但它可能会起作用。 以防万一:只要您处于项目的早期状态,我建议您更新到 Cakephp2.0。自从 Cakephp2.1 最终发布以来,1.3 就被弃用了。 我经历了大约两到三次更新过程,这是一天的工作,也许是两天。在我的情况下,从头开始重新启动项目。我并不真正相信更新后的 shell,尽管它做得非常好。

长话短说。

我的方法包括覆盖现有的 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 ;)

用法很简单。 在控制器中,您包含组件和助手。模型获得翻译和翻译行为。由于回调问题,Translatio 先行。但是脚本无论如何都会抛出异常。

该组件将自行查找“Locale”文件夹中存在的所有语言,并将它们安全地保存到 Configure 类中。

在视图中你使用 $this->Translation->inputs('Modelname.field');。 模型名称很重要,因为我还没有找到自动确定的方法,因为我不确定我的助手中的 FormHelper 实例是否与视图中的相同。我有时间泄漏。 ^^

TranslationBehavior 将验证每个!基于字段名称的语言字段。

如果有任何问题:问^^ 由于我不经常在这里,我会尝试看看这个问题;)

问候 func0der

【讨论】:

    猜你喜欢
    • 2021-08-15
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多