# How Career-Ops Language Modes (de/, fr/, ja/, tr/) Provide Locale-Specific Vocabulary for Evaluations

> Learn how Career-Ops language modes (de/ fr/ ja/ tr/) deliver locale-specific vocabulary for evaluations using parallel directories and localized templates for an enhanced experience.

- Repository: [Santiago Fernández de Valderrama/career-ops](https://github.com/santifer/career-ops)
- Tags: deep-dive
- Published: 2026-06-07

---

**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`](https://github.com/santifer/career-ops/blob/main/_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.md`](https://github.com/santifer/career-ops/blob/main/_shared.md) file defining reusable phrases native to that market
- Mode-specific evaluation templates (e.g., [`angebot.md`](https://github.com/santifer/career-ops/blob/main/angebot.md) for German, [`offre.md`](https://github.com/santifer/career-ops/blob/main/offre.md) for French, [`kyujin.md`](https://github.com/santifer/career-ops/blob/main/kyujin.md) for Japanese, [`is-ilani.md`](https://github.com/santifer/career-ops/blob/main/is-ilani.md) for 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`](https://github.com/santifer/career-ops/blob/main/_shared.md) Files Inject Locale-Specific Vocabulary

The [`_shared.md`](https://github.com/santifer/career-ops/blob/main/_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`](https://github.com/santifer/career-ops/blob/main/AGENTS.md) (lines 672-698), these files define phrases that evaluation modes reference throughout the reporting pipeline.

For example:

- **German ([`modes/de/_shared.md`](https://github.com/santifer/career-ops/blob/main/modes/de/_shared.md))**: Defines "13. Monatsgehalt" (13th month salary), "Probezeit" (probation period), and other DACH-region compensation concepts
- **French ([`modes/fr/_shared.md`](https://github.com/santifer/career-ops/blob/main/modes/fr/_shared.md))**: Includes "13e mois" and "RTT" (Réduction du Temps de Travail)
- **Japanese ([`modes/ja/_shared.md`](https://github.com/santifer/career-ops/blob/main/modes/ja/_shared.md))**: Contains "賞与" (bonus) and "年俸制" (annual salary system)
- **Turkish ([`modes/tr/_shared.md`](https://github.com/santifer/career-ops/blob/main/modes/tr/_shared.md))**: References "SGK" (social security) and "kıdem tazminatı" (severance pay)

When an evaluation mode like [`angebot.md`](https://github.com/santifer/career-ops/blob/main/angebot.md) or [`offre.md`](https://github.com/santifer/career-ops/blob/main/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`](https://github.com/santifer/career-ops/blob/main/AGENTS.md) (lines 672-698), the system follows this hierarchy:

1. **User Configuration**: When `language.modes_dir` is set to `modes/de/` (or any locale) in [`config/profile.yml`](https://github.com/santifer/career-ops/blob/main/config/profile.yml), the engine switches the source directory for all mode files from the default `modes/` to the chosen locale path.

2. **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).

3. **Pipeline Execution**: When running `career-ops oferta` or 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`](https://github.com/santifer/career-ops/blob/main/_shared.md).

## Configuration Examples

You can activate locale-specific vocabulary through program configuration or CLI flags.

Force German mode by updating [`config/profile.yml`](https://github.com/santifer/career-ops/blob/main/config/profile.yml):

```javascript
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:

```bash

# Activate French language mode for this evaluation

career-ops --language fr evaluate https://example.com/job

```

Or invoke a mode file directly:

```bash

# 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.md`](https://github.com/santifer/career-ops/blob/main/_shared.md) file 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_dir` in [`config/profile.yml`](https://github.com/santifer/career-ops/blob/main/config/profile.yml).
- Mode files like [`angebot.md`](https://github.com/santifer/career-ops/blob/main/angebot.md), [`offre.md`](https://github.com/santifer/career-ops/blob/main/offre.md), [`kyujin.md`](https://github.com/santifer/career-ops/blob/main/kyujin.md), and [`is-ilani.md`](https://github.com/santifer/career-ops/blob/main/is-ilani.md) reference 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`](https://github.com/santifer/career-ops/blob/main/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`](https://github.com/santifer/career-ops/blob/main/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`](https://github.com/santifer/career-ops/blob/main/_shared.md) file within any language directory (such as [`modes/ja/_shared.md`](https://github.com/santifer/career-ops/blob/main/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.