# CV Language Configuration and Per-Posting Consistency in AI Job Search

> Learn how CV language is configured in AI Job Search via candidate profiles and enforced with LaTeX templates for consistent per-posting localization.

- Repository: [Mads Lorentzen/ai-job-search](https://github.com/MadsLorentzen/ai-job-search)
- Tags: how-to-guide
- Published: 2026-07-26

---

**CV language is configured through a candidate profile setting in [`01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/01-candidate-profile.md) and enforced via LaTeX template rules that mandate translated section headings during the `/apply` workflow, ensuring uniform localization across all job-specific documents.**

The MadsLorentzen/ai-job-search repository manages multilingual résumé generation through a tightly coupled system of profile metadata and template enforcement. Understanding how **CV language configuration** works is essential for maintaining professional consistency when tailoring applications to specific job postings. This guide explains the dual-control mechanism that ensures every generated CV maintains uniform language across headings, body text, and boilerplate content.

## CV Language Configuration in the Candidate Profile

The foundation of language control resides in the candidate profile document, which serves as the single source of truth for localization settings.

### Storing the Language Setting in 01-candidate-profile.md

Users specify their **CV language**—the natural language used for the résumé—within the identity section of [`01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/01-candidate-profile.md). This field determines the locale for all subsequent CV generation operations.

```markdown

## Identity

- **Name:** Jane Doe
- **Location:** Copenhagen, Denmark
- **Languages:** English (native), Danish (fluent)  <!-- CV language is set to Danish -->

```

The `/setup` command reads this configuration during initialization and persists the chosen language in the framework’s internal state. This stored value drives all translation decisions throughout the workflow.

## Per-Posting Consistency Through Template Enforcement

Beyond profile configuration, the repository enforces language consistency through explicit rules embedded in the LaTeX template system. These rules prevent mixed-language documents where narrative content is translated but structural elements remain in English.

### LaTeX Template Rules in 05-cv-templates.md

The tailoring guide in [`05-cv-templates.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/05-cv-templates.md) contains a mandatory requirement for section headings:

> “Section headings such as `\section{Core Competencies}`, `Professional Experience`, … are **literal English text baked into the template** – they do **not** translate themselves. Whenever the CV language (see *CV language* in the candidate profile) is not English, **translate every one of these too** …”

This rule eliminates the common mistake of translating only the body content while leaving headings in English. The document explicitly requires manual translation of all section headings to match the specified CV language.

### Master Template Structure in cv/main_example.tex

The `cv/main_example.tex` file serves as the master LaTeX template that is copied and adapted for each job posting. It contains placeholders that the `/apply` command populates with localized content. The template uses conditional logic to handle language-specific headings:

```latex
% In the per-posting generation step
\section{
  \ifthenelse{\equal{\cvlanguage}{english}}{Professional Experience}{Experiencia Profesional}
}

```

## The Consistency Validation Workflow

The `/apply <url>` command orchestrates the generation of posting-specific CVs while maintaining strict language consistency through automated validation.

### The /apply Command Execution

When generating a tailored CV, the workflow executes the following sequence:

1. Reads the language value from the candidate profile stored in [`01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/01-candidate-profile.md)
2. Generates a posting-specific LaTeX file named `cv/main_<company>_<role>.tex`
3. Inserts the appropriate translated section headings based on the CV language setting
4. Processes the profile statement after `\makecvtitle` and body content using the same locale

This ensures that the short elevator-pitch, section headings, and boilerplate lines (e.g., “Available upon request.”) all share the same language.

### Compile-and-Inspect Verification

After generating the LaTeX file, the system runs a compilation and inspection sequence that verifies language integrity:

```bash
cd cv && lualatex -interaction=nonstopmode main_acme_engineer.tex

# After compile, a script parses the PDF text:

if grep -q "Professional Experience" cv/main_acme_engineer.pdf && [[ "$CV_LANGUAGE" != "english" ]]; then
  echo "❌ Language mismatch: English heading found in a non‑English CV"
  exit 1
fi

```

This validation step catches discrepancies where English headings remain in non-English CVs. Any mismatch causes a failure that must be resolved before the CV is presented to the user, enforcing consistency through build-time verification.

## Summary

- **Profile-driven configuration**: The CV language is set in [`01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/01-candidate-profile.md) and stored by the `/setup` command as the authoritative source for localization.
- **Template-level enforcement**: [`05-cv-templates.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/05-cv-templates.md) mandates that all section headings must be manually translated to match the CV language, preventing mixed-language structural elements.
- **Automated validation**: The `/apply` workflow includes a compile-and-inspect loop using `lualatex` that verifies no English headings remain in non-English CVs.
- **Uniform localization**: Every generated CV maintains consistency across profile statements, section headings, and boilerplate text by referencing the same language value throughout the generation process.

## Frequently Asked Questions

### How do I change the language of my CV in the ai-job-search framework?

Modify the language specification in [`01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/01-candidate-profile.md) under the Identity section, then run the `/setup` command to update the internal state. The framework will use this new value for all subsequent CV generations, ensuring the profile statement, section headings, and boilerplate text all reflect the updated locale.

### What happens if I forget to translate the section headings in my LaTeX template?

The compile-and-inspect validation loop will detect English headings in a non-English CV during the `/apply` workflow. The build process will fail with a language mismatch error, preventing submission of an inconsistent document until the headings are properly translated.

### Can I use different languages for different job applications?

Yes. Since the `/apply` command generates a new LaTeX file (`cv/main_<company>_<role>.tex`) for each posting, you can modify the language setting in [`01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/01-candidate-profile.md) between applications. Ensure you run `/setup` after changing the language and verify that your template translations reflect the desired locale before executing `/apply`.

### Where are the LaTeX template rules documented?

The translation requirements for section headings are documented in [`05-cv-templates.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/05-cv-templates.md) under the section detailing that headings must match the CV's language. This file also references the master template structure implemented in `cv/main_example.tex`.