Masintõlge, mida emakeelne kõneleja pole üle vaadanud. Võrdlusallikaks on ingliskeelne versioon.

AlustamineGitHubis veel mitteAllikas: docs/i18n.md

Mootori lokaliseerimine

Mootori inimesele mõeldud tekst on 17 keeles lisaks inglise keelele: nl, pl, pt-BR, pt-PT, fi, sv, da, nb, cs, uk, ru, de, fr, es, et, ja, zh-Hans. Inglise keel on allikas; en-XA on pseudolokaal, mis rõhutab, sulgudesse paneb ja täidab iga teate, nii et test näeb, kas tekst kolis kataloogi. Raamistik on Project Fluent (fluent-bundle, unic-langid); kood on src/i18n/.

Mis on lokaliseeritud ja mis mitte kunagi#

Lokaliseeritud (inimene loeb) Mitte kunagi lokaliseeritud (programm loeb)
käsurea teated ja vead JSON-võtmed ja -väärtused failides result.json ja report.json
iga käivituse kokkuvõtterida CSV päised ja read
SVG-diagrammide tekst (pealkirjad, teljed, legendid, kirjeldused) failinimed
report.html: pealkirjad, tabelid, märkused, kirjeldused veakoodid (E-CLOCK-VERSION)
otsusesõnad (VALIDATED, MODELLED, PARTIAL) kontrollimaatriks, ühikute definitsioonid, päritolu
stsenaariumi liikide kirjeldused (list_kinds(lang))
nõuanded, vastutusest loobumised ja teated (engine-legal-*) samad tekstid JSON-is, mis jäävad inglise keelde
report.html iq kampaaniast, uuringute võrdluslehelt, võrdlusaluse edetabelilt, vastupidavusaruandest summary.html tõendipaketist ja observatooriumi PNG-st: mõlemad räsitakse manifesti (paketi oma on ka allkirjastatud), seega ehitatakse need inglise keeles, olenemata keelest

Arvud inimesele mõeldud tekstis kasutavad keele kümnendmärki (koma 15 keeles 18-st; punkt keeltes en, ja, zh-Hans ja en-XA). Arvud masinfailides kasutavad alati punkti. Loendus (muutuja nimega n, count, n_*, num_* või *_count) jõuab Fluentini arvuna, seega tõlge võib kirjutada { $n -> [one] ... [few] ... *[other] ... }.

Keele valimine#

  • Käsurida: --lang <tag>, seejärel KSHANA_LANG, LC_ALL, LC_MESSAGES, LANG, seejärel inglise keel. pt on pt-BR; ainult pt-PT on Portugali oma. zh on lihtsustatud; traditsiooniline lükatakse tagasi toetatud siltide loendiga.
  • Teek: api::run_toml_lang(toml, lang), run_toml_bilingual, run_toml_human, run_scenario_lang, list_scenario_kinds_json_lang(lang).
  • Python: lang=None kutsetel run, run_full, run_typed, validate_toml, error_kind, list_kinds, scenario_kinds; run_human(toml, lang); error_info(toml, lang).
  • WebAssembly: valikuline lõpus olev lang kutsetel run_typed, run, chart_svg, summary, table_csv, run_all, error_kind, list_kinds, scenario_kinds; run_human(toml, lang); error_info(toml, lang); register_catalogue(tag, ftl_text).
  • MCP: lang kutsetel run_scenario ja list_scenario_kinds.

Vead ja nende koodid#

Igal veateatel on stabiilne kood, teate id suurtähtedega (e-clock-version on E-CLOCK-VERSION), sama igas keeles. Ingliskeelne käsurea tekst on muutumatu. Muus keeles on rida text [E-CODE]; võtmega --verbose järgneb igas keeles teine rida code: E-CODE. API annab KshanaError::code() ja error_info ({kind, code, message}); MCP vead kannavad {kind, code, message} veaandmetena. Sobita koodi järgi, mitte kunagi teksti järgi.

Kuidas käivitus muus keeles töötab (kahekordse käivituse reegel)#

Masinfail ei tohi sõltuda keelest. Käivitus muus keeles täidab seetõttu stsenaariumi kaks korda: ühe korra inglise keeles, mille result.json, report.json ja CSV on masinfailid, ning ühe korra kasutaja keeles kokkuvõtte, diagrammi ja report.html jaoks. Inglise keel on üks käivitus, bait baidi haaval selline, nagu see enne oli.

Mõõdetud, natiivne, väljalaske ehitus, inglise keel ja seejärel --lang de (sekundites): leo-navmsg-fit-interval-trade 9,2 -> 17,9, cislunar-arc-recovery 7,8 -> 14,1, lunar-station-coverage 7,8 -> 15,0, clock-ensemble 5,8 -> 11,6, leo-navmsg-model-comparison 5,1 -> 10,5, leo-ppp-convergence 2,8 -> 6,2; iga muu kaasasolev stsenaarium on alla 4 s; mõõtmise ajal kaasasolevad 173 stsenaariumi võtsid inglise keeles kokku 64 s. Hind on teise keele jaoks täpselt kahekordne. WebAssemblyt ei mõõdetud (siin pole wasm-bindgenit); brauseri teguri umbes 4 juures on see aeglaseima liigi puhul minut.

Leht väldib ootamist, näidates kohe ingliskeelset tulemust ja kutsudes seejärel run_human(toml, lang): see on ainult teine käivitus, see tagastab {summary, svg} ja Studio võib öelda „tõlgin...“, kuni see saabub.

0,41 ülesanne: üks käivitus. Renderda mõlemad kirjest (message id, arguments). See hinnati ja jäeti ehitamata: t! tulemusi kontrollitakse, mõõdetakse ja räsitakse pärast nende tegemist (diagrammi teksti laiused, päritolu räsid väljundteksti üle) ning num() vormindab kutsekohas, seega kirje paneks kohatäidete märgendid masinfailidesse ja teeks nende baidid sõltuvaks taasesitusest. See vajab märgendeid tagastavaid t!/num, lõpetajat igas kirjutajas ja baidiidentsuse tõestust iga kirjutaja kohta.

WebAssembly#

Wasm-ehitus kannab ainult ingliskeelset kataloogi. Ülejäänud kuusteist lisaksid umbes 150 kB gzip igaüks. Leht tõmbab keelevalikul i18n/<lang>/engine.ftl ja kutsub register_catalogue(tag, text); kui tõmbamine või registreerimine ebaõnnestub, jääb leht inglise keelde. Natiivselt kannavad käsurida ja Pythoni wheel kõiki 18.

Suurus, optimeerimata .wasm käsust cargo build --release --target wasm32-unknown-unknown --features wasm --lib (enne wasm-bindgenit ja wasm-opti), alus bc04e98f versus see haru: 18,71 MB -> 19,88 MB toorelt, 5,43 MB -> 5,79 MB gzip, +357 kB gzip. Ingliskeelne kataloog on 521 kB toorelt, sellest 153 kB gzip; ülejäänu on fluent-bundle ja selle sõltuvused. See on aktsepteeritud nii, nagu mõõdetud.

Kataloog#

i18n/<tag>/engine.ftl hoiab teateid, id-d prefiksiga engine-. i18n/en/engine.ftl on allikas; teised failid on tõlkijate omad ja neis võib teateid puududa (iga puuduv langeb teate kaupa tagasi inglise keelele). Kaaslastega loendid kaustas i18n/en/: engine-counts.txt (loendusmuutujatega teated, mitmuse vormide jaoks), engine-numbers.txt (arvud, mis antakse edasi kohatäidetena), engine-fragments.txt (teated, mis on käitusajal kokku pandud lause osad: need tuleb liita tervelauseteadeteks ja neid ei tohi juurde tulla).

Testid#

tests/i18n_catalogue.rs tõestab inglise keelt: igal teatel on salvestatud algne mall ja see renderdub täpselt selleks tekstiks; iga id on kasutusel; muutujad klapivad; pseudolokaal renderdab iga teate. i18n_api.rs, i18n_kinds.rs, i18n_legal.rs katavad sisendpunktid, liikide kirjeldused ja õiguslikud tekstid. i18n_ratchet.rs ebaõnnestub, kui uus stringliteraal, mida inimene loeks, möödub kataloogist: failipõhine lubatud hulk failis tests/fixtures/i18n/allow.json, mis võib väheneda ja mitte kunagi kasvada. scripts/i18n_compare.py käivitab terved stsenaariumid baasbinaariga ja praegusega ning võrdleb iga väljundfaili.

Kuidas stringi kataloogi viia: docs/design/i18n-migration.md.

Sõltuvused ja litsentsid#

Raamistik lisab fluent-bundle 0,16 (Apache-2.0 OR MIT) ja unic-langid 0,9 (MIT OR Apache-2.0) koos nende transitiivsete crate'idega: fluent-syntax ja fluent-langneg (Apache-2.0 OR MIT), intl-memoizer (Apache-2.0 OR MIT), intl_pluralrules (Apache-2.0/MIT), type-map (MIT/Apache-2.0), self_cell (Apache-2.0 OR GPL-2.0-only: kasutatakse Apache-2.0 alternatiivi, mida deny.toml lubab), tinystr ja zerovec (Unicode-3.0), rustc-hash, smallvec, thiserror, displaydoc (MIT OR Apache-2.0). Kõik on lubavad loendi allow alusel failis deny.toml; thiserror esineb kahes versioonis (1 ja 2), millest multiple-versions = "warn" ainult teatab. Litsentside loend loeti käsust cargo metadata; cargo deny check ei ole koostekeskkonnas installitud ja töötab integratsiooni CI-s.