Quod erat demonstrandum
[box class=calendar_today]
por Masked
[box class=calendar_today]Características[/box]O script carrega textos de um arquivo .ini externo e armazena eles, de forma a poderem ser usados depois. Esses textos são organizados usando as chaves do INI como nome dos textos e as seções como línguas.
Ex.:
Ele também adiciona um atalho \l[tag] que pode ser usado nas mensagens ou no nome de itens no database (itens incluem personagens e habilidades) e que é substituído pelo texto correspondente à tag em questão.
[box class=calendar_today]Instruções[/box]No script, nos comentários em verde
[box class=calendar_today]Script[/box]
Cole acima do Main
[box class=calendar_today]Créditos e Agradecimentos[/box]- a mim, por criar e disponibilizar
MS - Multi-Língua
[/box]por Masked
[box class=calendar_today]Características[/box]O script carrega textos de um arquivo .ini externo e armazena eles, de forma a poderem ser usados depois. Esses textos são organizados usando as chaves do INI como nome dos textos e as seções como línguas.
Ex.:
Código:
[Portugues]
APPLE=maçã
GRAPE=uva
[English]
APPLE=apple
GRAPE=grape
[box class=calendar_today]Instruções[/box]No script, nos comentários em verde
[box class=calendar_today]Script[/box]
Código:
#==============================================================================
# MBS - Multi-linguagem
#------------------------------------------------------------------------------
# por Masked
#==============================================================================
($imported ||= {})[:mbs_multi_language] = true
#==============================================================================
# ** MBS
#==============================================================================
module MBS
#============================================================================
# ** MultiLanguage
#============================================================================
module MultiLanguage
#-------------------------------------------------------------------------
# Configurações
#-------------------------------------------------------------------------
BASENAME = 'Strings' # Nome base dos arquivos
SRC = '' # Pasta onde fica o .ini
DEST = 'Data' # Pasta onde fica o .rvdata2
SIZE = 2048 # Tamanho do buffer de leitura do .ini
#-------------------------------------------------------------------------
# * Funções da WinAPI
#-------------------------------------------------------------------------
@@api_get_profile_string = Win32API.new('kernel32','GetPrivateProfileStringA','pppplp','l')
@@api_get_profile_section = Win32API.new('kernel32','GetPrivateProfileSectionA','pplp','l')
#-------------------------------------------------------------------------
# * Variáveis
#-------------------------------------------------------------------------
@@cache = {}
#-------------------------------------------------------------------------
# * Transformação da string numa string UTF-8
# string : A string que será transformada em UTF-8
#-------------------------------------------------------------------------
def self.encode(string)
string.unpack('C*').pack('U*')
end
#-------------------------------------------------------------------------
# * Leitura de uma língua do arquivo .ini
# language : Língua a ser carregada
#-------------------------------------------------------------------------
def self.read_ini(language)
section = ""
buffer = "\0" * SIZE
n = 0
begin
n = @@api_get_profile_section.call(language,buffer,SIZE,"#{Dir.pwd}/#{SRC}/#{BASENAME}.ini")
section << encode(buffer[0...n])
end while n == SIZE - 2
lang = section.split("\0").select {|s|s.include?('=')}.inject({}) do |r, v|
i = v.index('=')
key = v[0...i]
str = v[(i+1)..-1]
r[key] = str
r
end
@@cache[language] = lang
return lang
end
#-------------------------------------------------------------------------
# * Leitura de uma língua do arquivo .rvdata2
# [OPT] path : A pasta do arqiuvo .rvdata2
#-------------------------------------------------------------------------
def self.load_languages(path=DEST)
@@cache = load_data("#{path}/#{BASENAME}.rvdata2")
end
#-------------------------------------------------------------------------
# * Aquisição da língua padrão do jogo
#-------------------------------------------------------------------------
def self.default_lang
buffer = "\0" * SIZE
i = @@api_get_profile_string.call('Game','Language','Portugues',buffer,SIZE,"#{Dir.pwd}/Game.ini")
buffer[0...i]
end
#-------------------------------------------------------------------------
# * Aquisição da lista de línguas do jogo
#-------------------------------------------------------------------------
def self.languages
buffer = "\0" * SIZE
i = @@api_get_profile_string.call('Game','Languages','Portugues',buffer,SIZE,"#{Dir.pwd}/Game.ini")
buffer[0...i].split(/\s*,\s*/)
end
#-------------------------------------------------------------------------
# * Aquisição de uma tag em uma linguagem
# language : A língua da qual o texto será carregado
# tag : O identificador do texto
#-------------------------------------------------------------------------
def self.load(language, tag)
read_ini(language) unless @@cache.has_key?(language)
return @@cache[language][tag]
end
#-------------------------------------------------------------------------
# * Salvamento das línguas para o arquivo .rvdata2
# [OPT] path : caminho da pasta d destino do arquivo .rvdata2
#-------------------------------------------------------------------------
def self.save_languages(path=DEST)
languages.each do |lang|
read_ini(lang)
end
Dir.mkdir(path) unless FileTest.directory?(path)
save_data(@@cache, "#{path}/#{BASENAME}.rvdata2")
end
#-------------------------------------------------------------------------
# * Limpamento do cache do módulo
#-------------------------------------------------------------------------
def self.clear
@@cache.clear
end
#-------------------------------------------------------------------------
# * Carregamento das línguas
#-------------------------------------------------------------------------
if FileTest.file?('Game.rgss3a')
load_languages
File.delete("#{SRC}/#{BASENAME}.ini")
end
#-------------------------------------------------------------------------
# * Salvamento das línguas
#-------------------------------------------------------------------------
if $TEST && !FileTest.file?('Game.rgss3a')
save_languages
end
end
end
#------------------------------------------------------------------------------
# * Definição da linguagem padrão
#------------------------------------------------------------------------------
$LANGUAGE = MBS::MultiLanguage.default_lang
#==============================================================================
# ** Kernel
#------------------------------------------------------------------------------
# Módulo geral, todos os métodos adicionados aqui podem ser usados em qualquer
# lugar
#==============================================================================
module Kernel
#--------------------------------------------------------------------------
# * Leitura de um texto do arquivo de língua
# name : Nome do texto
# [OPT] language : Língua da qual carregar o texto
#--------------------------------------------------------------------------
def load_string(name, language=$LANGUAGE)
return MBS::MultiLanguage.load(language, name)
end
end
#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
# Classe das janelas do jogo
#==============================================================================
class Window_Base < Window
if instance_methods.include?(:convert_escape_characters)
#------------------------------------------------------------------------
# * Alias
#------------------------------------------------------------------------
alias mbslang_convrt_scap_chars convert_escape_characters
#------------------------------------------------------------------------
# * Pré-conversão dos caracteres de controle
# text : texto a ser convertido
#------------------------------------------------------------------------
def convert_escape_characters(text)
result = mbslang_convrt_scap_chars(text)
result.gsub!(/\eL\[(.+)\]/i) {convert_escape_characters(load_string($1))}
return result
end
end
end
#==============================================================================
# ** RPG::BaseItem
#==============================================================================
class RPG::BaseItem
#--------------------------------------------------------------------------
# * Alias
#--------------------------------------------------------------------------
alias mbslang_name name
#--------------------------------------------------------------------------
# * Aquisição do nome do item
#--------------------------------------------------------------------------
def name(*a,&b)
mbslang_name(*a,&b).gsub(/\\L\[(.+)\]/i) {load_string($1)}
end
end
[box class=calendar_today]Créditos e Agradecimentos[/box]- a mim, por criar e disponibilizar