pt-BRとは? pt-PTとの違いと、「pt」だけでは足りない理由
pt-BRは、ブラジルで書かれるポルトガル語を指す言語タグです。ptが言語(ポルトガル語)、BRが地域(ブラジル)を表します。pt-PTは同じ作りでポルトガルを指し、慣例上はヨーロッパ・ポルトガル語全般を指します。ptだけのタグは地域を書いていないだけで、「中立のポルトガル語」という意味ではありません。
この最後の点が実務でいちばん厄介です。ブラウザ・スマートフォン・ゲームエンジンが日付や数値の書式に使っているUnicode CLDRのデータでは、ptはpt-Latn-BR(ラテン文字・ブラジル)に解決されます。Node 22のIntl.Localeでptを最大化すれば確認できます。つまりptで出荷したビルドは、ポルトガルのプレイヤーにも黙ってブラジルの慣習を見せます。
ストアの言語一覧やファイル名でpt-BRを見て調べに来たなら、この先で決まるのは四つです。タグの書き方、プラットフォームごとの呼び名、実際に違う語と書式、1言語分の予算での選び方。
タグはpt-BRかpt-PTと書く。裸のptが何になるかを知っておく
正規形は、言語サブタグを小文字、地域サブタグを大文字にします。タグの解釈自体は大文字小文字を区別しませんが、ツールは正規化しますし、リポジトリ内で綴りが混ざると検索が当たらなくなります。pt-br・pt-pt・ptをIntlの正規化にかけるとpt-BR・pt-PT・ptが返るので、表記揺れは流派の問題ではなく1コマンドで決まります。
地域サブタグはISO 3166-1の2文字の国コードです。だからpt-PTは冗長に見えて冗長ではありません。国がポルトガル、書記標準がヨーロッパ・ポルトガル語です。ポルトガル語はアンゴラやモザンビークなどでも公用語で、pt-AOやpt-MZというタグも実在します。これらの桁区切りはブラジル式のピリオドではなくポルトガルと同じノーブレークスペースですが、pt-PTの別名ではありません。pt-AOは4桁の数値を区切り、pt-PTは区切りません。
裸のptの代償は、ロケール照合で表に出ます。プレイヤーの環境がpt-PTを要求し、ビルドにptしか入っていない場合、lookup方式の照合はptまで切り詰めて一致と判定します。画面には文字が入り、エラーも出ず、リスボンのプレイヤーはブラジル式の数値書式でブラジルのポルトガル語を読みます。誰も報告してくれない不具合です。サブタグの構造はBCP 47 言語タグの意味、書式データの出どころはUnicode CLDRとはで扱っています。
同じ2変種が、プラットフォームごとに4通りの綴りで呼ばれる
どの表記も、存在する変種が二つであることは一致しています。食い違うのは綴りだけで、しかも互いに似ているので、間違えても黙って通ってしまいます。
破綻の大半は二行から出ます。アンダースコア形はgettext・POSIXのロケール名・Javaが使う形なので、同じプロジェクトにpt_BRとpt-BRが同居し、文字列比較が一致しません。Androidは地域修飾子にrを付けるため、values-pt-BRというディレクトリは有効な修飾子として扱われません。正確な書式は公式のリソース修飾子のドキュメントで確認してください。修飾子の解決はAndroid strings.xmlの書き方、アンダースコアの慣例はgettext POファイル形式で扱っています。
異質なのはSteamです。API上の言語コードがタグではなく英単語で、ブラジルのポルトガル語はbrazilian、ヨーロッパのポルトガル語はportugueseになります。正解の表はSteamworksのローカライズと言語のページにあり、英語名・現地語名・APIの言語コード・別枠のWeb APIコードが並んでいます。各プラットフォームの名前から自分のロケール識別子への対応は、1枚のデータとして持ちます。ストアで言語を掲げることが何を約束するかはSteamの対応言語は何を意味するかで扱っています。
ブラジル ポルトガル / 欧州 BCP 47 正規形 pt-BR pt-PT アンダースコア形 pt_BR pt_PT (gettext .po、POSIXロケール名、Java の Locale) Android リソースディレクトリ values-pt-rBR values-pt-rPT Unity / Unreal のカルチャー名 pt-BR pt-PT App Store Connect のロケール pt-BR pt-PT Google Play Console のロケール pt-BR pt-PT Steam の API 言語コード brazilian portuguese どの行も、各プラットフォームの公式な言語一覧またはリソース修飾子の 一覧から正確にコピーすること。タグから復元してはいけない。ストア表示上の ラベル文言はプラットフォームごとに異なり、過去に変更もある。
違うのは、ポーズメニューに出ている語
1990年の正書法協定は綴りの違いを一部取り除いたもので、両者を統合したかのように引用されることがあります。しかし語彙と文法には触れていません。UIテキストが分かれるのは語彙です。
ゲームの読み味を決めるのは最初の4行です。ファイル・保存・画面・ユーザーは、セリフではなくメニュー・設定・エラー文に出るからです。ブラジル向けビルドのメニュー項目はsalvar、ヨーロッパ向けはguardarになります。ポルトガルの読者もsalvarは問題なく理解します。ただ、全プレイヤーが必ず見る場所で「よその国向けに書かれた文章だ」と分かるだけです。
文法も分かれ、しかも状態表示に出る構文で分かれます。現在進行の表現は、ブラジルでは動名詞を使ってestou fazendo(〜している)、ヨーロッパでは通常aと不定詞でestou a fazerです。オートセーブ中やロード中のメッセージを片方の型で作ると、もう片方では外国語のように読まれます。
三つ目の軸は呼びかけ方で、これは翻訳を始める前に決めるものです。ヨーロッパ・ポルトガル語は親称単数のtuと、より距離を置いて三人称活用を取るvocêを区別します。ブラジル・ポルトガル語は国内の多くの地域でvocêを普通の二人称として使います。結果として、ブラジルでは自然に親しみやすく読めるチュートリアルが、ポルトガルでは硬い、あるいは古風に読まれることがあります。次のバッチを訳す人に任せず、変種ごとに用語集で固定してください。
日本語 ブラジル (pt-BR) ポルトガル (pt-PT) ファイル arquivo ficheiro 保存する salvar guardar 画面 tela ecrã ユーザー usuário utilizador マウス mouse rato 携帯電話 celular telemóvel バス ônibus autocarro 電車 trem comboio
数値・日付・複数形の違いは自分の手で確認できる
この節の出力はすべてNode 22のIntlから得たものです。参照しているのはUnicode CLDRのデータで、このビルドではバージョン46です。出どころを書くのは、同じ呼び出しを自分で走らせて突き合わせられるようにするためです。
数値は桁区切りが違います。ブラジルはピリオド区切り、ヨーロッパはノーブレークスペース区切りで、小数点はどちらもカンマです。見落としやすいのは桁数で、ヨーロッパ・ポルトガル語は4桁の数値を区切らず、5桁から区切ります。日本語の1,234,567.89とは3種類とも別なので、日本語UIから作った表示をそのまま流用できません。通貨記号の位置も、ブラジルは前、ポルトガルは後ろです。
日付は思われているほど違いません。長い形式はどちらも9 de março de 2026で、日・月・年の順と月名を小文字で書く点は共通です。短い日付はブラジルが4桁年、ポルトガルが2桁年で、中間の形式は形そのものが違います。
レイアウトを壊すのは曜日の略称です。ヨーロッパ・ポルトガル語に短い曜日名を要求すると、domingoやsegundaのような語がそのまま返ります(長い形式はsegunda-feira)。日本語UIは曜日を1文字で組めるため、カレンダーやログインボーナスの帯を「月 火 水」の幅で設計してしまいがちです。その幅はブラジル向けの3文字+点の略称でも既にぎりぎりで、ポルトガル向けでは確実にあふれます。CLDR自身の言い回しも分かれており、2週間後はブラジルでem 2 semanas、ポルトガルでdentro de 2 semanasです。
構造的に違うのは、ゼロの複数形分類です。ブラジル・ポルトガル語は0をoneに、ヨーロッパ・ポルトガル語はotherに分類します。つまりブラジルは0 item、ポルトガルは0 itensが正しい形です。個数を含む文字列は、両変種で複数形のブロックを共有できません。ICU MessageFormatの書き方で文字列を通しているなら、pt-BRとpt-PTの該当エントリは骨組みそのものが別になります。
数値と通貨 pt-BR 1234567.89 -> 1.234.567,89 pt-PT 1234567.89 -> 1 234 567,89 区切りは U+00A0 ノーブレークスペース pt-BR 1234.5 -> 1.234,5 pt-PT 1234.5 -> 1234,5 5桁未満は区切らない pt-BR 1234.5 -> R$ 1.234,50 通貨 BRL、記号は前 pt-PT 1234.5 -> 1234,50 € 通貨 EUR、記号は後ろ 参考: 日本語 (ja) -> 1,234,567.89 日付 dateStyle pt-BR pt-PT short 09/03/2026 09/03/26 medium 9 de mar. de 2026 09/03/2026 long 9 de março de 2026 9 de março de 2026 曜日の略称 dom. seg. ter. domingo segunda terça ゼロの複数形分類 pt-BR select(0) -> "one" よって 0 item pt-PT select(0) -> "other" よって 0 itens
1変種を選ぶ場合と、両方出して二重払いを避ける場合
予算がポルトガル語1本分なら、通例はpt-BRです。根拠は人口で、ブラジルの話者人口はポルトガルよりはるかに多く、同じ費用で届く読者が多くなります。ただしこれは既定値で、規則ではありません。ポルトガルが自分のゲームで実在の層かどうかは、地域別のウィッシュリストやアクセスのデータで分かります。読み方は地域別ウィッシュリストの読み方で扱っています。
両方出す場合に節約できるのは、翻訳ではなく構造です。文字列キー、プレースホルダの形、用語集の様式、レビューのチェックリスト、文脈として渡すスクリーンショット。流用できないのは用語集の中身、呼びかけ方の決定、そして個数を含む文字列の複数形ブロックです。二つ目の変種は、一つ目に対する一括置換ではなく、その変種の母語話者による適応作業として見積もってください。
この判断はスペイン語の判断と同じ形をしています。大きな書記標準が二つあり、市場規模に大きな差があり、語彙の差は気づかれる程度に広い。その事例は中南米スペイン語とスペイン本国スペイン語の違いで通して扱っています。
発注するときは、依頼書に「ポルトガル語」ではなくpt-BRまたはpt-PTと書いてください。日本のチームはポルトガル語を英語からの翻訳として発注しがちで、そこで変種を書かないと、普段ヨーロッパの取引先と働く訳者と、ブラジルのスタジオと働く訳者で前提が別々になります。対象読者・プラットフォーム・文字数制限と並べて、変種もキットに書き込んでください。ほかの項目はローカライズキットの準備にまとめています。
- 裸のptはリポジトリ内の不具合として扱う(CLDRがブラジルに解決するため)
- 受け取りうるプラットフォーム名がすべて自分のロケール識別子に着地することをテストする
- リリース前に、4桁の数値出力と、幅の狭い列に入る曜日ラベルを確認する
- ストアではどの言語枠を埋めているのかを確認する。総称のポルトガル語の枠にブラジル向け翻訳を出すと、出荷していない対応をポルトガルに約束することになる