導入とオンライン
i18n.site
ではシングルページアプリケーションアーキテクチャを採用しており、Webサイトの入口ページとWebサイトのコンテンツが独立して展開されています。
上記の変換を実行すると、ディレクトリmd/out/dev
の下にディレクトリhtm
とv
生成されます。
ここで、 dev
.i18n/htm/dev.yml
設定ファイルに基づいて構築されることを意味します。
dev
ディレクトリー:
htm
ディレクトリは Web サイトの入り口ページです。
v
ディレクトリには、バージョン番号が付いた Web サイトのコンテンツが含まれています。
ローカル プレビューではバージョン番号は考慮されず、すべてのファイルが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
変更します
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
URL プレフィックス ( 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
パスのキャッシュ時間を構成します。そうしないと、新しくリリースされたコンテンツにすぐにアクセスできなくなります。
他のパスのキャッシュ時間を 1 年以上に設定して、不要なリクエストを減らすことができます。
コンテンツを s3 にホストする
コンテンツをセルフホストするには、独自のサーバーを使用することに加えて、 S3
+ CDN
を使用することも一般的なオプションです。
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/"
/.v
で終わるパスのキャッシュ時間が1s
になるようにCDN
を構成することを忘れないでください。そうしないと、新しくリリースされたコンテンツにすぐにアクセスできなくなります。
ウェブサイトを公開する
Web サイトはどこにでも展開できます。 github pageとcloudflare pageは適切な選択です。
Web サイトは単一ページのアプリケーションアーキテクチャを使用しているため、 .
含まない URL パスを必ずindex.html
に書き換えてください。
Web サイトのエントリ ページを展開する必要があるのは 1 回だけであり、その後のコンテンツ更新のために Web サイトのエントリ ページを再展開する必要はありません。
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
ウェアハウスをバインドします。
プロセスを次の図に示します。
組織i18n-demo
へのアクセスを許可するには、 Add Account
をクリックしてください。
別の組織のウェアハウスをバインドしている場合は、新しい組織が表示される前に、 Add Account
2 回クリックして承認する必要がある場合があります。
次に、ウェアハウス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")
)
さらに、以下のようにキャッシュ ルールを設定し、キャッシュ期間を 1 か月に設定してください。
上の図の 2 番目の手順で一致するドメイン名を、バインドしたドメイン名に変更してください。
中国本土での Web サイト展開の最適化
中国本土のネットワーク環境でより良いアクセシビリティ性能を獲得したい場合は、最初にドメイン名を登録してください。
次に、中国本土のクラウド ベンダーのオブジェクト ストレージを使用します+ 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
共存できないため、ドメイン名メールを同時に受信したい場合は、レコードA
にcname_flattenスクリプトをレベルCNAME
で連携させる必要があります。
さらに、中国本土のクラウド ベンダーの海外トラフィック料金は比較的高価であるため、コストを最適化したい場合は、 Huawei DNSの無料の地理的解像度とCloudflare for SaaSのカスタム ドメイン名を使用して実現できます。トラフィックの迂回──中国本土のトラフィック ルーティングは Baidu Cloud CDN
、国際トラフィックはcloudflareになります。
これらの展開最適化ソリューションはより複雑であり、将来的には別の章で紹介される予定です。
汎用ドメイン名のリダイレクト
i18n.site
使用して Web サイトをメイン Web サイトとして生成する場合、通常はパンドメイン リダイレクトを構成する必要があります。つまり、アクセスを*.xxx.com
( www.xxx.com
を含む) からxxx.com
にリダイレクトします。
この要件は、Alibaba Cloud CDN
EdgeScript
(英語ドキュメント/中国語ドキュメント) の助けを借りて達成できます。
Alibaba CDNでドメイン名を追加し、Alibaba Cloud CDN
でドメイン名*.xxx.com
からCNAME
指します。
たとえば、上の図の*.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
Web サイトの静的ファイル ( favicon.ico
、 robots.txt
など)。
ここでのアイコン ファイルはrealfavicongenerator.netで生成できます。
.i18n
.i18n
ディレクトリの下には、 i18n.site
の設定ファイルや翻訳キャッシュなどが置かれます。詳細については、次の章「設定」を参照してください。
en
ソース言語ディレクトリ.i18n/conf.yml
構成ファイルのfromTo
に対応しますen
i18n:
fromTo:
en: zh
翻訳i18