Implementering Och Online

i18n.site antar en ensidig applikationsarkitektur , och webbplatsens ingångssida och webbplatsinnehåll distribueras oberoende av varandra.

Efter att ha kört ovanstående översättning kommer katalogerna htm och v att genereras under katalogen md/out/dev .

Här betyder dev att den är byggd utifrån konfigurationsfilen .i18n/htm/dev.yml .

dev katalog :

Katalogen htm är hemsidans ingångssida.

Katalogen v innehåller webbplatsinnehåll med versionsnummer.

Lokal förhandsgranskning bryr sig inte om versionsnumret och kommer att kopiera alla filer till out/dev/v/0.1.0 -katalogen.

För officiell release kommer ändrade filer att kopieras till den nya versionsnummerkatalogen.

Ange Konfigurationsfil Med -c

Olika konfigurationsfiler skapar motsvarande kataloger i out katalogen.

Till exempel kommer .i18n/htm/main.yml att skapa out/main -katalogen.

dev.yml och main.yml är standardkonfigurationerna.

dev är förkortningen av development , som indikerar utvecklingsmiljön, som används för lokal förhandsgranskning, och är också standardkonfigurationsfilen. ol är förkortningen av online , som indikerar onlinemiljön, som används för officiell version. Det är också standardkonfigurationsfilen när man använder kommandoradsparametrar -n till npm för att släppa.

Du kan också skapa andra konfigurationsfiler. Använd --htm_conf på kommandoraden för att ange vilket konfigurationsfilnamn som ska användas:

till exempel:

i18n.site --htm_conf dist --save

Här representerar --save uppdateringens versionsnummer.

Publicera innehåll på npmjs.com

Att publicera innehåll till npmjs.com är den rekommenderade standardlösningen (se Front-end High Availability ).

npm Logga in & Post

Installera nodejs , logga in med npm login .

Redigera md/.i18n/htm/main.yml och ändra värdet på md: YOUR_NPM_PACKAGE npmjs.com ditt eget npm paketnamn.

Ändra sedan md/.i18n/htm/main.package.json

Kör i18n.site --npm eller i18n.site -n i md -katalogen för att översätta och publicera.

Om du använder en kontinuerlig integrationsmiljö för att publicera behöver du inte installera nodejs Kopiera bara de inloggade och publiceringsbehörigheterna ~/.npmrc till miljön.

Om du ändrar paketnamnet v:main.yml , se till att ta bort .i18n/v/main först och sedan publicera det.

Proxyserver Publicerad Av npm

Om användare på det kinesiska fastlandet stöter på nätverksproblem och inte kan publicera npm paket, kan de ställa in miljövariabel https_proxy för att konfigurera proxyservern.

Om du antar att din proxyserverport är 7890 , kan du skriva:

https_proxy=http://127.0.0.1:7890 i18n.site -n

Självhostat Innehåll

Om du vill vara värd för innehållet, redigera först md/.i18n/htm/main.yml och ändra v: //unpkg.com/i18n.site till ditt URL-prefix, till exempel v: //i18n-v.xxx.com .

Ange md katalogen och kör

i18n.site --htm_conf ol --save

eller förkortning

i18n.site -c ol -s

Konfigurera sedan innehållet i md/out/main/v -katalogen till URL-prefixets sökväg som anges i v: .

Slutligen, konfigurera cachetiden för sökvägen som slutar på /.v till 1s , annars kan det nysläppta innehållet inte nås omedelbart.

Cachetiden för andra vägar kan ställas in på ett år eller mer för att minska onödiga förfrågningar.

Värd Innehåll Till s3

För att själv hosta innehåll, förutom att använda din egen server, är CDN annat vanligt alternativ att använda S3 +

Du kan använda rclone för att logga in på S3 servern, hänvisa till och ändra följande skript och kopiera endast de inkrementella ändringarna till S3 för varje utgåva.

i18n.site -c ol -s
s3=your-s3
bucket=your-bucket
ver=$(head -1 .i18n/v/main/v.hash | cut -c 2-)
rclone copy --overwrite-dir out/main/htm/v/$ver $s3:/$bucket/$ver
rclone copy out/main/v/.v "$s3:/$bucket/"

Kom ihåg att konfigurera CDN så att cachetiden för sökvägen som slutar på /.v är 1s , annars kan det nysläppta innehållet inte nås omedelbart.

Publicera Webbplats

Webbplatsen kan distribueras var som helst github page och cloudflare page är bra val.

Eftersom webbplatsen använder en ensidig applikationsarkitektur , kom ihåg att skriva om URL-sökvägar som inte innehåller . till index.html .

Webbplatsens ingångssida behöver bara distribueras en gång och det finns inget behov av att distribuera om webbplatsens ingångssida för efterföljande innehållsuppdateringar.

Distribuera På Github-Sidan

Klicka först github för att skapa en organisation . Följande organisationsnamn är i18n-demo som ett exempel.

Skapa sedan lager i18n-demo.github.io under denna organisation (ersätt i18n-demo med organisationsnamnet du skapade):

När du publicerar innehållet i föregående artikel har out/main/htm genererats Vänligen ange den här katalogen och kör :

ln -s index.html 404.html

Eftersom github page inte stöder omskrivning av webbadresser, används 404.html istället.

Kör sedan följande kommando i htm -katalogen (kom ihåg att ersätta i18n-demo/i18n-demo.github.io.git med din egen lageradress) :

git init
git branch -M main
git remote add origin [email protected]:i18n-demo/i18n-demo.github.io.git
git push -u origin main -f

När du har tryckt på koden, vänta tills distributionen av github page körs framgångsrikt (som visas nedan) innan du kan komma åt den.

För demosida se:

https://i18n-demo.github.io

Distribuera På Cloudflare-Sidan

cloudflare page med github page ger den omskrivning av vägar och är mer vänlig för Kina och är mer tillgänglig.

Utplaceringen av cloudflare page baseras vanligtvis på utplaceringen av github page ovan.

Skapa ett projekt och bind i18n-demo.github.io -lagret ovan.

Processen visas i figuren nedan:

Klicka på Add Account för att ge åtkomst till organisation i18n-demo .

Om du har bundit en annan organisations lager kan du behöva klicka på Add Account två gånger för att auktorisera två gånger innan den nya organisationen kommer att visas.

Välj sedan lager i18n-demo.github.io , klicka sedan på Begin setup och använd standardvärdena för efterföljande steg.

När du har bindit för första gången måste du vänta några minuter innan du kan komma åt den.

Efter implementeringen kan du binda ett anpassat domännamn.

Efter att du har bindit det anpassade domännamnet, gå till domännamnet för att konfigurera sökvägsomskrivningen för ensidig applikation, som visas nedan:

Reglerna i bilden ovan är som följer Vänligen ersätt i18n.site an på första raden nedan med domännamnet du bundna.

(http.host in {"i18n.site"}) and not (
substring(http.request.uri.path,-3) in {".js" ".gz"} or
substring(http.request.uri.path,-4) in {".htm" ".rss" ".css" ".svg" ".ico" ".png" ".xml" ".txt"} or
substring(http.request.uri.path,-5) in {".html" ".avif" ".json"} or
ends_with(http.request.uri.path,".webmanifest")
)

Konfigurera dessutom cachereglerna, som visas nedan, och ställ in cachetiden till en månad.

Vänligen ändra domännamnsmatchningen i det andra steget i bilden ovan till det domännamn du bundna.

Optimering Av Webbplatsdistribution På Kinas Fastland

Om du vill få bättre tillgänglighetsprestanda i nätverksmiljön på det kinesiska fastlandet, vänligen registrera ett domännamn först.

Använd sedan objektlagringen för molnleverantörer i Kina + Distribuera följande innehåll CDN out/main/htm

Du kan använda edge computing för att skriva om sökvägen för att anpassa sig till ensidiga applikationer. Till exempel kan Baidu Smart Cloud CDN konfigureras så här:

const uri = r.uri, p = uri.lastIndexOf(".");
if (
  p < 0 ||
  !"|js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest|".includes(
    "|" + uri.slice(p + 1) + "|",
  )
) {
  const ua = r.headersIn["User-Agent"].toLowerCase()
  if (/facebookexternalhit|slurp|bot|spider|curl/.test(ua)) {
    r.return(
      302,
      (/baidu|yisou|sogou|360|byte/.test(ua) ? "/zh" : "/en") + r.uri + ".htm",
    )
  } else {
    r.uri = "/index.html"
  }
}

r.respHeader(() => {
  const t = [], out = r.headersOut;
  ["Content-MD5", "Age", "Expires", "Last-Modified"].forEach(
    i => delete out[i]
  )
  r.rawHeadersOut.forEach(i => {
    const key = i[0].toLowerCase()
    if (key.startsWith("x-") || key.startsWith("ohc-")) {
      delete out[key]
    }
  })
  out["Cache-Control"] = "max-age=" + 9e5
  // Svarsrubriker kan ställas in för att felsöka utdata, såsom out.XXX = 'MSG';
})

Eftersom post MX och post CNAME inte kan existera samtidigt, om du vill ta emot domännamnsmail samtidigt, måste du samarbeta med cname_flatten till nivå CNAME i post A .

Dessutom, eftersom de utländska trafikavgifterna för molnleverantörer på Kinas fastland är relativt dyra, om du vill optimera kostnaderna, kan du använda Huawei DNS gratis geografiska upplösning och Cloudflare for SaaS :s anpassade domännamn (som visas nedan) för att uppnå trafikomledning──Trafikdirigering i Kinas fastland Baidu Cloud CDN , internationell trafik går cloudflare .

Dessa distributionsoptimeringslösningar är mer komplexa och kommer att introduceras i separata kapitel i framtiden.

Generisk Omdirigering Av Domännamn

Om du använder i18n.site för att skapa en webbplats som din huvudwebbplats, behöver du vanligtvis konfigurera omdirigering av pan-domäner, det vill säga omdirigera åtkomst till *.xxx.com (inklusive www.xxx.com ) till xxx.com .

Detta krav kan uppnås med hjälp av Alibaba Cloud CDN EdgeScript ( engelsk dokument / kinesiskt dokument )

Lägg till domännamnet i Alibaba CDN och peka på domännamnet *.xxx.com till CNAME i Alibaba Cloud CDN .

Till exempel är omdirigeringskonfigurationen för pan-domännamn för *.i18n.site i bilden ovan följande:

rewrite(concat('https://i18n.site',$uri), 'redirect',301)

Distribuera Med nginx

Lägg till en konfiguration som liknar följande i server -stycket i nginx Ändra /root/i18n/md/out/main/htm till sökvägen för ditt eget projekt out/main/htm :

location / {
  root  /root/i18n/md/out/main/htm;
  add_header Cache-Control "max-age=9999999";
  if ($uri !~* \.(avif|css|html|ico|js|json|png|svg|txt|webmanifest|xml)$) {
     rewrite ^ /index.html last;
  }
}

Baserat På github action Kontinuerlig Integration

Du kan hänvisa till följande för att konfigurera din github action :

name: i18n.site

on:
  workflow_dispatch:
  push:
    branches:
      - main
      - dist

jobs:
  i18n:

    permissions:
      repository-projects: write
      contents: write

    runs-on: ubuntu-latest

    steps:
      - name: checkout
        uses: actions/checkout@v4

      - name: https://i18n.site
        uses: i18n-site/github-action-i18n.site@main
        with:
          I18N_SITE_TOKEN: ${{ secrets.I18N_SITE_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

Som kan ses i konfigurationen utlöses detta arbetsflöde när man trycker till gren main och gren dist .

Arbetsflödet kommer att använda konfigurationsfilen som motsvarar filialnamnet för att publicera dokumentet. Här kommer .i18n/htm/main.yml respektive .i18n/htm/dist.yml att användas som publiceringskonfiguration.

Vi rekommenderar följande bästa praxis för processen för dokumentutgivning:

När ändringar skjuts till gren main , utlöses dokumentet för att byggas och distribueras till förhandsgranskningsstationen (förhandsgranskningsstationen är tillgänglig github page ).

Efter att ha bekräftat att dokumentet är korrekt på förhandsgranskningsplatsen kommer koden att slås samman och skickas till filial dist och den officiella konstruktionen och distributionen kommer att gå online.

Att implementera ovanstående process kräver naturligtvis att man skriver fler konfigurationer.

Du kan referera till det faktiska projektet för arbetsflödesskript github.com/fcdoc/doc

secrets.I18N_SITE_TOKEN och secrets.NPM_TOKEN i konfigurationen kräver att du konfigurerar hemliga variabler i kodbasen.

I18N_SITE_TOKEN i18n.site/token

NPM_TOKEN är publiceringstoken för paket npm i konfigurationen npmjs.com skapa en token med publiceringsbehörigheter (som visas nedan).

Katalogstruktur

public

Statiska filer för webbplatsen, såsom favicon.ico , robots.txt , etc.

Ikonfilerna här kan genereras med realfavicongenerator.net

.i18n

Under .i18n -katalogen finns konfigurationsfiler, översättningscache, etc. av i18n.site Se nästa kapitel "Konfiguration" för detaljer.

en

Källspråkskatalog, motsvarande konfigurationsfilen en av fromTo i .i18n/conf.yml

i18n:
  fromTo:
    en: zh

Se konfigurationen av översättning i18