Chromeでアクセスするとたまに英語で表示されるサイトがある

事象

ごくたまにAzureのログイン画面が以下の様に英語で表示されてしまう。

何故か英語で表示される

Azureの他のサイトは日本語で表示されているのに、ログイン画面だけ英語になる。
また、何度か色々な画面遷移していると日本語表示に変わった。

原因

対応方法・解説

Chromeの設定

確認したところ言語の設定が以下の様になっていた。

上記設定の場合、英語で表示できるサイトは英語になる

この優先順位とは、HTTPリクエストヘッダーのaccept-languageに相当する設定と思われる。
そのため、英語表示行えるサイトはこれに従い英語表記となる。
但し、この設定が正しく評価して表示するサイトはごく少数な気がする。
(私の知っている限りは、はてなブログツールバーの一部および管理者画面、Amazonセラーセントラル位)
よって、優先言語を日本語を第一位に設定すれば無事解決した。

Cookieの設定

上記優先言語の設定を変更せずとも、日本語に切り替わったケースがあった。
これは、多分Cookieに表示するための情報を保持されたためと思われる。
そのため、シークレットモードで再度アクセスすると、英語表示に戻ってしまった。
よって、恒久的な対応としては、上記の通り優先言語設定を日本語にする必要がある。

Chromeの日本語表示

優先言語の三点リーダーを押すと、「Google Chromeをこの言語で表示」という設定がある。
これは、Chromeの各種部分をその指定した言語で表示する機能である。
この設定自体は、サイトを日本語で表示するための機能は直接的には存在しないと思われる。(※1)

※1 但し、当設定をチェックすると言語の優先順位も先頭に入れ替わった。
よって、当設定を行うことで優先順位も同時に設定されるというのが正しい理解と考えている。

Seleniumでの対応方法

上記より、Seleniumで--lang=jaと指定しているのは、上記のChromeの日本語表示と思われる。
また、どうもSleniumは、言語の優先順位は英語が第一位のままな気がする。
そのため、日本語サイトをアクセスする正しい設定は以下の様な実装が必要と考える。(※2)

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
from splinter.driver.webdriver import BaseWebDriver, WebDriverElement

option = Options()
option.add_experimental_option('prefs', {'intl.accept_languages': 'ja'})
option.add_argument('--lang=ja-JP')
driver = webdriver.Chrome(options=option)
(以下略)

※2 但し、コードの一部の抜粋 & 実際に動かしていないコードである。

後日談

しかしながら、上記を施しても駄目なサイトが存在した。
そのサイトはアクセスしてきたサイトのIPを判定して、言語設定を行う実装がなされていた。
IP偽装も考えていたが、クエリーパラメータで指定できる対応もなされていた。
よって、https://~/?hoge=jaみたいなのを追加することで対応できた。