AIシュリーマンで表示される言語は、通常モードとSEOオプションで判定方法が異なります。
通常モードの優先順位
通常モードでは、おおむね次の順で言語を決定します。
- URLの
?lang=パラメータ
- ブラウザのlocalStorageに保存された
lang
- ブラウザ言語
- 対応外言語に対して設定されたフォールバック言語
https://example.com/?lang=en?lang=en でアクセスすると、en がlocalStorageへ保存され、その後のページ遷移でも使用されます。無効な言語コードや、サイトで利用できない言語コードは、そのまま翻訳先として使用しません。
SEOオプションの優先順位
SEOオプションでは、公開URLに含まれる言語が
?lang= やlocalStorageより優先されます。サブドメイン方式
https://en.example.com/products/このURLでは英語
en が優先されます。サブディレクトリ方式
https://example.com/en/products/このURLでは英語
en が優先されます。言語プレフィックスのないURLは元言語として扱います。通常モードで言語を取得するサンプル
次の例は、元言語が日本語、翻訳先言語が英語・簡体字・繁体字・韓国語の場合です。
function getCurrentAiTranslateLanguage() {
var supported = ['ja', 'en', 'zh', 'zh-tw', 'ko'];
var sourceLanguage = 'ja';
var fallbackLanguage = 'en';
function normalize(code) {
if (!code) return null;
var value = String(code).toLowerCase();
if (value === 'zh-hk') return 'zh-tw';
if (value === 'zh-cn') return 'zh';
if (value === 'zh-tw') return 'zh-tw';
if (supported.indexOf(value) >= 0) return value;
var primary = value.split('-')[0];
return supported.indexOf(primary) >= 0 ? primary : null;
}
var queryLanguage = normalize(
new URLSearchParams(window.location.search).get('lang')
);
if (queryLanguage) return queryLanguage;
try {
var storedLanguage = normalize(localStorage.getItem('lang'));
if (storedLanguage) return storedLanguage;
} catch (e) {}
var browserLanguage = normalize(
window.navigator.language ||
(window.navigator.languages && window.navigator.languages[0])
);
return browserLanguage || fallbackLanguage || sourceLanguage;
}supported と fallbackLanguage は、対象サイトの設定に合わせて変更してください。SEOオプションで取得する
SEOオプションでは、localStorageよりも先にホスト名または先頭ディレクトリを判定してください。
実装例は「SEOオプション側のページで現在の言語を判定する方法について」をご確認ください。
中国語のブラウザ言語
AIシュリーマンでは、主に次のように正規化します。
ブラウザ言語 | 適用言語 |
zh-cn | zh(簡体字) |
zh-tw | zh-tw(繁体字) |
zh-hk | zh-tw(繁体字) |
リロードなしの言語切り替え
ページ内言語切り替え機能でリロードせずに言語を変更した場合、URLの古い
lang より、現在の実行時言語を優先して差分翻訳します。独自JavaScriptから現在言語を継続的に参照する場合は、初回ロード時だけでなく、言語切り替え後にも値を再評価してください。
ライブエディタ
ライブエディタでは、編集用URLまたは認証済み編集セッションで指定した言語が通常の閲覧条件より優先されます。ライブエディタ内の言語を、一般閲覧者の判定ロジックへ流用しないでください。