तैनाती आ ऑनलाइन कइल जाला

i18n.site एकल पन्ना के एप्लीकेशन आर्किटेक्चर अपनावे ला, आ वेबसाइट के प्रवेश पन्ना आ वेबसाइट के सामग्री के स्वतंत्र रूप से तैनात कइल जाला।

उपर दिहल अनुवाद चलावे के बाद md/out/dev डाइरेक्टरी के तहत डाइरेक्टरी htmv पैदा हो जाई।

इहाँ, dev के मतलब बा कि ई .i18n/htm/dev.yml कॉन्फ़िगरेशन फाइल के आधार पर बनावल गइल बा।

dev डाइरेक्टरी के बा :

htm डाइरेक्टरी वेबसाइट के प्रवेश पन्ना हवे।

v डाइरेक्टरी में संस्करण नंबर के साथ वेबसाइट सामग्री बा।

स्थानीय पूर्वावलोकन के संस्करण संख्या के परवाह नइखे आ ई सगरी फाइल सभ के out/dev/v/0.1.0 डाइरेक्टरी में कॉपी करी।

आधिकारिक रिलीज खातिर, बदलल फाइल सभ के नया संस्करण नंबर डाइरेक्टरी में कॉपी कइल जाई।

-c के साथ कॉन्फ़िगरेशन फाइल निर्दिष्ट करीं

अलग-अलग कॉन्फ़िगरेशन फाइल out डाइरेक्टरी में संबंधित डाइरेक्टरी बनाई।

उदाहरण खातिर, .i18n/htm/main.yml out/main डाइरेक्टरी बनाई।

dev.ymlmain.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 संशोधित करीं

अनुवाद आ प्रकाशित करे खातिर md डाइरेक्टरी में i18n.site --npm या i18n.site -n चलाईं।

अगर रउआँ प्रकाशित करे खातिर लगातार एकीकरण वातावरण के इस्तेमाल करीं, त nodejs इंस्टॉल करे के जरूरत नइखे बस लॉग-इन आ प्रकाशन अनुमति ~/.npmrc के वातावरण में कॉपी करीं।

अगर रउआँ main.yml में v: के पैकेज के नाँव के संशोधित करीं, कृपया पहिले .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 अपना यूआरएल उपसर्ग में बदल दीं, जइसे कि v: //i18n-v.xxx.com

md डाइरेक्टरी दर्ज करीं आ चलाईं

i18n.site --htm_conf ol --save

भा संक्षिप्त नाम के रूप में कहल जाला

i18n.site -c ol -s

एकरा बाद, md/out/main/v डाइरेक्टरी में सामग्री के v: में सेट यूआरएल उपसर्ग पथ पर कॉन्फ़िगर करीं।

अंत में, /.v से 1s में समाप्त होखे वाला पथ के कैश समय के कॉन्फ़िगर करीं , ना त नया जारी सामग्री के तुरंत एक्सेस ना कइल जा सके ला।

अन्य रास्ता सभ खातिर कैश समय एक साल भा एकरे से ढेर सेट कइल जा सके ला ताकि फालतू के अनुरोध कम हो सके।

s3 के सामग्री के होस्ट करीं

सामग्री CDN सेल्फ होस्ट करे खातिर, अपना खुद के सर्वर के इस्तेमाल के अलावा, एगो अउरी आम विकल्प बा S3 +

S3 S3 सर्वर में लॉग इन करे खातिर rclone

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 pagecloudflare page बढ़िया विकल्प बा।

चुकी वेबसाइट एकल पन्ना के एप्लीकेशन आर्किटेक्चर के इस्तेमाल करेले एहसे याद राखीं कि यूआरएल पथ के दोबारा लिखल जाव जवना में . से index.html ना होखे.

वेबसाइट प्रविष्टि पन्ना के खाली एक बेर तैनात करे के जरूरत बा, आ बाद के सामग्री अपडेट खातिर वेबसाइट प्रविष्टि पन्ना के दोबारा तैनात करे के जरूरत नइखे।

github पन्ना पर तैनात करीं

सबसे पहिले 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

क्लाउडफ्लेयर पन्ना पर तैनात करीं

github page के तुलना में cloudflare page ई पथ के पुनर्लेखन प्रदान करे ला आ मुख्य भूमि चीन खातिर ढेर अनुकूल बा आ एकर इस्तेमाल करे के सलाह दिहल जाला।

cloudflare page के तैनाती आमतौर पर ऊपर github page के तैनाती पर आधारित होला।

एगो प्रोजेक्ट बनाईं आ ऊपर के i18n-demo.github.io गोदाम के बाइंड करीं।

प्रक्रिया नीचे दिहल आकृति में देखावल गइल बा:

संगठन i18n-demo के पहुँच प्रदान करे खातिर कृपया Add Account पर क्लिक करीं .

अगर रउआँ कौनों अउरी संगठन के गोदाम के बाउंड कइले बानी, नया संगठन के देखावल जाए से पहिले दू बेर अधिकृत करे खातिर 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
  // रिस्पांस हेडर सभ के आउटपुट के डिबग करे खातिर सेट कइल जा सके ला, जइसे कि out.XXX = 'MSG';
})

चूँकि रिकार्ड MX आ रिकार्ड CNAME के सह-अस्तित्व ना हो सके ला, अगर रउआँ एक साथ डोमेन नाम के ईमेल प्राप्त कइल चाहत बानी, cname_flatten रउआँ के रिकार्ड A में लेवल CNAME तक ले स्क्रिप्ट के साथ सहयोग करे के पड़ी।

एकरा अलावे, काहेंकी मुख्य भूमि चीन में क्लाउड विक्रेता के विदेशी ट्रैफिक शुल्क अपेक्षाकृत महंगा बा, अगर आप लागत के अनुकूलित कईल चाहतानी, त आप हासिल करे खाती DNS क्लाउड के मुफ्त भौगोलिक रिजोल्यूशन अवुरी Cloudflare for SaaS के कस्टम डोमेन नाम (जईसे कि नीचे देखावल गईल बा) के इस्तेमाल क सकतानी यातायात डायवर्सन──मुख्य भूमि चीन में यातायात रूटिंग बैडू बादल CDN , अंतर्राष्ट्रीय यातायात cloudflare जाला।

ई तैनाती अनुकूलन समाधान अउरी जटिल बाड़ें आ भविष्य में अलग-अलग अध्याय में पेश कइल जाई।

जेनेरिक डोमेन नाम के पुनर्निर्देशन कइल जाला

अगर रउआँ आपन मुख्य वेबसाइट के रूप में वेबसाइट बनावे खातिर i18n.site इस्तेमाल करीं, आमतौर पर रउआँ के पैन-डोमेन रीडायरेक्शन कॉन्फ़िगर करे के पड़ी, मने कि *.xxx.com ( www.xxx.com सहित) पर पहुँच के xxx.com पर रीडायरेक्ट करे के पड़ी।

ई आवश्यकता अलीबाबा क्लाउड CDN EdgeScript ( अंग्रेजी दस्तावेज / चीनी दस्तावेज ) के मदद से पूरा कइल जा सकेला .

अलीबाबा CDN में डोमेन नाम जोड़ीं आ अलीबाबा क्लाउड CDN में डोमेन नाम *.xxx.com से CNAME के ओर इशारा करीं .

उदाहरण खातिर, ऊपर दिहल तस्वीर में *.i18n.site के पैन-डोमेन नाँव रीडायरेक्टेशन कॉन्फ़िगरेशन निम्नलिखित बा:

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

nginx के साथ तैनात करीं

कृपया nginx के server पैराग्राफ में निम्नलिखित के समान कॉन्फ़िगरेशन जोड़ीं कृपया /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_TOKENsecrets.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

स्रोत भाषा डाइरेक्टरी, .i18n/conf.yml में fromTo में से en कॉन्फ़िगरेशन फाइल के अनुरूप

i18n:
  fromTo:
    en: zh

कृपया अनुवाद के विन्यास के देखल जाव i18