sourceforge.net/projects/gpltrans

аюсь настроить способ, позволяющий участникам переводить строки на другие языки. Вы можете увидеть пример здесь:ТЕСТ ПЕРЕВОДОВ

Кто-то порекомендовал мне использовать для этого встроенную в php функцию gettext () вместо того, что я уже использую для загрузки языковых файлов, а именно:

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 &quot;<a href="' . $scripturl . '?page=%1$s">%2$s</a>&quot;.'; 
?>

Я использую следующую функцию для сохранения переводов:

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 со всеми переведенными внутри него строками (что мой код уже делает).

Хорошо, я предоставлю для этого файл ENTIRE 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. Или фактически предоставьте мне ФАКТИЧЕСКИЙ МЕТОД, чтобы я мог сделать это сам. Не ищу кучу ссылок, которые я могу найти самостоятельно!

Благодарю вас!

Ответы на вопрос(2)

Ваш ответ на вопрос