Textpattern CMS support forum
You are not logged in. Register | Login | Help
- Topics: Active | Unanswered
Flipping between two language translations of articles
This might be quite handy for anyone wanting to offer ad-hoc translations of some content on their site in one other language. It’s not ideal, and far from a true multi-lingual setup, but this is a method to go about it if you’re running Txp 4.8.8+ (which introduced the url_title filter in <txp:article_custom />
)…
- Set your sections up so you have all your regular sections that contain your main content, plus one special section to house all your translated documents in. You’ll probably not want to link this in your menu nav structures.
- Create a Form shortcode called something like
link_translation
. Populate the form with the code given below (and season to taste). - In your page template(s), add
<txp::link_translation />
wherever you want a language switcher to appear.
Then, whenever you want to offer a translation of an article:
- In the article you wish to translate, note its:
- section name (not visitor-friendly title).
- URL-only title name.
- Create a new article (or clone the original) in the section that houses all your translated content. Translate the text.
- Alter the translated article’s Meta>URL-only title field so it’s of the form: section__article. That’s:
- the original section name that the article appeared in.
- two underscores (or another delimiter of your choice if you tweak the code below to match).
- the original article URL title.
- Save the translated article, make Live, done.
Putting the section name and original URL-title as part of the translated article’s URL-title enables a backlink to be created to the original language version.
So here’s the language switcher widget shortcode:
<txp:variable name="meta_title"><txp:article_url_title /></txp:variable>
<if::section not name="{your-translation-section}">
<txp:variable name="curr_section"><txp:section /></txp:variable>
<article::custom section="{your-translation-section}" url_title='<txp:variable name="curr_section" />__<txp:variable name="meta_title" />'>
<div class="translation"><txp:permlink class="xln-link">Read in {Second language}</txp:permlink></div>
</article::custom>
<txp:else />
<txp:hide> * Article is in 2nd language so offer backlink to original article * </txp:hide>
<txp:variable name="orig_section" trim="/(.*)__.*/" replace="$1" value='<txp:variable name="meta_title" />' />
<txp:variable name="orig_article" trim="/.*__(.*)/" replace="$1" value='<txp:variable name="meta_title" />' />
<article::custom section='<txp:variable name="orig_section" />' url_title='<txp:variable name="orig_article" />'>
<div class="translation"><txp:permlink class="xln-link">Read in {Original language}</txp:permlink></div>
</article::custom>
</if::section>
Replace anything in curly braces with the relevant language names / sections. You could use imagery in the anchors if you preferred.
I’ve not tried to extend this concept with more than one language. I suspect it’ll get messy. It’s also annoying that the trim/replace has to be done twice to extract the original section and article. This could probably be simplified if you had etc_query or smd_wrap installed as it could split on the delimiter and extract both elements either side in one step. Maybe.
Anyway, hope this is of some use to someone. Refinements or extensions welcome.
The smd plugin menagerie — for when you need one more gribble of power from Textpattern. Bleeding-edge code available on GitHub.
Txp Builders – finely-crafted code, design and Txp
Offline
Re: Flipping between two language translations of articles
Useful. Thanks ;)
Patrick.
Github | CodePen | Codier | Simplr theme | Wait Me: a maintenance theme | [\a mi.ni.ma]: a “Low Tech” simple Blog theme.
Offline
Re: Flipping between two language translations of articles
Nice, thanks.
Bloke wrote #334681:
I’ve not tried to extend this concept with more than one language.
I have, fwiw, though the construction is slightly different (uses hidden sections). An extra problem you solve is staying within the current language when clicking, say, ‘Next’ link.
It’s also annoying that the trim/replace has to be done twice to extract the original section and article. This could probably be simplified if you had etc_query or smd_wrap installed as it could split on the delimiter and extract both elements either side in one step. Maybe.
You can do it in core, though it’s suboptimal (requires calling a breakform
). Just create a form, say iterator
, and here we are:
<!-- iterator form -->
<txp:variable name='var_<txp:yield item="count" />' value='<txp:yield item />' />
<!-- populate 'var_n' variables -->
<txp:variable name="meta_title" breakby="__" breakform="iterator" />
Offline
Re: Flipping between two language translations of articles
Yeah the main downside to the approach is the loss of sections in the second language. Using hidden sections that feed the content into the displayed section is much more useful.
And thanks for the breakform example. That’s handy
The smd plugin menagerie — for when you need one more gribble of power from Textpattern. Bleeding-edge code available on GitHub.
Txp Builders – finely-crafted code, design and Txp
Offline