Skip to content

Commit

Permalink
Fix translation format string
Browse files Browse the repository at this point in the history
  • Loading branch information
kylecorry31 committed Jan 22, 2024
1 parent ec20bd9 commit ec1ee03
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 6 deletions.
2 changes: 1 addition & 1 deletion app/src/main/res/values-uk/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1122,7 +1122,7 @@
<string name="restore">Відновити</string>
<string name="notifications_channel">Сповіщення (%s)</string>
<string name="sunset_alerts_background_location_disclaimer">Сповіщення про захід сонця можуть бути неточними під час подорожі</string>
<string name="allow_schedule_exact_alarms_instructions">Це дозволяє %1$ встановлювати точні будильники та нагадування, наприклад, про захід сонця. Без цього будильники можуть не спрацьовувати в потрібний час.
<string name="allow_schedule_exact_alarms_instructions">Це дозволяє %1$s встановлювати точні будильники та нагадування, наприклад, про захід сонця. Без цього будильники можуть не спрацьовувати в потрібний час.
\n
\nЩоб дозволити, натисніть \"%2$s\" і увімкніть налаштування для дозволу будильників і нагадувань.</string>
<string name="exact_alarm_permission_denied">Будильники та нагадування заборонено, сповіщення можуть бути неточними.</string>
Expand Down
32 changes: 27 additions & 5 deletions scripts/string-fixer.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,11 +126,23 @@ def check(self, source_tree, tree, element) -> bool:
source_element = get_string_element(source_tree, element.get('name'))
if source_element is None:
return False
# Count % signs in the reference string
reference_count = source_element.text.count('%')
# Count % signs in the string
string_count = element.text.count('%')
return string_count != reference_count

# Get the format arguments from the source string
source_format_args = self.__get_format_args(source_element.text)

# Get the format arguments from the string
format_args = self.__get_format_args(element.text)

# If the number of format arguments does not match, return true
if len(source_format_args) != len(format_args):
return True

# If the format arguments do not match, return true
for i in range(len(source_format_args)):
if source_format_args[i] != format_args[i]:
return True

return False

def fix(self, source_tree, tree, element) -> bool:
delete_element(tree, element)
Expand All @@ -139,6 +151,16 @@ def fix(self, source_tree, tree, element) -> bool:
def is_warning(self) -> bool:
return False

def __get_format_args(self, text):
# Avoid counting %% as a format argument
t = text.replace('%%', '')

# Get the format arguments from the source string (ex. %s, %d, %1$s, %0.2f) but %% is ignored
r = r'%[^a-zA-Z]*[a-zA-Z]'

# Find all matches
return re.findall(r, t)

class PositionalFormattingUnspecified(StringDiagnostic):
def check(self, source_tree, tree, element) -> bool:
# Regex to get all format arguments without a positional index
Expand Down

0 comments on commit ec1ee03

Please sign in to comment.