Localizing dengan Skrip

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Anda dapat menggunakan API lokalisasi untuk tugas terjemahan khusus yang tidak diperbaiki secara otomatis oleh menambahkan terjemahan ke tabel lokalisasi. Roblox menyediakan LocalizationService untuk menangani semua kebutuhan lokalisasi scripting. Gunakan LocalizationService untuk tugas berikut:

Jika Anda menggunakan API lokalisasi apa pun saat menerjemahkan pengalaman Anda, dengarkan perubahan apa pun pada LocaleID pengguna untuk bereaksi terhadap pengguna yang beralih bahasa mereka saat berada dalam pengalaman.

Saat menggunakan kembali kode terjemahan, Anda harus menggunakan TranslationHelper ModuleScript untuk menangani kesalahan dan terjemahan yang hilang.

Menglokalkan Gambar dan Suara

Tambahkan lokalisasi di luar teks dalam pengalaman Anda dengan memberikan ID gambar dan suara yang unik berdasarkan lokasi pengguna. Untuk menyelokan sumber daya, pertama-tama tambahkan ID sumber dan tujuan aset ke pengalaman Anda's tabel lokalisasi lalu gunakan API lokalisasi untuk mengambil berbagai aset.

Bahasa Inggris (Sumber) - rbxassetid://2957093606
Spanyol (es) - rbxassetid://2957093671
Portuguese (pt) - rbxassetid://2957093727

Untuk memulai lokalisasi gambar dan suara, tambahkan sumber Anda dan target ke tabel lokalisasi Anda. Entri ID aset di tabel lokalisasi harus mencakup Kunci sebagai identifikator untuk dipanggil oleh API.

Berikut adalah contoh entri di tabel lokalisasi menggunakan ID aset:

KunciSumberespt
Gambar Kunci_Jewels295709360629570936702957093727

Kode berikut akan mengganti ID aset Class.ImageLabel dengan ID aset Spanyol yang disediakan dalam tabel lokalisasi:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- Variabel lokal
local localizedImageID
local localizedImage = Instance.new("ImageLabel")
-- Muat Penerjemah untuk "es". Wrap fungsi dalam pcall() untuk melindungi terhadap kesalahan.
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- Dapatkan ID aset dari tabel lokalisasi dengan mengacu pada Kunci
localizedImageID = translator:FormatByKey("Key_JewelsImage")
-- Tetapkan gambar
localizedImage.Image = "rbxassetid://" .. localizedImageID
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end

Menerjemahkan Tali個人

Dalam beberapa kasus, Anda mungkin ingin menargetkan string individual untuk diterjemahkan. Translator:Translate() dapat mengambil entri individual di tabel lokalisasi berdasarkan string sumber.

Dalam contoh berikut, entri lokalisasi berikut digunakan:

Sumberesespt
LayarPantai2950936712957093727

Skrip berikut akan mencetak terjemahan Spanyol "Screen" ke jendela Output :


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- Muat Penerjemah untuk "es". Wrap fungsi dalam pcall() untuk melindungi terhadap kesalahan.
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- Gunakan fungsi Terjemahkan, yang memberikan konteks objek dan string
local sourceTranslation = translator:Translate(game, "Screen")
print(sourceTranslation) -- Output yang Diharapkan: "Pantalla"
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end

Menggunakan Override Konteks

Ada beberapa kasus di mana string yang sama dapat memiliki beberapa arti. Misalnya, kata "Screen" dapat menunjukkan kedua layar komputer dan layar jendela, tetapi terjemahan Spanyol sama sekali berbeda.

Kolom Konteks tabel lokalisasi digunakan untuk menentukan terjemahan melalui pengganda konteks. Spesifikasi objek dalam game di tabel lokalisasi Anda seperti dalam contoh berikut:

KonтеksSumberes
Ruang kerja.WindowScreen.SurfaceGui.TextLabelLayarPara nyamuk
LayarPantai

Skrip berikut menggunakan overwrite konteks untuk men prioritaskan terjemahan tertentu:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- Muat Penerjemah untuk "es". Wrap fungsi dalam pcall() untuk melindungi terhadap kesalahan.
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- menggunakan fungsi Terjemahkan, yang memberikan konteks objek dan string
local sourceTranslation = translator:Translate( workspace.WindowScreen.SurfaceGui.TextLabel, "Screen")
print(sourceTranslation) -- Output yang Diharapkan: Mosquitero
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end

Banyak Konteks

Dalam kasus beberapa konteks, layanan lokalisasi membandingkan hubungan objek di bidang Konteks dari kanan ke kiri , menggunakan mencocokkanterdekat.

Misalnya, tabel lokalisasi di pengalaman Anda mungkin memiliki entri Source string berbagi berikut:

KonтеksSumberes
Ruang kerja.WindowScreen.SurfaceGui.TextLabelLayarPara nyamuk
playerGui.ScreenGui.TombolTeksLayarPantai

Jika string "Screen" ditambahkan ke objek playerGui.ScreenGui.TextLabel di pengalaman Anda, lokalisasi layar menunjukkan "Mosquitero" sebagai terjemahan Spanyol sebagai mencocokkandengan konteks terdekat.

Mengganti Variabel

Ketika menggunakan parameter untuk menerjemahkan konten dinamis, tetapkan nilai ke tabel dan pas tabel sebagai argumen melalui API.

Dalam contoh ini, pengalaman memiliki tabel lokalisasi dengan entri berikut:

KunciSumberes
Hadiah_1permata 1:int^ 1:int joyas
Hadiah_Kunci_2$AmountCash:fixed uang tunai dan NumJewels:int cincin$AmountCash:fixed uang dan NumJewels:int cincin

Gunakan contoh kode berikut untuk menerjemahkan string ini dengan nilai parameter:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- Muat Penerjemah untuk "es". Wrap fungsi dalam pcall() untuk melindungi terhadap kesalahan.
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- Tetapkan nilai parameter dalam "Key_Prize_1" ke 100
local keyTranslation1 = translator:FormatByKey("Key_Prize_1", {100})
print(keyTranslation1) -- Output yang diharapkan: 100 joyas
-- Tetapkan beberapa parameter untuk 500 dan 100 dengan nama
local keyTranslation2 = translator:FormatByKey("Key_Prize_2", {AmountCash=500, NumJewels=100})
print(keyTranslation2) -- Kembalian Modal: $500.00 dinero dan 100 perhiasan
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end

Beralih Bahasa

Dalam beberapa kasus, Anda mungkin ingin menampilkan terjemahan bahasa lain dalam pengalaman Anda. Anda dapat mengatur penerjemah baru dengan kode negara yang berbeda menggunakan LocalizationService:GetTranslatorForLocaleAsync() .

Sampel kode berikut mengatur satu penerjemah dengan kode negara manual dan penerjemah tambahan berdasarkan pengaturan lokasi global pengguna:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
local Players = game:GetService("Players")
-- Variabel lokal
local player = Players.LocalPlayer
-- Memuat Penerjemah untuk "pt". Wrap fungsi penerjemah dalam panggilan untuk melindungi terhadap kesalahan.
local res1, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("pt")
end)
-- Memuat Translator kedua dengan lokasi Pemain, dalam contoh ini "es"
local res2, fallbackTranslator = pcall(function()
return LocalizationService:GetTranslatorForPlayerAsync(player)
end)
-- Gunakan fungsi Terjemahkan dengan Penerjemah pertama
if res1 then
local translate1 = translator:Translate(game, "jewels")
print(translate1) -- Output yang Diharapkan di pt: joyas
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end
-- Gunakan fungsi Terjemahkan dengan Translator kedua
if res2 then
local translate2 = fallbackTranslator:Translate(game, "jewels")
print(translate2) -- Output yang Diharapkan jika Pengguna Diposting ke 'es': jóias
else
print('GetTranslatorForPlayerAsync failed: ' .. fallbackTranslator)
end

Reaksi terhadap Pengguna yang Beralih Bahasa

Pengguna dapat mengubah pengaturan bahasa mereka kapan pun menggunakan menu Pengaturan pengalaman mereka. Pengaturan pengguna ini secara otomatis memperbarui sumber lokalisasi non-skrip, seperti string yang ditangani oleh terjemahan otomatis, tetapi mungkin tidak menyelesaikan perubahan lokalisasi skrip yang sudah rendah, seperti gambar atau suara GUI.

Pengaturan Bahasa dalam Pengalaman
Pengguna dapat memilih bahasa yang tersedia ditetapkan dalam pengalaman

Untuk memastikan bahwa aset lokalized Anda diperbarui dengan benar, dengarkan acara GetPropertyChangedSignal untuk perubahan di property Translator instance yang dikembalikan o

Sampel kode berikut menghasilkan ID Lokasi pengguna dan ID Lokasi Translator untuk pengguna ketika pengguna beralih bahasa:


local LocalizationService = game:GetService("LocalizationService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- Jika GetTranslatorForPlayerAsync berhasil, itu akan mengembalikan Translator untuk lokasi pemain saat ini
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForPlayerAsync(player)
end)
-- Fungsi yang dianggap saat ID lokasi pemain diidentifikasi
local function OnLocaleIdChanged()
print("Translator has changed to: " .. translator.LocaleId)
-- Anda harus menerjemahkan kembali setiap aset yang diterjemahkan dengan API Lokalisasi ke bahasa pemain baru di sini
end
-- Periksa apakah GetTranslatorForPlayerAsync berhasil
if res then
-- Jika berhasil, terjemahkan aset di sini menggunakan penerjemah
-- Dengarkan perubahan ID lokasi pemain
translator:GetPropertyChangedSignal("LocaleId"):Connect(OnLocaleIdChanged)
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end

Membuat Modul TranslateHelper

Ketika Anda memuat penerjemah berdasarkan lokasi pemutar default, Anda mungkin menggunakan kembali kode. Untuk menggunakan kembali kode, konfigurasilah pengguna bantuan ModuleScript yang dengan aman memuat penerjemah berdasarkan lokasi pemutar dan termasuk fungsi untuk memberikan terjemahan spesifik dan beralih bahasa.

Kode contoh berikut menerapkan TranslationHelper yang dapat Anda salin ke proyek Anda sendiri sebagai ModuleScript di ReplicatedStorage :


local TranslationHelper = {}
local LocalizationService = game:GetService("LocalizationService")
local Players = game:GetService("Players")
-- Variabel lokal
local player = Players.LocalPlayer
local sourceLanguageCode = "en"
-- Dapatkan penerjemah
local playerTranslator, fallbackTranslator
local foundPlayerTranslator = pcall(function()
playerTranslator = LocalizationService:GetTranslatorForPlayerAsync(player)
end)
local foundFallbackTranslator = pcall(function()
fallbackTranslator = LocalizationService:GetTranslatorForLocaleAsync(sourceLanguageCode)
end)
-- Buat metode TranslationHelper.setLanguage untuk memuat terjemahan baru untuk TranslationHelper
function TranslationHelper.setLanguage(newLanguageCode)
if sourceLanguageCode ~= newLanguageCode then
local success, newPlayerTranslator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync(newLanguageCode)
end)
--Hanya menggeser pemutar saat iniTranslator jika yang baru valid (fallbackTranslator tetap menjadi bahasa sumber pengalaman)
if success and newPlayerTranslator then
playerTranslator = newPlayerTranslator
return true
end
end
return false
end
-- Buat fungsi Terjemahkan yang menggunakan penerjemah jatuh cadangan jika objek pertama gagal dimuat atau dikembalikan dengan sukses. Anda juga dapat menetapkan objek yang diacak ke objek game generik
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
-- Buat fungsiFormatByKey() yang menggunakan penerjemah cadangan jika pertama gagal dimuat atau dikembalikan dengan sukses
function TranslationHelper.translateByKey(key, arguments)
local translation = ""
local foundTranslation = false
-- Pertama mencoba untuk menerjemahkan bahasa pemain (jika penerjemah ditemukan)
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

Setelah modul berada di ReplicatedStorage, butuhkan itu dari LocalScript untuk memanggil fungsi modul. Kode berikut menggunakan fungsi pengguna modul ini untuk menerjemahkan satu string individual:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Memerlukan modul terjemahan
local TranslationHelper = require(ReplicatedStorage:WaitForChild("TranslationHelper"))
-- Gunakan fungsi yang disediakan di TranslationHelper
TranslationHelper.setLanguage("es")
local sourceTranslation = TranslationHelper.translate("Screen")
print(sourceTranslation) -- Expected Output in 'es': "Pantalla"