Nasıl kullanarak yapabilirsiniz gettext burada bana yardımcı?

0 Cevap php

Ben üye diğer dillere dizeleri çevirmek için izin bir şekilde kurmak için çalışıyorum. Burada bir örnek görebilirsiniz: TRANSLATIONS TEST

Birisi yerine ben zaten bu dil dosyalarını yüklemek için kullanıyorum ne PHP'nin gettext (Bunun için) işlevini kullanmanız önerilir:

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;
}

The strings are contained within a file that is named like so: ManageDPModules.english.php DreamPortal.english.php etc.

Bu dosyalar herhangi bir php editörü açılan aşağıdaki gibi görünebilir, ve bu $ txt değişkenlerin birçok olabilir:

<?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;.'; 
?>

Ben çeviriler kaydetmek için aşağıdaki işlevi kullanıyorum:

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();
} 

Dil fonksiyonu:

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>';

}

Ben gettext yardımcı olacak görmek için başarısız. Sunucuyu her zaman yeniden başlatmadan metin kataloğu güncelleştirmek için hiçbir yolu yoktur. Birisi benim için bu bir demo oluşturabilir belki olur?

Ayrıca, UTF-8 desteklemek istiyorum. Veriler tutarlı olmalıdır.

Peki bu uygulama ile yanlış? Neden gettext kullanabilir? Tercüme edilebilir, böylece nasıl UTF-8 ve olmayan UTF-8 dil dizeleri hem çalışmak için çeviriler iyileştirmek için kullanılabilir.?

EDIT: Please note, the files will eventually need to be renamed to: ManageDPModules.[language].php, DreamPortal.[language].php, etc., etc. in order for the translations to work. So, how would catalogs help me in this regard? If you want to see possible END-RESULT Translations, you can download a language package located here and open up the .german.php language files to see what it should look like after the member submits a language on a file by file basis. Noted that some of these packages have UTF-8 strings, and some do not. The filename of the packages let you know this. Would be nice if I can also make it support UTF-8, but it is not a requirement. Please note, I'm not trying to create complete packages here. I just want to create the languagefile.[language].php with all of the translated strings inside of them (which my code already does).

Tamam, bu yüzden size çeviriler yapmak zaman tam olarak ne yaptığını görebilirsiniz Bu için TÜM index.php dosyasını sağlayacaktır. İşte bunun için index.php dosyası olduğunu ve bazı İngilizce dil dosyaları gerekir: DreamPortal.english.php, ManageDPModules.english.php, ve DreamHelp.english-utf8.php. Şimdi, bu görmek için, sen, index.php, bir sunucuya yüklemek index.php bir kaç klasör oluşturmak, ingilizce 1 çağrı, ve istediğiniz her ek dil için orada bir klasör oluşturmanız gerekiyor (ben yaptım 2 klasörler, İspanyolca ve Fransızca), İngilizce klasörüne 3 dil dosyalarını yüklemek daha. Tarayıcınızda index.php çalıştırın ve bunu çalışma göreceksiniz.

Şimdi, bunu nasıl AYNI yaklaşım ile katalogları için gettext kullanabilirsiniz. Ben dosyaları online çeviri etkinleştirmeniz gerekir. Ben. Turkish.php önce dosyaları .english.php olan aynı PREFIX ile vardır AYNI tarzında çeviriler PHP dosyaları oluşturmak gerekiyor ve ben aynı dili dosya içinde dilini değiştirmeniz gerekir klasör adı için tanımlanmış. Çevrimiçi çeviriler mevcut SADECE yöntemdir. SADECE dizeleri tercüme odaklanmak Çevirmenin gerekir. Onlar, programları yüklerken o kadar ambalaj, vs vs dosyaları, yeniden adlandırma odaklanarak olmamalıdır. Bu online yapılabilir izin mümkün olduğunca bu süreç ağrısız yapar. Ve bunu yapmak için bir yol olduğunu biliyorum, ve hatta UTF-8 desteği için. Ama şu anda ben biliyorum en iyi yöntemi kullanıyorum. Ama senin kadar çok ben daha bu tür bir şey de çok daha akıllı olan, bu yüzden sizlerden yardım isteyin.

Bana daha iyi bir yol gösterebilir kimse var mı? Bu soru size verdik gibi bir örnek?

I need to allow translations to be done ONLINE from translators, and would also like it to support UTF-8 files, as well as non UTF-8 files. ben bunu (TRANSLATIONS TEST) Yukarıda verilen bağlantı için kurulum yolu gibi böylece çevirmen Sadece çeviriler online değil, başka bir şey hakkında endişelenmenize gerek yok olabilir, ve o-cekti otomatik olarak gerekli dosyaları oluşturabilirsiniz. Ilk . (nokta) sonra (dilini temsil eden) klasör adı ile dilin İngilizce dosya adı olarak aynı olacak ve uzantısı olması gerekir. Php (bu kodda yaptığı gibi hangi Şu anda) kullanıyorum. Yani temelde, tüm veya çoğu dil için UTF-8 ve UTF-8 olmayan desteklemek için mevcut index.php bir adaptasyon ihtiyacı ve gettext () ve katalog dosyalarını kullanarak bu konuda yardımcı olacağını söyledi.

Dil ve çeviriler, hepsi değilse de, en çok destekleyecek bir şekilde gettext () kullanmak için geçerli benim index.php değiştirilmiş bir sürümü arıyorum. Bu çeviri göndermek / kaydederken çift tırnak önünde bir eğik çizgi yerleştirmek görünüyor çünkü preg_replace için üzerinde gidiş var REGEX tamamen tatmin edici değildir. Böylece belki preg_replace bir iyileşme de ihtiyaç olacaktır.

Ben GERÇEK KODU bytheway ile tam bir örnek sağladı. Birisi yerine GetText KULLANIMI ve UTF-8 desteklemek için sağlanan KOD, bu örneği değiştirmek için ben isterim. Ya da aslında beni bu kendimi yapmak için bir gerçek usulde sağlar. Ben kendi bulabilirsiniz bağlantıları bir grup için aramıyorum!

Thank You!

0 Cevap