MikeHaertl / translatable
translatable 是一个 Yii 扩展,可以透明地翻译 ActiveRecord 属性。
1.1.0
2013-10-26 10:04 UTC
Requires
- php: >=5.0.0
This package is auto-updated.
Last update: 2024-08-24 03:42:45 UTC
README
ActiveRecords 的透明属性翻译。
特性
- 将属性从翻译表映射到主记录
- 如果未找到翻译,则提供可选的回退语言或回退列
- 默认情况下自动加载应用程序语言
- 按需加载其他语言
以下是一个基本示例
<?php // Load a record in application default language ... $car = New Car; $car->manufacturer_id = 123; // Set a description, e.g. in english if this is the app language $car->description = 'English description'; // Save both: the new car record and a related translation record $car->save(); // Change language $car->language = 'de'; $car->description = 'German description'; // We could again call save() here, but we only want to save the translation record $car->saveTranslation(); // Load a record in a specific language $car = Car::model()->language('de')->findByPk(1); // Output: 'German description' echo $car->description; $car->language = 'en'; // Output: 'English description' echo $car->description;
安装
只需将包解压到您的 protected/extensions
目录,并将其重命名为 translatable
。
如何使用
1. 将可翻译列移动到单独的表中
此行为需要您将所有希望翻译的列从原始表移动到专用翻译表中。因此,如果您有一个名为 books
的表,并希望翻译 title
和 abstract
,您需要修改您的数据库模式
+--------------+ +--------------+ +-------------------+
| books | | books | | book_translations |
+--------------+ +--------------+ +-------------------+
| id | | id | | id |
| publisher_id | ---> | publisher_id | + | book_id |
| author_id | | author_id | | language |
| title | | created_at | | title |
| abstract | | updated_at | | abstract |
| created_at | +--------------+ +-------------------+
| updated_at |
+--------------+
2. 将行为附加到您的 ActiveRecord 模型
使用上述数据库设置,您现在可以将行为附加到 Books
ActiveRecord。
<?php public function behaviors() { return array( // IMPORTANT: Always use 'Translatable' as key 'Translatable' => array( 'class' => 'ext.translatable.Translatable', 'translationAttributes' => array('title','abstract'), // Optional configuration with their defaults 'translationRelation' => 'translation', 'languageColumn' => 'language', ), ); }
3. 定义主记录与翻译记录之间的关系
您还必须创建翻译表的记录(例如 BookTranslations
)并在 Books
模型中为其定义一个 HAS_MANY
关系。
<?php public function relations() { return array( // IMPORTANT: Use the language column as `index` 'translations' => array(self::HAS_MANY, 'BookTranslations', 'book_id', 'index'=>'language'), ); }
4. 在主记录中创建验证规则
您还希望为这些属性在 Books
记录中创建一些规则。
<?php public function rules() { return array( array('publisher_id,author_id,title,abstract', 'required'), ); }
高级示例
使用回退语言
待办事项
使用回退列
待办事项
多语言表格编辑
待办事项
API
属性
fallbackColumns
:主表中默认列的名称,按属性名称索引。如果在翻译表中未找到翻译,则使用主表中此列的值。示例:array('name'=>'defaultName')
。languageColumn
:包含翻译表中语言代码的列的名称。translationAttributes
:位于翻译表中的可翻译属性数组。这些属性将作为主记录的属性提供。translationRelation
:用于翻译表的关系的名称。
方法
allLanguages($languages=null)
:一个命名范围,用于加载在$languages
数组中指定的所有语言。如果没有提供语言,则加载所有可用的语言记录。getLanguage()
:返回当前模型语言代码,例如en
或en_gb
。getFallbackLanguage()
:当前回退语言或null
(如果没有)。getTranslationModel($language=null)
:返回当前模型语言中的翻译表记录或指定的$language
。如果没有设置语言,则使用当前应用程序语言。如果没有为该语言创建翻译记录,则返回一个新的记录,其中设置了当前语言。saveTranslation()
:保存当前翻译模型。当在主记录上调用save()
时也会自动发生。setFallbackLanguage($value)
:设置模型的重试语言。当在没有当前模型语言的翻译时,将使用回退语言中的属性值。setLanguage($value)
: 设置模型的语言。
注意:在行为配置中不能设置
fallbackLanguage
。它只应在已加载的模型上设置。
关于
本扩展的开发得到了德国斯图加特herzog kommunikation GmbH的慷慨赞助。herzog kommunikation GmbH。
变更日志
1.0.1
- 将
translationRelation
的默认值更改为translations
。
1.0.0
- 初始发布