Contribute translations to make FileBrowser accessible in more languages.

Translation Files

Language files are located at frontend/src/i18n/. The master file is en.json - all other languages derive from this.

Setup

  1. Create free account at DeepL
  2. Get API token from account dashboard
  3. Set environment variable: export DEEPL_API_KEY="your-api-key-here"
  4. Run: make sync-translations

How to update translations

Finding keys: Search existing text in language files or check corresponding *.vue files in frontend/src/.

Improve Existing Translations for a specific language

  1. Navigate to the language file (e.g., es.json for Spanish)
  2. Find and update the translation key
  3. Submit a pull request

Delete a translation

  1. Delete the key from the en.json file
  2. Run make sync-translations to remove from all other files.

Completely change a translation (for all languages)

  1. First, delete the translation as mentioned above.
  2. Add the completely new text back to en.json
  3. Run make sync-translations to re-populate all languages
  4. Adjust any specific languages afterwards manually.

Add New Translation Fields

  1. Add field to en.json (master file)
  2. Set up DeepL API (free account)
  3. Run auto-translation: make sync-translations
  4. Review and adjust generated translations

Best Practices

Consolidate Translation Keys

If keys are simple words, consider adding them to general instead so they can be more generally used across the application.

Write Lint-Friendly Code

The linter automatically checks that all translation keys exist, but can only verify keys that do not use computed logic.

✅ Do this

JAVASCRIPT
1
2
3
4
5
filesLabel() {
  return this.numFiles === 1
    ? this.$t("general.file")
    : this.$t("general.files");
}

❌ Don't do this

JAVASCRIPT
1
2
3
filesLabel() {
  return this.$t(this.numFiles === 1 ? "general.file" : "general.files")
}

Choose Translation-Friendly Terms

Keep translations in mind when choosing words and terms. Select terminology that will translate well across different languages. For example, use “URL” or “hyperlink” instead of “link”.

Language File Structure

JSON
1
2
3
4
5
6
7
8
9
{
  "buttons": {
    "save": "Save",
    "cancel": "Cancel"
  },
  "errors": {
    "notFound": "File not found"
  }
}

Supported Languages

supported languages are limited to those supported by DeepL:

  • Arabic (ar.json)
  • Czech (cz.json)
  • German (de.json)
  • Greek (el.json)
  • English (en.json) - master file
  • Spanish (es.json)
  • French (fr.json)
  • Hebrew (he.json)
  • Hungarian (hu.json)
  • Icelandic (is.json)
  • Italian (it.json)
  • Japanese (ja.json)
  • Korean (ko.json)
  • Dutch (Belgium) (nl-be.json)
  • Polish (pl.json)
  • Portuguese (Brazil) (pt-br.json)
  • Portuguese (pt.json)
  • Romanian (ro.json)
  • Russian (ru.json)
  • Slovak (sk.json)
  • Swedish (sv-se.json)
  • Turkish (tr.json)
  • Ukrainian (ua.json)
  • Chinese Simplified (zh-cn.json)
  • Chinese Traditional (zh-tw.json)

Next Steps