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

CV language is configured through a candidate profile setting in 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. This field determines the locale for all subsequent CV generation operations.


## 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 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:

% 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
  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:

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 and stored by the /setup command as the authoritative source for localization.
  • Template-level enforcement: 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 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 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 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.

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:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →