ローカライズテーブルに 翻訳を追加 することなく、専門的な翻訳タスクには、ローカライズ API を使用できます。Roblox は、すべてのローカライズスクリプトのニーズに対応するための LocalizationService。LocalizationService
エクスペリエンスのローカライズを使用すると、ユーザーのローカルIDに変更があるかどうかを聞くことなく、「対応」ユーザーが言語を変更するときに「反応」することがあります。
翻訳コードを再使用するときは、 TranslationHelper ModuleScript を使用してエラーと不足した翻訳を処理する必要があります。
画像とサウンドのローカライズ
ユーザーのローカル言語に基づくユニークな画像とサウンドを提供して、エクスペリエンスのテキスト以外のローカライズを提供します。アセットをローカライズするには、エクスペリエンスの ローカライズ テーブル に ソース と ターゲット のアセット ID を追加してから、ローカ
ローカライズイメージとサウンドを開始するには、 ソース と ターゲット をローカライズテーブルに追加します。ローカライズテーブルのアセット ID は、API に呼び出されるための 2> キー2> を含める必要があります。ローカライズテーブルのアセット ID は、API に呼び出される
以下は、アセット ID を使用してローカライズテーブルのエントリの例です:
キー | ソース | es | pt |
---|---|---|---|
キー_ジュエル画像 | 2957093606 | 2957093671 | 2957093727 |
次のコードは、ローカライズテーブルに提供されたスペイン語のアセット ID を ImageLabel のアセット ID と交換します:
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- ローカル変数
local localizedImageID
local localizedImage = Instance.new("ImageLabel")
-- 「es」のトランスレータを読み込みます。 pcall() 内の関数をラップして失敗に対して保護します。
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- キーを参照してローカライズテーブルからアセット ID を取得する
localizedImageID = translator:FormatByKey("Key_JewelsImage")
-- 画像を設定
localizedImage.Image = "rbxassetid://" .. localizedImageID
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end
個々の弦を翻訳する
特定の場合、個々の弦をターゲットにして翻訳したい場合があります。 Translator:Translate() は、ソース文字列に基づくローカライズテーブルの個々のエントリを取得できます。
次の例では、次のローカライズエントリを使用しています:
ソース | es | es | pt |
---|---|---|---|
スクリーン | パンタラ | 295093671 | 2957093727 |
次のスクリプトは、 出力 ウィンドウにスペイン語の "Screen" の翻訳を印刷します。
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- 「es」のトランスレータを読み込みます。 pcall() 内の関数をラップして失敗に対して保護します。
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- 翻訳機能を使用し、オブジェクトコンテキストとストリン文字列を提供します
local sourceTranslation = translator:Translate(game, "Screen")
print(sourceTranslation) -- 期待される出力: "Pantalla"
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end
コンテキストオーバーライドを使用する
同じ文字列に複数の意味がある場合があります。たとえば、「Screen」はコンピューターの画面とウィンドウの画面の両方を指すことができますが、スペイン語の翻訳は完全に異なります。
ローカライズテーブルの コンテキスト コラムは、コンテキストオーバーライドを通じて翻訳を指定するために使用されます。次の例に示すように、ローカライズテーブルの ゲームオブジェクト を指定します。
コンテキスト | ソース | es |
---|---|---|
Workspace.WindowScreen.SurfaceGui.TextLabel | スクリーン | モスキテロ |
スクリーン | パンタラ |
次のスクリプトはコンテキストオーバーを使用して特定の翻訳を優先します:
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- 「es」のトランスレータを読み込みます。 pcall() 内の関数をラップして失敗に対して保護します。
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- 翻訳機能を使用し、オブジェクトコンテキストとストリングを提供します
local sourceTranslation = translator:Translate( workspace.WindowScreen.SurfaceGui.TextLabel, "Screen")
print(sourceTranslation) -- 期待される出力: Mosquitero
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end
複数のコンテキスト
複数のコンテキストの場合、ローカライズサービスは、最も近いマッチを使用して、 右から左 のコンテキストフィールドのオブジェクト一致係を比較します。
たとえば、エクスペリエンス内のローカライズテーブルには、次の共有ソースストリングエントリがある場合があります:
コンテキスト | ソース | es |
---|---|---|
Workspace.WindowScreen.SurfaceGui.TextLabel | スクリーン | モスキテロ |
playerGui.ScreenGui.TextButton | スクリーン | パンタラ |
エクスペリエンス内の playerGui.ScreenGui.TextLabel オブジェクトに「Screen」という弦楽器が追加される場合、ローカライズサービスは、最も近いコンテキストマッチで「Mosquitero」をスペイン語の翻訳として表示します。
パラメーターの代替
パラメーターを使用して ダイナミックコンテンツ を翻訳するときは、値を テーブル に設定し、API を介してテーブルをパラメーターとして渡すことができます。
この例では、エクスペリエンスにはローカライズテーブルがあり、次のエントリが含まれています:
キー | ソース | es |
---|---|---|
キープライズ_1 | 宝石1:int個 | ジョイア 1:int 個 |
キープライズ 2 | $AmountCash:fixedキャッシュとNumJewels:intのジュエル | $AmountCash:fixed ダイナー、および NumJewels:int のジュエル |
次のコードサンプルを使用して、これらの文字列をパラメータ値で翻訳します:
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- 「es」のトランスレータを読み込みます。 pcall() 内の関数をラップして失敗に対して保護します。
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- 「キー_プライズ_1」でパラメーター値を 100 に設定
local keyTranslation1 = translator:FormatByKey("Key_Prize_1", {100})
print(keyTranslation1) -- 期待される出力: 100 ジョイヤ
-- 名前で複数のパラメータを 500 と 100 に設定
local keyTranslation2 = translator:FormatByKey("Key_Prize_2", {AmountCash=500, NumJewels=100})
print(keyTranslation2) -- 期待される出力: $500.00 のダイナーと 100 の宝石
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end
言語の切り替え
In some cases, you may want to display translations of other languages in your experience. あなた can set a new translator with a different country code using LocalizationService:GetTranslatorForLocaleAsync() .
次のコードサンプルは、ユーザーのグローバルローカル設定に基づく追加の翻訳機を含む 1つのトランスレータをマニュアルの国コードで設定します:
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
local Players = game:GetService("Players")
-- ローカル変数
local player = Players.LocalPlayer
-- 「pt」のトランスレータを読み込みます。 pcall() 内のトランスレータ機能をラップして、失敗に対して保護します。
local res1, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("pt")
end)
-- この例では、「es」でプレイヤーのローカルを読み込みます
local res2, fallbackTranslator = pcall(function()
return LocalizationService:GetTranslatorForPlayerAsync(player)
end)
-- 最初の翻訳機と Translate 機能を使用する
if res1 then
local translate1 = translator:Translate(game, "jewels")
print(translate1) -- pt: ジョイアスで期待される出力
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end
-- 2番目の翻訳機との翻訳機の機能を使用する
if res2 then
local translate2 = fallbackTranslator:Translate(game, "jewels")
print(translate2) -- ユーザーが「es」に設定されている場合の期待される出力:宝石
else
print('GetTranslatorForPlayerAsync failed: ' .. fallbackTranslator)
end
言語を切り替えるユーザーに対応する
ユーザーは、エクスペリエンス中の言語設定をいつでも変更できます。このユーザー設定は、自動翻訳 によって処理されるスクリプト化されていないローカライズアセット、例えば、GUI 画像やサウンドなど、を自動的に更新しますが、スクリプト化されたローカライズの変更を更新することはでき
To ensure that your scripted localized assets update correctly, listen to the GetPropertyChangedSignal event for changes in the LocaleID property of the Translator instance returned by Class.LocalizationService.GetTranslatorFor
次のコードサンプルは、ユーザーが言語を切り替えるときに、ユーザーのローカルIDと、翻訳機のインスタンスのローカルIDを印刷します:
local LocalizationService = game:GetService("LocalizationService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- GetTranslatorForPlayerAsync が成功すると、プレイヤーの現在のローカルに対応するトランスレーターが返されます
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForPlayerAsync(player)
end)
-- プレイヤーのローカル ID が検出されたときに呼び出される関数
local function OnLocaleIdChanged()
print("Translator has changed to: " .. translator.LocaleId)
-- ローカライズ API で翻訳されたアセットをプレイヤーの新しい言語に再翻訳する必要があります
end
-- GetTranslatorForPlayerAsync が成功したかどうかをチェック
if res then
-- 成功した場合、ここでトランスレータを使用してアセットを翻訳
-- プレイヤーのローカル ID の変更を聞く
translator:GetPropertyChangedSignal("LocaleId"):Connect(OnLocaleIdChanged)
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end
TranslationHelper モジュールを作成する
プレイヤーのデフォルトのローカルに基づいてトランスレーターを読み込むと、コードを再使用する可能性があります。コードを再使用するには、安全にトランスレーターを読み込み、特定のトランスレーションを提供し、言語を切り替える機能を含む機能を提供するヘルパー ModuleScript を設定します。
次のコードサンプルは、ModuleScript 内の Class.ModuleScript をコピーして、自分のプロジェクトに ReplicatedStorage として使用できる Class.Helper を実装しています:
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.setLanguage を作成して、TransTranslationHelper の新しい翻訳を読み込みます
function TranslationHelper.setLanguage(newLanguageCode)
if sourceLanguageCode ~= newLanguageCode then
local success, newPlayerTranslator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync(newLanguageCode)
end)
--新しいものが有効である場合にのみ、現在のプレイヤーの翻訳機をオーバーライドします (fallbackTranslator はエクスペリエンスのソース言語として残ります)
if success and newPlayerTranslator then
playerTranslator = newPlayerTranslator
return true
end
end
return false
end
-- 最初にロードまたは返信できなかった場合に使用するバックアップの翻訳機を使用するトランスレート関数を作成します。また、参照されたオブジェクトを一般的なゲームオブジェクトにデフォルトに設定することもできます。
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 からモジュールの関数を呼び出す必要があります。次のコードは、モジュールのヘルパー機能を使用して、個々のストリン文字列を翻訳するためにモジュールの機能を呼び出します。
local ReplicatedStorage = game:GetService("ReplicatedStorage")-- 翻訳モジュールが必要local TranslationHelper = require(ReplicatedStorage:WaitForChild("TranslationHelper"))-- TransTranslationHelper に提供されている機能を使用するTranslationHelper.setLanguage("es")local sourceTranslation = TranslationHelper.translate("Screen")print(sourceTranslation) -- Expected Output in 'es': "Pantalla"