Language Support
Resume Matcher supports multiple languages for both the interface and AI-generated content.
Supported Languages
| Code | Language | Native Name |
|---|---|---|
en | English | English |
es | Spanish | Español |
zh | Chinese (Simplified) | 中文 |
ja | Japanese | 日本語 |
Two Language Settings
You can set these independently in Settings:
UI Language
Changes buttons, labels, navigation, and error messages. Stored locally in your browser.
Content Language
Controls the language of AI-generated content: tailored resumes, cover letters, and outreach messages. Synced with the backend.
Note: Existing resumes in your database stay in their original language. Only new AI-generated content uses the selected language.
How to Change Language
- Go to Settings (
/settings) - Find the Language section
- Select your preferred UI language
- Select your preferred content language
- Save
Changes take effect immediately for the UI. Content language applies to your next AI generation.
What Gets Translated
| Content | UI Language | Content Language |
|---|---|---|
| Navigation and buttons | Yes | - |
| Form labels | Yes | - |
| Error messages | Yes | - |
| New tailored resumes | - | Yes |
| New cover letters | - | Yes |
| Existing saved resumes | - | No (stays as-is) |
Adding a New Language
Resume Matcher supports UI translations and AI-generated content in multiple languages. Here’s how to add a new one.
Step 1: Create UI Translations
Copy an existing translation file and translate the values:
cp apps/frontend/messages/en.json apps/frontend/messages/fr.json
Edit the new file. Translate the values, not the keys:
{
"common": {
"save": "Enregistrer",
"cancel": "Annuler",
"delete": "Supprimer"
},
"nav": {
"dashboard": "Tableau de bord",
"settings": "Paramètres"
}
}
Step 2: Register the Locale
Edit apps/frontend/i18n/config.ts:
export const locales = ['en', 'es', 'zh', 'ja', 'fr'] as const;
export const localeNames: Record<Locale, string> = {
en: 'English',
es: 'Español',
zh: '中文',
ja: '日本語',
fr: 'Français', // Add your language
};
Step 3: Add Backend Language Name
Edit apps/backend/app/prompts/templates.py:
LANGUAGE_NAMES = {
"en": "English",
"es": "Spanish",
"zh": "Chinese (Simplified)",
"ja": "Japanese",
"fr": "French", # Add your language
}
Step 4: Update Supported Languages List
Edit apps/backend/app/routers/config.py:
SUPPORTED_LANGUAGES = ["en", "es", "zh", "ja", "fr"]
Testing Your Translation
- Run
npm run dev - Go to Settings
- Select your new language from the dropdown
- Verify UI text displays correctly
- Generate a tailored resume to test content language
Fixing Existing Translations
Found a typo or awkward phrasing? Edit the relevant apps/frontend/messages/{code}.json file and submit a PR. No other files need changes for translation fixes.
Storage
- UI language: Browser localStorage only
- Content language: localStorage + backend config
This means UI preferences stay on your device, while content language syncs if you access from multiple browsers.
Next Steps
- Features - All capabilities
- Contributing - Help add languages