Yerelleştirmeyle Kodlama

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Yerelleştirme tablosuna otomatik olarak eklenecek çeviri görevleri için özel çeviri görevleri için yerelleştirme API'lerini kullanabilirsiniz. Roblox, tüm yerelleştirme scripting ihtiyaçlarını ele almak için bir Class.LocalizationService sağlar. Şu görevler için LocalizationService kullanı

Eğer deneyiminizi çevirirken herhangi bir yerelleştirme API'sini kullanırsanız, bir kullanıcının yerelleştirme dilini değiştirdiğindeki herhangi bir değişikliği dinleyin yanıt al ile kullanıcıların dilini değiştirirken kullanıcıların dilini değiştirirken kullanıcıların dilini değiştirirken kullanıcıların dilini değiştirirken kullanıcıların dil

Tercüme kodunu yeniden kullandığınızda, hataları ve eksik çevirileri ele almak için bir TranslationHelperModuleScript kullanmalısınız.

Görüntüleri ve Sesleri Yerelleştirme

Kullanıcının yerleşimine dayalı benzersiz görüntü ve ses ekleyerek deneyiminizde lokalizasyonu ötesine kadar yapılandırın. Kaynakları lokalize etmek için önce kaynağı ve hedefi özelliklerini ekleyin, sonra lokalizasyon tablosu ile deneyiminizin 2>lokalizasyonunu2> alın ve

İngilizce (Kaynagı) - rbxassetid://2957093606
İspanyolca (es) - rbxassetid://2957093671
Portekizce (pt) - rbxassetid://2957093727

Yerelleştirmeyi başlatmak için, kaynağınızı ekleyin source ve target . yerelleştirme tablosuna. Yerelleştirme tablosunda, kaynağı API'ye çağrılacak şekilde etiket olarak içeren bir Anahtar girmelidir.

Aşağıdaki bir değer, varlık kimliklerini kullanarak bir lokalizasyon tablosunda bir giriş örneğidir:

AnahtarKaynakespt
Anahtar_MücevherResmi295709360629570936712957093727

Aşağıdaki kod, bir ImageLabel ile sağlanan varlık kimliğini yerel çevirim tablosunda sağlanan İspanyol varlık kimliğiyle değiştirecektir:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- Yerel değişkenler
local localizedImageID
local localizedImage = Instance.new("ImageLabel")
-- es için çeviri yükle. Bir pcall() içinde işlevi korumak için bir sonraki şekilde ifade edilir:
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- Anahtarı referans alarak yerelleştirme tablosundan varlık kimliğini alın
localizedImageID = translator:FormatByKey("Key_JewelsImage")
-- Resmin ayarlanmasını
localizedImage.Image = "rbxassetid://" .. localizedImageID
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end

Bireysel Yapımları Çevir

Bazı durumlarda, çeviri için bireysel yazıları hedeflemek isteyebilirsiniz. Translator:Translate() ile yerelleştirme tablosunda kaynağın dizidayanarak bireysel girdileri alabilirsiniz.

Bir sonraki örnekte, aşağıdaki yerelleştirme girişi kullanılır:

Kaynakesespt
EkranPantolon2950936712957093727

Aşağıdaki kod, "Ekran"ın Çıkış penceresine İspanyol çevirisini yazacaktır:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- es için çeviri yükle. Bir pcall() içinde işlevi korumak için bir sonraki şekilde ifade edilir:
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- Nesne kontektörü veya dizisağlayan Çeviri işlevini kullanın
local sourceTranslation = translator:Translate(game, "Screen")
print(sourceTranslation) -- Beklenen Çıkış: "Pantalla"
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end

Kontext Override'larını Kullanıyor

Aynı yazının birden fazla anlamı olabilir. Örneğin, "Ekran" kelimesi bir bilgisayar ekranı ve bir pencere ekranını gösterebilir, ancak İspanyol çevirileri tamamen farklıdır.

Yerelleştirme tablosunun Konuşma sütunu, konuşma üzerindeki şu anki nesneyi belirtmek için kullanılır. Aşağıdaki örnekte görüldüğü gibi yerelleştirme tablosunun Konuşma sütununa nesneyi belirtin:

KontextKaynakes
Çalışma Alanı. Pencere Ekranı. Yüzey GüvencesiEkranMoskito
EkranPantolon

Aşağıdaki kod, bir özel çeviri için öncelik belirlemek için bir konteyner denetleyicisi kullanır:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- es için çeviri yükle. Bir pcall() içinde işlevi korumak için bir sonraki şekilde ifade edilir:
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- nokta bağlantısını sağlayan Çeviri işlevini dizi
local sourceTranslation = translator:Translate( workspace.WindowScreen.SurfaceGui.TextLabel, "Screen")
print(sourceTranslation) -- Beklenen Çıkış: Mosquitero
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end

Çoklu Kontext

Çok sayıda kontext durumunda, yerelleştirme hizmeti sağdan sola kadar Konteynt alanındaki ilişkileri karşılaştırır, en yakın eşleşmekullanarak.

Örneğin, deneyiminizdeki bir lokalizasyon tablosu, aşağıdaki paylaşılan kaynağın girişlerini içerebilir:

KontextKaynakes
Çalışma Alanı. Pencere Ekranı. Yüzey GüvencesiEkranMoskito
playerGui.ScreenGui.TextButtonEkranPantolon

Eğer deneyiminizdeki bir playerGui.ScreenGui.TextLabel nesneye "Mosquitero" adını İspanyolca olarak gösteren bir lokalleştirme hizmeti eklenirse, yerelleştirme hizmeti "Mosquitero"'u en yakın konu eşleşmesi olarak İngilizce olarak gösterir.

Parametreleri Değiştirme

dinamik içerik terimlerini çevirirken, değerleri bir tablo olarak ayarla ve API aracılığıyla tabloyu bir argüman olarak geç.

Bu örnekte, deneyimin aşağıdaki girişleriyle bir lokalizasyon tablosu vardır:

AnahtarKaynakes
Ödül_1mücevher 1:intjoyas: 1:int
Ödül_2$AmountCash:fixed para ve NumJewels:int mücevher$AmountCash:fixed para ve NumJewels:int mücevher

Bu parçaları parametre değerleriyle çevirmek için aşağıdaki kod örneğini kullanın:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
-- es için çeviri yükle. Bir pcall() içinde işlevi korumak için bir sonraki şekilde ifade edilir:
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("es")
end)
if res then
-- Ödül "Key_Prize_1" içindeki değerini 100 olarak ayarla
local keyTranslation1 = translator:FormatByKey("Key_Prize_1", {100})
print(keyTranslation1) -- Beklenen Çıkış: 100 joyas
-- 500 ve 100 isimine göre birden fazla parametre ayarla
local keyTranslation2 = translator:FormatByKey("Key_Prize_2", {AmountCash=500, NumJewels=100})
print(keyTranslation2) -- Beklenen Çıkış: $500.00 dinero ve 100 mücevher
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end

Dilleri Değiştirme

Bazı durumlarda, deneyiminizde diğer dillerin çevirilerini görmek isteyebilirsiniz. LocalizationService:GetTranslatorForLocaleAsync() kullanarak farklı bir ülke kodu kullanarak yeni bir çeviri oluşturabilirsiniz.

Aşağıdaki kod örneği, bir kullanıcının küresel lokasyon ayarlarına dayanan ek bir çeviriçi kullanır:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalizationService = game:GetService("LocalizationService")
local Players = game:GetService("Players")
-- Yerel değişkenler
local player = Players.LocalPlayer
-- Açılış "pt" için çeviri yükleyin. Çeviri işlevlerini pcall() içine sarın para başarısızlıklara karşı korunması için.
local res1, translator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync("pt")
end)
-- Player'ın lokasyonuyla ikinci Çevirmeni yükleyin, bu örnekte "es"
local res2, fallbackTranslator = pcall(function()
return LocalizationService:GetTranslatorForPlayerAsync(player)
end)
-- İlk Çevirmenle Translate işlevini kullanın
if res1 then
local translate1 = translator:Translate(game, "jewels")
print(translate1) -- pt: joyas'ta Beklenen Çıkış
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end
-- İkinci Çevirmenle Translate işlevini kullan
if res2 then
local translate2 = fallbackTranslator:Translate(game, "jewels")
print(translate2) -- Kullanıcı 'es' olarak ayarlandıysa beklenen çıkış: jóias
else
print('GetTranslatorForPlayerAsync failed: ' .. fallbackTranslator)
end

Dil Değiştiren Kullanıcılara Tepki Ver

Kullanıcılar, deneyimlerindeki dillerini herhangi bir zamanda deneyim dili ayarları menüsünden değiştirebilirler. Bu kullanıcı ayarı, otomatik çeviri tarafından işlenen yazılımların yerel çevirilerini otomatik olarak günceller, ancak GUI görüntüleri veya sesler gibi şerif edilmiş yerel çevirileri değiştiremez.

Tecrübeli Dil Ayarları
Kullanıcılar deneyimde belirlenen dilleri seçebilirler.

Script'inizin yerelleştirilmiş kaynaklarınızın doğru güncellenmesini sağlamak için, GetPropertyChangedSignal öğesi içindeki değişiklikleri dinley

Aşağıdaki kod örneği, kullanıcının dilini değiştirdiğinde kullanıcının yerel kimliğini ve yerel kimliği olan çevirmen istemcisi için dilini yazdırır:


local LocalizationService = game:GetService("LocalizationService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- GetTranslatorForPlayerAsync başarılı olursa, bir oyuncunun mevcut yerleşimine bir Çeviriçi döndürür
local res, translator = pcall(function()
return LocalizationService:GetTranslatorForPlayerAsync(player)
end)
-- oyunculokasyon kimliğinde değişiklik tespit edildiğinde çağrılan işlev
local function OnLocaleIdChanged()
print("Translator has changed to: " .. translator.LocaleId)
-- Yerelleştirme API'leri ile çevirilen herhangi bir varlığı buraya oyuncunun yeni diliyle çevirmeniz gerekir
end
-- GetTranslatorForPlayerAsync'ın başarılı olduğunu kontrol et
if res then
-- Başarılı olursa, buradaki dilleri kullanarak varlıkları çevir
-- oyuncuyerel kimliğinde bir değişiklik dinleyin
translator:GetPropertyChangedSignal("LocaleId"):Connect(OnLocaleIdChanged)
else
print('GetTranslatorForPlayerAsync failed: ' .. translator)
end

Bir ÇeviriYardımcı Modülü Oluşturulması

Oyuncunun varsayılan lokasyonuna dayanarak çevirmenleri yüklediğinizde, kodu tekrar kullanabilirsiniz. Kodu tekrar kullanmak için, oyuncunun varsayılan lokasyonuna dayanan bir yardımcı ModuleScript ayarlayın, böylece belirli çevirileri ve dilleri sağlayan ve değiştiren işlevleri içerir.

Aşağıdaki kod örneği, bir ModuleScript içindeki kendi projunuzda kopyalanabilir bir ReplicatedStorage uygulanır:


local TranslationHelper = {}
local LocalizationService = game:GetService("LocalizationService")
local Players = game:GetService("Players")
-- Yerel değişkenler
local player = Players.LocalPlayer
local sourceLanguageCode = "en"
-- Çevirmenleri alın
local playerTranslator, fallbackTranslator
local foundPlayerTranslator = pcall(function()
playerTranslator = LocalizationService:GetTranslatorForPlayerAsync(player)
end)
local foundFallbackTranslator = pcall(function()
fallbackTranslator = LocalizationService:GetTranslatorForLocaleAsync(sourceLanguageCode)
end)
-- TranslateHelper için yeni bir çeviri yüklemeye kullanılan yöntemi oluşturun:
function TranslationHelper.setLanguage(newLanguageCode)
if sourceLanguageCode ~= newLanguageCode then
local success, newPlayerTranslator = pcall(function()
return LocalizationService:GetTranslatorForLocaleAsync(newLanguageCode)
end)
--Yeni olan geçerliyse yalnızca mevcut playerTranslator'ı geçersiz kıl (fallbackTranslator deneyimin kaynağı olarak kalır)
if success and newPlayerTranslator then
playerTranslator = newPlayerTranslator
return true
end
end
return false
end
-- İlk başarısız yükleme veya dönüş başarısız olduğunda bir düşük çeviriçi kullanan bir Çeviri işlevi oluşturun. Ayrıca, referans edilen nesneyi genel oyun objesine varsayılana döndürmeyi değerlendirebilirsiniz.
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
-- İlk başarısız yükleme veya dönüşüm başarısız olduğunda bir düşük çevirmeni kullanan bir FormatByKey() işlevi oluşturun
function TranslationHelper.translateByKey(key, arguments)
local translation = ""
local foundTranslation = false
-- İlk olarak oyuncunun dilini çevirmeye çalışır (eğer bir çeviri bulunduysa)
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

Modül ReplicatedStorage içindeyken, modülün işlevlerini çağırmak için bir LocalScript dan gerektirir. Aşağıdaki kod, modülün yardımcı işlevini kullanır, bir bireysel diziyi çevirir:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Tercüme modülü gerektirir
local TranslationHelper = require(ReplicatedStorage:WaitForChild("TranslationHelper"))
-- TranslateHelper'da sağlanan işlevleri kullan
TranslationHelper.setLanguage("es")
local sourceTranslation = TranslationHelper.translate("Screen")
print(sourceTranslation) -- Expected Output in 'es': "Pantalla"