Примена И Онлајн

i18n.site усваја архитектуру апликације са једном страницом , а улазна страница и садржај веб странице се независно примењују.

Након покретања горњег превода, директоријуми htm и v ће бити генерисани у директоријуму md/out/dev .

Овде, dev значи да је направљен на основу конфигурационе датотеке .i18n/htm/dev.yml .

dev дирецтори :

Директоријум htm је улазна страница за веб локацију.

Директоријум v садржи садржај веб локације са бројевима верзија.

Локални преглед не брине о броју верзије и копираће све датотеке у директоријум out/dev/v/0.1.0 .

За званично издање, измењене датотеке ће бити копиране у нови директоријум са бројем верзије.

Наведите Конфигурациону Датотеку Са -c

Различите конфигурационе датотеке ће креирати одговарајуће директоријуме у директоријуму out .

На пример, .i18n/htm/main.yml ће креирати директоријум out/main .

dev.yml и main.yml су подразумеване конфигурације.

dev је скраћеница од development , која означава развојно окружење, која се користи за локални преглед, а такође је и подразумевана конфигурациона датотека. ol је скраћеница од online , која означава онлајн окружење, које се користи за званично издање. То је такође подразумевана конфигурациона датотека када се за ослобађање користе параметри командне линије -n до npm .

Такође можете креирати друге конфигурационе датотеке Користите --htm_conf у командној линији да бисте навели име конфигурационе датотеке које ћете користити.

на пример:

i18n.site --htm_conf dist --save

Овде --save представља број верзије издања ажурирања.

Објавите садржај на нпмјс.цом

Објављивање садржаја на npmjs.com је препоручено подразумевано решење (погледајте Фронт-енд Хигх Аваилабилити ).

npm Логин & Пост

Инсталирајте nodejs , пријавите се са npm login .

Уредите md/.i18n/htm/main.yml и промените вредност од md: YOUR_NPM_PACKAGE npmjs.com име вашег npm .

Затим измените md/.i18n/htm/main.package.json

Покрените i18n.site --npm или i18n.site -n у директоријуму md да преведете и објавите.

Ако користите окружење за континуирану интеграцију за објављивање, нема потребе да инсталирате nodejs Само копирајте пријављене дозволе и дозволе за објављивање ~/.npmrc у окружење.

Ако измените име пакета v: у main.yml , обавезно прво избришите .i18n/v/main , а затим га објавите.

Прокси Сервер Објавио Нпм

Ако корисници у континенталној Кини наиђу на проблеме са мрежом и не могу да објаве npm пакета, могу да подесе променљиву окружења https_proxy да конфигуришу прокси сервер.

Под претпоставком да је порт вашег прокси сервера 7890 , можете написати:

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

Садржај Који Сами Хостује

Ако желите да сами хостујете садржај, прво измените md/.i18n/htm/main.yml и промените v: //unpkg.com/i18n.site у свој УРЛ префикс, као што је v: //i18n-v.xxx.com .

Унесите директоријум md и покрените

i18n.site --htm_conf ol --save

или скраћеница

i18n.site -c ol -s

Затим конфигуришите садржај у директоријуму md/out/main/v на путању УРЛ префикса постављену у v: .

Коначно, конфигуришите време кеширања путање која се завршава са /.v до 1s , иначе се не може одмах приступити ново објављеном садржају.

Време кеширања за друге путање може се подесити на годину дана или више да би се смањили непотребни захтеви.

Хостујте Садржај На С3

Да бисте сами хостовали садржај, поред коришћења сопственог сервера, још CDN уобичајена опција је да користите S3 +

Можете да rclone да се пријавите на сервер S3 , а затим да погледате и измените следећу скрипту и копирате само инкременталне промене на S3 за свако издање.

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

Не заборавите да конфигуришете CDN тако да време кеширања путање која се завршава на /.v буде 1s , иначе се не може одмах приступити ново објављеном садржају.

Објавити Веб Страницу

Веб локација се може поставити било где, github page cloudflare page су добар избор.

Пошто веб локација користи архитектуру апликације на једној страници , не заборавите да поново напишете УРЛ путање које не садрже . до index.html .

Страница за улазак на веб локацију треба да се примени само једном и нема потребе да се поново распоређује улазна страница за наредна ажурирања садржаја.

Поставите На Гитхуб Страницу

Прво кликните github да бисте направили организацију . Следећи назив организације је i18n-demo .

Затим креирајте складиште i18n-demo.github.io под овом организацијом (замените i18n-demo именом организације коју сте креирали):

Приликом објављивања садржаја у претходном чланку, генерисано је out/main/htm Унесите овај директоријум и покрените :

ln -s index.html 404.html

Пошто github page не подржава преписивање УРЛ путање, уместо тога се користи 404.html .

Затим покрените следећу команду у директоријуму htm (не заборавите да замените i18n-demo/i18n-demo.github.io.git сопственом адресом складишта) :

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

Након што гурнете код, сачекајте да се имплементација github page успешно покрене (као што је приказано испод) пре него што му можете приступити.

За демо страницу погледајте:

https://i18n-demo.github.io

Поставите На Цлоудфларе Страницу

У cloudflare page са github page , омогућава преписивање путање и више је пријатељски настројен према континенталној Кини и препоручује се за коришћење.

Примена cloudflare page се обично заснива на примени github page изнад.

Направите пројекат и повежите i18n-demo.github.io складиште изнад.

Процес је приказан на слици испод:

Кликните на Add Account да бисте одобрили приступ организацији i18n-demo .

Ако сте повезали складиште друге организације, можда ћете морати двапут да кликнете на Add Account да бисте ауторизовали два пута пре него што се нова организација прикаже.

Затим изаберите складиште i18n-demo.github.io , затим кликните на Begin setup и користите подразумеване вредности за следеће кораке.

Након првог повезивања, потребно је да сачекате неколико минута да бисте могли да му приступите.

Након постављања, можете да повежете прилагођено име домена.

Након повезивања прилагођеног имена домена, идите на име домена да бисте конфигурисали преписивање путање апликације на једној страници, као што је приказано у наставку:

Правила на горњој слици су следећа. Замените i18n.site у првом реду испод са именом домена који сте везали.

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

Поред тога, конфигуришите правила кеша, као што је приказано у наставку, и подесите трајање кеша на један месец.

Промените име домена које се подудара у другом кораку на слици изнад у име домена које сте везали.

Оптимизација Примене Веб-Сајта У Континенталној Кини

Ако желите да постигнете боље перформансе приступачности у мрежном окружењу континенталне Кине, прво региструјте име домена .

Затим користите складиште објеката добављача у облаку у континенталној + CDN Поставите следећи садржај out/main/htm !

Можете да користите ивично рачунарство да бисте преписали путању да бисте се прилагодили апликацијама на једној страници. На пример, Баиду Смарт Цлоуд CDN се може конфигурисати овако:

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
  // Можете подесити заглавље одговора да отклања грешке на излазу, као што је оут.КСКСКС = 'МСГ';
})

Пошто запис MX и запис CNAME не могу коегзистирати, ако желите да примате имејлове са именом домена у исто време, морате да сарађујете са cname_flatten CNAME до нивоа A .

Поред тога, пошто су накнаде за саобраћај у иностранству код добављача облака у континенталној Кини релативно скупе, ако желите да оптимизујете трошкове, можете да користите бесплатну географску резолуцију компаније DNS и прилагођено име домена Cloudflare for SaaS (као што је приказано у наставку). преусмеравање саобраћаја──Рутирање саобраћаја у континенталној Кини Баиду Цлоуд CDN , међународни саобраћај иде cloudflare .

Ова решења за оптимизацију примене су сложенија и биће представљена у посебним поглављима у будућности.

Генеричко Преусмеравање Имена Домена

Ако користите i18n.site да генеришете веб локацију као своју главну веб локацију, обично морате да конфигуришете преусмеравање на све домене, односно преусмерите приступ на *.xxx.com (укључујући www.xxx.com ) на xxx.com .

Овај захтев се може постићи уз помоћ Алибаба Цлоуд CDN EdgeScript ( енглески документ / кинески документ )

Додајте име домена у Алибаба CDN и поставите име домена *.xxx.com до CNAME у Алибаба Цлоуд CDN !

На пример, конфигурација преусмеравања имена пан-домена од *.i18n.site на слици изнад је следећа:

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

Поставите Са Нгинк-Ом

Молимо додајте конфигурацију сличну следећој у server параграфу nginx Молимо вас да промените /root/i18n/md/out/main/htm у путању вашег сопственог пројекта 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;
  }
}

Засновано На github action Континуираној Интеграцији

Можете погледати следеће да бисте конфигурисали свој 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 }}

Као што се може видети у конфигурацији, овај ток посла се покреће када се притисне на грану main и грану dist .

Ток посла ће користити конфигурациону датотеку која одговара имену гране за објављивање документа. Овде ће се .i18n/htm/main.yml и .i18n/htm/dist.yml користити као конфигурација за објављивање.

Препоручујемо следеће најбоље праксе за процес објављивања документа:

Када се промене гурну у грану main , документ се покреће да се направи и примени на станицу за преглед (станица за преглед је доступна github page ).

Након потврде да је документ исправан на сајту за преглед, код ће бити спојен и гурнут у грану dist , а званична израда и примена ће ићи на мрежу.

Наравно, имплементација горе наведеног процеса захтева писање више конфигурација.

Можете погледати стварни пројекат за скриптовање тока посла github.com/fcdoc/doc

secrets.I18N_SITE_TOKEN и secrets.NPM_TOKEN у конфигурацији захтевају да конфигуришете тајне променљиве у бази кода.

I18N_SITE_TOKEN i18n.site/token

NPM_TOKEN је токен за објављивање пакета npm у конфигурацији npmjs.com креирајте токен са дозволама за објављивање (као што је приказано у наставку).

Структура Именика

public

Статичке датотеке веб локације, као што су favicon.ico , robots.txt итд.

Датотеке икона овде се могу генерисати са realfavicongenerator.net

.i18n

У директоријуму .i18n налазе се конфигурационе датотеке, кеш превода, итд. од i18n.site Погледајте следеће поглавље „Конфигурација“ за детаље.

en

Директоријум изворног језика, који одговара конфигурационој датотеци en од fromTo у .i18n/conf.yml

i18n:
  fromTo:
    en: zh

Молимо погледајте конфигурацију превода i18