번역 작업을 수행하지 않고 로컬 테이블에 번역 작업을 추가하여 특화된 번역 작업을 자동으로 처리하지 않는 경우 로컬화 기능 사용 을 사용하여 특화된 번역 작업을 처리할 수 있습니다. Class.LocalizationService 를 사용하여 다음과 같은 작업을 수
경험을 번역할 때 모든 지역화 API를 사용하면 사용자의 로컬 ID에 변경 내용을 감지하여 경험에서 사용자가 언어를 전환할 때 반응하십시오.
번역 코드를 다시 사용할 때 번역 도우미 모듈 스크립트를 사용하여 오류 및 번역 누락을 처리해야 합니다.
이미지 및 사운드 지역화
사용자의 지역에 따라 텍스트 이상의 지역을 지정하려면 고유한 이미지 및 소리를 제공하여 경험에 로컬라이제이션을 추가하십시오. 자산을 로컬라이제이션하려면 먼저 원본 및 대상 자산 ID를 경험의 로컬 테이블에 추가한 다음
이미지 및 음향을 지역화하려면 소스 대상 을 로컬화 테이블에 추가하십시오. 로컬화 테이블의 자산 ID 에는 API에서 호출할 키가 포함되어 있어야 합니다. 로컬화 테이블의 자산 0> ID0> 에는 API에서 호출할 키가 포함되어야 합니다.
다음은 자산 ID를 사용하여 로컬화 테이블에 대한 예입니다.
키 | 원본 | es | pt |
---|---|---|---|
키_보석 이미지 | 2957093606 | 2957093671 | 2957093727 |
다음 코드는 로컬화 테이블에 제공된 스페인어 자산 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 |
---|---|---|
작업 공간.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 를 설정하여 플레이어의 기본 로캘에 안전하게 번역기를 로드하고 특정 번역 및 언어 변경을 제공하는 기능을 포함합니다.
다음 코드 샘플은 ModuleScript 내 ReplicatedStorage로 복사할 수 있는 번역 도우미를 구현합니다.
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"