স্থাপনা এবং অনলাইন

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 সম্পাদনা করুন এবং আপনার নিজের npm প্যাকেজের নাম হিসাবে md: YOUR_NPM_PACKAGE এর মান পরিবর্তন করুন 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 সম্পাদনা করুন এবং আপনার URL উপসর্গে 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: এ সেট করা URL প্রিফিক্স পাথে কনফিগার করুন।

অবশেষে, /.v থেকে 1s এ শেষ হওয়া পাথের ক্যাশে সময় কনফিগার করুন , অন্যথায় নতুন প্রকাশিত সামগ্রী অবিলম্বে অ্যাক্সেস করা যাবে না।

অপ্রয়োজনীয় অনুরোধ কমাতে অন্যান্য পাথের জন্য ক্যাশে সময় এক বছর বা তার বেশি সেট করা যেতে পারে।

s3 তে কন্টেন্ট হোস্ট করুন

স্ব-হোস্ট সামগ্রীর জন্য, আপনার নিজের সার্ভার ব্যবহার করার পাশাপাশি, আরেকটি সাধারণ বিকল্প হল S3 CDN +

আপনি 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 পৃষ্ঠায় স্থাপন করুন

একটি i18n-demo তৈরি করতে প্রথমে এখানে ক্লিক github

তারপর এই সংস্থার অধীনে গুদাম 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

ক্লাউডফ্লেয়ার পৃষ্ঠায় স্থাপন করুন

github page এর সাথে তুলনা cloudflare 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 !

একক-পৃষ্ঠার অ্যাপ্লিকেশনগুলির সাথে খাপ খাইয়ে নেওয়ার জন্য আপনি এজ কম্পিউটিং ব্যবহার করতে পারেন, উদাহরণস্বরূপ, 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 একসাথে থাকতে পারে না, আপনি যদি একই সময়ে ডোমেন নাম ইমেল পেতে চান, cname_flatten স্ক্রিপ্টের সাথে CNAME লেভেল A এ সহযোগিতা করতে হবে।

উপরন্তু, মূল ভূখণ্ডের চীনে ক্লাউড বিক্রেতাদের বিদেশী ট্রাফিক চার্জ তুলনামূলকভাবে ব্যয়বহুল, আপনি যদি খরচ অপ্টিমাইজ করতে চান, তাহলে আপনি DNS ক্লাউডের বিনামূল্যের ভৌগলিক রেজোলিউশন এবং Cloudflare for SaaS এর কাস্টম ডোমেইন নাম (নিচে দেখানো হয়েছে) ব্যবহার করতে পারেন ট্রাফিক ডাইভারশন──মূল ভূখন্ডে ট্রাফিক রাউটিং চীন Baidu ক্লাউড 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 দিয়ে স্থাপন করুন

অনুগ্রহ করে server nginx অনুরূপ একটি কনফিগারেশন যোগ করুন আপনার নিজের প্রকল্প out/main/htm এর পাথে /root/i18n/md/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

উৎস ভাষা ডিরেক্টরি, .i18n/conf.yml কনফিগারেশন ফাইলের মধ্যে fromTo এর en এর সাথে সম্পর্কিত

i18n:
  fromTo:
    en: zh

অনুগ্রহ করে অনুবাদের কনফিগারেশন পড়ুন i18