스크립트 로컬화

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

번역 작업을 수행하지 않고 로컬 테이블에 번역 작업을 추가하여 특화된 번역 작업을 자동으로 처리하지 않는 경우 로컬화 기능 사용 을 사용하여 특화된 번역 작업을 처리할 수 있습니다. Class.LocalizationService 를 사용하여 다음과 같은 작업을 수

경험을 번역할 때 모든 지역화 API를 사용하면 사용자의 로컬 ID에 변경 내용을 감지하여 경험에서 사용자가 언어를 전환할 때 반응하십시오.

번역 코드를 다시 사용할 때 번역 도우미 모듈 스크립트를 사용하여 오류 및 번역 누락을 처리해야 합니다.

이미지 및 사운드 지역화

사용자의 지역에 따라 텍스트 이상의 지역을 지정하려면 고유한 이미지 및 소리를 제공하여 경험에 로컬라이제이션을 추가하십시오. 자산을 로컬라이제이션하려면 먼저 원본 및 대상 자산 ID를 경험의 로컬 테이블에 추가한 다음

영어(원본) - rbxassetid://2957093606
스페인어 (es) - rbxassetid://2957093671
포르투갈어 (pt) - rbxassetid://2957093727

이미지 및 음향을 지역화하려면 소스 대상 을 로컬화 테이블에 추가하십시오. 로컬화 테이블의 자산 ID 에는 API에서 호출할 키가 포함되어 있어야 합니다. 로컬화 테이블의 자산 0> ID0> 에는 API에서 호출할 키가 포함되어야 합니다.

다음은 자산 ID를 사용하여 로컬화 테이블에 대한 예입니다.

원본espt
키_보석 이미지295709360629570936712957093727

다음 코드는 로컬화 테이블에 제공된 스페인어 자산 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() 은 원본 문자열에 따라 번역 테이블에서 개별 항목을 검색할 수 있습니다.

다음 예에서는 다음 로컬화 항목이 사용됩니다:

원본esespt
화면팬탈라2950936712957093727

다음 스크립트는 출력 창에 스페인어 번역의 "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
작업 공간.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
작업 공간.WindowScreen.SurfaceGui.TextLabel화면모스키토
playerGui.ScreenGui.텍스트 버튼화면팬탈라

경험의 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
-- “Key_Prize_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

언어 전환

일부 경우, 다른 언어의 번역을 경험에 표시하려는 경우가 있습니다. 다른 국가 코드를 사용하여 LocalizationService:GetTranslatorForLocaleAsync() 를 새로 설정할 수 있습니다.

다음 코드 샘플은 사용자의 전역 언어 설정을 기반으로 추가 번역기를 사용하는 수동 국가 코드와 기계 번역기를 사용하는 추가 번역기를 설정합니다.


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)
-- 첫 번째 번역기와 번역 기능 사용
if res1 then
local translate1 = translator:Translate(game, "jewels")
print(translate1) -- pt: joyas에서 예상 출력
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 이미지 또는

경험 내 언어 설정
사용자는 경험에서 사용할 수 있는 언어를 선택할 수 있습니다.

Class.LocalizationService.GetTranslatorForPlayerAsync() 에서 반환된 Translator 인스턴스의 로컬화 자산을 올바르게 로컬화하려면 Class.Instance.GetPropertyChangedSignal

다음 코드 샘플은 사용자가 언어를 변경할 때 사용자의 로컬 ID 및 번역기 인스턴스의 로컬 ID를 사용자에게 인쇄합니다.The following code sample prints the Locale ID of the user and the Locale ID of the Translator instance for the user when the user switches languages:


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)
-- 플레이어의 로컬 아이디가 감지되면 호출되는 함수
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

번역 도우미 모듈 생성

플레이어의 기본 로캘을 기반으로 번역기를 로드할 때 코드를 재사용할 수 있습니다. 코드를 재사용하려면 도우미 ModuleScript 를 설정하여 플레이어의 기본 로캘에 안전하게 번역기를 로드하고 특정 번역 및 언어 변경을 제공하는 기능을 포함합니다.

다음 코드 샘플은 ModuleScriptReplicatedStorage로 복사할 수 있는 번역 도우미를 구현합니다.


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)
-- TransTranslationHelper에 대한 새로운 번역을 로드하려면 TransTranslationHelper.setLanguage를 생성하세요
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
-- 첫 번째 로드 또는 성공적으로 반환하지 못하면 백업 번역기를 사용하는 Create a FormatByKey() function that uses a fallback translator if the first fails to load or return successfully
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"))
-- 번역 도우미에서 제공하는 함수를 사용하십시오
TranslationHelper.setLanguage("es")
local sourceTranslation = TranslationHelper.translate("Screen")
print(sourceTranslation) -- Expected Output in 'es': "Pantalla"