標準の翻訳ワークフローは、プレイヤーによってどの程度頻繁に表示されるかに基づいて、エクスペリエンス内の文字列を検出し、翻訳用のローカライゼーションテーブルに追加します。ゲームプレイ中に生成された珍しい文字列や/およびプレイヤーによって作成されたテキストなど、動的に生成されたテキストやプレイヤーによって作成されたテキストを見逃す可能性があります。翻訳テキスト API を使用して、リアルタイムでこれらの文字列の翻訳を生成し、エクスペリエンスが完全にローカライズされるようにできます。
テキストをプレイヤーの言語に翻訳
テキストをプレイヤーの言語に翻訳するには、ターゲット言語コードとして Player.LocaleId をパスします。以下は、クライアントスクリプトでプレイヤーのローカルIDを取得し、それを Script に ServerScriptService して翻訳リクエストを作成する方法の例です。
- また、エクスペリエンスに オープンクラウドクライアントパッケージ を含める必要があります;サーバースクリプトがそれを必要としています
客側スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")local httpRequestFunction = ReplicatedStorage:WaitForChild("TranslateTextFunction")-- 翻訳するテキストlocal textToTranslate = "This is the example text to translate"-- プレイヤーのローカルを取得local Players = game:GetService("Players")local player = Players.LocalPlayer-- ローカルプレイヤーのローカルに対するローカルIDを取得するか、サポートされるローカル文字列に設定local locale = player.LocaleIdlocal translatedText = httpRequestFunction:InvokeServer(textToTranslate, locale)print("Translated text: ", translatedText)
ServerScriptService のサーバースクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerScriptService = game:GetService("ServerScriptService")
local oc = require(ServerScriptService.OpenCloud.V2)
-- エクスペリエンスタイルのオーバーフローメニューで https://create.roblox.com/dashboard/creations を見つける
local universeID = <your_universe_id>
-- リモート関数を作成する
local remoteFunction = Instance.new("RemoteFunction")
remoteFunction.Name = "TranslateTextFunction"
remoteFunction.Parent = ReplicatedStorage
remoteFunction.OnServerInvoke = function(player, text, locale, uni)
print(player.Name .. " requested translation for text: " .. text .. " to locale: " .. locale)
-- 翻訳リクエストを準備する
local request : oc.TranslateTextRequest = {
path = oc:UniversePath(universeID),
text = text,
-- ターゲット言語コードは、翻訳する複数のローカルをリストします。
-- ここでは、1つの言語だけをパスしています:
--ローカルスクリプトで取得されたプレイヤーローカル
target_language_codes = {locale}
}
local result = oc:TranslateText(request)
if result.Error == nil then
return result.Response.translations[locale] -- 翻訳[locale]に翻訳されたテキストが含まれていると仮定する
else
return "Error: " .. result.Error.message
end
end
テスト中
リアルタイム翻訳 API は現在、RCC 認証のみをサポートしています。結果として、Studio から API をテストするには、テストインスタンスにコードを配置する必要があります。チームテスト を使用して、スクリプトをテストインスタンスに展開し、変更をテストします。
翻訳 API 参照
API リクエストパラメータ
引数名 | 種別 | 説明 |
---|---|---|
通路 | 文字列 | 宇宙のパス。必要。 |
文字 text | 文字列 | 翻訳されるテキスト。必須です。 |
源_言語_コード | 文字列 | 入力テキストの言語を表す IETF BCP-47 言語コード。提供されない場合、システムは自動的にソース言語を検出します。 |
ターゲット_言語_コード | Array<string> | 翻訳のための IETF BCP-47 形式のターゲット言語コードのリスト。 |
API 返答フィールド
フィールド名 | 種別 | 説明 |
---|---|---|
源_言語_コード | 文字列 | ソーステキストの検出またはユーザー指定の言語を表す IETF BCP-47 言語コード。 |
翻訳 | Dictionary<string, string> | 要求された翻訳を含むマップ。キーは IETF BCP-47 言語コードで、値はその言語の翻訳されたテキストです。マップにはリクエストされたすべての翻訳が含まれます。ソーステキストがフィルタリングされた場合、このマップは空です。 |
制限
Roblox は、エクスペリエンスのプレイヤー数に基づいて、この API のリクエストを制限するための次の式を使用します:
max requests per minute per experience = 600 + (1.5 * number_of_concurrent_users)
すべてのオープンクラウド API のゲームサーバーに対して、分ごとの合計制限が 150 リクエスト、毎分あります。
対応言語
リアルタイム翻訳 API は現在、自動翻訳にサポートされている言語 とは若干異なる次の言語をサポートしています。
言語 | 言語コード |
---|---|
中国語(簡体字) | zh-cn |
中国語(伝統) | zh-tw |
英語 | en-us |
フランス語 | fr-fr |
ドイツ語 | デ-デ |
インドネシア語 | id-id |
イタリア語 | それ-それ |
日本語 | ja-jp |
韓国語 | ko-kr |
ポーランド語 | pl-pl |
ポルトガル語 | pt-br |
ロシア語 | るーる |
スペイン語 | es-es |
タイ語 | th-th |
トルコ語 | tr-tr |
ベトナム語 | vi-vn |