Ploopy po DIY trackballech či sluchátkách představuje nový externí DIY trackpoint se čtyřmi tlačítky Bean. Obsahuje snímač Texas Instruments TMAG5273, spínače Omron D2LS-21 a řadič RP2040, používá firmware QMK. Schémata jsou na GitHubu; sadu lze předobjednat za 69 kanadských dolarů (bez dopravy a DPH).
Mozilla před dvěma týdny na svém blogu oznámila, že díky Claude Mythos Preview bylo ve Firefoxu nalezeno a opraveno 271 bezpečnostních chyb. Včera vyšel na Mozilla Hacks článek s podrobnějšími informacemi. Z 271 bezpečnostních chyb mělo 180 chyb vysokou závažnost, 80 chyb střední závažnost a 11 chyb nízkou závažnost. Celkově bylo v dubnu ve Firefoxu opraveno 423 bezpečnostních chyb. Čísla CVE nemusí být přiřazována jednotlivým chybám. CVE-2026-6784 například představuje 154 bezpečnostních chyb.
Před týdnem zranitelnost Copy Fail. Dnes zranitelnost Dirty Frag. Běžný uživatel může na Linuxu získat práva roota (lokální eskalaci práv). Na většině linuxových distribucí vydaných od roku 2017. Aktuálně bez oficiální záplaty a CVE čísla [oss-security mailing list].
Ačkoli je papež Lev XIV. hlavou katolické církve a stojí v čele více než miliardy věřících po celém světě, také on někdy řeší všední potíže. A kdo v životě neměl problémy se zákaznickou linkou? Krátce poté, co nastoupil do úřadu, musel papež se svou bankou řešit změnu údajů. Operátorka ale nechtěla uvěřit, s kým mluví, a Svatému otci zavěsila.
Incus, komunitní fork nástroje pro správu kontejnerů LXD, byl vydán ve verzi 7.0 LTS (YouTube). Stejně tak související LXC a LXCFS.
Google Chrome 148 byl prohlášen za stabilní. Nejnovější stabilní verze 148.0.7778.96 přináší řadu novinek z hlediska uživatelů i vývojářů. Vypíchnout lze Prompt API (demo) pro přímý přístup k AI v zařízení. Podrobný přehled v poznámkách k vydání. Opraveno bylo 127 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Richard Hughes oznámil, že po společnostech Red Hat a Framework a organizacích OSFF a Linux Foundation, službu Linux Vendor Firmware Service (LVFS) umožňující aktualizovat firmware zařízení na počítačích s Linuxem, nově sponzorují také společnosti Dell a Lenovo. Do dnešního dne bylo díky LVFS provedeno více než 145 milionů aktualizací firmwarů od více než 100 různých výrobců na milionech linuxových zařízení.
Americké technologické společnosti Microsoft, Google a xAI souhlasily, že vládě Spojených států poskytnou přístup k novým modelům umělé inteligence (AI) před jejich uvedením na trh. Oznámila to americká vláda, která tak bude moci prověřit, zda modely nepředstavují hrozbu pro národní bezpečnost. Oznámení podtrhuje rostoucí obavy Washingtonu z rizik spojených s výkonnými AI systémy. Americké úřady chtějí v rámci předběžného přístupu
… více »Společnost Valve zveřejnila (GitLab) nákresy ovladače Steam Controller a puku. Pro všechny, kdo by jej chtěli hacknout nebo modifikovat, případně pro ně navrhnout nějaké příslušenství. Pod licencí Creative Commons (CC BY-NC-SA 4.0).
PHP bylo dlouho distribuováno pod vlastní licencí – s výjimkou částí spadajících pod licenci Zend Engine. Po několikaleté práci se povedlo PHP přelicencovat na 3bodovou licenci BSD.
Minulé pojednání jsem věnoval systému lokalizace přes PO soubory. Toto je věnováno dalšímu systému lokalizace, který používá např. KDE a další aplikace založené na Qt knihovnách.
Lokalizační soubory s příponou ts používá jako výchozí zdroj pro překlady Qt. V podstatě je to XML dokument ve kterém se - na rozdíl od po souboru - každý řetězec vyskytuje v určitém kontextu. Znamená to v podstatě tolik, že zatím co u lokalizace přes gettext stačí přeložit původní řetezec pouze jednou a systém pak nahrazuje u aplikace všechny jeho výskyty jedním překladem, tak v případě ts je nutno přeložit každý řetězec samostatně. Má to však i svou výhodu. Pro různý kontext lze použít různý překlad téhož řetězce originálního textu, kdežto u po je třeba dobře promyslet nejenom obsah překládaného ale i cílového textu. (Možná si někteří vzpomenou na žabomyší spor, který se týkal překladu tlačítka "Budiž" v Gnome)
Výchozí ts soubor se generuje podobně jako u gettextu z předhozeného seznamu souborů
lupdate `find ./zdroj_programu -type f | egrep -e '(c$|h$|cpp$)'` -ts soubor_k_překladu.ts
Hotový překlad se pak převede do binární formy, což je soubor, který má příponu qm. A to tak že buď otevřu .ts soubor v aplikaci linguist a zvolím v menu Soubor -> Release, nebo jej převedu konzolovým nástrojem lrelease
Na rozdíl od gettextu, lokalizace přes Qt nemá pevně dané umístění lokalizačních souborů, ani jejich pojmenování. Zpravidla záleží na programátorovi, kde bude aplikace tyto soubory hledat a pod jakým názvem.
S qm soubory se nejspíš setkáte v adresářích jednotlivých aplikací v /usr/share ale není to pravidlem. Například poměrně známá aplikace Scribus si je rve do adresáře /usr/lib (fuj!). Také pojmenování bývá rozmanité. někdy je místo názvu jen kód cílového jazyka. Někdy je kód jazyka mezi názvem aplikace a příponou qm, atd.
Jak už jsem naznačil u po souborů, u ts je výhodou že u řetězce zůstává zachován kontext, a tak překlad může být výstižnější. Na druhou stranu se snadno může stát, že se na nějaký řetězec pozapomene. Dosti výraznou nevýhodou je fakt, že z qm verzí Qt>=3 se ts soubor zpátky vykuchat nedá.
Tiskni
Sdílej:
find a spol a shellové gymnastiky nabízí Trolltech čistší řešení:
do projektového souboru (mujprojekt.pro) dát toto:TRANSLATIONS += preklad_cs.ts \ preklad_de.ts \ preklad_ru.ts \ preklad_ar.ts
lupdate mujprojekt.pro, a protože v .pro souboru je vždy seznam všech zdrojáků (a ten .pro soubor se seznamem se dá vygenerovat pomocí spuštění qmake -project v projektovém adresáři), tak lupdate ví, odkud má překládané řetězce extrahovat a které překladové soubory vytvořit (nebo updatovat). A s releasem (vytvořením binárních .qm variant) je to stejné:
lrelease mujproject.pro
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTranslator translator;
translator.load("mujprogram_cs");
app.installTranslator(&translator);
...
}
A pokud se předpokládá LC_LANG-aware chování, tak prostě:
...
translator.load(QString ("mujprogram_") + QLocale::system().name());