Skip to content

Translation

tech-kev edited this page Jun 6, 2026 · 2 revisions

Translation

SharedMoments includes a built-in Translation Manager - Languages can be added and edited directly from the web interface.

Currently included languages: German and English.


Accessing the Translation Manager

Open the sidebar and select Manage Translations (requires the "Manage Translations" permission).


Adding a New Language

  1. Click Create new translation in the Translation Manager
  2. Enter the language code (e.g. fr-FR, es-ES, pt-BR)
  3. SharedMoments automatically generates all required translation entries for the new language

All entries start empty and can be filled in using the editor.


Editing Translations

  1. Select a language from the list
  2. Edit the translated text for each entry
  3. Changes are saved and applied immediately

Each entry shows the original text and an optional help text for context.

Focus Mode

Use the focus mode to translate entries at a time, making it easier to work through large translation sets.


Special Strings with Variables

Some strings contain placeholders in curly braces (e.g. {name}) that get replaced with real values at runtime. These must be kept exactly as-is — only the surrounding text should be translated. The order of variables can be changed to fit the grammar of your language.


Banner Texts

These strings are displayed in the banner on the home screen.

String Available variables
banner_text_anniversary {relationship_status}, {years_count}, {months_count}, {days_count}, {diffInMonthsTotal}, {diffInWeeksTotal}, {diffInDays}
banner_text_engaged same as above + {anniversary_date}
banner_text_wedding {relationship_status}, {years_count}, {months_count}, {days_count}, {diffInMonthsTotal}, {diffInWeeksTotal}, {diffInDays}
banner_text_family {years_count}, {months_count}, {days_count}, {diffInMonthsTotal}, {diffInWeeksTotal}, {diffInDays}
banner_text_friends {years_count}, {months_count}, {days_count}, {diffInMonthsTotal}, {diffInWeeksTotal}, {diffInDays}

Banner variable reference

Variable Description Example
{relationship_status} The relationship status label together, married, engaged
{years_count} Full years as a phrase 3 years
{months_count} Remaining months as a phrase 2 months
{days_count} Remaining days as a phrase 14 days
{diffInMonthsTotal} Total months (number only) 38
{diffInWeeksTotal} Total weeks (number only) 167
{diffInDays} Total days (number only) 1169
{anniversary_date} The anniversary date (formatted) 01.06.2022

Example:

English source:

We have been {relationship_status} for {years_count}, {months_count}, and {days_count}.

German translation:

Wir sind seit {years_count}, {months_count} und {days_count} {relationship_status}.

Reminder & Notification Strings

These strings are used in reminder notifications and the reminder list.

String Available variables Description
Birthday of {name} {name} Name of the person whose birthday it is
{n}-Year Milestone {n} Number of years for the milestone
{n}-Day Milestone {n} Number of days for the milestone
Countdown: {title} {title} Title of the countdown
Countdown "{title}" reached! {title} Title of the countdown that was reached
Today is {title}! {title} Title of the reminder
{title} in 1 day {title} Title of the reminder
{title} in {days} days {title}, {days} Title and number of days until the reminder
{title} is on {date} {title}, {date} Title and date of the reminder

After You're Done

Once you've finished translating, you can test your work and contribute it back to the project:

  1. Go to User Settings and change your language to the one you just translated
  2. Browse the app to verify everything looks correct
  3. When you're happy with the result, go back to the Translation Manager and click Export to download your translation as a JSON file
  4. Head over to the SharedMoments GitHub repository and create a Pull Request with your translation file

Your contribution will be reviewed and included in a future release for everyone to use.

Admin Tools

Load from Code

Scans the codebase for all translatable texts (marked with _()) and loads them into the English language as base entries.

Approve Translations

Takes all newly added English base entries and distributes them to every other language. This creates empty translation entries so translators can fill them in.

Reset Language

Resets a language back to its default state by reloading from the built-in JSON files. This overwrites all manual edits for that language.

Clone this wiki locally