cakephp многоязычный динамический контент из базы данных

Я хочу разработать сайт с возможностью выбора языка
в то время я не знаю, как структурировать таблицы базы данных, т.е.
либо я должен добавить отдельные поля для каждого языка, например
tbl_posts
id, title_en,title_fr,description_en,description_fr,....

или я должен получить помощь от Google Translate во время выполнения
или есть что-то еще легко сделать это

во-вторых, мне нужно будет иметь URLs лайк
www.domain.com/en/posts/ & www.domain.com/fr/posts/

в-третьих, какие еще вещи я должен иметь в виду при разработке многоязычного сайта.
ищет стандартизированное, более оптимизированное, простое в управлении и полностью динамичное решение.

1

Решение

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");

🙂 наслаждайтесь вашим многоязычным сайтом

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]