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

Localisation updates from https://translatewiki.net. #5009

Closed
wants to merge 1 commit into from

Conversation

translatewiki
Copy link
Member

Translation updates

@oppiabot
Copy link

oppiabot bot commented Jun 1, 2023

Assigning @BenHenning, @adhiamboperes for code owner reviews. Thanks!

Copy link
Collaborator

@adhiamboperes adhiamboperes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Strings in this PR are broken. I can pinpoint the issue to strings that have a "description" attribute to them, making them span more than one line.

The same issue is also in the "plurals", again because they are multiline. I think translatewiki does not know how to intepret this.

See sample screenshots:

Correct Incorrect
Screenshot_1685619646 Screenshot_1685619632

Comment on lines +179 to +204
<plurals name="chapter_count">
<item quantity="one">1 Chapter\n </item>
<item quantity="other">\n %s Chapters\n </item>
</plurals>
<plurals name="story_count">
<item quantity="one">1 Story\n </item>
<item quantity="other">\n %s Stories\n </item>
</plurals>
<plurals name="story_total_chapters">
<item quantity="one">%s of %s Chapter Completed</item>
<item quantity="other">%s of %s Chapters Completed</item>
</plurals>
<plurals name="lesson_count">
<item quantity="one">1 Lesson\n </item>
<item quantity="other">\n %s Lessons\n </item>
</plurals>
<plurals name="completed_story_count">
<item quantity="one">1 Story Completed\n </item>
<item quantity="zero">%s Stories Completed\n </item>
<item quantity="other">\n %s Stories Completed\n </item>
</plurals>
<plurals name="ongoing_topic_count">
<item quantity="one">1 Topic in Progress\n </item>
<item quantity="zero">%s Topics in Progress\n </item>
<item quantity="other">\n %s Topics in Progress\n </item>
</plurals>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are incorrect new lines inserted in these plurals. Tested it out and they definitely display incorectly within the app.

Comment on lines +437 to +438
<string name="unsupported_app_version_dialog_title">\n Unsupported app version</string>
<string name="unsupported_app_version_dialog_message">\n Dis version of di app no longer dey supported. Abeg update am from di Play Store.</string>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same new lines issue here

<string name="general_availability_notice_dialog_do_not_show_again_text">No show dis message again</string>
<string name="general_availability_notice_dialog_close_button_text">OK</string>
<string name="ratio_content_description_separator">\n to</string>
<string name="ratio_default_hint_text">\n Enter a ratio in di form x:y.</string>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New lines

Comment on lines +166 to +171
<string name="number_error_larger_than_fifteen_characters">Di ansa fit get at most 15 digits (0–9) or sign (. or -).</string>
<string name="ratio_error_invalid_chars">\n Abeg write a ratio wey get nomba separated by colons (e.g. 1:2 or 1:2:3).</string>
<string name="ratio_error_invalid_format">\n Abge enter a valid ratio (e.g. 1:2 or 1:2:3).</string>
<string name="ratio_error_invalid_colons">\n Your ansa get two colons (:) next to each other.</string>
<string name="ratio_error_invalid_size">\n Nomba of terms no dey equal to di required terms.</string>
<string name="ratio_error_includes_zero">\n Ratios no suppose get 0 for inside.</string>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the main strings file, these strings span more than one line, hence the [incorrect] insertion of the newline.

@oppiabot
Copy link

oppiabot bot commented Jun 1, 2023

Unassigning @adhiamboperes since the review is done.

@oppiabot
Copy link

oppiabot bot commented Jun 1, 2023

Hi @translatewiki, it looks like some changes were requested on this pull request by @adhiamboperes. PTAL. Thanks!

@BenHenning
Copy link
Member

Note that this PR is being replaced by #5010 since we can't wait for the next auto-push of translations from Translatewiki (plus, that PR is introducing the actual support for Naija which leads to the CI checks passing).

@BenHenning BenHenning closed this Jun 3, 2023
BenHenning added a commit that referenced this pull request Jun 6, 2023
## Explanation
Fixes #52

This PR finishes up a bunch of separate tasks relating to the 0.11
release of the Oppia Android app.

### Release plans
Note that a lot of the tasks addressed were completed out-of-band (hence
the lack of tracking issues). These are needed to prepare for the
following release changes:
- A new version of the alpha app will be launched to provide a basis of
testing spotlights
- A new version of the Kenya alpha app will be launched (since those
users are still in transitionary state to the beta version of the app
until later this year)
- A new version of the beta version of the app to include dark mode, the
new language selector, and more

### Overview

#### Language support changes
- Arabic and Nigerian Pidgin (Naija) languages were added to production
builds (Naija was added generally as it wasn't supported previously).
Both languages were also added as possible audio languages.
- Some basic tests were added to cover Arabic and Naija now being
available, though some tests ended up being omitted due to the inherent
complexity of testing these particular languages in certain cases
(Arabic because it's RTL and Naija because Android doesn't actually
support it natively--see below explanation).
- Also added Nigeria as a language region. We don't yet have a strong
grasp on the regions in which Arabic will be used, so that's being kept
as a broad language for now. We may refine this in the future.
- The translations for Nigerian Pidgin are added here as a replacement
to #5009 since the original translations had some formatting issues that
were identified by @adhiamboperes and subsequently fixed by our
translation volunteers. Since we can't wait for another push to #5009,
this PR is just introducing the strings directly.
- ``AndroidLocaleFactory`` was largely rebuilt to make better use of
code sharing, but its actual functionality needed to change due to the
Naija support problems mentioned below.

#### New feature: spotlights (alpha-only)
- A new alpha module was added to allow the team to stage features
specific to alpha builds, and spotlights were added as an initial use
case for this new capability.
- As part of testing spotlights I noticed that the background overlay
was too dark (it was fully occluding the background), so I changed it to
something that's dark but still semi-translucent. See the UI part of the
description below for a before-and-after.

#### New feature: in-app language selector (all users)
- This PR enables the new language selector introduced by #4762 by
default as part of addressing #52.
- Some small fast-follow nits from #4762 were addressed (see
#4762 (comment)
and
#4762 (comment)).

#### Event system changes
- Introduced a new script for decoding the compressed base 64 event
strings that can be generated during user studies (see explanation below
for details). This has some basic fault tolerance built into it so that
truncated event strings can still be partially decoded.
- A debug event property was added which essentially amounts to an event
count since app startup that's attached to each event. While this won't
help us identify events outright missing, it will help us identify
events missing between received events. This is aimed to help an ongoing
investigation that has found the high probability that events are being
lost between user action and Firebase's storage layer.

#### Infrastructure changes
- The minor version of the app is being bumped (since this is a major
beta release of the app).
- Version codes were bumped for 2 releases (since one re-release of the
beta version of the app was needed a few weeks back due to it expiring).
- This PR also quiets the output when creating AABs since currently ~5k
lines are outputted during the final bundle assembly steps and this
output is never useful to the user unless there's a build pipeline
failure.
- This PR fixes an error in the resource filtering output that is
provided at the very end of the AAB creation process (previously it was
outputting the number of configurations being filtered not the number of
actual resources being removed).

#### Improved support for future user studies
- The EnableLearnerStudyAnalytics has been split into 3 flags (2 new
ones): one that controls just whether to attach the sensitive profile
IDs to events, one that controls the fast in-lesson language switcher
(and corresponding admin-controlled profile setting for it), and one
that controls access to the analytics screen + admins being able to mark
lessons as completed for profiles (this is gated on the existing flag).
- The analytics screen flag has been default enabled for regular alpha
builds of the app so that this channel can be better utilized for user
studies. The user ID and in-lesson language switcher aspects of the old
learner study analytics feature are being kept off in alpha builds, only
the analytics screen & related behavior is being made available.

### Nigerian Pidgin support issues

The Android system does not formally support Nigerian Pidgin (Naija)
despite the fact that it has a recognized ISO 639-3 language code.

Naija is a creole language which means it's mostly a derivative of
English with vernacular adaptations (such as recreated words and grammar
alterations). I think that because it's mostly a derivative language and
is mainly used for casual speaking (vs. formal communications), there
isn't as much of a desire on the Android side to formally support it as
a UI language.

Fortunately, the Oppia Android app's localization system already
supports forcing the system to rendering app strings that are not
natively supported. However, this results in several considerations and
has turned up one new issue that needed addressing:
- Custom language overriding only works by matching _both_ language and
region, so the language strings needed to be moved to ``values-pcm-rNG``
(for Nigeria locking). This doesn't stop the language from being used
outside Nigeria, it's just a limitation in Android's resource qualifier
system when working with custom languages.
- It's not yet clear how the change in the values structure will affect
Translatewiki--some additional work might be needed there (which will
become clear once this PR is merged & Translatewiki attempts another
branch sync).
- Custom languages don't have the benefit of guaranteeing rendering
support, so the language's script largely comes to mind. Fortunately, as
a derivative of English Naija uses Latin-based script so there are no
concerns with language rendering compatibility.
- An issue was found in the localization system when handling fallbacks.
Since Naija is English-based, this PR has configured its fallback
language to be English. This led to the system actually prioritizing
English app string translations rather than forcing the Naija strings.
This required the changes that can be seen in ``AndroidLocaleFactory``.

### ``DecodeUserStudyEventString`` utility

A new utility was introduced to decode the compressed Base64 string of
events logs that can be exported from devices being used for user
studies (i.e. whose admins have access to the learner analytics screen).
These logs represent the entirety of both pending and uploaded logs
since the introduction of the feature (but only for devices that have
the learner study enabled).

The utility reads an input file containing a single instance of the
string (and automatically strips newline and horizontal space formatting
since the output from the app includes line-wrapping) and outputs it to
one of three indicated formats: textproto, JSON, or Yaml.

The script can be run in a local terminal from this branch (or
``develop`` once it's checked in) at the repository root by running:

```sh
bazel run //scripts:decode_user_study_event_string -- $(pwd)/input.log $(pwd)/output.json
```

(where 'input.log' exists in the local repository root, and
'output.json' will be written to the local repository root).

For use outside of Bazel, one can use a pre-built deployment Jar file by
running:

```sh
java -jar decode_user_study_event_string_deploy.jar input.log output.json
```

(Note that the error output for this command will be assuming Bazel is
being used, so some adjustment may be needed to interpret CLI errors
when using the deploy Jar).

### Third-party dependency updates
Some new dependencies were needed for the new
``DecodeUserStudyEventString`` utility to make the implementation much
simpler:
- Protobuf's Java util
(https://cloud.google.com/java/docs/reference/protobuf/latest/com.google.protobuf.util)
for conversion from proto to json.
- A converter from JSON to Yaml (since there's no direct proto-to-yaml
conversion): https://github.com/xlate/yaml-json.
- The Jakarta JSON API (required by the converter):
https://jakarta.ee/specifications/platform/9/apidocs/jakarta/json/json.
- The Jakarta JSON Parsson implementation (runtime dependency required
by the converter): https://github.com/eclipse-ee4j/parsson.
- Snakeyaml implementation (runtime dependency required by the
converter): https://github.com/snakeyaml/snakeyaml.

This required an update to maven_install.json, but no changes are needed
in tracked Maven dependency licenses since these are not dependencies
that are deployed with the app to end users.

The above do result in an incidental update to Gson 2.8.6 (from the
current 2.8.5 used). I don't expect that this actually will affect the
release much since Gson isn't used broadly, and this is a minor update
to Gson.

### Exemptions & test notes
Two new files were exempted for tests:
- ``PlatformParameterAlphaModule``: while we can test modules, I'm not
actually keen on testing the platform parameter modules at this time
because staging is generally messy at the moment with a lot of
duplication across multiple modules, so the test complexity isn't small.
A lot of the platform parameter system needs to be streamlined, but
that's largely dependent on #1720 being finished.
- ``DecodeUserStudyEventString`` while not particularly difficult to
test, this is a special local analytics tool that will rarely be used
and is very unlikely to break. Since I'm strapped for time on this PR,
I'm forgoing adding tests for this utility.

Regarding broad testing coverage, everything has had corresponding
testing additions or changes where applicable. This PR might not have
quite as much testing thoroughness as other PRs, but it does largely
cover the core scenarios.

## Essential Checklist
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).

## For UI-specific PRs only

Spotlights changes before/after:
| Old spotlights background | New spotlights background |
|--------|--------|
|
https://github.com/oppia/oppia-android/assets/12983742/a8df7807-1bb6-45be-b53a-6d057f4a5931
|
https://github.com/oppia/oppia-android/assets/12983742/e499f4b6-4609-4e58-871f-a09ebd09a80d
|

Video demonstrating the new functionality in the app, including alpha
access to the learner analytics screen and support for both Nigerian
Pidgin and Arabic (and via the in-app language selector):


https://github.com/oppia/oppia-android/assets/12983742/c0a92393-a8a3-4634-af5b-2e7fc35ecd97

---------

Co-authored-by: translatewiki.net <l10n-bot@translatewiki.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants