tavicu / translation
适用于 Laravel 4.2 的数据库和缓存支持的翻译包
Requires
- php: >=5.4.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: 2020-08-21 19:03:39 UTC
README
这是 Waavi 的 原始代码 的分支
此包仅适用于 Laravel 4.2
修复
- 由于与 Laravel 4.2 不兼容导致段错误
- Artisan 命令现在可以从文件夹中加载翻译
Laravel 本地化模块升级
保持项目翻译的正确更新是繁琐的。通常翻译者没有访问代码库的权限,即使他们有,也很难跟踪每种语言缺少哪些翻译,或者原始文本的更新需要哪些翻译的修订。
此包允许开发者在开发时利用数据库和缓存来管理多语言网站,同时仍然可以处理语言文件并从 Laravel 翻译包的所有功能中受益,如复数或替换。
安装
编辑 composer.json
"require": {
"tavicu/translation": "dev-master"
}
在 app/config/app.php 中,将 providers 数组中的以下条目替换为
'Illuminate\Translation\TranslationServiceProvider'
与
'Tavicu\Translation\TranslationServiceProvider'
执行数据库迁移
php artisan migrate --package=tavicu/translation
如果您愿意,可以选择发布包的配置
php artisan config:publish tavicu/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时激活。您可以在包的配置文件中自定义此行为。
缓存中的条目将使用前缀'tavicu|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',
),