Многошаблонность

Garret

Кто здесь?
Многошаблонность

Делаю я сейчас один проект и там будет использоваться многошаблонность.
Типа для разных языков будет браться разный шаблон. Я хотел спросить нету ли каких подводных камней которые я мог не увидеть?
 

WP

^_^
Мультиланг я реализовал вот как, схема обкатана. В шаблоне пишешь {_ hi}, в lang-ru.php пишешь в массиве 'hi' => 'Привет!', а в lang-en.php: 'hi' => 'Hi!'. Сделал префильтр шаблона
PHP:
function smarty_prefilter_language(&$tpl_source,&$smarty)
{
 $tpl_source = preg_replace('~\{_\s+(.*?)\}~e','lang_getmessage("$1")',$tpl_source);
 $tpl_source = preg_replace('~\{e_\s+(.*?)\}~ie','addslashes(lang_getmessage("$1"))',$tpl_source);
 $tpl_source = preg_replace_callback('~\{LANG(?:=([\'|"])?(.*?)\1)?}(.*?)\{/LANG\}~si','smarty_prefilter_language_block_callback',$tpl_source);
 return $tpl_source;
}
И перезагрузил метод _get_auto_filename:
PHP:
//...
 $_return .= $_filename.'.'.$this->lang.'.'.$this->skin.'%%'.$_crc32.'%%';
// ...
Таким образом для каждой пары lang+skin компилируется отдельный файл.

А составлять это руками - дикий изврат.

-~{}~ 24.09.06 15:44:

p.s.
PHP:
function smarty_prefilter_language_block_callback($m)
{
 global $reqlang;
 $name = $m[2];
 $tag = $m[3];
 preg_match_all('~\{(\w+)\}(.*?)(?=\{\w+\}|\z)~s',$tag,$matches,PREG_SET_ORDER);
 $variants = array();
 foreach ($matches as $m) {$variants[strtolower($m[1])] = trim($m[2]);}
 if (isset($variants[$reqlang])) {return $variants[$reqlang];}
 return isset($variants['default'])?$variants['default']:'Warning! Can\'t find phrase '.(!is_empty($name)?'('.htmlspecialchars($name).')':'').' for this language.';
}
Чтоб можно было сделать {LANG=hi}{ru}Привет!{en}Hi!{default}А шо это за язык такой я никак воткнуть не могу?{/LANG} И при компиляции был выбрал нужный вариант. Если нет default и язык не найден будет сообщение с 'hi'.
 

b-d

Новичок
2 Garret:

Можно реализовать мультиязычность опираясь на директории. Например определить
основные каталоги Smarty в соответсвии с предпочитаемым языком:

Код:
$smarty->template_dir = $PATH."/".$LANGUAGE."/templates/";
$smarty->compile_dir  = $PATH."/".$LANGUAGE."/templates_c/";
$smarty->config_dir   = $PATH."/".$LANGUAGE."/configs/";
$smarty->cache_dir    = $PATH."/".$LANGUAGE."/cache/";
Советую использовать Unicode . В этом случае не придется контролировать
многочисленные кодировки. В этом случае получится много шаблонов, но у них
будут одинаковые имена.
 
Сверху