|
Dokumentace
Rezervovat demoPlatforma
PlatformaMCPCLIAPIWorkflows
NávodyChangelog

Průběžná lokalizace

  • Jak to funguje
  • Nastavení

Platformy

  • GitHub App
  • GitHub Actions
  • GitLab CI/CD
  • Bitbucket Pipelines
  • Pokročilé postupy

GitHub App

GitHub App od Lingo.dev nastaví pro repozitář průběžnou lokalizaci pomocí .lingo/config.json.

Požadavky#

Před instalací aplikace se ujistěte, že máte:

  • Organizaci Lingo.dev s aktivní funkcí integrace s GitHubem
  • lokalizační engine v této organizaci
  • Administrátorský přístup k organizaci nebo repozitáři na GitHubu, které chcete připojit

Pokud nejste administrátorem organizace na GitHubu, můžete místo toho požádat o instalaci. Než Lingo.dev získá přístup k vybraným repozitářům, musí tuto žádost schválit administrátor organizace na GitHubu.

Připojení GitHub App#

  1. V Lingo.dev otevřete svou organizaci.
  2. Přejděte do Settings.
  3. V sekci integrací najděte GitHub (App).
  4. Na řádku GitHub (App) klikněte na Connect.
  5. Na GitHubu vyberte účet nebo organizaci, do kterých chcete aplikaci nainstalovat.
  6. Vyberte buď All repositories, nebo Only select repositories.
  7. Klikněte na Install.

Po instalaci Lingo.dev v Settings > GitHub (App) zobrazí připojený účet GitHub a repozitáře. Pokud budete později potřebovat repozitáře přidat nebo odebrat, použijte ve stejné kartě nastavení možnost Manage repositories on GitHub.

Pokud vaše žádost o instalaci čeká na schválení, administrátor GitHubu ji může zkontrolovat na GitHubu v části organizace Settings > GitHub Apps. GitHub také zobrazuje čekající žádosti o aplikace vlastníkům organizace v nastavení organizace.

Přidání konfigurace repozitáře#

V repozitáři, do kterého jste aplikaci nainstalovali, vytvořte soubor .lingo/config.json:

json
{
  "engineId": "eng_abc123",
  "sourceLocale": "en",
  "targetLocales": ["es", "fr", "de"],
  "files": [
    { "pattern": "docs/en/**/*.md" },
    { "pattern": "docs/en/**/*.mdx" },
    { "pattern": "locales/en.json" }
  ],
  "github": {
    "workflows": {
      "onPushToDefaultBranch": { "enabled": true },
      "onPullRequest": { "enabled": true }
    },
    "safety": {
      "requireApproval": false
    }
  }
}
PolePovinnéPopis
engineIdAnoLingo.dev engine, který má tento repozitář překládat.
sourceLocaleAnoZdrojový jazyk používaný v cestách ke zdrojovým souborům, například en nebo en-US.
targetLocalesAnoKódy jazyků, do kterých se má překládat. Podporováno je až 50 jedinečných jazyků.
filesAnoVzory zdrojových souborů relativní vůči repozitáři. Podporováno je až 100 vzorů.
github.workflows.onPushToDefaultBranch.enabledNeSpustí se při změně zdrojových souborů ve výchozí větvi. Ve výchozím nastavení je aktivní.
github.workflows.onPullRequest.enabledNeSpustí se při změně zdrojových souborů v pull requestech. Ve výchozím nastavení je neaktivní.
github.safety.requireApprovalNeVyžaduje schválení, než automatické push nebo PR workflow spustí překlad. Ve výchozím nastavení je neaktivní.

Vzory souborů#

Vzory files odkazují na zdrojové soubory (ve výchozím jazyce). Aplikace porovnává změněné soubory s těmito vzory a zpracuje jen podporované zdrojové soubory, které odpovídají.

Vzory jsou relativní vůči repozitáři, rozlišují velikost písmen a mohou používat:

  • * pro shodu v rámci jednoho segmentu cesty
  • **/ pro shodu v libovolné hloubce adresářů

Vzory nemohou začínat na / a nemohou obsahovat ...

json
{
  "files": [
    { "pattern": "docs/en/**/*.md" },
    { "pattern": "src/content/en/**/*.mdx" },
    { "pattern": "messages/en.jsonc" }
  ]
}

Možnosti souborů#

Každá položka v files může kromě svého pattern obsahovat i další možnosti. Všechny jsou nepovinné a každá se vztahuje jen na určité formáty.

MožnostPlatí proPopis
formatVšechnyPřepíše formát odvozený z přípony souboru. Pro OpenAPI YAML ("yaml-openapi") je povinné.
include / excludeVšechnySeznamy globů, které upřesňují, kterým souborům položka odpovídá. Používají se spolu s pattern nebo místo něj.
translateFrontmatterFieldsMarkdown, MDX, MarkdocKlíče frontmatteru k překladu. Ve výchozím nastavení title a description.
translateComponentPropsMDX, MarkdocProps komponent MDX a atributy tagů Markdoc, které se mají překládat.
lockedKeysJSON, JSONCCesty ke klíčům, které zůstávají ve zdrojové hodnotě a nikdy se nepřekládají.
preservedKeysJSON, JSONCCesty ke klíčům, které zůstávají na existující cílové hodnotě a znovu se nepřekládají.
injectLocaleJSON, JSONCZapíše kód cílového jazyka do výstupu pod zadaným klíčem (výchozí je language).

Položky translateComponentProps jsou buď názvem propu, který platí pro daný prop u libovolné komponenty nebo tagu, nebo objektem, který omezuje props na pojmenované komponenty nebo tagy:

json
{
  "files": [
    {
      "pattern": "src/content/en/**/*.mdx",
      "translateFrontmatterFields": ["title", "description"],
      "translateComponentProps": [
        "alt",
        { "component": ["Callout", "Hero"], "props": ["title", "subtitle"] }
      ]
    },
    {
      "pattern": "locales/en.json",
      "lockedKeys": ["app.version"],
      "injectLocale": { "enabled": true, "key": "language" }
    }
  ]
}

Kam se zapisují lokalizované soubory#

Aplikace odvodí každou cílovou cestu ze zdrojové cesty a kódů jazyků ve vaší konfiguraci:

Zdrojová cestaCílový jazykVýstupní cesta
docs/en/guide.mdesdocs/es/guide.md
docs/en-US/guide.mdfr-FRdocs/fr-FR/guide.md
locales/en.jsondelocales/de.json
README.mdeses/README.md

Jako kód jazyka použijte celý název adresáře nebo souboru. Pokud například zdrojové soubory leží v docs/en-US/, nastavte "sourceLocale": "en-US", ne "en". Pokud zdrojové řetězce leží v messages/en.json, nastavte "sourceLocale": "en".

Když zdrojová cesta obsahuje adresář s názvem jazyka, aplikace tento adresář nahradí. Když je zdrojová cesta souborem pojmenovaným podle jazyka, aplikace nahradí název souboru. Pokud neexistuje ani jeden z těchto vzorů, aplikace umístí přeložený soubor do nového adresáře cílového jazyka vedle zdrojového souboru.

Workflow#

Push do výchozí větve#

Když je ve výchozí větvi přidán nebo změněn odpovídající zdrojový soubor, aplikace ho přeloží a commitne lokalizované soubory do:

txt
lingo/translations/<default-branch>

Poté otevře nebo aktualizuje pull request z této překladové větve zpět do výchozí větve. Pokud překladová větev už existuje, přidá do ní nové commity.

Pokud je ve stejném pushi přidán nebo změněn cílový soubor, aplikace ho považuje za už zpracovaný a zahrne ho do překladového PR místo toho, aby ho přepsala.

Pull requesty#

Když má github.workflows.onPullRequest.enabled hodnotu true, aplikace zkontroluje změny v pull requestu a vyhledá odpovídající zdrojové soubory. Přeložené soubory commitne přímo do PR větve.

Aplikace nezapisuje do PR větví z forků a z komentáře v PR nezapisuje do výchozí větve. Aby aplikace mohla commitnout překlady, musí být pull request otevřený.

U PR Lingo.dev aktualizuje komentář s přeloženými soubory a případnými chybami.

Přírůstkové aktualizace a obnova#

U existujících cílových souborů aplikace překládá jen změny ve zdroji, které dokáže rozpoznat, místo aby znovu generovala celý soubor. U nových cílových souborů vytvoří lokalizovaný soubor pro každý nakonfigurovaný cílový jazyk.

Pokud předchozí lokalizace PR vynechala změnu ve zdroji nebo selhala před aktualizací cílového souboru, může se při další synchronizaci PR stav obnovit porovnáním zdroje v PR se zdrojem v základní větvi a překladem chybějící změny.

Pokud zdrojový soubor v commitu, který se právě zpracovává, už neexistuje, aplikace ho přeskočí.

Režim schvalování#

Pokud chcete před spuštěním automatických překladů krok lidského schválení, nastavte github.safety.requireApproval na true.

Při pushech do výchozí větve zobrazuje check run Lingo.dev akce Approve a Deny. U pull requestů aplikace přidá komentář s návrhem překladu; odpovězte:

txt
/lingo approve

Příkazy /lingo translate s omezeným rozsahem toto schvalování nevyžadují.

Ruční PR příkaz#

Pomocí /lingo v komentáři k pull requestu můžete doplnit nebo vynutit překlady konkrétních souborů.

txt
/lingo translate docs/en/**/*.md
txt
/lingo translate docs/en/**/*.mdx --locales fr,es
txt
/lingo translate docs/en/**/*.md --force

Přehled příkazů:

PříkazPopis
/lingoZobrazí nápovědu.
/lingo helpZobrazí nápovědu.
/lingo translate <glob>...Přeloží chybějící cílové soubory pro odpovídající zdrojové soubory.
/lingo translate <glob>... --locales fr,esOmezí běh na nakonfigurované cílové jazyky. Hodnoty jazyků parser příkazů převádí na malá písmena.
/lingo translate <glob>... --forcePřeloží všechny odpovídající zdrojové soubory a jazyky v daném rozsahu a přepíše existující cílové soubory.
/lingo approveSchválí čekající návrh překladu v PR.

Příkaz musí být na samostatném řádku. Globy se porovnávají se soubory, které zároveň odpovídají vašim nakonfigurovaným zdrojovým vzorům files. Stejně jako konfigurační vzory nesmějí globy příkazů začínat na / a nesmějí obsahovat ...

Ve výchozím nastavení se /lingo translate spouští v režimu doplnění: vytvoří pouze cílové soubory, které ve větvi PR chybí. Pokud chcete znovu vygenerovat existující cílové soubory, přidejte --force.

Podporované formáty#

GitHub App rozpozná tyto formáty podle přípony souboru:

  • JSON (.json)
  • JSONC (.jsonc)
  • Markdown (.md)
  • MDX (.mdx)
  • Markdoc

Podporované jsou také dokumenty OpenAPI zapsané v YAML, ale nerozpoznají se automaticky. U vzoru souboru nastavte "format": "yaml-openapi":

json
{
  "files": [
    { "pattern": "openapi/en.yaml", "format": "yaml-openapi" }
  ]
}

Velké aktualizace#

Aplikace může výstup překladu rozdělit do více commitů. To se stane, když by jedno spuštění zapsalo víc než 100 souborů v jednom commitu nebo víc než 5 MB přeloženého obsahu souborů v jednom commitu.

Když k tomu dojde, zprávy commitů obsahují číslo dávky, například:

txt
feat: Lingo.dev translations (1/3)
feat: Lingo.dev translations (2/3)
feat: Lingo.dev translations (3/3)

Co se stane, když nic neodpovídá#

Pokud chybí .lingo/config.json, aplikace repozitář tiše přeskočí. Jakmile konfigurace existuje, neplatná konfigurace vytvoří neúspěšný check run a u PR také komentář s chybou validace.

Pokud žádné změněné soubory neodpovídají vašim zdrojovým vzorům, aplikace se dokončí bez zapsání překladů. U /lingo translate bot odpoví stručným vysvětlením, například že neodpovídají žádné soubory, žádné jazyky nebo že všechny cílové soubory už existují.

Další kroky#

GitHub Actions
Použijte GitHub Action místo GitHub App
Pokročilé vzory
Kontroly překladů, konflikty při sloučení, výběr workflow
Připojte svůj engine
Směrujte překlady z GitHub App přes svůj engine

Byla tato stránka užitečná?

Moses SkodaMoses Skoda·Aktualizováno před 25 dny·7 min čtení