Fórum Root.cz

Hlavní témata => Software => Téma založeno: Karel.L 27. 04. 2017, 14:15:59

Název: GNU gettext Smazaní překladu
Přispěvatel: Karel.L 27. 04. 2017, 14:15:59
Dobrý den,

Dělám na vlastním překladu pro jeden projekt,
Dostanu se pouze k souboru "name.po" ve kterém už je existující překlad.
Hledám příkaz který smaže překlad ze souboru a zanechá pouze původní text.

Našel jsem toto: https://mlocati.github.io/articles/gettext-iconv-windows.html

Bohužel to má ale šílenou dokumentaci a nemohu najít příkaz a přepínač který by to dokázal...

Žádám o pomoc děkuji.
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: ava 27. 04. 2017, 14:41:40
Dobrý den,

Dělám na vlastním překladu pro jeden projekt,
Dostanu se pouze k souboru "name.po" ve kterém už je existující překlad.
Hledám příkaz který smaže překlad ze souboru a zanechá pouze původní text.

Našel jsem toto: https://mlocati.github.io/articles/gettext-iconv-windows.html

Bohužel to má ale šílenou dokumentaci a nemohu najít příkaz a přepínač který by to dokázal...

Žádám o pomoc děkuji.

No a co ten soubor otevřít v textovém editoru a prostě upravit?
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Karel.L 27. 04. 2017, 14:50:13
Já nemám problém s tím že bych soubor nemohl upravit na to používám Poedit.
Ale potřebuji smazat původní překlad kvůli aktualizačním a synchronizačním procesům.
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: ava 27. 04. 2017, 14:54:52
Omlouvám se, nechápu co chcete. .po soubor obsahuje dvojice překladový klíč - překlad. Co chcete udělat? Co myslíte tím "původní překlad" ?

Můžete nahradit překlad tím původním klíčem, jestli to myslíte takhle... nebo celý pár úplně smažte, jestli je SW správně implementovaný, použije původní klíč.

Smazání se dá provést v libovolném textovém editoru. Jen bokem, já na překládání používám Virtaal, moc se mi líbí.
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Lol Phirae 27. 04. 2017, 14:55:22
Omlouvám se, nechápu co chcete.

To je nás víc...  ::) ;D
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Karel.L 27. 04. 2017, 15:53:15
.po soubor obsahuje původní text a potom překlad (chci smazat ten překlad)
pomocí příkazu s použitím https://mlocati.github.io/articles/gettext-iconv-windows.html

Pak si na to udělám .bat soubor.
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Lol Phirae 27. 04. 2017, 16:05:09
.po soubor obsahuje původní text a potom překlad (chci smazat ten překlad)

Tak ho smaž, no... co ti v tom furt brání?

https://www.gnu.org/software/gettext/manual/html_node/msgattrib-Invocation.html
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Karel.L 27. 04. 2017, 16:20:24
Lol Phirae: Trochu korektnosti by ti neuškodilo

Jestli to chápu dobře mělo by to být takhle ale stále mi to nějak nejde.

"start msgattrib --untranslated -D C:\Users\Windows\Desktop\test\name.po"
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Ucitel 27. 04. 2017, 16:28:01
To neni moc dobry napad smazat originalni preklad. Duvod je prosty. I vas preklad by mel mit podobnou delku stringu nez puvodni, jinak se vam muze stat, ze rozbijete design a neco nekde pretece nebo se nevejde. My prekladatelum proto stale davame i originalni verzi, tu zakomentuji a dopisou svuj preklad.
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Lol Phirae 27. 04. 2017, 16:29:47
stále mi to nějak nejde

Nevim co do toho motáš nějakej start a hlavně co ti nejde. To je fakt popis jako stehno.
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Karel.L 28. 04. 2017, 03:45:46
Takže už vím, určitě co hledám a potřebuji.

Potřebuji soubor "name.po" převést na "name.pot" což je verze souboru pro překlad a aktualizaci.
Mělo by se to dělat tímto příkazem:
"msgfilter.exe -i name.po -o new.pot true"

Problém je že mi to hodilo Error: https://ctrlv.cz/shots/2017/04/28/RVuY.png
A přiznám se, ne úplně chápu tento problém...

Místní znaková sada "CP1250" je ta co používá můj počítač "Windows"?
A vstupní souborová sada znaků "UTF-8" je ta co má soubor v sobě?
A aplikace msgfilter pracuje proto nesprávně?

Soubor "name.pot" má "EN" a "SK" překlad.
Když ho převedu na "name.pot", zůstane pouze "EN" původní text.
Jestli se nepletu to "UTF-8" je chybou toho "EN" původního textu a ne toho "SK" překladu.

".pot" soubor bych pak chtěl použít pro překlad do češtiny.

Jak mám tedy postupovat se změnou znakové sady?
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: BACHA 28. 04. 2017, 07:44:13
A je je Lol Phirae zase nekomu radi  ;D
Hold profik se pozna prodava to nejmodernejsi technologii.

(https://www.nuffy.net/wp-content/uploads/2010/02/computer_garbage02.jpg)

Karle moc od nej necekej spise vubec nic :-D
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: ava 28. 04. 2017, 08:39:44
Takže už vím, určitě co hledám a potřebuji.

Potřebuji soubor "name.po" převést na "name.pot" což je verze souboru pro překlad a aktualizaci.
Mělo by se to dělat tímto příkazem:
"msgfilter.exe -i name.po -o new.pot true"

Problém je že mi to hodilo Error: https://ctrlv.cz/shots/2017/04/28/RVuY.png
A přiznám se, ne úplně chápu tento problém...

Místní znaková sada "CP1250" je ta co používá můj počítač "Windows"?
A vstupní souborová sada znaků "UTF-8" je ta co má soubor v sobě?
A aplikace msgfilter pracuje proto nesprávně?

Soubor "name.pot" má "EN" a "SK" překlad.
Když ho převedu na "name.pot", zůstane pouze "EN" původní text.
Jestli se nepletu to "UTF-8" je chybou toho "EN" původního textu a ne toho "SK" překladu.

".pot" soubor bych pak chtěl použít pro překlad do češtiny.

Jak mám tedy postupovat se změnou znakové sady?

Podle chybové hlášky to vypadá, že .po soubor je kódován UTF-8 (jak originál, tak SK překlad, ale v anglické verzi nejspíš budou jen ASCII znaky, pokud tam není třeba euro, řecká písmena nebo tak), což je dobrá volba.

Vaše prostředí běží v CP1250, nejspíš stará windows? což je dost bídná volba (od MS), ale co se dá dělat.

msgfilter zřejmě pro kódování výstupního souboru volí stejné kódování jako má systém, takže nadává, že se kódování vstupního souboru liší od výstupního.

Sám vám nabízí jak na to, když si přečtete chybovou hlášku. Cesty jsou dvě a jsou obě zjevné. Buď se změní systémoé kódování na UTF8 (na windows neumím, třeba na to nějak přijdete), nebo se soubor dočasně překóduje do CP1250 (pomocí msgconv), pak na to pustíte msgfilter, a pak si pomocí msgconv překonvertujete .pot zpět.

Druhou cestou se můžete dát jen když původní anglické hlášky neobsahují znaky mimo CP1250. https://en.wikipedia.org/wiki/Windows-1250
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Karel.L 28. 04. 2017, 09:55:13
Mám Windows 7, a pochybuji že jde změnit nějak, systémově znakovou sadu na UTF8.
Možná se nějak znaková sada dá změnit jen pro ten program "msgfilter" ale nechápu jak by se to dalo udělat.

Možná budu muset udělat to druhé řešení ale dám si 5piv abych našel ty příkazy :-D

Jinak moc děkuji za pomoc, kdyby vás ještě něco napadlo napište :-)


Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Karel.L 28. 04. 2017, 09:58:13
Ještě se chci zeptat, kdybych použil tu druhou metodu existuje nějaká tabulka znaků, které se nepřevádí a které bych tak mohl ztratit při konvertování?
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Lol Phirae 28. 04. 2017, 10:08:57
OMG.

- Stáhni si Notepad++ - https://notepad-plus-plus.org/download/
- Formát - Konvertovat do UTF-8
- CTRL+H, vyber Regulární výraz, do Najít zadej msgstr.*, do Nahradit zadej msgstr ""
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: ava 28. 04. 2017, 10:58:44
Ještě se chci zeptat, kdybych použil tu druhou metodu existuje nějaká tabulka znaků, které se nepřevádí a které bych tak mohl ztratit při konvertování?

Ano, ta tabulka je ve zmiňovaném odkazu. Pro druhou metodu vaše hlášky mohou obsahovat pouze znaky z https://en.wikipedia.org/wiki/Windows-1250 . 
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Karel.L 28. 04. 2017, 11:01:32
Ava moc děkuji.

Lol Phirae tvoje OMG metoda mě nezajímá protože je mě nanic. potřebuji to aby to potom šlo hodit do scriptu.
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: ava 28. 04. 2017, 11:02:27
OMG.

- Stáhni si Notepad++ - https://notepad-plus-plus.org/download/
- Formát - Konvertovat do UTF-8
- CTRL+H, vyber Regulární výraz, do Najít zadej msgstr.*, do Nahradit zadej msgstr ""

Bacha,
 1) Tazatel se tváří, že to chce dávkově v .bat
 2) Při tomhle postupu je třeba upravit i metainformaci o kódování v položce "Content-Type" !!

Nejlepší by bylo změnit prostředí na UTF-8, ale to nevím jak se ve Windows dělá. Pokud to nejde, tak si dát těch 5 piv a zkusit to asi přes ten msgconv, pokud to musí být v .bat...
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Lol Phirae 28. 04. 2017, 11:21:13
Lol Phirae tvoje OMG metoda mě nezajímá protože je mě nanic. potřebuji to aby to potom šlo hodit do scriptu.

Nojo, tak budeš holt muset RTFM. (Jinak se nad smyslem počínání už raději vůbec nezamýšlím, pochopil jsem, že nemáš původní šablonu, no, k tomu opravdu stačí tu akci odstranění překladů provést jednou, proč by někdo podobnou jednorázovou kravinu skriptoval a ještě to provozoval na naprosto nevhodném operačním systému, nad tím opravdu zůstává rozum stát.)
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Unknown 28. 04. 2017, 12:50:51
V jakem kodovani je puvodni soubor kodovani zjistite programem ENCA https://www.john.geek.nz/2010/02/enca-binary-compiled-for-32-bit-windows/

Jinak jsem tu narychlo neco upatlal.

- Hlavickove radky (doufam ze ty se mezi verzemi prekladu nemeni) si zkopirujte do 'headers.txt' a jejich pocet zadejte do promenne.
- Podle potreby si upravte nazvy souboru v promennych
- Vystup je v souboru 'final.pod'

Vyzkousejte a dejte vedet jak se to chova...

Kód: [Vybrat]
@echo off & setlocal ENABLEDELAYEDEXPANSION>%outfile%
set "outfile=out.pod"
set "infile=strings.po"
set "final=final.pod"
set "headfile=header.txt"
::
set "header_lines_num=19"
::
for /f "skip=%header_lines_num% tokens=1,2,* delims=: " %%a in ('findstr /N .* %infile%') do (
if "%%~b"=="" (
echo.>>%outfile%
) else (
if not "%%~b"=="msgstr" echo %%~b %%c>>%outfile%
)
)
)
copy %headfile%+%outfile% %final%>NUL
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Karel.L 30. 04. 2017, 18:38:52
Unknown: K programu ENCA, jsem nenašel žádnou dokumentaci jak ho použít.

Co se týče skriptu, není pro mě moc vhodný, soubor který budu konvertovat se bude často a razantně měnit.
Proto bych chtěl použít jenom nástroje GNU gettext utilities.

Našel jsem tuto informaci:
Citace
I found this information:
Note: It is your responsibility to ensure that the filter can cope with input encoded in the translation catalog's encoding. If the filter wants input in a particular encoding, you can in a first step convert the translation catalog to that encoding using the `msgconv´ program, before invoking `msgfilter´. If the filter wants input in the locale's encoding, but you want to avoid the locale's encoding, then you can first convert the translation catalog to UTF-8 using the `msgconv´ program and then make `msgfilter´ work in an UTF-8 locale, by using the LC_ALL environment variable.

Takže bych měl postupovat takhle:
"msgconv.exe -t UTF-8 -i X1.po -o X2.po"
"msgfilter.exe -i X2.po -o X3.pot true"

Problém je že nevím co je to"LC_ALL" a jak pomocí toto nastavit UTF-8 pro msgfilter.exe ve Windows.
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Lol Phirae 01. 05. 2017, 11:09:04
Proto bych chtěl použít jenom nástroje GNU gettext utilities.

Tak si nainstaluj do virtuálu Linux a nevymejšlej kokotiny.
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Unknown 01. 05. 2017, 11:27:51
Unknown: K programu ENCA, jsem nenašel žádnou dokumentaci jak ho použít.
'enca --help' nefunguje?

enca.exe -L <jazyk_souboru> soubor.txt
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Unknown 01. 05. 2017, 11:29:33
Proto bych chtěl použít jenom nástroje GNU gettext utilities.

Tak si nainstaluj do virtuálu Linux a nevymejšlej kokotiny.

To mu nejak pomuze naucit se pouzivat gettext?
Název: Re:GNU gettext Smazaní překladu
Přispěvatel: Lol Phirae 01. 05. 2017, 12:09:16
To nevím, ale určitě nebude muset řešit hovadiny typu jak to překódovat z Windows-1250. Jinak celý zamýšlený "modus operandi" jsem absolutně nepochopil, překládat věc tak, že pokaždé, když se aktualizuje originál, tak ten překlad smažu a udělám to celé znova, to snad může dělat pouze šílenec.