本地化非文本实例¶
Time:5 分钟
在特殊情况下,可能需要将非文本实例(例如,用于商店招牌的图片或语音剪辑)本地化。在这种情况下,可以使用每种受支持语言的独特资源。
翻译模块¶
以下模块从本地化门户获取所有翻译,并使用错误处理从基于 web 的 Translator
API 捕获潜在故障。若要在游戏中使用:
在
ReplicatedStorage
中创建一个新的ModuleScript
。将该脚本重命名为 TranslationHelper。
将以下代码复制到该脚本中。
local TranslationHelper = {}
-- Roblox 服务
local LocalizationService = game:GetService("LocalizationService")
local Players = game:GetService("Players")
-- 本地变量
local player = Players.LocalPlayer
local sourceLanguageCode = "en"
-- 获取 Translator
local playerTranslator, fallbackTranslator
local foundPlayerTranslator = pcall(function()
playerTranslator = LocalizationService:GetTranslatorForPlayerAsync(player)
end)
local foundFallbackTranslator = pcall(function()
fallbackTranslator = LocalizationService:GetTranslatorForLocaleAsync(sourceLanguageCode)
end)
TranslationHelper.setSourceLanguage = function(languageCode)
if sourceLanguageCode ~= languageCode then
foundFallbackTranslator = pcall(function()
fallbackTranslator = LocalizationService:GetTranslatorForLocaleAsync(sourceLanguageCode)
sourceLanguageCode = languageCode
return true
end)
end
return false
end
-- 翻译函数
TranslationHelper.translate = function(text, object)
if not object then
object = game
end
local translation = ""
local foundTranslation = false
if foundPlayerTranslator then
return playerTranslator:Translate(object, text)
end
if foundFallbackTranslator then
return fallbackTranslator:Translate(object, text)
end
return false
end
-- 按键函数进行翻译
TranslationHelper.translateByKey = function(key, arguments)
local translation = ""
local foundTranslation = false
-- 首先试图翻译至玩家语言(如果发现 Translator)
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
如果你的游戏源语言不是英语,请将第 9 行的 sourceLanguageCode
值更改为完全支持的语言代码,该语言代码与本地化门户中的游戏源语言设置相匹配(请参阅下面的参考表)。
语言代码参考 »¶
下表概述了本地化门户中当前支持的语言。用黄色高亮显示的语言完全受 Roblox 平台/应用程序支持。
语言代码 语言
de German Deutsch
en English English
es Spanish Español
fr French Français
jp Japanese 日本語
ko Korean 한국어
pt Portuguese Português
zh-hans Chinese (Simplified) 中文(简体)
zh-hant Chinese (Traditional) 中文(繁體)
bg Bulgarian български
bn Bengali বাংলা
bs Bosnian босански
cs Czech Čeština
da Danish Dansk
el Greek ελληνικά
et Estonian Eesti
fi Finnish Suomi
hi Hindi हिन्दी
hr Croatian Hrvatski
hu Hungarian Magyar
id Indonesian Bahasa Indonesia
it Italian Italiano
ka Georgian ქართული
kk Kazakh қазақ тілі
km Khmer ភាសាខ្មែរ
lt Lithuanian Lietuvių
lv Latvian Latviešu
ms Malay Bahasa Melayu
my Burmese ဗမာစာ
nb Bokmal Bokmål
nl Dutch Nederlands
fil Filipino Filipino
pl Polish Polski
ro Romanian Română
ru Russian русский
si Sinhala සිංහල
sk Slovak Slovenčina
sl Slovenian Slovenski
sq Albanian Shqipe
sr Serbian српски
sv Swedish Svenska
th Thai ภาษาไทย
tr Turkish Türkçe
uk Ukrainian україньска
vi Vietnamese Tiểng Việt
收集资源 ID¶
若要实现本地化的资源,你应该首先收集每个版本的资源 ID,例如:
英语(源) 西班牙语 (es) 葡萄牙语 (pt)
rbxassetid://2957093606 rbxassetid://2957093671 rbxassetid://2957093727
键和翻译¶
不要在 .csv 电子表格或本地化门户中提供字符串转换,而是输入相应资源的资源 ID。请记住,还要在 LocalScript
中提供用于查找的 Key (键)值,如以下部分所述。
A B C D E F G
键 上下文 源 示例 es pt
Key_JewelsImage 2957093606 2957093671 2957093727
脚本实现¶
在继续之前,请确认:
TranslationHelper 脚本位于
ReplicatedStorage
中。.csv 电子表格已上传到本地化门户,其中包含 “Key_JewelsImage” 键和与每个本地化图片关联的有效资源 ID。
为了进行测试,你可以 下载包含西班牙语 (es) 和葡萄牙语 (pt) 的有效 ID 的测试电子表格,并将其上载到本地化门户,如articles/localization portal additional features#upload-csv-file|此处
所述。
现在将以下代码复制到一个新的 LocalScript
中。由于本教程涉及 GUI 图片,因此可以将脚本放在 StarterGui
中。
-- 静态变量
local FALLBACK_IMAGE_ID = "924320031"
-- Roblox 服务
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
-- 对翻译模块进行 Require
local TranslationHelper = require(ReplicatedStorage:WaitForChild("TranslationHelper"))
-- 创建新的屏幕 GUI
local player = Players.LocalPlayer
local playerGUI = player:WaitForChild("PlayerGui")
local screenGUI = Instance.new("ScreenGui")
screenGUI.Parent = playerGUI
-- 创建新的图像标签
local localizedImage = Instance.new("ImageLabel")
localizedImage.Size = UDim2.new(0, 185, 0, 170)
localizedImage.Position = UDim2.new(0, 40, 0, 40)
localizedImage.BackgroundTransparency = 1
localizedImage.Parent = screenGUI
-- 从翻译模块处获取(Get)资源 ID
local localizedImageID = TranslationHelper.translateByKey("Key_JewelsImage")
-- 将资源 ID(或备用 ID)应用至图像标签
local success, errorMessage = pcall(function()
localizedImage.Image = "rbxassetid://" .. localizedImageID
end)
if not success then
localizedImage.Image = "rbxassetid://" .. FALLBACK_IMAGE_ID
warn(errorMessage)
end
在 Studio 中对你的游戏进行测试,如articles/game testing#player-emulator|此处
所述,并为配置的语言/图片显示正确的图片。
西班牙语
葡萄牙语
***Roblox官方链接:本地化非文本实例