cakephp来自数据库的多语言动态内容

时间:2015-09-08 05:22:40

标签: php mysql cakephp dynamic multilingual

我想开发具有选择语言选项的网站 当时我不知道如何构建我的数据库表,即 或者我应该为每种语言添加单独的字段,例如 tbl_posts id, title_en,title_fr,description_en,description_fr,.... 或者我应该在运行时获得谷歌翻译的帮助
或者还有其他容易做到的事情

其次我需要URLs喜欢 www.domain.com/en/posts/& www.domain.com/fr/posts/

第三,我应该记住开发多语言网站的其他事项。 寻找标准化,更优化,易于管理和完全动态的解决方案。

1 个答案:

答案 0 :(得分:2)

CakePHP的
第1步:在你的lib / Cake / basic.php中添加函数

if (!function_exists('__dbt')) {
    function __dbt($text, $args = null) {
            if($text==null){
                return null;
            }else{
                $languageUse =  Configure::read('Config.language');
                if($languageUse!='en-us' && $languageUse!='eng'){
                    $modelName =  ucfirst($languageUse)."Translation";
                    $model = ClassRegistry::init($modelName);
                    $data = $model->find('first',array('fields'=>array('translation'),'conditions'=>array("text"=>"$text")));
                    if(!empty($data[$modelName]) && $data[$modelName]['translation']!=''){
                        return $data[$modelName]['translation'];//die('1');
                    }else{
                    // Please copy & paste below code from your basic.php __() function   
                    App::uses('I18n', 'I18n');
                    $translated = I18n::translate($text);
                    $arguments = func_get_args();
                    return I18n::insertArgs($translated, array_slice($arguments, 1));
                    }
                }else{
                    // Please copy & paste below code from your basic.php __() function   
                    App::uses('I18n', 'I18n');
                    $translated = I18n::translate($text);
                    $arguments = func_get_args();
                    return I18n::insertArgs($translated, array_slice($arguments, 1));
                }
            }
}

}

第2步:根据您要使用的语言创建表格 注意:表名应该是locale + _tranlations前缀 例如:hin_translations,tha_translations等。

CREATE TABLE IF NOT EXISTS `hin_translations` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `text` text NOT NULL,
  `translation` text NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

在上表中,在文本列中添加英文字符串,并在翻译栏中添加其翻译。

步骤3:您想要从数据库或语言环境po文件中更改语言字符串,只需使用

__dbt("Write your string here");

:)享受您的多语种网站