Files
mattermost/tools
Jesse Hallam 4aa82f6f13 Don't ship empty strings as valid translations (#38412)
* Format the admin console exact-time tooltip as one message

The tooltip spliced a translated "at" into a moment format string, so a locale
that needs no connecting word had no way to say so: "" falls back to the
English, and zh-CN had settled on " ". It is now a single message formatting the
date and time for the reader's locale, and translators can reorder or drop the
connecting word.

Each existing translation of "at" is carried into the new message as it
rendered before; ja's was untranslated English and is left to fall back.

* Remove the whitespace-only server translations

438 entries across es, fr, it and ja held " " in place of a full English
sentence, mostly error messages. go-i18n renders that as-is, so the user saw a
blank message where a missing id would at least have fallen back to English.
Removed with `mmgotool i18n clean-empty`.

* Report a blank translation the way a missing one is reported

Both runtimes treat an empty translation as missing: react-intl falls back to
the English, and go-i18n returns the id. A whitespace-only one is worse: it
renders, and the user sees nothing. Both checkers now report either as a missing
key, under the same --warn-missing-keys / --warn-missing-ids flags, and
`mmgotool i18n clean-empty` removes both.

clean-empty also now writes the two-space indent the catalogs use.

* Correct the connecting word in six exact-time translations

The carried-over "at" was wrong in ko, pl, ru, nl, tr and zh-TW: Korean
attaches 에 to the date, Polish, Russian and Dutch take o, в and om before a
clock time, and Turkish "zaman" and the spaced zh-TW 於 read as noise, so both
drop the word as zh-CN already does.
2026-09-30 10:05:50 -03:00
..

Tools

This directory aims to provide a set of tools that simplify and enhance various development tasks. This README file serves as a guide to help you understand the directory, features of these tools, and how to get started using it. This is a collection of utilities and scripts designed to streamline common development tasks for Mattermost. These tools aim to help automate repetitive tasks and improve productivity.

Included tools

  • mattermost-govet: custom Go vet analyzers enforcing Mattermost-specific code conventions (structured logging, error handling, SQL safety, etc.). Used by make vet in the server.
  • mmgotool: is a CLI to help with i18n related checks for the mattermost/server development.
  • sharedchannel-test: integration test tool that validates shared channel synchronization (posts, reactions, membership) between two real Mattermost server instances.

Installation & Usage

mmgotool

To install mmgotool, simply run the following command: go install github.com/mattermost/mattermost/tools/mmgotool

Make sure you have the necessary prerequisites such as Go compiler.

mmgotool i18n has following subcommands described below:

  • check: Check translations
  • check-empty-src: Check for empty translation source strings
  • clean-empty: Clean empty translations
  • extract: Extract translations

sharedchannel-test

Stands up two Mattermost Enterprise instances, creates a remote cluster connection, and runs integration tests for shared channel synchronization (membership, posts, reactions).

Prerequisites:

  • make start-docker (Postgres and friends running)
  • Enterprise repo present at ../../enterprise
  • An enterprise license file

Usage:

# Managed mode (builds server, starts/stops both instances automatically)
cd tools/sharedchannel-test
go run . --license /path/to/license.mattermost-license --server-dir ../../server

# External mode (connect to already-running instances)
go run . --license /path/to/license.mattermost-license --manage=false \
  --server-a http://localhost:9065 --server-b http://localhost:9066