Melakukan Lokalisasi 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 ditangani secara otomatis dengan menambahkan terjemahan ke tabel lokalisasi. Roblox menyediakan LocalizationService untuk menangani semua kebutuhan skrip lokalisasi. Gunakan LocalizationService untuk tugas berikut:

Jika Anda menggunakan API lokalisasi saat menerjemahkan permainan Anda, dengarkan setiap perubahan pada LocaleID pengguna untuk bereaksi terhadap pengguna yang mengganti bahasa mereka saat berada di dalam permainan.

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

Melokalkan gambar dan suara

Tambahkan lokalisasi di luar teks dalam permainan Anda dengan menyediakan gambar dan suara unik berdasarkan lokal pengguna. Untuk melokalisasi aset, pertama-tama tambahkan source dan target ID aset ke tabel lokalisasi permainan Anda, kemudian gunakan API lokalisasi untuk mengambil aset yang berbeda.

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

Untuk memulai melokalkan gambar dan suara, tambahkan ID aset source dan target ke tabel lokalisasi Anda. Entri ID aset pada tabel lokalisasi harus menyertakan Key sebagai pengidentifikasi yang akan dipanggil oleh API.

Berikut adalah contoh entri pada tabel lokalisasi menggunakan ID aset:

KunciSumberespt
Key_JewelsImage295709360629570936712957093727

Kode berikut akan mengganti ID aset dari ImageLabel dengan ID aset bahasa Spanyol yang diberikan dalam tabel lokalisasi:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- Variabel lokal
local localizedImageID
local localizedImage = Instance.new("ImageLabel")
-- Memuat Penerjemah untuk "es". Bungkus fungsi dalam pcall() untuk melindungi terhadap kegagalan.
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- Dapatkan ID aset dari tabel lokalisasi dengan merujuk pada Kunci
localizedImageID = translator:FormatByKey("Key_JewelsImage")
-- Atur gambarnya
localizedImage.Image = "rbxassetid://" .. localizedImageID
else
print('GetTranslatorForPlayerAsync gagal: ' .. translator)
end

Menerjemahkan string individu

Dalam beberapa keadaan, Anda mungkin ingin menargetkan string individu untuk terjemahan. Translator:Translate() dapat mengambil entri individu pada tabel lokalisasi berdasarkan string sumber.

Pada contoh berikut, entri lokalisasi berikut digunakan:

Sumberesespt
LayarPantalla2950936712957093727

Skrip berikut akan mencetak terjemahan bahasa Spanyol dari "Layar" ke jendela Output:


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

Menggunakan penggantian konteks

Ada beberapa kasus di mana string yang sama mungkin memiliki banyak arti. Misalnya, kata "Layar" dapat menunjukkan layar komputer dan juga layar jendela, tetapi terjemahan bahasa Spanyolnya sama sekali berbeda.

Kolom Konteks pada tabel lokalisasi digunakan untuk menentukan terjemahan melalui penggantian konteks. Tentukan objek dalam permainan Anda pada tabel lokalisasi Anda sebagaimana dalam contoh berikut:

KonteksSumberes
workspace.WindowScreen.SurfaceGui.TextLabelLayarMosquitero
LayarPantalla

Skrip berikut menggunakan penggantian konteks untuk memprioritaskan terjemahan tertentu:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
local Workspace = game:GetService("Workspace")
-- Memuat Penerjemah untuk "es". Bungkus fungsi dalam pcall() untuk melindungi terhadap kegagalan.
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- gunakan fungsi Translate, memberikan konteks objek dan string
local sourceTranslation = translator:Translate(Workspace.WindowScreen.SurfaceGui.TextLabel, "Screen")
print(sourceTranslation) -- Keluaran yang Diharapkan: Mosquitero
else
print('GetTranslatorForPlayerAsync gagal: ' .. translator)
end

Beberapa konteks

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

Misalnya, tabel lokalisasi dalam permainan Anda mungkin memiliki entri string Sumber yang sama sebagai berikut:

KonteksSumberes
workspace.WindowScreen.SurfaceGui.TextLabelLayarMosquitero
playerGui.ScreenGui.TextButtonLayarPantalla

Jika string "Layar" ditambahkan ke objek playerGui.ScreenGui.TextLabel dalam permainan Anda, layanan lokalisasi akan menampilkan "Mosquitero" sebagai terjemahan bahasa Spanyol sebagai pencocokan konteks terdekat.

Mengganti parameter

Saat menggunakan parameter untuk menerjemahkan konten dinamis, atur nilai ke tabel dan oper tabel tersebut sebagai argumen melalui API.

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

KunciSumberes
Key_Prize_1{1:int} jewels{1:int} joyas
Key_Prize_2${AmountCash:fixed} cash and {NumJewels:int} jewels${AmountCash:fixed} dinero y {NumJewels:int} joyas

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


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- Memuat Penerjemah untuk "es". Bungkus fungsi dalam pcall() untuk melindungi terhadap kegagalan.
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- Atur nilai parameter dalam "Key_Prize_1" menjadi 100
local keyTranslation1 = translator:FormatByKey("Key_Prize_1", {100})
print(keyTranslation1) -- Keluaran yang Diharapkan: 100 joyas
-- Atur beberapa parameter menjadi 500 dan 100 berdasarkan nama
local keyTranslation2 = translator:FormatByKey("Key_Prize_2", {AmountCash=500, NumJewels=100})
print(keyTranslation2) -- Keluaran yang Diharapkan: $500.00 dinero y 100 joyas
else
print('GetTranslatorForPlayerAsync gagal: ' .. translator)
end

Mengganti bahasa

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

Sampel kode berikut menetapkan satu penerjemah dengan kode negara manual dan penerjemah tambahan berdasarkan pengaturan lokal 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". Bungkus fungsi penerjemah dalam pcall() untuk melindungi terhadap kegagalan.
local res1, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("pt")
end)
-- Memuat Penerjemah kedua dengan lokal Pemain, dalam contoh ini "es"
local res2, fallbackTranslator = pcall(function()
return LocalizationService:GetTranslatorForPlayerAsync(player)
end)
-- Gunakan fungsi Translate dengan Penerjemah pertama
if res1 then
local translate1 = translator:Translate(game, "jewels")
print(translate1) -- Keluaran yang Diharapkan dalam pt: joyas
else
print('GetTranslatorForPlayerAsync gagal: ' .. translator)
end
-- Gunakan fungsi Translate dengan Penerjemah kedua
if res2 then
local translate2 = fallbackTranslator:Translate(game, "jewels")
print(translate2) -- Keluaran yang Diharapkan jika pengguna diatur ke 'es': jóias
else
print('GetTranslatorForPlayerAsync gagal: ' .. fallbackTranslator)
end

Bereaksi terhadap pengguna yang mengganti bahasa

Pengguna dapat mengubah pengaturan bahasa mereka kapan saja menggunakan menu Pengaturan dalam permainan mereka. Perubahan pengaturan pengguna ini secara otomatis memperbarui aset lokalisasi non-skrip, seperti string yang ditangani oleh terjemahan otomatis, tetapi mungkin tidak memperbarui perubahan lokalisasi skrip yang telah dirender, seperti gambar atau suara GUI.

Pengaturan Bahasa dalam permainan
Pengguna dapat memilih bahasa yang tersedia yang diatur dalam permainan

Untuk memastikan bahwa aset lokalisasi skrip Anda diperbarui dengan benar, dengarkan acara GetPropertyChangedSignal untuk perubahan di properti LocaleID dari instansi Translator yang dikembalikan oleh LocalizationService.GetTranslatorForPlayerAsync. Saat menggunakan LocalizationService.GetTranslatorForPlayerAsync, bungkus fungsi dalam pcall() jika terjadi kesalahan.

Sampel kode berikut mencetak Locale ID pengguna dan Locale ID dari instansi Translator untuk pengguna saat pengguna mengganti bahasa:


local LocalizationService = game:GetService("LocalizationService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- Jika GetTranslatorForPlayerAsync berhasil, itu akan mengembalikan Translator untuk locale saat ini pemain
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForPlayerAsync(player)
end)
-- Fungsi yang dipanggil ketika perubahan ID locale pemain terdeteksi
local function OnLocaleIdChanged()
print("Translator telah berubah menjadi: " .. translator.LocaleId)
-- Anda harus menerjemahkan kembali aset apa pun yang diterjemahkan dengan API Lokalisasi ke bahasa baru pemain di sini
end
-- Periksa apakah GetTranslatorForPlayerAsync berhasil
if res then
-- Jika berhasil, terjemahkan aset di sini menggunakan penerjemah
-- Dengarkan untuk perubahan di ID locale pemain
translator:GetPropertyChangedSignal("LocaleId"):Connect(OnLocaleIdChanged)
else
print('GetTranslatorForPlayerAsync gagal: ' .. translator)
end

Buat module TranslationHelper

Saat Anda memuat penerjemah berdasarkan lokal default pemain, Anda mungkin menggunakan kembali kode. Untuk menggunakan kembali kode, siapkan ModuleScript pembantu yang memuat penerjemah dengan aman berdasarkan lokal default pemain dan menyertakan fungsi untuk memberikan terjemahan tertentu dan mengganti bahasa.

Sampel kode berikut mengimplementasikan 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 menimpa playerTranslator saat ini jika yang baru valid (fallbackTranslator tetap sebagai bahasa sumber permainan)
if success and newPlayerTranslator then
playerTranslator = newPlayerTranslator
return true
end
end
return false
end
-- Buat fungsi Translate yang menggunakan penerjemah cadangan jika yang pertama gagal untuk memuat atau kembali sukses. Anda juga dapat mengatur objek yang dirujuk untuk default ke objek umum
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 fungsi FormatByKey() yang menggunakan penerjemah cadangan jika yang pertama gagal untuk memuat atau kembali sukses
function TranslationHelper.translateByKey(key, arguments)
local translation = ""
local foundTranslation = false
-- Pertama mencoba menerjemahkan untuk 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, ambil dengan LocalScript untuk memanggil fungsi modul. Kode berikut menggunakan fungsi bantu modul ini untuk menerjemahkan string individu:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Mengambil modul terjemahan
local TranslationHelper = require(ReplicatedStorage:WaitForChild("TranslationHelper"))
-- Menggunakan fungsi yang disediakan dalam TranslationHelper
TranslationHelper.setLanguage("es")
local sourceTranslation = TranslationHelper.translate("Screen")
print(sourceTranslation) -- Keluaran yang Diharapkan dalam 'es': "Pantalla"
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.