yasir011 / translation
适用于 Laravel 5 的数据库和缓存支持的翻译包
Requires
- php: >=5.3.0
- illuminate/database: 4.x
- illuminate/support: 4.x
- illuminate/translation: 4.x
- waavi/model: 1.0
This package is not auto-updated.
Last update: 2024-10-02 06:55:35 UTC
README
保持项目的翻译正确更新是件麻烦事。通常翻译者没有访问代码库的权限,即使他们有,也很难跟踪每种语言缺失的翻译,或者当原始文本更新需要修改翻译时。
此包允许开发者利用数据库和缓存来管理多语言站点,同时仍然在开发过程中处理语言文件,并从 Laravel 翻译包的所有功能中受益,如复数或替换。
安装
编辑 composer.json
"require": {
"Yasir011/translation": "*"
},
"repositories": [
{
"type": "vcs",
"url": "git@github.com:Yasir011/translation.git"
}
],
在 app/config/app.php 中,将 providers 数组中的以下条目替换为
'Illuminate\Translation\TranslationServiceProvider'
替换为
'Yasir011\Translation\TranslationServiceProvider'
执行数据库迁移
php artisan migrate --package=Yasir011/translation
如果您选择,可以发布包的配置
php artisan config:publish Yasir011/translation
使用方法
此翻译包旨在适应您的流程。翻译的访问方式与 Laravel 相同,替换和复数功能按预期工作。唯一的区别是您的翻译管理方式。
操作模式
您可以通过 config.php 文件配置操作模式。您可以选择最适合您的工作流程和环境的模式。
基于文件
如果您不希望利用数据库进行翻译,您可以选择仅通过语言文件加载语言行。这种模式与 Laravel 不同,如果在指定的区域找不到行,我们首先会检查默认语言中的条目,而不是立即返回键。
示例
The content in en/validations.php is:
array(
'missing_name' => 'Name is missing',
'missing_surname' => 'Surname is missing',
);
The content in es/validations.php is:
array(
'missing_name' => 'Falta el nombre',
);
Output for different keys with es locale:
Lang::get('validations.missing_name') -> 'Falta el nombre'
Lang::get('validations.missing_surname') -> 'Surname is missing'
Lang::get('validations.missing_email') -> 'missing_email'
数据库
您可以选择仅从数据库加载翻译。如果您利用缓存,当网站上线并且您允许翻译者通过数据库添加和更新语言条目时,这可能是一个最佳选项。为了使用数据库操作模式,您必须
- 运行安装说明中详细说明的迁移。
- 将您选择的语言添加到数据库中。
- 使用
php artisan translator:load将您的语言文件加载到数据库中
示例
The content in the languages table is:
| id | locale | name |
-------------------------
| 1 | en | english |
| 2 | es | spanish |
The relevant content in the language_entries table is:
| id | language_id | namespace | group | item | text |
---------------------------------------------------------------------------------------------
| 1 | 1 | NULL | validations | missing_name | Name is missing |
| 2 | 2 | NULL | validations | missing_surname | Surname is missing |
| 3 | 1 | NULL | validations | min_number | Number is too small |
| 4 | 2 | NULL | validations | missing_name | No se ha indicado nombre |
| 5 | 2 | NULL | validations | missing_surname | No se ha indicado apellido |
Output for different keys with es locale:
Lang::get('validations.missing_name') -> 'No se ha indicado nombre'
Lang::get('validations.min_number') -> 'Number is too small'
Lang::get('validations.missing_email') -> 'missing_email'
混合模式
在混合模式下,当查找一组语言行时,会查询语言文件和数据库。文件系统中的条目优先于数据库。
示例
When the content of the language files and the database is the same as in the previous two examples, this is the output for Lang::get:
Lang::get('validations.missing_name') -> 'Falta el nombre'
Lang::get('validations.missing_surname') -> 'No se ha indicado apellido'
Lang::get('validations.min_number') -> 'Number is too small'
Lang::get('validations.missing_email') -> 'missing_email'
自动模式(默认模式)
在自动模式下,操作模式由 app/config/app.php 中 'debug' 的值设置。当为 true 时,选择混合模式。当为 false 时,选择数据库模式。
将文件内容加载到数据库中
当将您的代码上传到现场网站时,如果您使用自动、数据库或混合模式,您必须将文件内容加载到数据库中。要刷新数据库,您可以使用以下 artisan 命令
php artisan translator:load
当加载语言文件的内容时,将添加不存在的条目,并将现有的条目更新(默认情况下不会删除任何内容,您将看到原因)。如果在默认区域条目中的文本更新,其当前翻译将被标记为“不稳定”,以表明翻译者应检查它们是否仍然有效。这对于文本的小幅更改不应反映在翻译中,或者这些翻译尽管尚未更新,但仍然有些有效的情况非常有用。
缓存结果
由于每次加载语言组时查询数据库效率低下,您可以选择利用 Laravel 的缓存系统。此模块将使用您在 app/config/cache.php 中定义的相同缓存配置。
默认情况下,如果app/config/app.php中'debug'的值为true,缓存将被禁用;当debug为false时,缓存将被激活。您可以在包的配置文件中自定义此行为。
缓存中的条目将使用前缀'Yasir011|translation|'。
模型
如果您需要扩展语言模型或语言条目模型,您需要同时扩展它们,因为它们相互引用。一旦您创建了您自己的模型,请记住更新配置文件。
例如,如果您在/app/models中将模型定义为Language和LanguageEntry,您必须编辑配置文件,使其内容如下
/*
|--------------------------------------------------------------------------
| Language
|--------------------------------------------------------------------------
|
| Configuration specific to the language management component. You may extend
| the default models or implement their corresponding interfaces if you need to.
|
*/
'language' => array(
'model' => 'Language',
),
'language_entry' => array(
'model' => 'LanguageEntry',
),