How Career-Ops Language Modes (de/, fr/, ja/, tr/) Provide Locale-Specific Vocabulary for Evaluations
Career-Ops provides locale-specific vocabulary for evaluations by maintaining parallel language-mode directories that override default English prompts with native terminology through dedicated _shared.md files and localized evaluation templates.
Career-Ops, an open-source career evaluation framework maintained by santifer, implements locale-specific vocabulary for evaluations through a directory-based architecture rather than runtime translation libraries. When users activate non-English modes, the system loads market-specific terminology—such as German "13. Monatsgehalt" or Japanese "年俸制"—directly from dedicated markdown prompt files stored in locale-specific directories.
Language Mode Directory Architecture
The repository ships with a core set of English-language prompts in the default modes/ directory. Alongside these, Career-Ops includes language-specific mode directories at modes/de/, modes/fr/, modes/ja/, and modes/tr/.
Each locale directory contains:
- A
_shared.mdfile defining reusable phrases native to that market - Mode-specific evaluation templates (e.g.,
angebot.mdfor German,offre.mdfor French,kyujin.mdfor Japanese,is-ilani.mdfor Turkish)
This structure allows the system to swap entire prompt sets based on user preference, ensuring that evaluations use terminology appropriate to the target job market.
How _shared.md Files Inject Locale-Specific Vocabulary
The _shared.md files serve as terminology dictionaries that override generic English terms with culturally accurate equivalents. According to the Career-Ops source code in AGENTS.md (lines 672-698), these files define phrases that evaluation modes reference throughout the reporting pipeline.
For example:
- German (
modes/de/_shared.md): Defines "13. Monatsgehalt" (13th month salary), "Probezeit" (probation period), and other DACH-region compensation concepts - French (
modes/fr/_shared.md): Includes "13e mois" and "RTT" (Réduction du Temps de Travail) - Japanese (
modes/ja/_shared.md): Contains "賞与" (bonus) and "年俸制" (annual salary system) - Turkish (
modes/tr/_shared.md): References "SGK" (social security) and "kıdem tazminatı" (severance pay)
When an evaluation mode like angebot.md or offre.md executes, it pulls these localized strings in place of generic English terms, producing reports that naturally contain market-appropriate wording, salary components, and contract types.
Mode Selection and Evaluation Flow
The language mode selection process determines which directory the engine searches for prompt files. As documented in AGENTS.md (lines 672-698), the system follows this hierarchy:
-
User Configuration: When
language.modes_diris set tomodes/de/(or any locale) inconfig/profile.yml, the engine switches the source directory for all mode files from the defaultmodes/to the chosen locale path. -
Automatic Fallback: If no locale is specified, the system defaults to English modes. Explicit user preferences always override automatic job-description language detection (lines 777-795).
-
Pipeline Execution: When running
career-ops ofertaor any evaluation command, the script loads the mode file from the active language directory. These localized prompts are sent to the LLM, which generates reports using the locale-specific vocabulary defined in that directory's_shared.md.
Configuration Examples
You can activate locale-specific vocabulary through program configuration or CLI flags.
Force German mode by updating config/profile.yml:
import yaml from 'js-yaml';
import fs from 'fs';
// Load user profile
const profile = yaml.load(fs.readFileSync('config/profile.yml', 'utf8'));
// Override with German language mode
profile.language = { modes_dir: 'modes/de' };
fs.writeFileSync('config/profile.yml', yaml.dump(profile));
// Run evaluation using German locale-specific vocabulary
await import('./career-ops.mjs').evaluateJobOffer('https://example.com/job');
Use the CLI shortcut for French output:
# Activate French language mode for this evaluation
career-ops --language fr evaluate https://example.com/job
Or invoke a mode file directly:
# Process job description using Turkish locale-specific vocabulary
node ./modes/tr/is-ilani.mjs < job-description.md > report-tr.md
Summary
- Career-Ops implements locale-specific vocabulary for evaluations through parallel directory structures (
modes/de/,modes/fr/,modes/ja/,modes/tr/) rather than translation libraries. - Each language mode contains a
_shared.mdfile defining native terminology like "Probezeit", "RTT", "年俸制", and "kıdem tazminatı". - The system selects vocabulary by switching the source directory for prompt files based on
language.modes_dirinconfig/profile.yml. - Mode files like
angebot.md,offre.md,kyujin.md, andis-ilani.mdreference these shared phrases to produce culturally accurate evaluation reports. - User preferences in configuration files override automatic language detection, ensuring explicit control over evaluation localization.
Frequently Asked Questions
How does Career-Ops determine which language mode to use?
Career-Ops checks the language.modes_dir setting in config/profile.yml first. If explicitly set to a path like modes/de/, the engine loads all prompts from that directory. When no preference is specified, the system defaults to English modes, though automatic job-description language detection can suggest alternatives unless overridden by explicit user configuration.
What happens if a language mode file is missing?
The system relies on the complete set of mode files within a locale directory. If a specific mode file is missing from the chosen locale (e.g., modes/de/angebot.md), the evaluation engine would fail to load the necessary prompts. Unlike translation-based systems, Career-Ops does not fall back to English terminology for individual missing strings—it requires the complete localized prompt set.
Can I add custom vocabulary to an existing language mode?
Yes. You can edit the _shared.md file within any language directory (such as modes/ja/_shared.md) to add or modify reusable phrases. These changes will propagate to all evaluation modes in that locale, as the mode templates reference the shared definitions. Ensure you maintain the markdown structure expected by the evaluation pipeline to prevent parsing errors.
Why does Career-Ops use separate directories instead of translation files?
Career-Ops uses parallel directory structures to store complete prompt templates rather than simple translation key-value pairs. This approach allows for context-aware localization where entire evaluation flows can adapt to local hiring practices, not just word-for-word translation. The system can adjust salary component explanations, contract type descriptions, and cultural nuances specific to each market while maintaining the same underlying evaluation logic.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →