tavicu/translation

该包已被废弃且不再维护。未建议替代包。

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

1.0.2 2015-02-25 17:33 UTC

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