# Ghost Post Translation - Multi Language content

**URL:** <https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494>\
**Category:** Themes\
**Created:** [May 31, 2022, 8:44am UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494 "2022-05-31T08:44:22Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![kmanojkumar](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/kmanojkumar/32/8742_2.png) [@kmanojkumar](https://forum.ghost.org/u/kmanojkumar)\
**Post date:** [May 31, 2022, 8:44am UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/1 "2022-05-31T08:44:22Z")

</div>

Hi, I am looking for this article [https://ghost.org/tutorials/multi-language-content/](https://ghost.org/tutorials/multi-language-content/), which is referenced in several discussions of this forum related to hosting Multi-language content on Ghost blog. The tutorial link is not found now, is it intentional, like is there a new reference I can refer for setting up Multi-language content?

References:

1. [Multi-language blog with a multi-language theme](https://forum.ghost.org/t/multi-language-blog-with-a-multi-language-theme/14228)
2. [Blog Translation and Language Activation](https://forum.ghost.org/t/blog-translation-and-language-activation/17444)

Please suggest.

Thanks.

---

<div class="post-metadata">

**Author:** ![timscha](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/timscha/32/18988_2.png) [@timscha](https://forum.ghost.org/u/timscha)\
**Post date:** [May 31, 2022, 4:37pm UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/2 "2022-05-31T16:37:47Z")

</div>

I am looking for this link too.  
It was mentioned here as well: [Ghost Themes - Dynamic URLs & Routing](https://ghost.org/docs/themes/routing/)

A new tutorial how to build a post in multiple languages would be really appreciated.

---

<div class="post-metadata">

**Author:** ![timscha](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/timscha/32/18988_2.png) [@timscha](https://forum.ghost.org/u/timscha)\
**Post date:** [June 1, 2022, 12:18pm UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/3 "2022-06-01T12:18:29Z")

</div>

I am one step ahead.  
I extended the routes.yaml of my theme with the following code:

```auto
collections:
  /:
    permalink: /{slug}/
    template: index
    filter: 'tag:-hash-de'
  /de/:
    permalink: /de/{slug}/
    template: index-de
    filter: 'tag:hash-de'

```

Also I created an internal Hashtag, called “#de”. Now I have two separated areas with English posts and /de/ with German posts.  
The only thing I don’t know is, how I can tell the theme that it should use my German language file when browsing through /de/.

Any suggestions?

---

<div class="post-metadata">

**Author:** ![kmanojkumar](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/kmanojkumar/32/8742_2.png) [@kmanojkumar](https://forum.ghost.org/u/kmanojkumar)\
**Post date:** [June 2, 2022, 9:38am UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/4 "2022-06-02T09:38:26Z")

</div>

Ya, I am stuck at the same point - how to tell the theme, which language file to pick. I thought it would work based on html lang attribute, but it didn’t. Html lang attribute is changing appropriately.

[abc.com](http://abc.com) picks **en** (Publication lang) by default, but [abc.com/de](http://abc.com/de) is also picking **en** only, instead of **de** (ideally it should be picking **de** lang file from the locales folder instead of **en** ).

Am I missing anything? Please suggest.

---

<div class="post-metadata">

**Author:** ![RyanF](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/ryanf/32/17448_2.png) [@RyanF](https://forum.ghost.org/u/RyanF)\
**Post date:** [June 3, 2022, 6:53pm UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/5 "2022-06-03T18:53:50Z")

</div>

There are two distinct concepts here:

1. Building a translatable theme (only one language at a time)
2. Building a site with multi-language content

Our previous tutorial conflated these concepts, which caused a lot of confusion for developers on what’s already a really complex topic. We are currently working on writing new tutorials for both of these concepts.

I think the key thing that trips people up, which I think is what’s happening for @kmanojkumar, is that multi-language sites don’t use `json` language files. They only apply to translatable themes using a single language (option #1).

To support multiple languages in a single publication (option #2), you need to use separate templates (index.hbs vs index-de.hbs), as well as a mix of the `#has`, `#match`, and `#block` helper.

If you share more about what you’re trying to do, I can provide some guidance/examples.

---

<div class="post-metadata">

**Author:** ![kmanojkumar](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/kmanojkumar/32/8742_2.png) [@kmanojkumar](https://forum.ghost.org/u/kmanojkumar)\
**Post date:** [June 3, 2022, 7:41pm UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/6 "2022-06-03T19:41:50Z")

</div>

> [@RyanF](#):
>
> Building a site with multi-language content

Thanks for clarifying @RyanF.

I am working towards Option #2. Can you guide on how Multi-language content can be implemented? Post content I managed to translate using Internal Tags and Collections within `routes.yaml`. How to translate theme content now?

Like for example, “Published with Ghost” in [abc.com/](http://abc.com/) 's footer should be translated to “Publicado con Ghost” in [abc.com/](http://abc.com/) **es**.

Thanks.

---

<div class="post-metadata">

**Author:** ![RyanF](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/ryanf/32/17448_2.png) [@RyanF](https://forum.ghost.org/u/RyanF)\
**Post date:** [June 3, 2022, 8:41pm UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/7 "2022-06-03T20:41:16Z")

</div>

Translating these other parts of the site is trickier 😬

You’ll want to create a `block` where you want that text to appear. In this case, I’ll use `default.hbs` as an example:

```plaintext
<div><a href="https://ghost.org/" target="_blank" rel="noopener">{{{block "pub-tag"}}}</a></div>

```

Then, in `index.hbs`, you’d add this anywhere in the file:

```plaintext
{{#contentFor "pub-tag"}}Published by Ghost{{/contentFor}}

```

And in index-es.hbs:

```plaintext
{{#contentFor "pub-tag"}}Publicado con Ghost{{/contentFor}}

```

You’d have to do this for every top-level template file. In `post.hbs`, you would do this:

```plaintext
{{#has tag="#es"}}
    {{#contentFor "pub-tag"}}Publicado con Ghost{{/contentFor}}
{{else}}
    {{#contentFor "pub-tag"}}Published by Ghost{{/contentFor}}
{{/has}}

```

Here’s a reference to the `block` helper in the docs: [Ghost Handlebars Theme Helpers: block & contentFor](https://ghost.org/docs/themes/helpers/block/)

Let me know if that’s what you were looking for!

---

<div class="post-metadata">

**Author:** ![timscha](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/timscha/32/18988_2.png) [@timscha](https://forum.ghost.org/u/timscha)\
**Post date:** [June 5, 2022, 4:12pm UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/8 "2022-06-05T16:12:50Z")

</div>

Puh Thanks for all the explanations @RyanF. In my case this is too much and will blow up the theme a lot.  
Maybe you guys can make that things easier in an upcoming version of Ghost. 🙂

---

<div class="post-metadata">

**Author:** ![Capriej](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/capriej/32/18674_2.png) [@Capriej](https://forum.ghost.org/u/Capriej)\
**Post date:** [July 26, 2022, 4:51pm UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/9 "2022-07-26T16:51:58Z")

</div>

¡Hi!

Is there a complete and updated tutorial for building a site with multi-language content using [Ghost.io](http://Ghost.io)? Or a good recommendation of a ready-to-use multi-language theme?

Thanks.

---

<div class="post-metadata">

**Author:** ![Abhishek\_Prakash](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/abhishek_prakash/32/8599_2.png) [@Abhishek\_Prakash](https://forum.ghost.org/u/Abhishek_Prakash)\
**Post date:** [December 12, 2022, 4:03am UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/10 "2022-12-12T04:03:40Z")

</div>

I would like to see such a tutorial as well.

---

<div class="post-metadata">

**Author:** ![Victor\_Tong](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/victor_tong/32/20791_2.png) [@Victor\_Tong](https://forum.ghost.org/u/Victor_Tong)\
**Post date:** [December 21, 2022, 3:15pm UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/11 "2022-12-21T15:15:15Z")

</div>

Please do,

Ghost is very ideal for the website

---

<div class="post-metadata">

**Author:** ![Artem\_Pylypchuk](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/artem_pylypchuk/32/28312_2.png) [@Artem\_Pylypchuk](https://forum.ghost.org/u/Artem_Pylypchuk)\
**Post date:** [January 11, 2024, 11:23am UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/12 "2024-01-11T11:23:56Z")

</div>

@RyanF

Hello, is it possible to create 2 the same posts (for [example-site.com/case-study](http://example-site.com/case-study) and [example-site.com/de/case-study](http://example-site.com/de/case-study)) with the same url but for german locale add /de/ after [site.com](http://site.com)?

---

<div class="post-metadata">

**Author:** ![RyanF](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/ryanf/32/17448_2.png) [@RyanF](https://forum.ghost.org/u/RyanF)\
**Post date:** [January 11, 2024, 12:35pm UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/13 "2024-01-11T12:35:17Z")

</div>

No. Slugs need to be unique and can’t contain slashes.

You could have `case-study` and `fallstudie`, and then use routing to prefix `fallstudie` with `de`.

---

<div class="post-metadata">

**Author:** ![Artem\_Pylypchuk](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/artem_pylypchuk/32/28312_2.png) [@Artem\_Pylypchuk](https://forum.ghost.org/u/Artem_Pylypchuk)\
**Post date:** [January 11, 2024, 12:40pm UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/14 "2024-01-11T12:40:39Z")

</div>

I see, okay, one more qeustion: is it possible to create tag for 2 different language?

For example: /tag/case-studies/example-post and /de/tag/case-studies/example-post?

Or maybe u can help me to decide better way to create miltilang tags routes?

---

<div class="post-metadata">

**Author:** ![RyanF](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/ryanf/32/17448_2.png) [@RyanF](https://forum.ghost.org/u/RyanF)\
**Post date:** [January 11, 2024, 1:28pm UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/15 "2024-01-11T13:28:16Z")

</div>

No, not for tag routes. You could do: `case-studies` and `case-studies-de`, though.

Alternatively, you can channels to create these routes: [Ghost Themes - Dynamic URLs & Routing](https://ghost.org/docs/themes/routing/#channels)

---

<div class="post-metadata">

**Author:** ![Artem\_Pylypchuk](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/artem_pylypchuk/32/28312_2.png) [@Artem\_Pylypchuk](https://forum.ghost.org/u/Artem_Pylypchuk)\
**Post date:** [January 11, 2024, 1:53pm UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/16 "2024-01-11T13:53:51Z")

</div>

Thanks, for now I’m trying to use collection, for example:  
Created new collection in routes.yaml:

```auto
  /de/case-studies/:
    permalink: /de/case-studies/{slug}/
    template: case-studies-de
    filter: tag:hash-de
    data: 'tag.case-studies'

```

Added new template `case-studies-de.hbs` and added next body:

```auto
{{!< default}}
{{#contentFor "lang"}}de{{/contentFor}}

{{> loop }}

{{ pagination }}

```

BUT I still have blank page (no posts):

 ![image](https://us1.discourse-cdn.com/flex015/uploads/ghost2/original/3X/0/0/002b143e08dc95eefd9e3e848ecea777a0d7ab9f.png)

Tag “Case studies” is present with 2 posts:

 ![image](https://us1.discourse-cdn.com/flex015/uploads/ghost2/original/3X/5/f/5f26158c86bb12da394932bbc69b46b36727be4e.png)

What I do wrong? How to provide posts in my new collection (I thought that data property in routes.yaml was correct way to do it)

---

<div class="post-metadata">

**Author:** ![RyanF](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/ryanf/32/17448_2.png) [@RyanF](https://forum.ghost.org/u/RyanF)\
**Post date:** [January 13, 2024, 6:02pm UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/17 "2024-01-13T18:02:59Z")

</div>

What does the entire routes file look like? (The `data` property isn’t likely needed here.)

---

<div class="post-metadata">

**Author:** ![Artem\_Pylypchuk](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/artem_pylypchuk/32/28312_2.png) [@Artem\_Pylypchuk](https://forum.ghost.org/u/Artem_Pylypchuk)\
**Post date:** [January 15, 2024, 9:15am UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/18 "2024-01-15T09:15:08Z")

</div>

@RyanF

Hello. Ok, so I have fix it, for now all routes worked as expected.

But, I have another question - how I can translate static pages?

For example:  
I have index and index-de. And I need to translate text in header as well. How I can do it?

en version:  
`<li class='c-nav__item'><a href='site.com/get-a-demo' class='c-btn c-btn--small c-btn--action'>{{t 'Book a Demo' }}</a></li>`

de version:  
`<li class='c-nav__item'><a href='site.com/get-a-demo' class='c-btn c-btn--small c-btn--action'>{{t 'Buchen Sie eine Demo' }}</a></li>`

---

<div class="post-metadata">

**Author:** ![themeupstudio](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/themeupstudio/32/40083_2.png) [@themeupstudio](https://forum.ghost.org/u/themeupstudio)\
**Post date:** [May 29, 2024, 8:42am UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/19 "2024-05-29T08:42:43Z")

</div>

Hello @Artem_Pylypchuk ,

Yes, multilingual versions can exist at [example.com](http://example.com) and [example.com/de/](http://example.com/de/). However there are some constraints.

In fact, I recently released a theme, [https://crimson.themeupstudio.com/](https://crimson.themeupstudio.com/), with which you can experience a truly multilingual experience with a Ghost theme.

Read more about it in my forum post [[UPDATE] Crimson: A Multilingual Ghost blog theme for seamless multi language experience - #3 by themeupstudio](https://forum.ghost.org/t/update-crimson-a-multilingual-ghost-blog-theme-for-seamless-multi-language-experience/47700/3)

Message me in case of any queries.

---

<div class="post-metadata">

**Author:** ![AlexKalopsia](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/alexkalopsia/32/4161_2.png) [@AlexKalopsia](https://forum.ghost.org/u/AlexKalopsia)\
**Post date:** [October 10, 2024, 9:27pm UTC](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494/20 "2024-10-10T21:27:42Z")

</div>

Would still love to see an updated tutorial.  
My use case: running a blog where every article can be read in two different languages.

[Next page](https://forum.ghost.org/t/ghost-post-translation-multi-language-content/30494.md?page=2)
