بڵاوکردنەوە و ئۆنلاین

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

بڵاوکردنەوەی ناوەڕۆک بۆ npmjs.com چارەسەری پێشوەختەی پێشنیار کراوە (بڕوانە بەردەستبوونی بەرزی پێشەوە ).

npm & پۆست

nodejs دابمەزرێنە، بە npm login بچۆرە ژوورەوە.

دەستکاری md/.i18n/htm/main.yml بکە و بەهای md: بگۆڕە YOUR_NPM_PACKAGE وەک ناوی پاکێجی npm ی خۆت هەر ناوێکی پاکێج لەسەر npmjs.com

پاشان دەستکاری md/.i18n/htm/main.package.json بکە

بۆ وەرگێڕان و بڵاوکردنەوە i18n.site --npm یان i18n.site -n لە ناوەڕۆکی md دا جێبەجێ بکە.

ئەگەر ژینگەیەکی یەکخستنی بەردەوام بەکاردەهێنیت بۆ بڵاوکردنەوە، پێویست ناکات nodejs دابمەزرێنیت. تەنها مۆڵەتی چوونەژوورەوە و بڵاوکردنەوە ~/.npmrc کۆپی بکە بۆ ژینگەکە.

ئەگەر دەستکاری ناوی پاکێجەکەی v: لە main.yml کرد، تکایە دڵنیابە سەرەتا .i18n/v/main بسڕیتەوە و دواتر بڵاوی دەکەیتەوە.

پرۆکسی سێرڤەر کە لەلایەن npm بڵاوکراوەتەوە

ئەگەر بەکارهێنەرانی چینی سەرەکی تووشی کێشەی تۆڕ بوون و نەیانتوانی 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 بگۆڕە بۆ پێشگرەکەی URLەکەت، وەک v: //i18n-v.xxx.com .

دایرێکتۆری md داخڵ بکە و جێبەجێی بکە

i18n.site --htm_conf ol --save

یان کورتکراوەی

i18n.site -c ol -s

پاشان، ناوەڕۆکی ناوەڕۆکی md/out/main/v ڕێکبخە بۆ ڕێڕەوی پێشگرەکانی URL کە لە v: دانراوە.

لە کۆتاییدا، کاتی کاشی ڕێڕەوەکە ڕێکبخە کە بە /.v بۆ 1s کۆتایی دێت ، ئەگەرنا ناتوانرێت دەستبەجێ دەست بە ناوەڕۆکی تازە بڵاوکراوە بگات.

دەتوانرێت کاتی کاش بۆ ڕێڕەوەکانی تر بۆ ساڵێک یان زیاتر دابنرێت بۆ کەمکردنەوەی داواکارییە ناپێویستەکان.

ناوەڕۆک هۆست بکە بۆ s3

بۆ خۆهۆستکردنی ناوەڕۆک، جگە لە بەکارهێنانی سێرڤەری خۆت، بژاردەیەکی CDN باو بریتییە لە بەکارهێنانی S3 +

S3 rclone 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 هەڵبژاردەی باشن.

لەبەر ئەوەی ماڵپەڕەکە بیناسازی بەرنامەی تاکە لاپەڕەیی بەکاردەهێنێت، لەبیرت بێت ڕێڕەوی URL بنووسیتەوە کە . بۆ index.html لەخۆناگرێت.

لاپەڕەی چوونە ژوورەوەی ماڵپەڕەکە تەنها پێویستی بە یەکجارە و پێویست ناکات لاپەڕەی چوونەژوورەوەی ماڵپەڕەکە دووبارە بڵاوبکرێتەوە بۆ نوێکردنەوەی ناوەڕۆکی دواتر.

لە لاپەڕەی github بڵاوکردنەوە

سەرەتا کلیک github بکە بۆ دروستکردنی ڕێکخراوێک ئەم ناوەی خوارەوە i18n-demo وەک نموونە .

پاشان کۆگای i18n-demo.github.io لە ژێر ئەم ڕێکخراوەدا دروست بکە (تکایە i18n-demo بگۆڕە بەو ناوی ڕێکخراوەی کە دروستت کردووە):

لە کاتی بڵاوکردنەوەی ناوەڕۆکەکەی بابەتەکەی پێشوودا، out/main/htm دروست بووە تکایە ئەم دایرێکتۆرییە بنووسە و ڕابکە :

ln -s index.html 404.html

لەبەر ئەوەی github page پشتگیری لە دووبارە نووسینەوەی ڕێڕەوی URL ناکات، لەبری ئەوە 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 بڵاوکردنەوە

cloudflare page بە بەراورد لەگەڵ github page , دووبارە نووسینەوەی ڕێگاکە دابین دەکات و زیاتر دۆستانەیە بۆ چین و زیاتر دەستڕاگەیشتنە.

بڵاوکردنەوەی cloudflare page بەزۆری لەسەر بنەمای جێگیرکردنی github page لە سەرەوەیە.

پرۆژەیەک دروست بکە و کۆگای i18n-demo.github.io سەرەوە بەستەوە.

پرۆسەکە لەم وێنەیەی خوارەوەدا نیشان دراوە:

تکایە کلیک لە Add Account بکە بۆ ئەوەی دەستت بگات بە ڕێکخراوی i18n-demo .

ئەگەر کۆگای ڕێکخراوێکی ترت بەستووە، لەوانەیە پێویستت بە دوو جار کلیک لە Add Account بکەیت بۆ ئەوەی دوو جار ڕێگەپێدان بدەیت پێش ئەوەی ڕێکخراوە نوێیەکە پیشان بدرێت.

دواتر warehouse 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

دەتوانیت edge computing بەکاربهێنیت بۆ دووبارە نووسینی ڕێگاکە بۆ ئەوەی لەگەڵ بەرنامەکانی تاکە لاپەڕەدا بگونجێت بۆ نموونە، Baidu Smart Cloud 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
  // دەتوانیت سەردێڕی وەڵامەکە ڕێکبخەیت بۆ چاککردنی دەرچوونەکە، وەک out.XXX = 'MSG';
})

لەبەر ئەوەی تۆماری MX و تۆماری CNAME ناتوانن پێکەوە بژین، ئەگەر بتەوێت لە یەک کاتدا ئیمەیڵی ناوی دۆمەین A ، پێویستە هاوکاری لەگەڵ CNAME cname_flatten

جگە لەوەش، لەبەر ئەوەی پارەی هاتوچۆی دەرەوەی وڵاتی فرۆشیارانی هەور لە چین تاڕادەیەک گرانە، ئەگەر بتەوێت تێچوونەکان باشتر بکەیت، دەتوانیت DNS جوگرافیای بێبەرامبەری Huawei Cloud و ناوی دۆمەینی تایبەت بە Cloudflare for SaaS 's بەکاربهێنیت (وەک لە خوارەوە نیشان دراوە) بۆ بەدەستهێنانی ترافیک لادان──ڕێڕەوی هاتوچۆ لە چین بایدو هەوری 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)

لەگەڵ nginx بڵاوکردنەوە

تکایە ڕێکخستنێکی هاوشێوەی ئەمانەی خوارەوە زیاد بکە لە بڕگەی 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