スクリプトを使ってローカライズする

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

あなたは、ローカリゼーションテーブルに翻訳を追加することでは自動的に処理されない特殊な翻訳タスクのために、ローカリゼーションAPIを使用できます。Robloxは、すべてのローカリゼーションスクリプトニーズを処理するためにLocalizationServiceを提供しています。以下のタスクにはLocalizationServiceを使用してください。

ゲームを翻訳する際にローカリゼーションAPIを使用する場合は、ユーザーが言語を切り替えたときにユーザーの言語切り替えに反応するために、ユーザーのLocaleIDの変更をリッスンしてください。

翻訳コードを再利用する場合は、エラーと欠落した翻訳を処理するためにTranslationHelper ModuleScriptを使用するべきです。

画像と音声のローカライズ

ユーザーのロケールに基づいたユニークな画像や音声を提供することで、ゲーム内のテキスト以外でローカリゼーションを追加します。アセットをローカライズするには、最初にゲームのローカリゼーションテーブルsourceおよびtargetアセットIDを追加し、次にローカリゼーションAPIを使用して異なるアセットを取得します。

英語 (元の言語) - rbxassetid://2957093606
スペイン語 (es) - rbxassetid://2957093671
ポルトガル語 (pt) - rbxassetid://2957093727

画像と音声をローカライズするには、sourceとtargetのアセットIDをローカリゼーションテーブルに追加します。ローカリゼーションテーブルのアセットIDエントリには、APIから呼び出される識別子としてKeyを含める必要があります。

以下はアセットIDを使用したローカリゼーションテーブルのエントリの例です:

KeySourceespt
Key_JewelsImage295709360629570936712957093727

次のコードは、ローカリゼーションテーブルで提供されたスペイン語のアセットIDを使用してImageLabelのアセットIDを置き換えます:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- ローカル変数
local localizedImageID
local localizedImage = Instance.new("ImageLabel")
-- "es"用のTranslatorをロードします。失敗から保護するために関数をpcall()でラップします。
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- Keyを参照してローカリゼーションテーブルからアセットIDを取得
localizedImageID = translator:FormatByKey("Key_JewelsImage")
-- 画像を設定
localizedImage.Image = "rbxassetid://" .. localizedImageID
else
print('GetTranslatorForPlayerAsyncに失敗しました: ' .. translator)
end

個々の文字列を翻訳する

場合によっては、翻訳のために個別の文字列をターゲットにしたいことがあります。Translator:Translate()は、元の文字列に基づいてローカリゼーションテーブルの個別のエントリを取得できます。

次の例では、以下のローカリゼーションエントリが使用されます:

Sourceespt
ScreenPantalla2957093727

次のスクリプトは"Screen"のスペイン語の翻訳をOutputウィンドウに印刷します:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- "es"用のTranslatorをロードします。失敗から保護するために関数をpcall()でラップします。
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- Translate関数を使用し、オブジェクトのコンテキストと文字列を提供します
local sourceTranslation = translator:Translate(game, "Screen")
print(sourceTranslation) -- 期待される出力: "Pantalla"
else
print('GetTranslatorForPlayerAsyncに失敗しました: ' .. translator)
end

コンテキストオーバーライドを使用する

同じ文字列に複数の意味がある場合があります。たとえば、「Screen」という単語はコンピュータースクリーンとウィンドウスクリーンの両方を示すことができますが、スペイン語の翻訳はまったく異なります。

ローカリゼーションテーブルのContext列は、コンテキストオーバーライドを通じて翻訳を指定するためのものです。ローカリゼーションテーブルにゲーム内オブジェクトを指定します。以下の例を参照してください:

ContextSourcees
workspace.WindowScreen.SurfaceGui.TextLabelScreenMosquitero
ScreenPantalla

次のスクリプトは、特定の翻訳を優先するためにコンテキストオーバーライドを使用します:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
local Workspace = game:GetService("Workspace")
-- "es"用のTranslatorをロードします。失敗から保護するために関数をpcall()でラップします。
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- Translate関数を使用し、オブジェクトのコンテキストと文字列を提供します
local sourceTranslation = translator:Translate(Workspace.WindowScreen.SurfaceGui.TextLabel, "Screen")
print(sourceTranslation) -- 期待される出力: Mosquitero
else
print('GetTranslatorForPlayerAsyncに失敗しました: ' .. translator)
end

複数のコンテキスト

複数のコンテキストの場合、ローカリゼーションサービスはContextフィールド内のオブジェクト関係を右から左に比較し、一番近い一致を選択します。

たとえば、あなたのゲームのローカリゼーションテーブルには、以下のような共有Source文字列エントリがあるとします:

ContextSourcees
workspace.WindowScreen.SurfaceGui.TextLabelScreenMosquitero
playerGui.ScreenGui.TextButtonScreenPantalla

「Screen」文字列がゲーム内のplayerGui.ScreenGui.TextLabelオブジェクトに追加されると、ローカリゼーションサービスは最も近いコンテキスト一致として"モスキテロ"をスペイン語翻訳として表示します。

パラメータの置き換え

動的コンテンツを翻訳する際にパラメータを使用する場合は、値をテーブルに設定し、そのテーブルをAPIを通じて引数として渡します。

この例では、ゲームには以下のエントリを持つローカリゼーションテーブルがあります:

KeySourcees
Key_Prize_1{1:int} jewels{1:int} joyas
Key_Prize_2${AmountCash:fixed} cash and {NumJewels:int} jewels${AmountCash:fixed} dinero y {NumJewels:int} joyas

次のコードサンプルを使用して、これらの文字列をパラメータ値で翻訳します:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- "es"用のTranslatorをロードします。失敗から保護するために関数をpcall()でラップします。
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- "Key_Prize_1"でパラメータ値を100に設定
local keyTranslation1 = translator:FormatByKey("Key_Prize_1", {100})
print(keyTranslation1) -- 期待される出力: 100 joyas
-- 複数のパラメータを500と100で名前を指定して設定
local keyTranslation2 = translator:FormatByKey("Key_Prize_2", {AmountCash=500, NumJewels=100})
print(keyTranslation2) -- 期待される出力: $500.00 dinero y 100 joyas
else
print('GetTranslatorForPlayerAsyncに失敗しました: ' .. translator)
end

言語を切り替える

場合によっては、ゲーム内で他の言語の翻訳を表示したいことがあるかもしれません。LocalizationService:GetTranslatorForLocaleAsync()を使用して、新しい翻訳者を異なる国コードで設定できます。

次のコードサンプルでは、手動の国コードを持つ翻訳者と、ユーザーのグローバルロケール設定に基づく追加の翻訳者を設定します:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
local Players = game:GetService("Players")
-- ローカル変数
local player = Players.LocalPlayer
-- "pt"用のTranslatorをロードします。失敗から保護するために関数をpcall()でラップします。
local res1, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("pt")
end)
-- プレイヤーのロケールで2つ目のTranslatorをロードします。 この例では"es"になります。
local res2, fallbackTranslator = pcall(function()
return LocalizationService:GetTranslatorForPlayerAsync(player)
end)
-- 最初のTranslatorを使用してTranslate関数を使用します
if res1 then
local translate1 = translator:Translate(game, "jewels")
print(translate1) -- 期待される出力: joyas
else
print('GetTranslatorForPlayerAsyncに失敗しました: ' .. translator)
end
-- 2つ目のTranslatorを使用してTranslate関数を使用します
if res2 then
local translate2 = fallbackTranslator:Translate(game, "jewels")
print(translate2) -- ユーザーが'es'に設定されている場合の期待される出力: jóias
else
print('GetTranslatorForPlayerAsyncに失敗しました: ' .. fallbackTranslator)
end

ユーザーの言語切り替えに反応する

ユーザーはゲーム内の設定メニューを使用していつでも言語設定を変更できます。このユーザー設定の変更は、自動翻訳によって処理される文字列のような、非スクリプトのローカリゼーションアセットを自動的に更新しますが、既にレンダリングされているスクリプトされたローカリゼーションの変更(GUI画像や音声など)を更新しない場合があります。

ゲーム内の言語設定
ユーザーはゲーム内で設定された利用可能な言語を選択できます

スクリプトされたローカライズアセットが正しく更新されるようにするには、LocalizationService.GetTranslatorForPlayerAsyncによって返されるTranslatorインスタンスのLocaleIDプロパティの変更に対して、GetPropertyChangedSignalイベントをリッスンします。LocalizationService.GetTranslatorForPlayerAsyncを使用する場合は、エラーに備えて関数をpcall()でラップしてください。

次のコードサンプルは、ユーザーが言語を切り替えたときにユーザーのLocale IDと翻訳者インスタンスのLocale IDを印刷します:


local LocalizationService = game:GetService("LocalizationService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- GetTranslatorForPlayerAsyncが成功した場合、プレイヤーの現在のロケールのためのTranslatorが返されます
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForPlayerAsync(player)
end)
-- プレイヤーのロケールIDの変更が検出されたときに呼び出される関数
local function OnLocaleIdChanged()
print("Translatorが次のように変更されました: " .. translator.LocaleId)
-- ここでユーザーの新しい言語に翻訳されたアセットを再翻訳する必要があります
end
-- GetTranslatorForPlayerAsyncが成功したか確認する
if res then
-- 成功した場合、ここで翻訳アセットを翻訳します
-- ユーザーのロケールIDの変化を監視します
translator:GetPropertyChangedSignal("LocaleId"):Connect(OnLocaleIdChanged)
else
print('GetTranslatorForPlayerAsyncに失敗しました: ' .. translator)
end

TranslationHelperモジュールの作成

プレイヤーのデフォルトロケールに基づいて翻訳者を読み込むときに、コードを再利用することがあります。コードを再利用するために、プレイヤーのデフォルトロケールに基づいて翻訳者を安全に読み込み、特定の翻訳を提供し、言語を切り替えるための関数を含むヘルパーModuleScriptを設定します。

次のコードサンプルは、あなた自身のプロジェクトにReplicatedStorageModuleScriptとしてコピーできるTranslationHelperを実装します:


local TranslationHelper = {}
local LocalizationService = game:GetService("LocalizationService")
local Players = game:GetService("Players")
-- ローカル変数
local player = Players.LocalPlayer
local sourceLanguageCode = "en"
-- 翻訳者を取得
local playerTranslator, fallbackTranslator
local foundPlayerTranslator = pcall(function()
playerTranslator = LocalizationService:GetTranslatorForPlayerAsync(player)
end)
local foundFallbackTranslator = pcall(function()
fallbackTranslator = LocalizationService:GetTranslatorForLocaleAsync(sourceLanguageCode)
end)
-- TranslationHelperのために新しい翻訳を読み込むメソッドTranslationHelper.setLanguageを作成します
function TranslationHelper.setLanguage(newLanguageCode)
if sourceLanguageCode ~= newLanguageCode then
local success, newPlayerTranslator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync(newLanguageCode)
end)
-- 新しい翻訳者が有効な場合にのみ、現在のplayerTranslatorをオーバーライドします(fallbackTranslatorはゲームのソース言語のままです)
if success and newPlayerTranslator then
playerTranslator = newPlayerTranslator
return true
end
end
return false
end
-- 最初の翻訳者が読み込めなかったり、成功して返さなかった場合にフォールバック翻訳者を使用するTranslate関数を作成します。参照されるオブジェクトをデフォルトの一般的なオブジェクトにすることもできます。
function TranslationHelper.translate(text, object)
if not object then
object = game
end
if foundPlayerTranslator then
return playerTranslator:Translate(object, text)
end
if foundFallbackTranslator then
return fallbackTranslator:Translate(object, text)
end
return false
end
-- 最初の翻訳者が読み込めなかったり、成功して返さなかった場合にフォールバック翻訳者を使用するFormatByKey()関数を作成します。
function TranslationHelper.translateByKey(key, arguments)
local translation = ""
local foundTranslation = false
-- 最初にプレイヤーの言語用に翻訳を試みます(翻訳者が見つかった場合)
if foundPlayerTranslator then
foundTranslation = pcall(function()
translation = playerTranslator:FormatByKey(key, arguments)
end)
end
if foundFallbackTranslator and not foundTranslation then
foundTranslation = pcall(function()
translation = fallbackTranslator:FormatByKey(key, arguments)
end)
end
if foundTranslation then
return translation
else
return false
end
end
return TranslationHelper

モジュールがReplicatedStorageに配置されると、LocalScriptからそれをrequireしてモジュールの関数を呼び出すことができます。以下のコードは、このモジュールのヘルパー関数を使用して個々の文字列を翻訳します:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- 翻訳モジュールをrequireします
local TranslationHelper = require(ReplicatedStorage:WaitForChild("TranslationHelper"))
-- TranslationHelperで提供されている関数を使用します
TranslationHelper.setLanguage("es")
local sourceTranslation = TranslationHelper.translate("Screen")
print(sourceTranslation) -- 期待される出力: "Pantalla"
©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。