Implementering Og Online

i18n.site vedtager en enkeltsides applikationsarkitektur , og hjemmesidens indgangsside og webstedsindhold implementeres uafhængigt.

Efter at have kørt ovenstående oversættelse, vil mappe htm og v blive genereret under md/out/dev mappen.

Her betyder dev , at den er bygget baseret på .i18n/htm/dev.yml -konfigurationsfilen.

dev bibliotek :

htm -kataloget er hjemmesidens indgangsside.

v kataloget indeholder webstedsindhold med versionsnumre.

Lokal preview er ligeglad med versionsnummeret og kopierer alle filer til out/dev/v/0.1.0 mappen.

For officiel udgivelse vil ændrede filer blive kopieret til det nye versionsnummerbibliotek.

Angiv Konfigurationsfil Med -c

Forskellige konfigurationsfiler vil oprette tilsvarende mapper i out mappen.

For eksempel vil .i18n/htm/main.yml oprette mappen out/main .

dev.yml og main.yml er standardkonfigurationerne.

dev er forkortelsen af development , der angiver udviklingsmiljøet, der bruges til lokal forhåndsvisning, og er også standardkonfigurationsfilen. ol er forkortelsen af online , der angiver onlinemiljøet, som bruges til officiel udgivelse. Det er også standardkonfigurationsfilen, når du bruger kommandolinjeparametrene -n til npm til at frigive.

Du kan også oprette andre konfigurationsfiler Brug --htm_conf på kommandolinjen for at angive det konfigurationsfilnavn, der skal bruges:

for eksempel:

i18n.site --htm_conf dist --save

Her repræsenterer --save versionsnummeret for opdateringsudgivelsen.

Udgiv indhold på npmjs.com

Udgivelse af indhold til npmjs.com er den anbefalede standardløsning (se Front-end High Availability ).

npm Log Ind & Post

Installer nodejs , log ind med npm login .

Rediger md/.i18n/htm/main.yml npmjs.com skift værdien af md: YOUR_NPM_PACKAGE som dit eget npm pakkenavn.

Rediger derefter md/.i18n/htm/main.package.json

Kør i18n.site --npm eller i18n.site -n i md -biblioteket for at oversætte og udgive.

Hvis du bruger et kontinuerligt integrationsmiljø til at publicere, er der ingen grund til at installere nodejs Du skal blot kopiere de loggede ind og udgivelsestilladelser ~/.npmrc til miljøet.

Hvis du ændrer pakkenavnet på v: i main.yml , skal du sørge for at slette .i18n/v/main først og derefter udgive det.

Proxyserver Udgivet Af npm

Hvis brugere på det kinesiske fastland støder på netværksproblemer og ikke er i stand til at udgive npm pakker, kan de indstille miljøvariablen https_proxy til at konfigurere proxyserveren.

Hvis du antager, at din proxyserverport er 7890 , kan du skrive:

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

Selvhostet Indhold

Hvis du selv vil hoste indholdet, skal du først redigere md/.i18n/htm/main.yml og ændre v: //unpkg.com/i18n.site til dit URL-præfiks, såsom v: //i18n-v.xxx.com .

Indtast md mappen og kør

i18n.site --htm_conf ol --save

eller forkortelse

i18n.site -c ol -s

Konfigurer derefter indholdet i md/out/main/v -mappen til URL-præfiksstien angivet i v: .

Til sidst skal du konfigurere cachetiden for stien, der slutter på /.v til 1s , ellers kan det nyligt frigivne indhold ikke tilgås med det samme.

Cachetiden for andre stier kan indstilles til et år eller mere for at reducere unødvendige anmodninger.

Host Indhold Til s3

For selv at hoste indhold, ud over at bruge din egen server, er en anden almindelig mulighed at CDN S3 +

Du kan bruge rclone til at logge ind på S3 serveren, derefter henvise til og ændre følgende script og kun kopiere de trinvise ændringer til S3 for hver udgivelse.

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 at konfigurere CDN , så cachetiden for stien, der slutter på /.v er 1s , ellers kan det nyligt frigivne indhold ikke tilgås med det samme.

Udgive Hjemmeside

Hjemmesiden kan implementeres hvor som helst github page og cloudflare page er gode valg.

Fordi hjemmesiden bruger en enkeltsidet applikationsarkitektur , skal du huske at omskrive URL-stier, der ikke indeholder . til index.html .

Indgangssiden til webstedet skal kun implementeres én gang, og der er ingen grund til at geninstallere webstedets indgangsside for efterfølgende indholdsopdateringer.

Implementer På Github-Siden

Klik først github for at oprette en organisation . Følgende organisationsnavn er i18n-demo som et eksempel.

Opret derefter lager i18n-demo.github.io under denne organisation (erstat venligst i18n-demo med det organisationsnavn, du oprettede):

Når du udgiver indholdet i den forrige artikel, er out/main/htm blevet genereret. Indtast venligst denne mappe og kør :

ln -s index.html 404.html

Fordi github page ikke understøtter omskrivning af URL-sti, bruges 404.html i stedet.

Kør derefter følgende kommando i htm mappen (husk at 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

Når du har trykket på koden, skal du vente på, at implementeringen af github page kører med succes (som vist nedenfor), før du kan få adgang til den.

For demo side se venligst:

https://i18n-demo.github.io

Implementer På Cloudflare-Side

cloudflare page Sammenlignet med github page giver det sti-omskrivning og er mere venligt for det kinesiske fastland og er mere tilgængeligt.

Implementeringen af cloudflare page er normalt baseret på implementeringen af github page ovenfor.

Opret et projekt og bind i18n-demo.github.io -lageret ovenfor.

Processen er vist i figuren nedenfor:

Klik venligst på Add Account for at give adgang til organisation i18n-demo .

Hvis du har bundet lageret i en anden organisation, skal du muligvis klikke på Add Account to gange for at godkende to gange, før den nye organisation vil blive vist.

Vælg derefter varehus i18n-demo.github.io , klik derefter på Begin setup , og brug standardværdierne til de efterfølgende trin.

Efter binding for første gang, skal du vente et par minutter, før du kan få adgang til den.

Efter implementeringen kan du binde et tilpasset domænenavn.

Når du har bundet det brugerdefinerede domænenavn, skal du gå til domænenavnet for at konfigurere sti-omskrivningen af enkeltsideapplikationen som vist nedenfor:

Reglerne i billedet ovenfor er som følger. Erstat venligst i18n.site i den første linje nedenfor med det domænenavn, 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")
)

Derudover skal du konfigurere cachereglerne, som vist nedenfor, og indstille cachens varighed til en måned.

Skift venligst domænenavnet, der matcher i andet trin på billedet ovenfor til det domænenavn, du har bundet.

Optimering Af Webstedsimplementering På Det Kinesiske Fastland

Hvis du ønsker at opnå bedre tilgængelighedsydelse i netværksmiljøet på det kinesiske fastland, skal du først registrere et domænenavn .

Brug derefter objektlageret fra cloud CDN + følgende indhold out/main/htm .

Du kan bruge edge computing til at omskrive stien for at tilpasse sig enkeltsideapplikationer. For eksempel kan Baidu Smart Cloud CDN konfigureres sådan:

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
  // Svarheadere kan indstilles til at fejlfinde output, såsom out.XXX = 'MSG';
})

Fordi record MX og record CNAME ikke kan eksistere side om side, hvis du ønsker at modtage domænenavne-e-mails på samme tid, skal du cname_flatten med scriptet til niveau CNAME i record A .

Derudover, fordi de oversøiske trafikafgifter for cloud-leverandører på det kinesiske fastland er relativt dyre, hvis du vil optimere omkostningerne, kan du bruge Huawei DNS gratis geografiske opløsning og Cloudflare for SaaS brugerdefinerede domænenavn (som vist nedenfor) til at opnå trafikomdirigering──Trafikdirigering på det kinesiske fastland Baidu Cloud CDN , international trafik går cloudflare .

Disse implementeringsoptimeringsløsninger er mere komplekse og vil blive introduceret i separate kapitler i fremtiden.

Generisk Omdirigering Af Domænenavn

Hvis du bruger i18n.site til at generere et websted som dit hovedwebsted, skal du normalt konfigurere pan-domæne-omdirigering, det vil sige omdirigere adgang til *.xxx.com (inklusive www.xxx.com ) til xxx.com .

Dette krav kan opnås ved hjælp af Alibaba Cloud CDN EdgeScript ( engelsk dokument / kinesisk dokument )

Tilføj domænenavnet i Alibaba CDN og peg domænenavnet *.xxx.com til CNAME i Alibaba Cloud CDN .

For eksempel er omdirigeringskonfigurationen for pan-domænenavnet på *.i18n.site på billedet ovenfor som følger:

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

Implementer Med nginx

Tilføj venligst en konfiguration svarende til følgende i server -afsnittet i nginx Ændr venligst /root/i18n/md/out/main/htm til stien til dit 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;
  }
}

Baseret På github action Kontinuerlig Integration

Du kan henvise til følgende for at 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 det kan ses i konfigurationen, udløses denne arbejdsgang, når der trykkes til gren main og gren dist .

Workflowet vil bruge konfigurationsfilen svarende til filialnavnet til at publicere dokumentet. Her vil henholdsvis .i18n/htm/main.yml og .i18n/htm/dist.yml blive brugt som udgivelseskonfiguration.

Vi anbefaler følgende bedste praksis for dokumentudgivelsesprocessen:

Når ændringer skubbes til gren main , udløses dokumentet til at blive bygget og implementeret til forhåndsvisningsstationen (forhåndsvisningsstationen er tilgængelig github page ).

Efter at have bekræftet, at dokumentet er korrekt på forhåndsvisningsstedet, vil koden blive flettet og skubbet til gren dist , og den officielle opbygning og implementering vil gå online.

Selvfølgelig kræver implementering af ovenstående proces at skrive flere konfigurationer.

Du kan henvise til det faktiske projekt github.com/fcdoc/doc

secrets.I18N_SITE_TOKEN og secrets.NPM_TOKEN i konfigurationen kræver, at du konfigurerer hemmelige variabler i kodebasen.

I18N_SITE_TOKEN i18n.site/token

NPM_TOKEN er udgivelsestoken for pakke npm i konfigurationen npmjs.com og opret et token med udgivelsestilladelser (som vist nedenfor).

Directory Struktur

public

Statiske filer på webstedet, såsom favicon.ico , robots.txt osv.

Ikonfilerne her kan genereres med realfavicongenerator.net

.i18n

Under .i18n -mappen er konfigurationsfiler, oversættelsescache osv. af i18n.site Se næste kapitel "Konfiguration" for detaljer.

en

Kildesprogsmappe, svarende til en af fromTo i .i18n/conf.yml konfigurationsfil

i18n:
  fromTo:
    en: zh

Se venligst konfigurationen af oversættelse i18