Skip to content
Merged
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
96 changes: 71 additions & 25 deletions docs/faqs/app-translation.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,22 +29,49 @@ If a given phrase in the app does not have a translation string in what is calle

For the *Loop* app and the submodules (Pumps, CGM and Services) associated with the *Loop* app, the [*lokalise*](https://app.lokalise.com/projects) website is used. You must be signed up with the *Loop* project to be able to see *Loop* translations at that site.

!!! note "Want to Sign Up to Translate?"
!!! note "Want to Translate?"
To volunteer to translate, join [Loop zulipchat](https://loop.zulipchat.com/) and send a direct message to Marion Barker with your email address and the language(s) you can translate.

If you want translate one of the new CGM / Pump repositories: DanaKit, EversenseKit and MedtrumKit, indicate that as well. Those new repositories are handled using a [*crowdin* project](#crowdin-projects) for each repository.


## Code Translation

Localization (strings translated to the selected language in the app) makes use of volunteers who input translations in a special web app. Their work is then dowloaded and imported into the code used by the *Loop* app and its submodules (repositories on *GitHub*).

If you notice *Loop* app messages in English even though you selected a specific language, and you can help translate it, please volunteer.

Translations for Loop are performed by volunteers at [*lokalise*](https://app.lokalise.com/projects).
### Loop *lokalise* project

Translations for most of the repositories used by Loop are performed by volunteers at [*lokalise*](https://app.lokalise.com/projects).

Some newer CGM and Pump modules, currently found in feature branches, get their translations from *crowdin* instead of *lokalise*.

* There was an early attempt to use both *lokalise* and *crowdin* but merging input from two sources was deemed impractical
* The DanaKit, MedtrumKit and EversenseKit translations are each handled by separate [*crowdin* projects](#crowdin-projects)

### *crowdin* projects

Some new pump and CGM modules are provided by developers associated with the *Trio* (*OpenAPS*) community. They have an established base of translators who are familiar with using *crowdin*. Translations for each of these new repositories is handled directly at the repository level. Loop translators who want to help with these repositories can just add that information to the request when they [volunteer to translate](#volunteer-to-translate).

* [DanaKit crowdin](https://crowdin.com/project/danakit)
* [MedtrumKit crowdin](https://crowdin.com/project/medtrumkit)
* EversenseKit - not configured yet, coming soon

To volunteer, join [Loop zulipchat](https://loop.zulipchat.com/) and send a direct message to Marion Barker with your email address and the language(s) you can translate. You will get an invitation to join the project. You do not need to start a new project, start a free trial or sign up for anything special; just join the project you are invited to.
### Volunteer to Translate

To volunteer, join [Loop zulipchat](https://loop.zulipchat.com/) and send a direct message to Marion Barker with your email address and the language(s) you can translate. Indicate whether you need access to the new repositories (*crowdin*) in addition to the Loop repositories. You will get an invitation to join the Loop *lokalise* project. You do not need to start a new *lokalise* project. Do not start a free *lokalise* trial or sign up for anything special; just join the project you are invited to.

> If you are using the *Trio* or *iAPS* app instead of the *Loop* app, you can still assist with Pump, CGM and Tidepool module localization through *Loop* *lokalise*. Some repositories from *Loop* are used by [*Trio* and *iAPS*](#what-about-other-ios-apps).

Alternative contacts for addtion to *crowdin*:

* Bastiaan Verhaar in zulipchat
* Bastiaan is known as `INeedSugar` in [Trio discord](https://discord.gg/FnwFEFUwXE) and [iAPS discord](https://discord.com/invite/ptkk2Y264Z)
* `lubor` in [iAPS discord](https://discord.com/invite/ptkk2Y264Z)

## Lokalise Information

### Initial Screen on *lokalise*

When you log in to *lokalise*, you will see a screen similar to the screenshot below. Tap on the *Loop* icon, highlighted in the graphic with a red rectangle, to start translating.
Expand Down Expand Up @@ -94,7 +121,7 @@ If a `key` does not have a translation in a given language, then when running th

### Select a Submodule

Suppose you know that you want to modify translations for a particular submodule (CGM, Pump or Service module). You can choose context in *lokalise*.
Suppose you know that you want to modify translations for a particular submodule (CGM, Pump or Service module). You can choose context in *lokalise*; or if it is one of the newer submodules, go directly to the *crowdin* project for that submodule. See [Submodule Table for Multiple Apps](#submodule-table-for-multiple-apps) for a detailed listing.

* Tap on Filter
* Tap on Context
Expand All @@ -106,29 +133,11 @@ Suppose you know that you want to modify translations for a particular submodule

The screenshot below is configured for someone translating simplified Chinese for the DanaKit pump.

**NOTE** The DanaKit keys are no longer visible in *lokalise*. They are being handled using [*crowdin*](#crowdin-projects).

![choose a submodule for translation](img/lokalise-by-context-submodule-xcstrings.png){width="1024"}
{align="center"}

#### Submodule Table for Multiple Apps

These submodules are used by the *Loop*, *Trio* and *iAPS* apps.

| Type | <div style="width:145px"></div> Name | Files |
|:-:|:--|:--|
| CGM | `CGMBLEKit` | CGMBLEKit/CGMBLEKit/Localizable.xcstrings<br>CGMBLEKit/CGMBLEKitUI/Localizable.xcstrings |
| CGM | `G7SensorKit` | G7SensorKit/G7SensorKit/Localizable.xcstrings<br>G7SensorKit/G7SensorKitUI/Localizable.xcstrings |
| CGM | `LibreTransmitter` | LibreTransmitter/LibreTransmitter/Localizable.xcstrings<br>LibreTransmitter/LibreTransmitterUI/Localizable.xcstrings |
| CGM | `Dexcom Share` | dexcom-share-client-swift/ShareClient/Localizable.xcstrings<br>dexcom-share-client-swift/ShareClientUI/Localizable.xcstrings |
| CGM | `NightscoutRemoteCGM` | NightscoutRemoteCGM/NightscoutRemoteCGM/Localizable.xcstrings |
| Pump | `DanaKit` | DanaKit/Localization/Localizable.xcstrings |
| Pump | `MedtrumKit` | MedtrumKit/Localization/Localizable.xcstrings |
| Pump | `OmniBLE` | OmniBLE/Localizable.xcstrings<br>OmniBLE/OmniBLE/Localizable.xcstrings |
| Pump | `RileyLinkKit` | RileyLinkKit/RileyLink/Localizable.xcstrings<br>RileyLinkKit/RileyLink/LoopKit.xcstrings<br>RileyLinkKit/RileyLinkBLEKit/Localizable.xcstrings<br>RileyLinkKit/RileyLinkKitUI/Localizable.xcstrings |
| Pump | `MinimedKit` | MinimedKit/MinimedKit/Resources/Localizable.xcstrings<br>MinimedKit/MinimedKitUI/Resources/Localizable.xcstrings<br>MinimedKit/MinimedKitUI/Resources/mul.lproj/MinimedPumpManager.xcstrings|
| Pump | `OmniKit` | OmniKit/Localizable.xcstrings<br>OmniKit/OmniKit/Resources/Localizable.xcstrings<br>OmniKit/OmniKitUI/Resources/Localizable.xcstrings |
| Misc | `LoopKit` | LoopKit/LoopKit/Resources/Localizable.xcstrings<br>LoopKit/LoopKitUI/Resources/Localizable.xcstrings<br>LoopKit/LoopKitUI/Resources/mul.lproj/InsulinKit.xcstrings<br>LoopKit/LoopKitUI/Resources/mul.lproj/LegacyInsulinDeliveryTableViewController.xcstrings<br>LoopKit/MockKit/Resources/Localizable.xcstrings<br>LoopKit/MockKitUI/Resources/Localizable.xcstrings |
| Service | `TidepoolService` | TidepoolService/TidepoolServiceKit/Localizable.xcstrings<br>TidepoolService/TidepoolServiceKitUI/Localizable.xcstrings |

### Matches Source

Some of the String Catalogs have had the English version inserted in the translation field. This was done inadvertently. To find these instances in the language you are translating, set up a custom filter.
Expand Down Expand Up @@ -173,12 +182,49 @@ The *Trio* and the *iAPS* apps use submodules for CGM, Pump and Service features

The bottom line is

* Submodule translations are handled at [*lokalise*](https://app.lokalise.com/)
* Loop and older (pre 2025) submodule translations are handled at [*lokalise*](https://app.lokalise.com/)
* New submodules, DanaKit, EversenseKit, and MedtrumKit. are currently handled in [*crowdin* projects](#crowdin-projects) for the individual repositories
* *Trio* translations are handled at [crowdin for *Trio*](https://crowdin.com/project/trio/invite/public?h=48e1a77abd1611860f475c1ce17540112591650&show_welcome)
* *iAPS* translations are handled at [crowdin for *iAPS*](https://crowdin.com/project/iaps)

You can use the *Trio* or *iAPS* discord server to volunteer to translate using *lokalise* by sending a direct message to Marion Barker if you are not a member of zulipchat.


### Submodule Table for Multiple Apps

These submodules are used by the *Loop*, *Trio* and *iAPS* apps and are handled by *lokalise*.

| Type | <div style="width:145px"></div> Name | Files |
|:-:|:--|:--|
| CGM | `CGMBLEKit` | CGMBLEKit/CGMBLEKit/Localizable.xcstrings<br>CGMBLEKit/CGMBLEKitUI/Localizable.xcstrings |
| CGM | `G7SensorKit` | G7SensorKit/G7SensorKit/Localizable.xcstrings<br>G7SensorKit/G7SensorKitUI/Localizable.xcstrings |
| CGM | `LibreTransmitter` | LibreTransmitter/LibreTransmitter/Localizable.xcstrings<br>LibreTransmitter/LibreTransmitterUI/Localizable.xcstrings |
| CGM | `Dexcom Share` | dexcom-share-client-swift/ShareClient/Localizable.xcstrings<br>dexcom-share-client-swift/ShareClientUI/Localizable.xcstrings |
| CGM | `NightscoutRemoteCGM` | NightscoutRemoteCGM/NightscoutRemoteCGM/Localizable.xcstrings |
| Pump | `OmniBLE` | OmniBLE/Localizable.xcstrings<br>OmniBLE/OmniBLE/Localizable.xcstrings |
| Pump | `RileyLinkKit` | RileyLinkKit/RileyLink/Localizable.xcstrings<br>RileyLinkKit/RileyLink/LoopKit.xcstrings<br>RileyLinkKit/RileyLinkBLEKit/Localizable.xcstrings<br>RileyLinkKit/RileyLinkKitUI/Localizable.xcstrings |
| Pump | `MinimedKit` | MinimedKit/MinimedKit/Resources/Localizable.xcstrings<br>MinimedKit/MinimedKitUI/Resources/Localizable.xcstrings<br>MinimedKit/MinimedKitUI/Resources/mul.lproj/MinimedPumpManager.xcstrings|
| Pump | `OmniKit` | OmniKit/Localizable.xcstrings<br>OmniKit/OmniKit/Resources/Localizable.xcstrings<br>OmniKit/OmniKitUI/Resources/Localizable.xcstrings |
| Misc | `LoopKit` | LoopKit/LoopKit/Resources/Localizable.xcstrings<br>LoopKit/LoopKitUI/Resources/Localizable.xcstrings<br>LoopKit/LoopKitUI/Resources/mul.lproj/InsulinKit.xcstrings<br>LoopKit/LoopKitUI/Resources/mul.lproj/LegacyInsulinDeliveryTableViewController.xcstrings<br>LoopKit/MockKit/Resources/Localizable.xcstrings<br>LoopKit/MockKitUI/Resources/Localizable.xcstrings |
| Service | `TidepoolService` | TidepoolService/TidepoolServiceKit/Localizable.xcstrings<br>TidepoolService/TidepoolServiceKitUI/Localizable.xcstrings |

These submodules are used by the *Loop*, *Trio* and *iAPS* apps and are handled by *crowdin*.

| Type | <div style="width:145px"></div> Name | Files |
|:-:|:--|:--|
| Pump | `DanaKit` | see [DanaKit *crowdin*](https://crowdin.com/project/danakit) |
| Pump | `MedtrumKit` | see [MedtrumKit *crowdin*](https://crowdin.com/project/medtrumkit) |
| CGM | `EversenseKit` | crowdin project is not yet configured |

The modules are specific to the particular app:

| Type | <div style="width:145px"></div> Name | Files |
|:-:|:--|:--|
| Loop | `Loop` | use [Loop *lokalise*](https://app.lokalise.com/projects) |
| Trio | `Trio` | use [Trio *crowdin*](https://crowdin.com/project/trio) |
| iAPS | `iAPS` | use [iAPS *crowdsin*](https://crowdin.com/project/iaps) |


- - -

## Adding Languages
Expand Down
Loading