Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: noname 30. 11. 2013, 14:13:46
-
Zdravím všechny.
Před nějakou dobou jsem si začal hrát s Qt a mám v něm udělaný jeden malinký prográmek (formulář s osobními údaji). Když jsem jej ale přeložil, popisky u polí pro vložení údajů QLabel ukazovaly nesmyslné znaky, u čehož jsem celkem rychle pochopil, že projekt nemám uložen v UTF 8. Po převedení souboru s definicí do UTF 8 jsem se bohužel nedočkal požadovaného výsledku opravy všech znaků, což jsem vyřešil pomocí funkce na tomto odkazu http://www.abclinuxu.cz/poradna/linux/show/47664 . Jelikož jsem ale chtěl podporu internacionalizace pomocí funkce tr(), tak jsem musel řešení trošičku poupravit, takže výsledný kód pro zápis parametru do QLabel vypadá nějak takto: nameLabel = new QLabel(tr(QString::fromLocal8Bit("Jméno: ").toStdString().c_str()));. Každopádně řešení, které jsem tady vymyslel mi přijde příliš zdlouhavé na použití pro každý label, navíc musím zbytečně vkládat další knihovnu. Víte o něčem lepším, ideálně čistě s Qt? Bohužel se mi nepodařilo nic moc kloudného najít. Poznámka: využívám Qt 4.8, kvůli většímu množství dostupných informací.
Děkuji všem předem za odpovědi.
-
PS: Vyzkoušel jsem některé znaky z české klávesnice a zjistil jsem, že je to nepřekládá, přestože soubory jsou po otevření čitelné v českém jazyce. Pomocí
file -bi "jméno souboru" jsem zjistil, že jsou některé uloženy jako us-ascii. Co se čtení (zkoušel jsem gedit) týče, jsou v pořádku, ale v Qt mi to z nějakého důvodu nepřekládá korektně. Nevíte tedy o nějaké alternativě?
-
Důvod, proč mi to korektně nepřekládá je, že využívám std::string ...
... jen pokud by někdo někdy narazil na podobný problém...
-
V kazdom pripade:
ujasnit si, ako chces mat tie subory ulozene, lebo spominas 3 veci:
v prvom prispevku: "pochopil som, ze nemam projekt v UTF-8"
v druhom prispevku: nieco je v "ascii"
v prvom prispevku: pouzivas fromLocal8Bit - cize, akokeby si mu chcel vyrobit string z ISO-8859-2 (co je pod Linuxom rozumne, 8bitove kodovanie pre cestinu). Keby si mal UTF-8, tak by to asi chcelo fromUtf8, nie?
cize, prekonvertuj (iconv, alebo enconv, alebo co chces) si vsetky subory do jednotneho kodovania, a uvidis...najlepsie asi ozaj do UTF-8, lebo to je aj default pre gcc, aj preprocessor, a tak...
Co sa tyka "prilis zdlhave", "dalsia kniznica": podla mna, predcasna optimalizacia. Ak odmerias, ze tvoj projekt spomaluje prave toto, tak sa nad tym zamysli... Inak, podla mna, to teda netreba riesit...
-
Aha, a este k optimalizacii...
ak to bude vsetko v UTF-8,
tak nestacilo by namiesto
nameLabel = new QLabel(tr(QString::fromLocal8Bit("Jméno: ").toStdString().c_str()));
(teda, ked uz, ako som spominal skor:
nameLabel = new QLabel(tr(QString::fromUtf8("Jméno: ").toStdString().c_str()));
)
mat len jednoducho
nameLabel = new QLabel(tr("Jméno: "));
?
:-)
-
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
trUtf8("řetěžeč");
-
Děkuji za všechny odpovědi. Byly velice podnětné a všechny jsem využil. Převod do utf-8 jsem provedl podle doporučení diskutéra "monitor". (Pro ověření převodu jsem využil utilitu file s přepínačem -i.) Nejvíce mi ale pomohl příspěvek p. Petra Bravence, po jehož aplikaci fungovalo vše naprosto dokonale. Dokonce jsem zjistil (když jsem si s znovu hrál s programem a zkoušel znovu vyvolat chybu) že mi vše funguje i pouze s funkcemi trUtf8() oproti dříve použitým tr() a naopak že při nastavení kodeku pro funkci tr() pomocí QTextCodec::setCodecForTr() (zavolal jsem ji hned po inicializaci proměnné typu QApplication ve funkci main()) fungují správně i labely, které jsem zapoměl přepsat na trUtf8(). Poslední rada byla tedy úplně super i pro případ drobné chybky v programu.
Díky za rady!