Dün gece, yeni bir sistem için DataTable'ları CSV'den import etmem gerekti. "Tamam" dedim, "Unreal Engine dokümanları basit gösteriyor, birkaç satır FString işi." İlk denemede, normal string'ler, integer'lar, float'lar... Hepsi kusursuz import oldu. Kendimi bir an Blueprint'siz kod yazan tanrı ilan ettim. Tabii ki hemen ardından çöküş geldi.
Sistemde çoklu dil desteği (Localization) olacaktı. Yani DataTable'daki bazı metin alanları, doğrudan "Merhaba Dünya" yazmak yerine, String Table'daki anahtarları (FText) tutacaktı. CSV'me güvenle şöyle bir satır yazdım:
C++:
Description, "TXT_ITEM_COOL_DESC"
Meğerse çözüm, FTableRowJSON ile değil, doğrudan UDataTable::CreateTableFromCSVString gibi fonksiyonlara inerek, FText property'lerini özel işlemden geçirmekteymiş. Ya da daha pratik yol: CSV'deki localized text alanlarını özel bir formatla yazmak.
Sonunda bulduğum yöntem şu: CSV hücresine, NSLOCTEXT macro'sunun formatında yazmak.
C++:
Description, NSLOCTEXT("GameNamespace", "TXT_ITEM_COOL_DESC", "Default Text")
Olayın özeti: Unreal, CSV import'u için FProperty sistemini kullanıyor ve FText property'si, String Table anahtarını otomatik çözümleyemiyor. Ya NSLOCTEXT formatını kullanacaksın, ya da import işlemini manuel yazacaksın. Benim gibi DataTable'ları dış araçlarla (Google Sheets, vs.) doldurup import edenler için ciddi bir engel.
Siz de böyle bir localization kabusu yaşadınız mı? DataTable'larınızı nasıl yönetiyorsunuz? JSON kullanmak daha mı az sinir bozucu acaba?