Files
letro-android/tools/localazy
Jorge Martin Espinosa a170d80cb3 Add media file limit size warning and media quality selection (#5131)
* Add `VideoCompressorPreset` enum

This represents the different compression presets used for processing videos before uploading them

* Add `VideoCompressorHelper` util class to calculate the scaled output size of the video given an input size and its optimal bitrate

Also add `MediaOptimizationConfig` which will be used to decide how to apply compression in `MediaPreProcessor`

* Add `RustMatrixClient.getMaxFileUploadSize()` function and `MaxUploadSizeProvider` so we can import only this functionality into other components

* Try preloading the max file upload size the first time we get network connectivity - it's a best effort

This should help ensure we'll have this value available later, even if we still need to load it asynchronously.

* Split the `compressMedia` preference into `compressImages` and `compressMediaPreset`

* Modify the media processing parts to use the new classes and utils

* Add `MediaOptimizationSelectorPresenter`, which will retrieve the compression values and the max file upload size, also estimating the compressed video file sizes if needed.

* Add a feature flag to allow selecting the media upload quality per upload

* Integrate the previous changes with the attachments preview screen

Add strings from localazy too.

* Adapt the rest of the app calls to upload media to using the media optimization configs

* Allow modifying the default compression values in advanced settings, based on the feature flag value

* Pass the `fileSize` in `MediaUploadInfo` too, to be able to check it against the `maxUploadSize`

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2025-08-11 17:22:46 +02:00
..
2023-08-31 14:17:14 +01:00

Localazy

Localazy is used to host the source strings and their translations.

Localazy project

Localazy

To add new strings, or to translate existing strings, go the the Localazy project: https://localazy.com/p/element. Please follow the key naming rules (see below).

Never edit manually the files localazy.xml or translations.xml!.

Key naming rules

For code clarity and in order to download strings to the correct module, here are some naming rules to follow as much as possible:

  • Keys for common strings, i.e. strings that can be used at multiple places must start by action. if this is a verb, or common. if not;
  • Keys for common accessibility strings must start by a11y.. Example: a11y.hide_password;
  • Keys for common strings should be named to match the string. Example: action.copy_link for the string Copy link;
  • When creating common strings, make sure to enable "Use dot (.) to create nested keys";
  • Keys for strings used in a single screen must start with screen_ followed by the screen name, followed by a free name. Example: screen_onboarding_welcome_title;
  • Keys can have _title or _subtitle suffixes. Example: screen_onboarding_welcome_title, screen_change_server_subtitle;
  • For dialogs, keys can have _dialog_title, _dialog_content, and _dialog_submit suffixes. Example: screen_signout_confirmation_dialog_title, screen_signout_confirmation_dialog_content, screen_signout_confirmation_dialog_submit;
  • a11y. pattern can be used for strings that are only used for accessibility. Example: a11y.hide_password, screen_roomlist_a11y_create_message;
  • Strings for error message can start by error_, or contain _error_ if used in a specific screen only. Example: error_some_messages_have_not_been_sent, screen_change_server_error_invalid_homeserver;

Note: those rules applies for strings and for plurals.

Special suffixes

  • if a key is suffixed by _ios, it will not be imported in the Android project;
  • if a key is suffixed by _android, it will not be imported in the iOS project.

So feel free to use those suffixes when necessary for instance when the string content is referring to something related to Android only, or iOS only.

Placeholders

Placeholders should have the form %1$s, %1$d, etc.. Please use numbered placeholders. Note that Localazy will take care of converting the placeholder to Android (-> %1$s) and iOS specific format (-> %1$@). Ideally add a comment on Localazy to explain with what the placeholder(s) will be replaced at runtime.

CLI Installation

To install the Localazy client, follow the instructions from here.

Download translations

In the root folder of the project, run:

./tools/localazy/downloadStrings.sh

It will update all the localazy.xml resource files. In case of merge conflicts, just erase the files and download again using the script.

To also include the translations, i.e. the translations.xml files, add --all argument:

./tools/localazy/downloadStrings.sh --all

Add translations to a specific module

Edit the file config.json to add a new module, or add a new item in includeRegex arrays, then run the script again to see the effect.

generateLocalazyConfig.py is the Python script that convert config.json to a localazy configuration file. Generally you should not edit this file.