## Theme Translation

Product: Monogram - Personal Portfolio WordPress Theme
URL: https://hub.jkdevstudio.com/docs/monogram/installation/theme-translation
Updated: 2026-09-06
Summary: Translate Monogram into your language with Loco Translate, Weglot or TranslatePress, and learn where the two text domains and their .mo files belong.

Monogram ships translation templates rather than finished translations, so the theme labels stay in English until you translate them or run a translation plugin. This page covers both routes, and where the files have to sit so a theme update does not wipe them.

## Two text domains, not one

Monogram splits its labels across the theme and the core plugin. A label such as `by` in a post meta row exists in both, because the theme prints it on the blog archive and the Elementor posts list widget prints its own copy. Translating only one leaves the other in English.

:::deflist

Theme
: Text domain `monogram`. Template at `wp-content/themes/monogram/lang/monogram.pot`. Covers blog and archive pages, single posts, portfolio pages, breadcrumbs, search, comments and the 404 page.

Core plugin
: Text domain `jkd-core`, in the JKD Theme Core Plugin. Template at `wp-content/plugins/jkd-wp-monogram-core/lang/jkd-core.pot`. Covers every Elementor widget, the Customizer labels and the load more responses.

:::

<div data-callout="warning">

Core plugin translations only load from version 1.3.7 onward. Earlier versions looked for them in a folder that does not exist, so a `jkd-core` translation on an older copy has no effect. Update the plugin first.

</div>

## Where the files belong

Put finished translations in the WordPress language folders, never inside the theme or plugin folder. Updates replace the theme and plugin directories wholesale, and anything saved there goes with them.

<table> <thead> <tr> <th>Translating</th> <th>File name</th> <th>Folder</th> </tr> </thead> <tbody> <tr> <td>Theme</td> <td><code>monogram-de_DE.po</code> and <code>.mo</code></td> <td><code>wp-content/languages/themes/</code></td> </tr> <tr> <td>Core plugin</td> <td><code>jkd-core-de_DE.po</code> and <code>.mo</code></td> <td><code>wp-content/languages/plugins/</code></td> </tr> </tbody> </table>

Swap `de_DE` for your own locale code, such as `fr_FR`, `es_ES` or `pt_BR`. WordPress loads these before the copies bundled with the theme, so they win.

## Choosing a method

<table> <thead> <tr> <th>Method</th> <th>Best for</th> </tr> </thead> <tbody> <tr> <td>Loco Translate</td> <td>Translating the theme into one language, from the dashboard</td> </tr> <tr> <td>Manual <code>.po</code> and <code>.mo</code> files</td> <td>Translations you keep in version control</td> </tr> <tr> <td>Weglot</td> <td>A multilingual site with automatic translation and a language switcher</td> </tr> <tr> <td>TranslatePress</td> <td>A multilingual site you translate by clicking text on the page</td> </tr> </tbody> </table>

## Translate with Loco Translate

Loco Translate reads both templates and writes the files for you, which makes it the shortest path for a single language.

:::steps

### Install the plugin

Install and activate Loco Translate from [[Dashboard > Plugins > Add New]].

### Start with the theme

Go to [[Loco Translate > Themes]], pick Monogram, then click **New language**. Choose your language.

### Pick the Custom location

Loco offers three locations. Choose **Custom**, which writes to `wp-content/languages/themes/`. The Author and System locations put the file inside the theme, where the next update deletes it.

### Translate and save

Work through the strings and click **Save**. Reload the front end to see them.

### Repeat for the core plugin

Go to [[Loco Translate > Plugins]], pick JKD Theme Core Plugin, and run the same steps. This is the half that covers the Elementor widgets.

:::

## Translate with .po and .mo files

For a translation you keep in a repository, edit the templates directly in Poedit or a similar editor.

1. Open `wp-content/themes/monogram/lang/monogram.pot`.
2. Create a new translation from it and save the pair as `monogram-de_DE.po` and `monogram-de_DE.mo`, using your own locale code.
3. Upload both to `wp-content/languages/themes/`.
4. Repeat with `wp-content/plugins/jkd-wp-monogram-core/lang/jkd-core.pot`, saving as `jkd-core-de_DE.po` and `.mo` in `wp-content/languages/plugins/`.

<div data-callout="tip">

The file name has to carry the domain and the locale, in that order. `monogram-de_DE.mo` loads; `de_DE.mo` does not.

</div>

## Translate with Weglot

Weglot translates the whole site automatically and adds a language switcher. Monogram `vendor/weglot.js` integration keeps that switcher working across the theme page transitions.

1. Install and activate Weglot from [[Dashboard > Plugins > Add New]].
2. Create an account at [weglot.com](https://weglot.com/) and copy your API key.
3. Go to [[Weglot > Settings]], enter the key, then set your original and target languages.
4. Save. Weglot translates the site and the switcher appears for visitors.

## Translate with TranslatePress

TranslatePress lets you translate by clicking text on the page itself. Monogram `vendor/trp.js` integration handles its switcher during page transitions.

1. Install and activate TranslatePress from [[Dashboard > Plugins > Add New]].
2. Go to [[Settings > TranslatePress]] and add your default and target languages.
3. Open any page and click **Translate Page** in the admin bar.
4. Click a text element, type the translation, and save.

## Set the site language

Whichever method you use, set the language WordPress itself runs in at [[Settings > General]] under **Site Language**. This is what tells WordPress which `.mo` file to load, and it also drives dates: with the language set, month names arrive translated on their own.

<div data-callout="note">

Post dates follow the format at [[Settings > General]] under **Date Format**, so a German site reads `31. Juli 2026` rather than an English-ordered date. To pin a different format for post meta specifically, use \[\[Appearance &gt; Customize &gt; Theme Options &gt; Date Format\]\].

</div>

## Strings that come from somewhere else

Some text on the page is not the theme to translate.

- Titles in the browser tab, when an SEO plugin is active. Rank Math and Yoast build those from their own title templates, which hold plain text you edit in their settings.
- Anything you typed into the Customizer, such as the 404 page wording or the portfolio name. Type it in your language and it stays that way. On a multilingual site, WPML and Polylang String Translation pick these up.
- Post, page and taxonomy content, which belongs to a multilingual plugin rather than a `.po` file.

## Right-to-left languages

Monogram loads a mirrored stylesheet on its own when WordPress reports an RTL language such as Arabic, Hebrew or Persian. Layout, alignment and directional elements flip, and there is nothing to configure.