Skip to content
[010]2026.04.12log

「今すぐ始める」は日本語ではなかった

同じボタン、違う言語 — 翻訳では届かない30%について

気づき: 「他の国に家を建てるとは、設計図を翻訳することではなく、その街の風向きを理解することだった。」


韓国語サイトが動いているのだから、日本語サイトはすぐ作れるだろうと思った。同じ家をもう一つ建てるだけだから。壁紙の色を変えればいいのではないか。

夜、ノートPCを開いて作業を始めた。計画は単純だった。韓国語サイトを複製し、テキストを日本語に変え、デプロイする。二日あれば足りると思った。

最初の壁は技術的なものだった。

多言語サイトを作るにはi18nというものを設定する必要がある。internationalizationの略で、"i"と"n"の間に18文字あるからi18nだ。誰がつけた名前か知らないが、開発の世界にはこういう名前が多い。

Next.jsで多言語ルーティングを設定するにはnext-intlというライブラリを使う。/koでアクセスすれば韓国語、/jaでアクセスすれば日本語が表示される。説明だけ聞けば簡単だ。

しかし既存のサイトにこれを載せようとしたら、ルーティングが壊れた。ページが表示されなかったり、表示されても韓国語のまま出てきたり、404になったり。赤い文字との再会だった。管制塔にエラーを送り、返ってきた答えを適用し、また別のエラーが出る。EP.05のトグル事件と似た循環が始まった。

ルーティングの問題は最終的に解決した。しかし解決した途端、二番目の壁が現れた。

韓国語サイトのコンポーネント——画面を構成する部品——の内部に韓国語が直接埋め込まれていた。翻訳ファイルからテキストを取得するのではなく、コードの中に「무료로 시작하기(無料で始める)」「채널을 등록하세요(チャンネルを登録してください)」といった韓国語の文章がそのまま書かれていた。

これが問題なのは、この状態では翻訳ファイルをいくら変えても画面に反映されないからだ。翻訳ファイルは「ここに日本語を入れて」と言っているのに、コード自体が「ここには韓国語を入れろ」と固定してしまっている。

韓国語サイトを作ったときはこれが問題ではなかった。どうせ韓国語しか使わないのだから。しかし二つ目の言語を追加した瞬間、「最初から多言語を考慮していない構造」という事実が露呈した。EP.02でV2→V3リファクタリングを経験したのと同じパターンだった。

コンポーネントを一つ一つ開いて、ハードコーディングされた韓国語を翻訳キーに置き換える作業をした。退屈だが必要な作業だった。

技術的問題と構造的問題を解決し、日本語テキストが画面に表示され始めたとき——三番目の壁が現れた。

これは技術ではなく感覚の問題だった。

画面を見ていて、何かがおかしかった。日本語が表示されている。文法も合っている。単語も間違っていない。しかしこのサイトを日本人が見たら——これは日本人のために作られたサービスではなく、海外のサービスを翻訳して持ってきたものに見えるだろうと感じた。専門性が低く見えた。

理由を探ろうとした。文章は合っているのに、なぜ違和感があるのか。

韓国語のCTAは「지금 시작하기(今すぐ始める)」だった。これを日本語に翻訳すると「今すぐ始める」になる。意味は同じだ。しかし日本のSaaSサイトが実際に使っている表現を見ると違う。もっと丁寧で、もっと説明が多く、もっと慎重だ。「まずは無料でお試しください」——韓国語では「始める」が自然だが、日本語では「お試しください」が自然なのだ。

UIテキストだけではなかった。機能を説明する方式も違った。韓国語サイトでは機能を三行で要約してすぐCTAボタンを配置していた。しかし日本のサイトは機能一つを説明するときに、より多くの文脈を提供する。なぜこの機能が必要なのか、どんな場面で使うのか、他と何が違うのか。テキスト量が韓国語より30%以上多くなるケースが珍しくなかった。

マスタープランにすでに書いてあった。「翻訳≠ローカライゼーション。」「日本は丁寧さ+詳細な説明+高い完成度。UIテキストが韓国語より30%以上長くなり得る。」読んだときは理解したと思った。しかし実際に画面を見て「これは翻訳であって、日本のサービスではない」と感じるのは、異なる種類の理解だった。

私は日本語をビジネスレベルで使える。これはAI翻訳では代替できない資産だとマスタープランにも記されている。しかし「日本語ができる」ということと「日本人が心地よいと感じるサービスを作れる」ということは別の能力だった。前者は語学力であり、後者は文化的感覚だ。

結局、翻訳ファイルを全面的に作り直した。韓国語を日本語に変えるのではなく、日本語サイトに最初からどんな言葉があるべきかを考えながら書き直した。同じ機能だが説明の仕方が変わった。同じボタンだが文言が変わった。同じ構造だがテキストの量とトーンが変わった。

時間は予想よりずっとかかった。「二日で足りる」から始まったのに、二日では足りなかった。

しかしこの過程で一つ確かに学んだ。他の国にサービスを出すとは、同じ家をもう一つ建てることではない。その街の気候と慣習に合った別の家を建てることだ。

「今すぐ始める」は文法的に完璧な日本語だ。しかし日本語ではなかった。


🔧 このエピソードの技術用語解説

i18n(Internationalization) ソフトウェアを複数の言語で使えるようにする作業。"internationalization"の最初のiと最後のnの間に18文字あることからi18nと略す。

next-intl Next.jsで多言語サイトを構築する際に使用するライブラリ。/koでアクセスすると韓国語、/jaでアクセスすると日本語が表示されるようルーティングを設定する。

ルーティング(Routing) URLに応じてどのページを表示するかを決定すること。/jaというURLが来たら日本語ページに案内する仕組み。

コンポーネント(Component) 画面を構成する独立した部品。レゴブロックのように、ヘッダー、ボタン、カードなどのコンポーネントを組み合わせてページ全体を作る。

ハードコーディング(Hardcoding) 値をコードに直接固定すること。翻訳ファイルから取得する代わりにテキストをコードに直書きすると、言語切り替え時にコード自体を修正する必要があり、多言語対応に致命的。

翻訳キー(Translation Key) 翻訳ファイルからテキストを取得するための識別子。t('cta.start_free')と書けば、韓国語ファイルからは「무료로 시작하기」、日本語ファイルからは「まずは無料でお試しください」を取得する。

ローカライゼーション(Localization, l10n) 単純な翻訳ではなく、現地の文化・慣習・期待に合わせてサービス全体を調整すること。同じCTAボタンでも韓国語では「시작하기(始める)」、日本語では「まずはお試しください」とニュアンスが変わるべきだ。テキストだけでなく、レイアウト、説明の量、トーンまで含まれる。