Zadejte hledaný výraz...
Jakub Glos
Webtrh.cz
Vývoj webových stránek na WordPressu a proklientský přístup pro freelancery
Třídenní infromacemi nabitý prezenční + online kurz v Praze od Webtrhu pouze za 2 871 Kč
Více informací

po a mo formáty souboru v php

Sashaa
verified
rating uzivatele
(18 hodnocení)
15. 2. 2024 03:03:35
Zdravím, chatgpt mi v tomhle neporadil, tak se zkusím zeptat normálních lidí, co něco vědí o PHP :D
mám zde tuto funkci: msgfmt
vzor funkce:
    // Funkce pro konverzi .po na .mo
    function convertPoToMo($poFile, $moFile) {
        if (!file_exists($poFile)) {
            return false; // .po soubor neexistuje
        }
        exec("msgfmt -o $moFile $poFile", $output, $return_var);
        if ($return_var !== 0) {
            return false; // Chyba při vytváření .mo souboru
        }
        return true; // Konverze proběhla úspěšně
    }
jakmile tam uvedu tuto funkci  exec("msgfmt ... tak to systém nezpracuje a hází to chybu...
Už jsem prošel seznam php funkcí na hostingu, ale konkrétně tuto funkci msgfmt jsem tam nenašel.
zkoušel jsem i tuto variantu, jak mi poradil chatgpt:
function convertPoToMo($poFile, $moFile) {
    // Zkontrolujeme, zda existuje .po soubor
    if (!file_exists($poFile)) {
        return false; // .po soubor neexistuje
    }
    // Načteme obsah .po souboru
    $poContent = file_get_contents($poFile);   
    if ($poContent === false) {
        return false; // Chyba při načítání .po soubor
}
    // Otevřeme .mo soubor pro zápis
    $moHandle = fopen($moFile, 'wb');
    if ($moHandle === false) {
        return false; // Chyba při otevírání .mo souboru
    }
    // Zapišeme obsah .po souboru přímo do .mo souboru
    if (fwrite($moHandle, $poContent) === false) {
        fclose($moHandle);
        return false; // Chyba při zápisu do .mo souboru
    }
    fclose($moHandle);
    return true; // Konverze proběhla úspěšně
}
tato verze funguje, avšak neukládá .mo ve správném formátu, takže se text na webu nepřeloží.
Zkontroloval jsem správnost .mo formátu tím, že bych to převedl na .po formát, ale při konvertování to házelo chybu, že .mo formát není v pořádku, dokázal by někdo poradit?
15. 2. 2024 03:03:35
https://webtrh.cz/diskuse/po-a-mo-formaty-souboru-v-php/#reply1525379
wt_kaspy
verified
rating uzivatele
(4 hodnocení)
15. 2. 2024 06:47:34
Tak ta druha funkce pouze nacte obsah prvniho souboru a zapise ho do druheho souboru. Ta nedela, to co zadate, vubec to nespusti tu funkci msgfmt, tak to ani nemuze fungovat.
Bylo by dobre sem dat presne tu chybu, co vam vraci ta prvni funkce, takhle neni od ceho se odpichnout...
15. 2. 2024 06:47:34
https://webtrh.cz/diskuse/po-a-mo-formaty-souboru-v-php/#reply1525383
Sashaa
verified
rating uzivatele
(18 hodnocení)
15. 2. 2024 12:20:34
Ta první funkce nevykonává to, co by měl, tu funkci prostě nevykoná:
    // konverze z .po souboru do .mo formatu,   
    if (!convertPoToMo($poSoubor, $moSoubor)) {
        $errorMessage = "Chyba během konverze na .mo formát";
        header("Location: ../nastaveni-jazyky?chyba=" . urlencode($errorMessage));
        exit();
    }
15. 2. 2024 12:20:34
https://webtrh.cz/diskuse/po-a-mo-formaty-souboru-v-php/#reply1525388
wt_kaspy
verified
rating uzivatele
(4 hodnocení)
16. 2. 2024 03:25:54
Uprime receno bych doporucil, abyste si na to zadal poptavku, aby se vam na to podival nekdo, kdo tomu rozumi, vy si v tom asi zcela jisty nejste...
16. 2. 2024 03:25:54
https://webtrh.cz/diskuse/po-a-mo-formaty-souboru-v-php/#reply1525412
Zdravím, chatgpt mi v tomhle neporadil, tak se zkusím zeptat normálních lidí, co něco vědí o PHP :D
mám zde tuto funkci: msgfmt
Zdravím,
raději nebudu komentovat úroveň kódu a absenci popisu chyby, ale zaujala mně ta "funkce" msgftm, tak to jen uvedu na pravou míru a třeba to pomůže autora postrčit správným směrem. Nejde o žádnou funkci, ale o program, který je součástí balíku GNU gettext.
https://www.gnu.org/software/gettext/manual/html_node/msgfmt-Invocation.html
Dále jej z PHP spouštíte pomocí funkce exec, což může být z důvodu bezpečnosti zakázané, zvlášť pokud používate nějaký sdílený hosting.
Ověřte si tedy, zda máte na prostředí:
- povolenu PHP funkci exec,
- dostupný balík gettext a jeho programy (msgftm).
Pro převod gettext formátu, o který se evidentně pokoušíte, také doporučuji kouknout třeba na:
https://github.com/php-gettext/Gettext
Editováno 17. 2. 2024 13:35:14 uživatelem Michal Krejčí
17. 2. 2024 13:30:36
https://webtrh.cz/diskuse/po-a-mo-formaty-souboru-v-php/#reply1525444
Sashaa
verified
rating uzivatele
(18 hodnocení)
17. 2. 2024 14:52:11
Zdravím, chatgpt mi v tomhle neporadil, tak se zkusím zeptat normálních lidí, co něco vědí o PHP :D
mám zde tuto funkci: msgfmt
Zdravím,
raději nebudu komentovat úroveň kódu a absenci popisu chyby, ale zaujala mně ta \"funkce\" msgftm, tak to jen uvedu na pravou míru a třeba to pomůže autora postrčit správným směrem. Nejde o žádnou funkci, ale o program, který je součástí balíku GNU gettext.
https://www.gnu.org/software/gettext/manual/html_node/msgfmt-Invocation.html
Dále jej z PHP spouštíte pomocí funkce exec, což může být z důvodu bezpečnosti zakázané, zvlášť pokud používate nějaký sdílený hosting.
Ověřte si tedy, zda máte na prostředí:
- povolenu PHP funkci exec,
- dostupný balík gettext a jeho programy (msgftm).
Pro převod gettext formátu, o který se evidentně pokoušíte, také doporučuji kouknout třeba na:
https://github.com/php-gettext/Gettext
Děkují za užitečné rady.
exec mám na hostingu v tomto tvaru:  ssh2.exec, gettext mám povolené též. Zkusím tedy najít možné řešení.
17. 2. 2024 14:52:11
https://webtrh.cz/diskuse/po-a-mo-formaty-souboru-v-php/#reply1525446
Sashaa
verified
rating uzivatele
(18 hodnocení)
17. 2. 2024 15:23:11
Tak jsem to zkusil skrze SSH zabezpečení hostingu a stejně to .mo ukládá nevalidním formátem.
Zde je kód:
Editováno 17. 2. 2024 15:25:31 uživatelem Sashaa
17. 2. 2024 15:23:11
https://webtrh.cz/diskuse/po-a-mo-formaty-souboru-v-php/#reply1525447
Doporučuji si to otestovat na prostém kódu a uvádět celou cestu k lokálním souborům, a až případně pak dál řešit přenos souborů. Například:
$ssh = ssh2_connect('my.server.com', 22);
if ($ssh) {
  if (ssh2_auth_password($ssh, 'ssh-username', 'ssh-password')) {
    $stdout_stream = ssh2_exec($ssh, '/usr/bin/msgfmt -o /tmp/output.mo /tmp/input.po');
    $stderr_stream = ssh2_fetch_stream($stdout_stream, SSH2_STREAM_STDERR);
    stream_set_blocking($stdout_stream, true);
    stream_set_blocking($stderr_stream, true);
    print('Output: ' . stream_get_contents($stdout_stream));
    print("\n");
    print('Error: ' . stream_get_contents($stderr_stream));
    fclose($stdout_stream);
    fclose($stderr_stream);
    ssh2_disconnect($ssh);
}
Editováno 18. 2. 2024 17:58:53 uživatelem Michal Krejčí
18. 2. 2024 17:58:22
https://webtrh.cz/diskuse/po-a-mo-formaty-souboru-v-php/#reply1525466
Pro odpověď se přihlašte.
Přihlásit