infotechnohelp / cakephp-localization_advanced
CakePHP 3 插件
Requires
- cakephp/cakephp: ^3.7
- infotechnohelp/cakephp-json-api_advanced: dev-master
- vlucas/phpdotenv: ^2.4
Requires (Dev)
- doctrine/instantiator: 1.0.*
- phpunit/phpunit: ^5.7|^6.0
- squizlabs/php_codesniffer: ^3.2
This package is auto-updated.
Last update: 2024-09-11 14:48:30 UTC
README
NB!!! 依赖于 infotechnohelp/cakephp-json-api_basic
!
实现
composer require infotechnohelp/cakephp-localization_advanced
1. 添加插件
核心实现
vendor/infotechnohelp/cakephp-core_.../config/bootstrap.php
/** @var \App\Application $Application */
$Application = new \App\Application(CONFIG);
$Application->addPlugin('Infotechnohelp/Localization', ['routes' => true]);
应用实现
src/Application.php → bootstrap()
`$this->addPlugin('Infotechnohelp/Localization', ['routes' => false]);
或者
bin/cake plugin load Infotechnohelp/Localization
2. 添加组件
核心实现
vendor/infotechnohelp/cakephp-core_.../src/Controller/AppController.php → initialize()
$this->loadComponent('Infotechnohelp/Localization.Localization');
应用实现
src/Controller/AppController.php → initialize()
$this->loadComponent('Infotechnohelp/Localization.Localization');
3. 设置本地化配置
config/bootstrap.php
Configure::write('Infotechnohelp.Localization', [
'ignoredPathPrefixes' => ['auth-api', 'api', 'user-activities',],
]);
4. 迁移迁移
bin/cake migrations migrate --plugin Infotechnohelp/Localization
表:i18nTable
路由
自动指示哪些区域包含在 APP/src/Locale
en_US, et_EE, ru_RU
.../en/... → 区域设置为 en_US .../et/... → 区域设置为 et_EE .../ru/... → 区域设置为 ru_RU
不适用于 api 路径 (.../api/...)
.../...?lang=en_US → 区域设置为 en_US,重定向到 .../en/...?lang=en_US
如果存在语言 cookie 且没有指定路由区域或 GET 查询参数,则使用语言 cookie 值
如果语言 cookie 值为 en_US 且请求为 .../...,则请求将被重定向到 .../en/...
NB!!! GET 查询比路由区域更重要。
重要性级别(优先级)
- GET 查询参数
- 路由区域
- 语言 cookie
- 默认区域
LanguagesComponent
API
.../localization/api/phrases
NB!!! 目前仅与默认.po 文件一起工作
请求负载结构
[
'keys' => ['key1', 'key2'],
]
区域管理器
i18n 区域化,ModelManager(保存本地化实体)
use Cake\ORM\Behavior\Translate\TranslateTrait;
class Article extends Entity
{
use TranslateTrait;
}
短语加载器
加载 JS 文件
区域Shell
bin/cake locale js
生成
webroot/js/Locale/en_US/default.js webroot/js/Locale/en_US/default.json