mkxp-sunshine/scripts/i18n_Language.rb
2020-06-17 19:11:11 -07:00

130 lines
3.1 KiB
Ruby

# Classes for translating text similar to GNU gettext
# Translator class: translate text to another language
# for debug REMOVE BEFORE COMMITTING / BUILDING
# require "zlib"
class Language
FONT_WESTERN = 'Terminus (TTF)'
FONT_CK = 'WenQuanYi Micro Hei'
FONT_J = 'HigashiOme Gothic regular'
LANG_WESTERN = [
'en', 'fr', 'pt_BR', 'es'
]
LANG_J = [
'ja'
]
LANG_CK = [
'ko', 'zh_CN'
]
LANGUAGES = Steam.enabled? ? (LANG_WESTERN + LANG_CK + LANG_J) : ['en']
class << self
def set(lc)
dbg_print(lc.lang)
@data = nil
@tr = nil
script = nil
[lc.full.to_s, lc.lang.to_s].each do |name|
path = "Languages/#{name}.loc"
dbg_print(path)
if FileTest.exist?(path)
File.open(path, "rb") do |file|
@data = Marshal.load(file)
if LANG_CK.include? name
Font.default_name = FONT_CK
elsif LANG_J.include? name
Font.default_name = FONT_J
else
Font.default_name = FONT_WESTERN
end
Journal.setLang(name)
dbg_print(Font.default_name)
end
end
end
reset_fonts(@text_sprites)
Oneshot.set_yes_no(tr('Yes'), tr('No'))
end
# Translate some text
def tr(string)
#dbg_print(caller_locations(1, 1).first.tap{|loc| puts "#{loc.path}:#{loc.lineno}"})
if @data
rv = @data[Oneshot::crc32(string)] || string
else
rv = string
end
dbg_print(string + " -> " + rv)
return String.new(rv)
end
# Turn all database items into translatable strings
def initialize_database
$data_actors.each do |i|
i.name = TrString.new(i.name) if i && !i.name.empty?
end
$data_items.each do |i|
if i && !i.name.empty?
i.name = TrString.new(i.name)
i.description = TrString.new(i.description)
end
end
end
def dbg_print(str)
# dbg = IO.new(STDERR.fileno)
# if str.nil?
# dbg.write("null\n")
# else
# dbg.write(str.to_s + "\n")
# end
# dbg.close()
end
def register_text_sprite(key, spr)
dbg_print(key)
if @text_sprites.nil?
@text_sprites = Hash.new()
end
@text_sprites[key] = spr
end
def reset_fonts(sprites)
if sprites.kind_of?(Array)
sprites.each do |spr|
if spr.kind_of?(Sprite) and !spr.disposed?
spr.bitmap.font.name = Font.default_name
end
end
elsif sprites.kind_of?(Hash)
sprites.each_value do |spr|
if spr.kind_of?(Sprite) and !spr.disposed?
spr.bitmap.font.name = Font.default_name
elsif spr.kind_of?(Bitmap) and !spr.disposed?
spr.font.name = Font.default_name
end
end
elsif sprites.kind_of?(Sprite) and not sprites.disposed?
sprites.bitmap.font.name = Font.default_name
end
end
end
end
# Translatable string
class TrString
def initialize(str)
@str = str
end
def to_str
Language.tr(@str)
end
alias :to_s :to_str
end
def tr(text)
TrString.new(text)
end