yasir011/translation

适用于 Laravel 5 的数据库和缓存支持的翻译包

1.0 2014-05-07 16:36 UTC

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',
),