ADR: Internationalization Policy
- Status: Accepted by Andrei Ganiushkin
andrey@ganyushkin.ru - Date: 2026-06-27
- Authors: Andrei Ganiushkin
andrey@ganyushkin.ru - Related issues: -
Context
The Netgap project must be understandable to Russian-speaking and English-speaking users, developers, operators, external integrators, regulators, and auditors. At the same time, different product layers have different language requirements: code, logs, and engineering interfaces must remain compatible with international practice and legacy event collection systems, while official operational and certification documentation for the Russian market must be available in Russian.
A hybrid internationalization policy must be established to define the supported languages, the default language for each product layer, naming rules for bilingual documentation, and localization requirements for user interfaces.
Decision
The project supports two languages:
- Russian (
ru); - English (
en).
The project adopts a hybrid language selection model by layer.
English is used as the primary language for the engineering layer:
- source code, names of variables, functions, modules, APIs, and technical comments in code;
- technical logs, including output to
syslog,journald,Loki,ELK,SIEM, and similar systems; - audit events intended for machine processing, correlation, search, and regular parsing;
CLIflags, argument names, machine-readable error codes, and messages intended for engineers and administrators;- architecture documents and
ADRs when they relate to the open part of the project.
Russian is used as the primary language for the Russian regulatory and customer-facing layer:
- official operational documentation for Russian customers;
- documentation for the Ministry of Digital Development Registry, FSTEC, FSB, and other certification or conformity assessment procedures;
- administrator and user guides, technical specifications, product passports, security assignments, and similar documents;
- legal documents, security policies, data processing policies, and contractual materials intended for the Russian market when legislation or contractual requirements require Russian.
Bilingual support is mandatory for documentation and user-facing materials that are used simultaneously by external developers and Russian users or customers.
Regular documentation uses the ru and en language suffixes with dot separators before the file extension:
architecture.ru.md;architecture.en.md;operator-guide.ru.md;operator-guide.en.md.
README files in repository directories must be available in both languages and use the same naming principle unless the file is the standard root README.md:
README.ru.md;README.en.md.
An exception applies to standard repository files: the standard file is stored without a language suffix, and localized variants use suffixes. The only standard files without suffixes are:
README.md;CONTRIBUTING.md;CHANGELOG.md;LICENSE.
For README.md, CONTRIBUTING.md, and CHANGELOG.md in the repository root, the primary language of the suffixless file is English, because these files are entry points for GitHub, external developers, and the international engineering community:
README.md— English,README.ru.md— Russian;CONTRIBUTING.md— English,CONTRIBUTING.ru.md— Russian;CHANGELOG.md— English,CHANGELOG.ru.md— Russian.
A separate exception applies to the LICENSE document: the license's primary language is English.
LICENSE— the primary English license text;LICENSE.ru,LICENSE.ru.md, orLICENSE_ru— the Russian translation, if maintained by the project.
CLI interfaces of programs must use English by default for flags, arguments, system errors, and engineering messages. Help messages in the CLI may be in Russian. Web interfaces must support both languages.
Technical logs and audit events must be emitted in English. This reduces the risk of encoding issues in legacy systems, simplifies regular parsing, event correlation, error search, and integration with international observability tools.
Russian-language explanations for operators must be provided in documentation, runbooks, error references, or UI, not in machine-processed technical log and audit text.
Considered Alternatives
Alternative 1: English only
- Pros: code cleanliness; simple integration with GitHub and the international community; correct log parsing; convenient engineering error search; lower risk of encoding issues in
SIEM,ELK,syslog, and other systems. - Cons: insufficient for Russian regulatory and customer requirements; operational and certification documentation for the Ministry of Digital Development, FSTEC, FSB, and the public sector must be in Russian.
- Reason for rejection: the project must comply with Russian market and certification requirements, so English alone is insufficient.
Alternative 2: Russian only
- Pros: convenient for Russian-speaking customers and regulators; reduces the cost of preparing official documentation for Russia.
- Cons: critical risk of encoding and technical log parsing issues; isolation of the project from the international engineering community; reduced code accessibility for external audit and contributors; worse indexing and searchability of technical information.
- Reason for rejection: the project cannot rely only on Russian even if the Russian market is primary, because the engineering layer of the project must remain English-language and compatible with industry tools.
Alternative 3: Hybrid layer-based model
- Pros: code, logs, and engineering interfaces follow international practice; official Russian documentation covers the requirements of Russian customers and regulators; the repository remains understandable on GitHub; the risk of encoding and log parsing issues is reduced.
- Cons: higher maintenance cost; changes require synchronization between the English engineering layer and Russian operational/regulatory documentation.
- Reason for selection: the hybrid model best balances engineering compatibility, Russian market requirements, certification, and project openness.
Alternative 4: All documents always use ru and en suffixes
- Pros: the most uniform file naming scheme.
- Cons: conflicts with GitHub, Cargo, and other tools' expectations for standard files such as
README.md,LICENSE,CONTRIBUTING.md, andCHANGELOG.md. - Reason for rejection: standard documents must remain available under their conventional suffixless names.
Consequences
Positive
- The expected default language is defined for each product layer.
- Code,
CLI, technical logs, and audit use English as the language most compatible with engineering tools. - Official Russian documentation covers the requirements of Russian customers, the Ministry of Digital Development Registry, and certification procedures.
- English and Russian become mandatory supported languages for documentation where required.
- Standard documents retain the names expected by external tools and platforms.
Negative
- Documentation maintenance effort increases: changes must be synchronized between Russian and English versions.
- User-facing
CLImessages and documentation will require localization infrastructure or a synchronized translation process. - Temporary discrepancies between language versions may occur during active development.
Risks and Mitigations
- Risk: Russian and English documentation diverge in meaning.
- Mitigation: update both language versions in the same change or explicitly record translation debt.
- Risk: new documents are created in only one language or with an incorrect suffix.
- Mitigation: add a CI check for naming and language-pair availability for documentation where applicable.
- Risk: Russian-language messages appear in technical logs and audit events.
- Mitigation: enforce English for logs and audit during code review, in logging guidelines, and through automated checks where possible.
- Risk: official Russian documentation lags behind English-language changes in code and
README.- Mitigation: update Russian documentation as part of the release checklist and explicitly record translation debt.
Acceptance Criteria
- The
ADRrecords the supported languagesruanden. - The hybrid language selection model by product layer is recorded.
- English is recorded as the primary language for code, technical comments, engineering
CLI, technical logs, and audit events. - Russian is recorded as the primary language for official operational, legal, and certification documentation for Russia.
- Regular documentation uses the
ruorendot-separated language suffix before the extension. READMEfiles in directories use theREADME.ru.mdandREADME.en.mdformat.- Standard suffixless files are limited to
README.md,CONTRIBUTING.md,CHANGELOG.md, andLICENSE. - For
README.md,CONTRIBUTING.md, andCHANGELOG.md, the English variant is stored without a suffix, and the Russian variant uses therusuffix. - For
LICENSE, the English variant is stored without a suffix, and the Russian translation uses therusuffix or the existing project nameLICENSE_ru. CLIflags, arguments, and engineering messages use English;- Help messages in the CLI may be in Russian;
- Web interfaces must support both languages.
- Technical logs and audit events are emitted in English.
Verification
The correctness of the decision is verified by documentation review and subsequent automated checks:
- check that Russian and English versions exist for documentation where required;
- check
ruandensuffixes with dot separators; - check that the list of standard suffixless files is limited to
README.md,CONTRIBUTING.md,CHANGELOG.md, andLICENSE; - check that
README.md,CONTRIBUTING.md, andCHANGELOG.mdare English, and Russian variants use therusuffix; - check that
LICENSEis English, and the Russian translation uses therusuffix or the existing project nameLICENSE_ru; - check that
CLIflags, arguments, and engineering messages use English; - check that technical logs and audit events use English;
- check that official Russian documentation exists for Russian operational, legal, and certification scenarios.
References
ADL/adr-template.mdREADME.mdREADME.ru.mdCONTRIBUTING.mdCHANGELOG.mdLICENSELICENSE_ru