使用CakePHP 3

时间:2016-09-17 12:13:40

标签: cakephp plugins localization internationalization cakephp-3.0

我想在基于CakePHP 3.3.3的应用程序中使用cakephp-users插件,我想将其本地化。

我正在使用composer自动加载插件。

如果我对documentation的理解是正确的,那么Plugin本地化po文件应该是我的情况下的vendor / cakemanager / cakephp-users / src / Locale / hu / users.po。 (路径应该是正确的,因为

    bin/cake i18n extract --plugin Users 

命令生成default.pot文件到vendor / cakemanager / cakephp-users // src / Locale文件夹。)

无论我使用default.po filename还是users.po filename,文本都无法进行本地化。如果我将翻译移动到应用程序的本地化文件(src / Locale / hu / default.po),那么我的字符串就会被翻译。 (删除tmp / cache / persistent文件夹的内容后。)

我有什么特别的想法让我的插件本地化?

提前致谢!

1 个答案:

答案 0 :(得分:1)

第三方插件本地化应位于应用Locale文件夹

您认为文件应该在插件文件夹中的假设不一定正确。第三方代码的自定义本地化应位于应用程序Locale文件夹中,否则每次更新代码包时它们都会丢失。

您可能希望report the behavior默认情况下shell会将所有插件本地化提取到插件Locale文件夹中作为问题。我个人认为,如果插件位于vendors文件夹中,它会不会尝试。

在此之前,您应该使用--output选项指定应用程序Locale文件夹的正确路径。

第一方插件本地化可能进入插件Locale文件夹

如果它是你自己的插件,并且你想用现成的翻译发送它,那么它们应该在插件Locale文件夹中,但是如果插件是一个独立的插件,那么之后不应该添加任何内容。通过作曲家包含,因为再次,这些更改将在更新时丢失。

您应该只在插件Locale文件夹中添加更多本地化,以防插件直接绑定到您的应用程序,因此位于应用程序plugins文件夹中。

cakemanager/cakephp-users不遵守惯例

所有这一切,cakemanager/cakephp-users是一个特例,它不遵循使用__d()等域名翻译方法的惯例,并提供一个小写的域名,强调插件名称的变体,例如__d('users', 'message text')

相反,它使用少域翻译调用,即__('message text'),例如参见

<强> https://github.com/cakemanager/cakephp-users/...src/Controller/UsersController.php#L75

因此,CakePHP消息文件加载器将永远不会尝试从插件Locale文件夹中加载任何本地化文件,并且它也不会在您的应用程序中查找正确的单独本地化文件{{1文件夹。

因此,使用此特定插件,在其当前形式中,翻译必须包含在您的应用程序默认翻译文件中。

另见