Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added reading plurals from android string files #3

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions lib/twine/formatters/abstract.rb
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,39 @@ def set_translation_for_key(key, lang, value)
@twine_file.add_language_code(lang)
end
end

def set_plural_translation_for_key(key, lang, plural_hash)
if @twine_file.definitions_by_key.include?(key)
definition = @twine_file.definitions_by_key[key]
reference = @twine_file.definitions_by_key[definition.reference_key] if definition.reference_key

if !reference or value != reference.plural_translations[lang]
definition.plural_translations[lang] = value
end
elsif @options[:consume_all]
Twine::stderr.puts "Adding new plural definition '#{key}' to twine file."
current_section = @twine_file.sections.find { |s| s.name == 'Uncategorized' }
unless current_section
current_section = TwineSection.new('Uncategorized')
@twine_file.sections.insert(0, current_section)
end
current_definition = TwineDefinition.new(key)
current_definition.plural_translations[lang] = plural_hash
current_section.definitions << current_definition

if @options[:tags] && @options[:tags].length > 0
current_definition.tags = @options[:tags]
end

@twine_file.definitions_by_key[key] = current_definition
else
Twine::stderr.puts "Warning: '#{key}' not found in twine file."
end

if !@twine_file.language_codes.include?(lang)
@twine_file.add_language_code(lang)
end
end

def set_comment_for_key(key, comment)
return unless @options[:consume_comments]
Expand Down
51 changes: 47 additions & 4 deletions lib/twine/formatters/android.rb
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@ def can_handle_directory?(path)
def default_file_name
'strings.xml'
end

def iosify_substitutions(str)
# use "@" instead of "s" for substituting strings
str.gsub!(/%([0-9\$]*)s/, '%\1@')
return str
end

def determine_language_given_path(path)
path_arr = path.split(File::SEPARATOR)
Expand All @@ -57,6 +63,24 @@ def output_path_for_language(lang)
end

def set_translation_for_key(key, lang, value)
ref_regex = /@\w+\/(\w+)/

value.gsub!(/\r\s*/," ")
value.gsub!(/\n\s*/," ")
value.gsub!(/\r\n\s*/," ")
value.gsub!(/>\s*</,">\n<")

ref_match = ref_regex.match(value)

if ref_match
ref = ref_match[1]
if @twine_file.definitions_by_key.include?(ref)
value = @twine_file.definitions_by_key[ref].translations[lang]
else
value = ""
end
end

value = CGI.unescapeHTML(value)
value.gsub!('\\\'', '\'')
value.gsub!('\\"', '"')
Expand All @@ -75,13 +99,32 @@ def read(io, lang)
content = child.string.strip
comment = content if content.length > 0 and not content.start_with?("SECTION:")
elsif child.is_a? REXML::Element
next unless child.name == 'string'
next unless ['plurals', 'string', 'color'].include? child.name

key = child.attributes['name']

set_translation_for_key(key, lang, child.text)
value = child.text
value = "" if value.nil?

if child.name == 'plurals'
plurals_hash = Hash.new

child.children.each do |pluralitem|
if pluralitem.is_a? REXML::Element
next unless pluralitem.name == 'item'

quantity = pluralitem.attributes['quantity']
pluraltext = pluralitem.text

plurals_hash[quantity] = pluraltext
end
end

set_plural_translation_for_key(key, lang, plurals_hash)
else
set_translation_for_key(key, lang, value)
end

set_comment_for_key(key, comment) if comment

comment = nil
end
end
Expand Down
21 changes: 20 additions & 1 deletion lib/twine/twine_file.rb
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,12 @@ def write(path)
section.definitions.each do |definition|
f.puts "\t[#{definition.key}]"

value = write_value(definition, dev_lang, f)
if definition.is_plural?
value = write_plural_value(definition, dev_lang, f)
else
value = write_value(definition, dev_lang, f)
end

if !value && !definition.reference_key
puts "Warning: #{definition.key} does not exist in developer language '#{dev_lang}'"
end
Expand Down Expand Up @@ -252,5 +257,19 @@ def write_value(definition, language, file)
return value
end

def write_plural_value(definition, language, file)
pluralvalue = definition.plural_translations[language]
return nil unless pluralvalue

pluralvalue.each do |pluralkey, value|
if value[0] == ' ' || value[-1] == ' ' || (value[0] == '`' && value[-1] == '`')
value = '`' + value + '`'
end

file.puts "\t\t#{language} :#{pluralkey} = #{value}"
end

return pluralvalue
end
end
end