whendy/translation

支持数据库和缓存支持的Laravel 4翻译包

1.1 2023-07-18 09:21 UTC

This package is auto-updated.

Last update: 2024-09-18 13:10:44 UTC


README

原始https://github.com/Waavi/translation

安装

编辑composer.json

php composer require whendy/translation

在app/config/app.php中,用以下条目替换提供者数组中的条目

'Illuminate\Translation\TranslationServiceProvider'

用以下条目替换

'Whendy\Translation\TranslationServiceProvider'

执行数据库迁移

php artisan migrate --package=whendy/translation

如果您愿意,可以发布包的配置

php artisan config:publish whendy/translation

在路由中

Route::group(['before'=>'localize'],function (){
    .........
}); 

用法

这个翻译包是为了适应您的流程设计的。翻译的使用方式与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时被激活。您可以在包的配置文件中自定义此行为。

缓存中的条目将使用'waavi|translation|'作为前缀

模型

如果您需要扩展语言模型(Language Model)或语言条目模型(LanguageEntry),由于它们相互引用,您需要同时扩展这两个模型。一旦您创建了您自己的模型,请记住更新配置文件。

例如,如果您在 /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',
),