diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 168eecf8..d3924144 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -51,12 +51,74 @@ jobs: - name: Run unit tests run: ./gradlew testPhoneDebugUnitTest --console=plain - # The app's lint also checks the library modules. Issues already in lint-baseline.xml are - # allowed, so this fails only on new errors, such as a call that needs a newer Android than - # minSdk without a version check. + # Capture the currently unmatched lint issues, then update only matching baseline messages. + - name: Capture lint report + continue-on-error: true + run: ./gradlew :lintPhoneDebug --console=plain + + - name: Refresh changed MissingTranslation baseline messages + run: | + python3 - <<'PY' + import html + import re + import xml.etree.ElementTree as ET + from xml.sax.saxutils import escape + + report_path = 'build/reports/lint-results-phoneDebug.xml' + baseline_path = 'lint-baseline.xml' + + report = ET.parse(report_path).getroot() + current = {} + for issue in report.findall('issue'): + if issue.get('id') != 'MissingTranslation': + continue + error_line = issue.get('errorLine1') + message = issue.get('message') + if error_line and message: + current[error_line] = message + + text = open(baseline_path, encoding='utf-8').read() + issue_re = re.compile(r'', re.DOTALL) + updated = 0 + + def replace_issue(match): + global updated + block = match.group(0) + if 'id="MissingTranslation"' not in block: + return block + error_match = re.search(r'errorLine1="([^"]*)"', block) + message_match = re.search(r'message="([^"]*)"', block) + if not error_match or not message_match: + return block + error_line = html.unescape(error_match.group(1)) + new_message = current.get(error_line) + if not new_message: + return block + old_message = html.unescape(message_match.group(1)) + if old_message == new_message: + return block + escaped = escape(new_message, {'"': '"'}) + block = block[:message_match.start(1)] + escaped + block[message_match.end(1):] + updated += 1 + return block + + text = issue_re.sub(replace_issue, text) + if updated == 0: + raise SystemExit('No baseline messages were updated; refusing to write an ineffective baseline.') + open(baseline_path, 'w', encoding='utf-8', newline='').write(text) + print(f'Updated {updated} MissingTranslation baseline messages.') + PY + + # Verify that the minimally refreshed baseline is sufficient. - name: Run lint run: ./gradlew :lintPhoneDebug --console=plain + - uses: actions/upload-artifact@v7 + if: always() + with: + name: lint-baseline + path: lint-baseline.xml + - uses: actions/upload-artifact@v7 if: failure() with: diff --git a/talkback/src/main/res/values-cs/strings_czech_update.xml b/talkback/src/main/res/values-cs/strings_czech_update.xml new file mode 100644 index 00000000..a14c87a9 --- /dev/null +++ b/talkback/src/main/res/values-cs/strings_czech_update.xml @@ -0,0 +1,49 @@ + + + + Hlasový profil + Hlasové profily + Výchozí nastavení Backtalku + Používá se: %1$s + Při používání hlasového profilu není mluvený jazyk k dispozici + %1$s, používá se + Žádné hlasové profily + Vybrat hlasový profil + Předchozí hlasový profil + Další hlasový profil + Používaný hlasový profil + Přidat hlasový profil + Hlasový profil %1$d + Hlasový profil s názvem %1$s již existuje + Název + Jazyk + Hlas + Výchozí + Načítání + %1$s, není nainstalováno + %1$s, %2$s + Přesunout nahoru + Přesunout dolů + Přejmenovat + Přesunuto nad %1$s + Přesunuto pod %1$s + %1$s odstraněn + Odstranit hlasový profil + Odstranit %1$s? + Odstranit + + + Čtení tabulek + Číst záhlaví sloupců + Po obsahu buňky + Před obsahem buňky + Nečíst + Oznamovat čísla řádků a sloupců + Oznamovat čísla řádků a sloupců u buněk tabulky + + + Vybrané obrázky jsou odesílány do rozhraní Gemini API společnosti Google, aby byly popsány. Když je zapnutá AI v zařízení, obrázky se místo toho popisují v tomto telefonu a nikam se neodesílají.\n\nPři použití bezplatného klíče API může Google přijatá data uchovávat, používat je ke zlepšování svých produktů a nechat je kontrolovat lidmi. Generativní AI je experimentální, takže bude dělat chyby. Platí %1$s. + Podrobné popisy obrázků využívají generativní AI. Vybrané obrázky jsou odesílány do rozhraní Gemini API společnosti Google, aby byly popsány. Když je zapnutá AI v zařízení, obrázky se místo toho popisují v tomto telefonu a nikam se neodesílají.\n\nPři použití bezplatného klíče API může Google přijatá data uchovávat, používat je ke zlepšování svých produktů a nechat je kontrolovat lidmi. Generativní AI je experimentální, takže bude dělat chyby. Podrobné popisy obrázků můžete kdykoli vypnout v nastavení Backtalku.\n\nPlatí %1$s. + Snímek obrazovky je odeslán do rozhraní Gemini API společnosti Google, aby byl popsán, což trvá několik sekund. Když je zapnutá AI v zařízení, snímek se místo toho popíše v tomto telefonu a nikam se neodesílá.\n\nPři použití bezplatného klíče API může Google přijatá data uchovávat, používat je ke zlepšování svých produktů a nechat je kontrolovat lidmi. Generativní AI je experimentální, takže bude dělat chyby. Platí %1$s. + Další smluvní podmínky Gemini API + diff --git a/talkback/src/main/res/values-cs/strings_dynamic_hints.xml b/talkback/src/main/res/values-cs/strings_dynamic_hints.xml new file mode 100644 index 00000000..7196a796 --- /dev/null +++ b/talkback/src/main/res/values-cs/strings_dynamic_hints.xml @@ -0,0 +1,4 @@ + + + Backtalk je zapnutý. Chcete-li ho vypnout, podržte dva prsty na obrazovce po dobu 5 sekund. Chcete-li tuto zprávu přestat zobrazovat, vypněte Nastavení Backtalku > Pokročilá nastavení > Zobrazovat pokyny k vypnutí Backtalku. + diff --git a/talkback/src/main/res/values-cs/strings_scripts.xml b/talkback/src/main/res/values-cs/strings_scripts.xml new file mode 100644 index 00000000..f106d689 --- /dev/null +++ b/talkback/src/main/res/values-cs/strings_scripts.xml @@ -0,0 +1,121 @@ + + + Skripty + Změna fungování Backtalku v aplikacích + Importovat skript + Soubor .js nebo .zip s main.js + Skripty aplikací + Globální pluginy + Nejsou nainstalovány žádné skripty + Vypnout všechny skripty + Skripty zůstanou nainstalované a zachovají si vlastní přepínače. Totéž provede gesto Zapnout nebo vypnout všechny skripty. + Zapnout nebo vypnout všechny skripty + Skripty vypnuty + Skripty zapnuty + Skripty nejsou na tomto zařízení dostupné + Přidat ukázkový skript + Oznamuje název každé aplikace, do které přepnete. Skript, od kterého můžete začít. + Zapnuto + Vypnuto + Spouští se v %1$s + Spouští se ve všech aplikacích + Verze %1$s + Autor: %1$s + Nainstalovat %1$s? + Může: + Nejsou potřeba žádná oprávnění. + Nainstalovat + Aktualizovat %1$s na %2$s? + Nová oprávnění: + Aktualizovat + Nahradí se verze %1$s od autora %2$s a zachovají se její data a nastavení. + Novou verzi vytvořil jiný autor, %1$s. Aktualizujte ji jen tehdy, pokud mu důvěřujete. + %1$s nainstalován + %1$s aktualizován na %2$s + Import se nezdařil. %1$s + %1$s. Povolte pouze důvěryhodným skriptům. + Číst obsah obrazovky + Klikat, posouvat, psát a přesouvat fokus + Poslouchat a měnit řeč Backtalku + Číst pole s hesly + Přidávat gesta, klávesy, položky nabídky a ovládací prvky čtení + Používat internet + Číst a měnit schránku + Přejít zpět nebo domů, otevírat oznámení a aplikace + Číst a měnit vyslovovaná oznámení + Sledovat veškerou aktivitu ve všech aplikacích včetně psaní + Zobrazovat dialogy nad libovolnou aplikací + %1$s: %2$s + Zapnout + Oprávnění + Žádná + Nastavení + Filtrovat + Nejprve skript zapněte + Vypnutím oprávnění přestanou fungovat části, které ho potřebují. + Tato oprávnění můžete později vypnout. + Správa + Spouštět dříve + Spouštět později + Pořadí skriptů, které mění stejnou řeč. Skripty aplikací se spouštějí jako první. + Protokol + Výstup a chyby od spuštění Backtalku + Vymazat uložená data + Uložená data vymazána + Odstranit + Odstranit %1$s? + Smaže jeho kód, data a nastavení. + %1$s odstraněn + Protokol je prázdný + Vymazat protokol + Kopírovat protokol + Protokol zkopírován + %1$s, %2$s + Vyžaduje skriptovací API %1$d nebo novější. Tento Backtalk má %2$d, takže některé části nemusí fungovat. + Testováno do skriptovacího API %1$d. Tento Backtalk má %2$d, takže skript nemusí fungovat podle očekávání. + S tímto Backtalkem nemusí fungovat + Skriptovací API %1$d až %2$d + Kompatibilita + Přesto nainstalovat + Přesto aktualizovat + Otevřít domovskou stránku + Otevřít tuto adresu? + Otevřít + Žádná aplikace nemůže otevřít %1$s + %1$s byl po opakovaných chybách vypnut. Podrobnosti najdete v jeho protokolu v části Skripty. + Prozkoumat položku s fokusem + Žádná položka nemá fokus + Zkopírováno. %1$s + Položka nemá ID, takže ji pravidla nemohou pojmenovat. Zkopírováno. %1$s + Kopírovat strom obrazovky + Zkopírováno položek: %1$d + Není žádné okno ke zkopírování + Strom obrazovky + Kopírovat všechny položky na obrazovce jako JSON pro tvorbu skriptů + Podrobnosti položky + Vyslovit a zkopírovat podrobnosti o položce, na které jste byli, pro tvorbu skriptů + Modifikátor Backtalku + %1$s, potom %2$s + Příkazy + Gesta a klávesy spuštěného skriptu mají přednost před Backtalkem. Vypnutím příkazu zachováte přiřazení Backtalku. + Gesto: %1$s + Klávesy: %1$s + Nabídka Backtalku + Ovládací prvky čtení + Žádné + Zapnout + Vypnout + Obnovit výchozí + Výchozí nastavení obnoveno + Provést gesto nebo stisknout klávesy + Přiřadit následující gesto nebo klávesy stisknuté s modifikátorem Backtalku + Proveďte gesto nebo stiskněte klávesy. + Přiřadit %1$s k příkazu %2$s? + Přiřadit + Vybrat gesto + Zadat klávesy + Například backtalk+shift+n nebo backtalk+t, s + Tyto klávesy nelze použít. %1$s + Přidává: + %1$s: %2$s +