Я пытаюсь настроить способ, позволяющий участникам переводить строки на другие языки.Вы можете увидеть пример здесь: ПРОВЕРКА ПЕРЕВОДОВ
Кто-то порекомендовал мне использовать для этого встроенную в php функцию gettext () вместо того, что я уже использую для загрузки языковых файлов, чтоthis:
function loadLanguageFile($language, $file) {
$temp = array();
$data = file_get_contents('./'.$language.'/'.$file.'.'.$language.'.php');
$codes = array (
'/(\'\s*\.\s*\$)(.+?)(\s*\.\s*\')/',
'/(=\s*\$)(.+?)(\s*\.\s*\')/',
'/(\'\s*\.\s*\$)(.+?)(;)/',
'/(\[\')(.+?)(\'\])/',
'/<\?php/s', '/\?>/s', '/<\?/s'
);
$html = array (
'{$2}',
'= \'{$2}',
'{$2}\';',
'[$2]',
'',
);
// Since we don't have the values for the vars.
$data = preg_replace($codes, $html, $data);
// We must change this because they are global.
$data = str_replace('$txt', '$langEditor_txt', $data);
$data = str_replace('$helptxt', '$langEditor_helptxt', $data);
eval($data);
if (isset($langEditor_txt)) {
$temp['txt'] = $langEditor_txt;
unset($GLOBALS['langEditor_txt']);
}
if (isset($langEditor_helptxt)) {
$temp['helptxt'] = $langEditor_helptxt;
unset($GLOBALS['langEditor_helptxt']);
}
return $temp;
}
Строки содержатся в файле с таким именем: ManageDPModules.english.php DreamPortal.english.php и т. д.
Эти файлы могут выглядеть следующим образом:при открытии в любом редакторе php и может иметь множество переменных $ txt:
<?php
// Dream Portal (c) 2009-2010 Dream Portal Team
// DreamPortal.english.php; @1.1
global $scripturl, $context;
// General Strings
$txt['forum'] = 'Forum';
$txt['dream_portal'] = 'Dream Portal';
$txt['dp_core_modules'] = 'Collapse or Expand this Module';
$txt['dp_who_forum'] = 'Viewing the forum index of <a href="' . $scripturl . '?action=forum">' . $context['forum_name'] . '</a>.';
$txt['dp_who_portal'] = 'Viewing the portal index of <a href="' . $scripturl . '">' . $context['forum_name'] . '</a>.';
$txt['dp_who_page'] = 'Viewing the page "<a href="' . $scripturl . '?page=%1$s">%2$s</a>".';
?>
Я использую следующую функцию для сохранения переводов:
function langSave($lang, $file) {
// We just don't get values from the form, they have to exist in the english files to be taken seriously.
$default = loadLanguageFile('english', $file);
if ($default['txt']) {
foreach ($default['txt'] as $key=>$string) {
if (isset($_REQUEST['txt'.$key]) && str_replace(' ', '', $_REQUEST['txt'.$key]) != '') {
$data.='$txt[\''.$key.'\'] = \''.str_replace("'", "\'", $_REQUEST['txt'.$key]).'\';'."\n";
}
}
}
if ($default['helptxt']) {
foreach ($default['helptxt'] as $key=>$string) {
if (isset($_REQUEST['helptxt'.$key]) && str_replace(' ', '', $_REQUEST['helptxt'.$key]) != '') {
$data.='$helptxt[\''.$key.'\'] = \''.str_replace("'", "\'", $_REQUEST['helptxt'.$key]).'\';'."\n";
}
}
}
if (isset($data)) {
$codes = array (// '' . $test . '
'/(\{)(.+?)(\})/',
'/(\'\' \. \$)(.+?)( \. \')/',
'/(\' \. \$)(.+?)( \. \'\')/',
'/(\[\')(.+?)(\'\])/',
'/(\[)(.+?)(\])/',
);
$html = array (
'\' . \$$2 . \'',
'\$$2 . \'',
'\' . \$$2',
'[$2]',
'[\'$2\']',
);
// Convert the data back to normal.
$data = preg_replace($codes, $html, $data);
$data = '<?php'."\n".$data.'?>';
file_put_contents('./'.$lang.'/'.$file.'.'.$lang.'.php', $data);
}
languageHome();
}
Функция языка:
function languageHome() {
$languages = loadLanguageList();
echo '
Language List
<table>';
foreach ($languages as $language) {
echo '
<tr>
<td>
'.$language.'
</td>
<td>
<a href="index.php?op=langView&lang='.$language.'">View</a>
</td>
</tr>';
}
echo '
</table>';
}
Я не вижу, как поможет gettext.Невозможно обновить текстовый каталог без перезагрузки сервера каждый раз.Может быть, если кто-то может создать демо-версию этого для меня?
Кроме того, хотел бы, чтобы он поддерживал UTF-8.Данные должны быть согласованными.
Так что же не так с этой реализацией ??Зачем использовать gettext ??Как его можно использовать для улучшения перевода для работы как с языковыми строками UTF-8, так и без UTF-8, чтобы их можно было переводить .?
РЕДАКТИРОВАТЬ: Обратите внимание, что файлы будутв конечном итоге необходимо переименовать в: ManageDPModules.[language].php
, DreamPortal.[language].php
и т. д. и т. д., чтобы переводы работали.Итак, как каталоги помогут мне в этом отношении?Если вы хотите увидеть возможные переводы END-RESULT, вы можете скачать языковой пакет, расположенный по адресу здесь , и открыть языковые файлы .german.php, чтобы увидеть, как он должен выглядеть после того, как участник отправит язык нафайл за файломОтмечено, что некоторые из этих пакетов имеют строки UTF-8, а некоторые нет.Имя файла пакетов сообщит вам об этом.Было бы неплохо, если бы я также мог заставить его поддерживать UTF-8, но это не является обязательным требованием.Пожалуйста, обратите внимание, я не пытаюсь создать полные пакеты здесь.Я просто хочу создать языковой файл. [Language] .php со всеми переведенными внутри него строками (что мой код уже делает).
ОК, я предоставлю для этого ПОЛНЫЙ файл index.php, так чтовы можете увидеть, что именно делает, когда вы делаете переводы.Вот файл index.php для этого, и вам понадобятся файлы на английском языке: DreamPortal.english.php , ManageDPModules.english.php и DreamHelp.english-utf8.php .Теперь, чтобы увидеть это, вам нужно загрузить на сервер index.php, создать несколько папок, в которых находится index.php, вызвать 1 на английском и создать там папку для каждого дополнительного языка, который вы хотите (я сделал 2папки, испанский и французский), затем загрузите 3 языковых файла в английскую папку.Запустите index.php в вашем браузере, и вы увидите, что он работает.
Теперь, как я могу использовать gettext для каталогов с таким же подходом.Мне нужно включить онлайн-перевод файлов.Мне нужно создать PHP-файлы переводов в том же стиле, что и файлы .english.php с тем же PREFIX, что и до .english.php
, и мне нужно изменить язык в имени файла на тот же язык, который определен для папкиназвание.Онлайн-переводы - ЕДИНСТВЕННЫЙ доступный метод.Переводчик должен сосредоточиться ТОЛЬКО на переводе строк.Они не должны фокусироваться на установке программ, их упаковке, переименовании файлов и т. Д. И т. Д. Это делает этот процесс максимально безболезненным, позволяя выполнять его в Интернете.И я знаю, что есть способ сделать это, и даже для поддержки UTF-8.Но я использую лучший из известных мне методов.Но многие из вас намного умнее, чем я, поэтому я прошу помощи у вас, ребята.
Есть ли кто-нибудь, кто может показать мне лучший способ?Пример, подобный тому, который я дал вам в этом вопросе?
Мне нужно разрешить переводы в режиме онлайн от переводчиков, а также, чтобы он поддерживал файлы UTF-8, а также файлы, не относящиеся к UTF-8. Мне нравится способ настройки по приведенной выше ссылке ( ПЕРЕВОДЫ ПЕРЕВОДОВ ), чтобы переводчики могли просто выполнять переводы онлайн и не беспокоиться ни о чем другом, а также автоматически создавали необходимые файлы. Это будет то же самое, что и английское имя файла с именем папки (представляющим язык) после первого . (точка), и оно должно иметь расширение .php (как в коде). Я сейчас пользуюсь). В общем, мне нужна адаптация текущего index.php для поддержки UTF-8 и не UTF-8 для всех или большинства языков, и мне сказали, что использование gettext () и файлов каталога поможет в этом.
Ищу модифицированную версию моего текущего index.php для использования gettext () таким образом, чтобы он поддерживал большинство, если не все, языки и переводы. REGEX, который я получил для preg_replace, не совсем удовлетворителен, потому что, кажется, он помещает косую черту перед двойными кавычками при сохранении / отправке переводов. Так что, возможно, понадобится и улучшение preg_replace.
Кстати, я предоставил полный пример с ACTUAL CODE. Я хотел бы, чтобы кто-то изменил этот пример, используя КОД, который я предоставил для ИСПОЛЬЗОВАНИЯ GETTEXT и поддержки UTF-8. Или фактически предоставьте мне ФАКТИЧЕСКИЙ МЕТОД, чтобы я мог сделать это сам. Не ищу кучу ссылок, которые я могу найти самостоятельно!
Спасибо!