ametad / yii.translate

Yii Module to handle translations

Home Page:http://www.yiiframework.com/extension/translate/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

#### Module to handle translations

This extension collects all untranslated messages in the page and then you can add a button to translate, translate automatically using google translate, check for missing translations, edit translations and more.

Basic usage:


~~~
[php]
echo Yii::t('app','Some text').' - '.Yii::t('app','some other text');
Yii::app()->translate->editLink('Translate');

~~~


##Setup

In your config :
~~~
[php]
<?php
return array(
    'preload'=>array('translate'),//either here or somewhere in the beginning
    //set up and import the module
    'modules'=>array(
        'translate'
    ),
    'import'=>array(
        'application.modules.translate.TranslateModule'
    ),
    'components'=>array(
        //define the class and its missingTranslation event
        'messages'=>array(
            'class'=>'CDbMessageSource',
            'onMissingTranslation' => array('TranslateModule', 'missingTranslation'),
        ),
        'translate'=>array(//if you name your component something else change TranslateModule
            'class'=>'translate.components.MPTranslate',
            //any avaliable options here
            'acceptedLanguages'=>array(
                  'en'=>'English',
                  'pt'=>'Portugues',
                  'es'=>'Español'
            ),
        ),
    )
);
~~~

Do not forget to create the tables like [described here](http://www.yiiframework.com/doc/api/1.1/CDbMessageSource "")
####the id of message source must be auto-incremental

the name of the tables can be modified

~~~
[php]
CREATE TABLE SourceMessage
(
    id INTEGER PRIMARY KEY AUTO_INCREMENT,
    category VARCHAR(32),
    message TEXT
);
CREATE TABLE Message
(
    id INTEGER,
    language VARCHAR(16),
    translation TEXT,
    PRIMARY KEY (id, language),
    CONSTRAINT FK_Message_SourceMessage FOREIGN KEY (id)
         REFERENCES SourceMessage (id) ON DELETE CASCADE ON UPDATE RESTRICT
);

~~~



##How to use

Extract the file to protected/modules

somewhere in your application define the language like the following:
~~~
[php]
//shortcut
$translate=Yii::app()->translate;
//in your layout add
echo $translate->dropdown();
//adn this
if($translate->hasMessages()){
  //generates a to the page where you translate the missing translations found in this page
  echo $translate->translateLink('Translate');
  //or a dialog
  echo $translate->translateDialogLink('Translate','Translate page title');
}
//link to the page where you edit the translations
echo $translate->editLink('Edit translations page');
//link to the page where you check for all unstranslated messages of the system
echo $translate->missingLink('Missing translations page');


~~~



##Options avaliable

#### string $defaultLanguage
defaults language to use if none is set.

if null, it will receive Yii target language
#### array $dialogOptions
options of the dialog
#### string $googleApiKey
your google translate api key.

set this if you wish to use googles translate service to translate the messages

#### array $acceptedLanguages
an array containing the languages accepted by your application.

if not set, it will receive an array containing the target language and the source language

#### boolean $autoTranslate
wheter to auto translate the missing messages found on the page. Defaults to false.
Needs google api key to set

#### boolean $autoSetLanguage
wheter to automatically set the language on the initialization of the component. Defaults to true.

##Methods avaliable
for the translate components
use it like this:
~~~
[php]
Yii::app()->translate->someMethod($someArg);
~~~
#### string getLanguage()
Returns the language in use.
The language is determined by many variables: session, post, get, header in this order.
It will filter the language by using accepted languages.
If is set "en_US" and it is not avaliable, then it will check if "en" is avaliable.
#### string setLanguage($language=null)
If $language is null then it will use getLanguage to determine it.
It doesn't check if the language is in the accepted languages.
Returns the language setted.
#### boolean hasMessage()
Return wheter there are messages to be translated in this page
#### string dropdown()
Returns a dropdown containing all accepted languages with an onchange event that will change the application's language.
#### string googleTranslate($message,$targetLanguage=null,$sourceLanguage=null)
Translate some message from $sourceLanguage to $targetLanguage using google translate api. 
Option GoogleApiKey must be defined to use this service.
#### array getGoogleAcceptedLanguages($targetLanguage=null)
returns an array containing all languages accepted by google translate. 
Option googleApiKey must be defined to use this service.
#### string translateLink($label,$type='link')
Generates a link or button to the page where you translate the missing translations found in this page
#### string translateDialogLink($label,$title=null,$type='link')
Generates a link or button that generates a dialog to the page where you translate the missing translations found in this page.
#### string editLink($label,$type='link')
Creates a link to the page where you edit the translations.
#### string missingLink($label,$type='link')
Creates a link to the page where you check all missing translations

_type for any link can be 'button' or 'link'_

if you are running php 5.3 you can use any method like this
MPTranslate::someMethod($someArg);

For the TranslateModule

#### MPTranslate translator()
returns the translate component
#### string t($message,$params=array())
used internally for the module to translate its content
#### string $translateComponentId
the id of the translate component. Defaults to 'translate' 


##Version

0.2.3: 18/08/2011

- LANGUAGE_KEY is now a constant named ID
- Google errors are now logged instead of beeing treated as an exception 

0.2.2: 23/05/2011

- Fixed pagination in dialog and textarea size 

0.2.1: 20/05/2011

- Fixed some minor bugs

0.2: 18/05/2011

- complete rewrite of the code to allow easier customization
- added google translate support (thanks to Toshi)
- added defaultLanguage (thanks to duna)
- fixed a couple of minor bugs
- added a lof of new funcionalities

0.1: 10/05/2011

-first release


##Resources

[Get a google API key](https://code.google.com/apis/console/?api=translate "Get a google api key")

[CDbMessageSource](http://www.yiiframework.com/doc/api/1.1/CDbMessageSource "CDbMessageSource")

[Forum support](http://www.yiiframework.com/forum/index.php?/topic/19302-translate-module/ "Forum support")



##Notes

#### This module will slow down your application, use it for development only
#### It's not fully tested. I'm expecting your feedback to improve it

About

Yii Module to handle translations

http://www.yiiframework.com/extension/translate/