我为我的cakephp(3.2)应用程序制作了ContentManager插件。它在/plugins/ContentManager/src/Locale/ru/content_manager.po
。
现在我想在应用程序级别添加一些附加翻译。所以我需要为我的插件添加一些额外的po
文件。如果我在content_manager.po
文件夹中再放一个app\src\Locale\ru
文件,它会覆盖基本文件。
是否可以添加content_manager.0.po, content_manager.base.po
之类的文件,并让它们一起工作?无论如何,我需要以某种方式扩展插件转换。
基本文件包含类似这些的字符串
msgid "tab_MenuItems"
msgid "content.type.News"
msgid "users.role.admin"
等等。
附加文件包含特定于应用程序的字符串,如:
msgid "content.type.Products"
msgid "content.type.Orders"
msgid "users.role.manager"
插件本身使用像(示例,smarty
)这样的翻译:
{foreach $registered_types as $ct}
<li>{__d("content_manager", "content.type.$ct")}</li>
{/foreach}
答案 0 :(得分:1)
您可以在应用The N'text'
区域设置文件夹中添加default.po
文件,默认情况下,此文件将由所谓的&#34;后备加载程序&#34;使用,这将是如果在主域中找不到请求的消息ID,即在ru
。
如果您需要更多控制,您可以随时构建自定义加载器/包,例如:
content_manager.po
这将创建一个内部预加载默认use Cake\I18n\I18n;
use Cake\I18n\MessagesFileLoader;
I18n::config('content_manager', function ($name, $locale) {
$fileLoader = new MessagesFileLoader('content_manager', $locale, 'po');
/* @var $package \Aura\Intl\Package */
$package = $fileLoader();
$package->setFallback('content_manager.base');
return $package;
});
域消息的加载器,并将回退加载器域设置为content_manager
,以便它尝试从{{1}加载消息文件,以防默认域中没有翻译。
在添加/修改翻译/加载器后,不要忘记清除缓存(content_manager.base
)。
另见