Utrulling Og Online

i18n.site tar i bruk en enkeltsides applikasjonsarkitektur , og inngangssiden til nettstedet og innholdet på nettstedet distribueres uavhengig.

Etter å ha kjørt oversettelsen ovenfor, vil katalogene htm og v bli generert under md/out/dev -katalogen.

Her betyr dev at den er bygget basert på .i18n/htm/dev.yml konfigurasjonsfilen.

dev katalog :

htm -katalogen er inngangssiden til nettstedet.

v katalogen inneholder nettstedinnhold med versjonsnumre.

Lokal forhåndsvisning bryr seg ikke om versjonsnummeret og vil kopiere alle filer til out/dev/v/0.1.0 katalogen.

For offisiell utgivelse vil endrede filer bli kopiert til den nye versjonsnummerkatalogen.

Spesifiser Konfigurasjonsfilen Med -c

Ulike konfigurasjonsfiler vil opprette tilsvarende kataloger i out -katalogen.

For eksempel vil .i18n/htm/main.yml opprette out/main -katalogen.

dev.yml og main.yml er standardkonfigurasjonene.

dev er forkortelsen av development , som indikerer utviklingsmiljøet, brukt for lokal forhåndsvisning, og er også standard konfigurasjonsfil. ol er forkortelsen npm online , som -n online-miljøet, som brukes for offisiell utgivelse.

Du kan også opprette andre konfigurasjonsfiler. Bruk --htm_conf på kommandolinjen for å angi konfigurasjonsfilnavnet som skal brukes:

for eksempel:

i18n.site --htm_conf dist --save

Her representerer --save versjonsnummeret for oppdateringsutgivelsen.

Publiser innhold til npmjs.com

Publisering av innhold til npmjs.com er den anbefalte standardløsningen (se Front-end High Availability ).

npm Logg Inn & Post

Installer nodejs , logg på med npm login .

Rediger md/.i18n/htm/main.yml npmjs.com endre verdien av md: YOUR_NPM_PACKAGE som ditt eget npm -pakkenavn.

Endre deretter md/.i18n/htm/main.package.json

Kjør i18n.site --npm eller i18n.site -n i md katalogen for å oversette og publisere.

Hvis du bruker et kontinuerlig integrasjonsmiljø for å publisere, er det ikke nødvendig å installere nodejs Bare kopier innloggede og publiseringsrettigheter ~/.npmrc til miljøet.

Hvis du endrer pakkenavnet v: i main.yml , må du sørge for å slette .i18n/v/main først og deretter publisere det.

Proxy-Server Publisert Av npm

Hvis brukere i fastlands-Kina støter på nettverksproblemer og ikke klarer å publisere npm pakker, kan de sette miljøvariabel https_proxy for å konfigurere proxy-serveren.

Forutsatt at proxy-serverporten din er 7890 , kan du skrive:

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

Selvhostet Innhold

Hvis du ønsker å være vert for innholdet, må du først redigere md/.i18n/htm/main.yml og endre v: //unpkg.com/i18n.site til URL-prefikset, for eksempel v: //i18n-v.xxx.com .

Gå inn i md katalogen og kjør

i18n.site --htm_conf ol --save

eller forkortelse

i18n.site -c ol -s

Deretter konfigurerer du innholdet i md/out/main/v -katalogen til URL-prefiksbanen satt i v: .

Til slutt, konfigurer hurtigbuffertiden for banen som slutter på /.v til 1s , ellers kan det nylig utgitte innholdet ikke nås umiddelbart.

Buffertiden for andre stier kan settes til ett år eller mer for å redusere unødvendige forespørsler.

Vert Innhold Til s3

For å være vert for innhold, i tillegg til å bruke din egen server, er CDN annet vanlig alternativ å bruke S3 +

Du kan bruke rclone til å logge på S3 serveren, deretter referere til og endre følgende skript, og bare kopiere de inkrementelle endringene til S3 for hver utgivelse.

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/"

Husk å konfigurere CDN slik at hurtigbuffertiden for banen som slutter på /.v er 1s , ellers kan ikke det nylig utgitte innholdet nås umiddelbart.

Publisere Nettsiden

Nettstedet kan distribueres hvor som helst github page og cloudflare page er gode valg.

Siden nettstedet bruker en enkeltsides applikasjonsarkitektur , husk å omskrive URL-baner som ikke inneholder . til index.html .

Nettstedinngangssiden trenger bare å distribueres én gang, og det er ikke nødvendig å omdistribuere nettsiden for påfølgende innholdsoppdateringer.

Distribuer På Github-Siden

Klikk først github for å opprette en organisasjon Følgende organisasjonsnavn er i18n-demo som et eksempel.

Opprett deretter lager i18n-demo.github.io under denne organisasjonen (vennligst erstatt i18n-demo med organisasjonsnavnet du opprettet):

Når du publiserer innholdet i forrige artikkel, har out/main/htm blitt generert. Gå inn i denne katalogen og kjør :

ln -s index.html 404.html

Fordi github page ikke støtter omskriving av URL-bane, brukes 404.html i stedet.

Kjør deretter følgende kommando i htm katalogen (husk å erstatte i18n-demo/i18n-demo.github.io.git med din egen lageradresse) :

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

Etter å ha presset koden, vent til distribusjonen av github page kjører (som vist nedenfor) før du får tilgang til den.

For demoside, se:

https://i18n-demo.github.io

Distribuer På Cloudflare-Siden

cloudflare page med github page gir den baneomskriving og er mer vennlig for fastlands-Kina og er mer tilgjengelig.

Utplasseringen av cloudflare page er vanligvis basert på utplasseringen av github page ovenfor.

Opprett et prosjekt og bind i18n-demo.github.io -lageret ovenfor.

Prosessen er vist i figuren nedenfor:

Klikk Add Account for å gi tilgang til organisasjon i18n-demo .

Hvis du har bundet lageret til en annen organisasjon, må du kanskje klikke Add Account to ganger for å godkjenne to ganger før den nye organisasjonen vises.

Velg deretter varehus i18n-demo.github.io , klikk deretter Begin setup , og bruk standardverdiene for påfølgende trinn.

Etter binding for første gang, må du vente noen minutter før du får tilgang til den.

Etter distribusjon kan du binde et tilpasset domenenavn.

Etter å ha bindet det egendefinerte domenenavnet, gå til domenenavnet for å konfigurere omskrivingen av banen til enkeltsideapplikasjonen, som vist nedenfor:

Reglene i bildet ovenfor er som følger. Erstatt i18n.site i den første linjen nedenfor med domenenavnet du har bundet.

(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")
)

I tillegg, vennligst konfigurer hurtigbufferreglene, som vist nedenfor, og sett hurtigbuffervarigheten til én måned.

Vennligst endre domenenavnet som samsvarer i det andre trinnet i bildet ovenfor til domenenavnet du har bundet.

Optimalisering Av Nettstedsimplementering I Fastlands-Kina

Hvis du ønsker å oppnå bedre tilgjengelighetsytelse i nettverksmiljøet på fastlands-Kina, vennligst registrer et domenenavn først.

Bruk deretter objektlagringen out/main/htm nettskyleverandører i Kina + Distribuer følgende innhold CDN .

Du kan bruke edge computing for å omskrive banen for å tilpasse seg enkeltsideapplikasjoner. For eksempel kan Baidu Smart Cloud CDN konfigureres slik:

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
  // Du kan angi svaroverskriften for å feilsøke utdataene, for eksempel out.XXX = 'MSG';
})

Fordi post MX og post CNAME ikke kan eksistere side om side, hvis du ønsker å motta e-poster med domenenavn samtidig, må du samarbeide med cname_flatten til nivå CNAME i post A .

I tillegg, fordi de utenlandske trafikkkostnadene til skyleverandører i fastlands-Kina er relativt dyre, hvis du ønsker å optimalisere kostnadene, kan du bruke Huawei Cloud DNS s gratis geografiske oppløsning og Cloudflare for SaaS tilpassede domenenavn (som vist nedenfor). trafikkomdirigering──Trafikkruting i fastlands-Kina Baidu Cloud CDN , internasjonal trafikk går cloudflare .

Disse løsningene for distribusjonsoptimalisering er mer komplekse og vil bli introdusert i separate kapitler i fremtiden.

Generisk Omdirigering Av Domenenavn

Hvis du bruker i18n.site for å generere et nettsted som hovednettsted, må du vanligvis konfigurere omdirigering av pan-domene, det vil si omdirigere tilgang til *.xxx.com (inkludert www.xxx.com ) til xxx.com .

Dette kravet kan oppnås ved hjelp av Alibaba Cloud CDN EdgeScript ( engelsk dokument / kinesisk dokument )

Legg til domenenavnet i Alibaba CDN og pek domenenavnet *.xxx.com til CNAME i Alibaba Cloud CDN .

For eksempel er omdirigeringskonfigurasjonen for pan-domenenavn på *.i18n.site i bildet ovenfor som følger:

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

Distribuer Med nginx

Vennligst legg til en konfigurasjon som ligner på følgende i server -avsnittet i nginx Vennligst endre /root/i18n/md/out/main/htm til banen til ditt eget prosjekt 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;
  }
}

Basert På github action Kontinuerlig Integrasjon

Du kan referere til følgende for å konfigurere 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 du kan se i konfigurasjonen, utløses denne arbeidsflyten når du trykker til gren main og gren dist .

Arbeidsflyten vil bruke konfigurasjonsfilen som tilsvarer filialnavnet for å publisere dokumentet. Her vil henholdsvis .i18n/htm/main.yml og .i18n/htm/dist.yml bli brukt som publiseringskonfigurasjon.

Vi anbefaler følgende beste praksis for dokumentutgivelsesprosessen:

Når endringer skyves til gren main , utløses dokumentet for å bygges og distribueres til forhåndsvisningsstasjonen (forhåndsvisningsstasjonen er tilgjengelig github page ).

Etter å ha bekreftet at dokumentet er riktig på forhåndsvisningssiden, vil koden slås sammen og skyves til gren dist , og den offisielle byggingen og distribusjonen vil gå online.

Implementering av prosessen ovenfor krever selvfølgelig å skrive flere konfigurasjoner.

Du kan referere til selve prosjektet for skripting av arbeidsflyt github.com/fcdoc/doc

secrets.I18N_SITE_TOKEN og secrets.NPM_TOKEN i konfigurasjonen krever at du konfigurerer hemmelige variabler i kodebasen.

I18N_SITE_TOKEN i18n.site/token

NPM_TOKEN er publiseringstokenet til pakke npm i konfigurasjonen Besøk npmjs.com

Katalogstruktur

public

Statiske filer på nettstedet, for eksempel favicon.ico , robots.txt , etc.

Ikonfilene her kan genereres med realfavicongenerator.net

.i18n

Under .i18n -katalogen er konfigurasjonsfilene, oversettelsesbufferen osv. av i18n.site Se neste kapittel "Konfigurasjon" for detaljer.

en

Kildespråkkatalog, tilsvarende en av fromTo i .i18n/conf.yml konfigurasjonsfil

i18n:
  fromTo:
    en: zh

Vennligst se konfigurasjonen av oversettelsen i18