【问题标题】:CakePHP use Library inside ModelCakePHP 在模型中使用库
【发布时间】:2015-07-21 13:14:37
【问题描述】:

我们的网站是多语言的(针对客户)。但是,我们需要从数据库中的翻译表中提取它们,而不是翻译 PO 文件中的“登录”等词。这是客户要求。

我研究了如何制作可以从任何地方(视图、控制器等)访问的功能。我得出的结论是,最好的方法是制作一个自定义库,因为它说它可以在任何地方使用。

但是我不能在我的模型中使用它,它给我的错误是我不能在那个地方使用ClientnameLibrary::translate('login')。我在我的模型中添加了App::uses('ClientnameLibrary', 'Lib'); 行,并在验证部分尝试了这个:

'lastname' => array(
    'notEmpty' => array(
        'rule' => array('notEmpty'),
        'message' => ClientnameLibrary::translate('lastname_validation_error'),
    ),
),

有没有一种方法可以在模型中使用我的自定义库?如果不是,那么在我的模型(来自数据库)中翻译验证消息的最佳方式是什么?

这是我在控制器/视图中使用的代码:

App::uses('ClientnameLibrary', 'Lib'); //include at top of file
echo ClientnameLibrary::translate('login'); //to get translated word from database

【问题讨论】:

  • "我不能使用它" 不是正确的问题描述,请更具体地说明问题到底是什么。话虽如此,App::uses() 在模型中也可以正常工作。
  • 你是对的,我很抱歉。我编辑了我的答案并给出了我试图开始工作的代码。
  • 你试过了吗 App::uses('ClientnameLibrary', 'Lib');在你的模型文件中?
  • 是的,我在问题末尾使用了这两行。我将编辑我的问题以提及这一点。

标签: cakephp model cakephp-2.0


【解决方案1】:

当翻译发生变化时保存数据库翻译in a po file。如果没有缓存,使用新查询读取每个翻译是愚蠢的,因此您必须以任何方式缓存它。那么只需将 DB 内容转换为 po 文件并使用 CakePHP 的标准翻译功能?

检查 i18n shell 如何将翻译字符串提取到 pot (NOT po) 文件中。您也可以覆盖 shell 以使用所需的标识符更新您的数据库。

【讨论】:

  • 我们确实在缓存数据库中的翻译。但是如何将数据库翻译保存到 PO/POT 文件中?从我读到的内容,我不明白这是可能的,如果可能的话,它是如何完成的。可以给我一个链接吗?
  • 我已经提供了描述 po 文件的链接。 gnu.org/software/gettext/manual/html_node/PO-Files.html 写这些文件应该没问题,我可能错了,但是如果你看一下 po 文件,它是一种非常简单的格式。也有libs,比如这个github.com/raulferras/PHP-po-parser随便搜一下。
  • 对不起,我忽略了你的链接。我会试一试,感谢 lib 示例!
猜你喜欢
  • 1970-01-01
  • 2012-02-27
  • 2023-03-07
  • 2012-04-04
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多