Go to main content

Textpattern CMS support forum

You are not logged in. Register | Login | Help

#13 2017-11-14 00:36:20

phiw13
Plugin Author
From: Japan
Registered: 2004-02-27
Posts: 3,079
Website

Re: Languages bundled in core

So after removing the installed textpacks and re-installing them, things work well now, afaict.

Re, plugins. I reinstalled the text packs for those two admin-side plugins I actually use. I had a bit of a surprise though. The text pack for smd_thumbnails I had at hand had both the default English strings and the French translations ( labeled @ fr-fr). That spits out some PHP warnings (sorry, forgot to copy), and when checking the Languages panel, I had an additional language installed (an unlabelled tile…). I removed it and the PHP warning went away.

I’ll wait for the Makks patch for more on that front.


Where is that emoji for a solar powered submarine when you need it ?
Sand space – admin theme for Textpattern

Offline

#14 2017-11-14 01:09:27

Bloke
Developer
From: Leeds, UK
Registered: 2006-01-29
Posts: 11,271
Website GitHub

Re: Languages bundled in core

phiw13 wrote #307822:

The text pack for smd_thumbnails I had at hand had both the default English strings and the French translations ( labeled @ fr-fr). That spits out some PHP warnings

Yes it will do unfortunately because the lang codes have changed. makss’ patch fixes that by converting any old codes to new during Textpack parsing. So if anyone presents a plugin or a bunch of strings with an old identifier, it’ll get silently converted to the new one if possible.

when checking the Languages panel, I had an additional language installed (an unlabelled tile…).

I’ve seen this behaviour too. Basically, if you install some strings from a plugin by hand for a language – and “by hand” includes installing a plugin at the moment or pasting them into the Languages panel – then those strings get injected into the txp_lang table. Textpattern therefore sees these strings and dutifully thinks the entire language is installed by virtue of the fact the language code exists in the database.

When it comes to render the Languages panel, however, it looks for the common block in the Textpack for the strings that tell it what language it is… and finds the strings not there. So it just renders empty text.

Again, makss’ patch takes this into account. It stashes the entire Textpack for later use but only injects plugin strings into languages that are available at the time of plugin installation, so things don’t get out of sync. Thus the only time you’d see that is if you manually add strings for a language that isn’t installed.

I’m contemplating adding a checkbox to the Install Textpack textarea which is unchecked by default so the behaviour is “only install strings for languages I have already installed”. Checking the checkbox would override that behaviour and emulate the current functionality: i.e. infer you know what you’re doing and will bear the consequences of installing strings for languages that don’t exist.


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

#15 2017-11-14 01:55:08

Bloke
Developer
From: Leeds, UK
Registered: 2006-01-29
Posts: 11,271
Website GitHub

Re: Languages bundled in core

The patch is merged. You should have a much smoother experience now. Try it out with the com_connect plugin below if you like, which I’ve bundled up with the correct language identifiers. You should be able to install the plugin and have it not break if you don’t have nl, pt-br, de, es, fr or en-gb installed. But if you subsequently install any of those languages, the plugin strings come along for the ride.

# Name: com_connect v4.6.0-beta (compressed)
# Type: Public plugin
# Form and contact mailer for Textpattern
# Author: Textpattern Community
# URL: https://forum.textpattern.com/viewtopic.php?id=23728
# Recommended load order: 5

# .....................................................................
# This is a plugin for Textpattern CMS - http://textpattern.com/
# To install: textpattern > admin > plugins
# Paste the following text into the 'Install plugin' box:
# .....................................................................

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
qLAOAgA=

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

#16 2017-11-22 08:18:56

phiw13
Plugin Author
From: Japan
Registered: 2004-02-27
Posts: 3,079
Website

Re: Languages bundled in core

Overall, it works well. But for old installs that are upgrading, one must delete + reinstall (all) languages. Plugin are still a bit of an issue of course, even on a fresh install.

I saw one weird issue, after toggling from English to some_language and vice versa. I have@etc_cache@ installed (correct En strings); after toggling the extension tab would show the name with the raw string (even toggling TO English).


Where is that emoji for a solar powered submarine when you need it ?
Sand space – admin theme for Textpattern

Offline

#17 2017-11-22 09:35:37

Bloke
Developer
From: Leeds, UK
Registered: 2006-01-29
Posts: 11,271
Website GitHub

Re: Languages bundled in core

phiw13 wrote #307927:

for old installs that are upgrading, one must delete + reinstall (all) languages.

Hmm, you shouldn’t have to delete them. If you just Update a language it’ll pull in any new strings from the file and create any fallbacks in your nominated default language (en if omitted). If your mileage varies, we’ll have to investigate why and fix it.

Plugin are still a bit of an issue of course, even on a fresh install.

If they have Textpacks bundled inside them, they’ll be stored internally from now on when they are installed. For upgrades, this means that to benefit from this feature you’ll need to reinstall your plugins (but quite a few will need upgrading anyway when a new version of Txp hits the shelves). For fresh installs, the language string insertion should be automatic. If it’s not, please raise an issue and we’ll investigate, because that’s how it’s supposed to work.

after toggling from English to some_language and vice versa. I have@etc_cache@ installed (correct En strings); after toggling the extension tab would show the name with the raw string (even toggling TO English).

That’s not supposed to happen. Is it repeatable enough to raise an issue so we can check it out and patch it? Does it occur only on that plugin or do others suffer? Is this when you switch UI language or site language?

Thanks for testing and for the report. Need to get all this nailed down and working seamlessly soon!


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

#18 2017-11-22 11:30:30

etc
Developer
Registered: 2010-11-11
Posts: 5,053
Website GitHub

Re: Languages bundled in core

phiw13 wrote #307927:

I saw one weird issue, after toggling from English to some_language and vice versa. I have@etc_cache@ installed (correct En strings); after toggling the extension tab would show the name with the raw string (even toggling TO English).

It could be just because the user language is not immediately switched (which is an issue, as for themes). Reloading should fix that, please check.

Offline

#19 2017-11-22 12:03:44

phiw13
Plugin Author
From: Japan
Registered: 2004-02-27
Posts: 3,079
Website

Re: Languages bundled in core

etc wrote #307931:

It could be just because the user language is not immediately switched (which is an issue, as for themes). Reloading should fix that, please check.

Yes, once you move away from the languages panel, it rectifies itself (at least for English).

Bloke wrote #307929:

… lots …

I’ll need to read you post more carefully, and then test again. I’ll get back to you soonish.

One thing though – all I’m testing atm is backend stuff, so when I note “toggle language” it is all about the “user language” / UI language.


Where is that emoji for a solar powered submarine when you need it ?
Sand space – admin theme for Textpattern

Offline

#20 2017-11-22 12:21:48

Bloke
Developer
From: Leeds, UK
Registered: 2006-01-29
Posts: 11,271
Website GitHub

Re: Languages bundled in core

etc wrote #307931:

It could be just because the user language is not immediately switched.

It’s supposed to reload as soon as it possibly can after switching. I thought the panel force-reloads textarray from the DB when you switch. At least, I’m sure it did when I merged the lang changes into dev the other week. There’s a possibilty it does so after rendering the header – but I swear I checked that and it changes the menu bar immediately.

Might have missed something. Will have to run some tests. If anyone has any STR where this is repeatable, please share and I’ll try to reproduce it.


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

#21 2017-11-23 06:05:34

phiw13
Plugin Author
From: Japan
Registered: 2004-02-27
Posts: 3,079
Website

Re: Languages bundled in core

Bloke wrote #307929:

Hmm, you shouldn’t have to delete them. If you just Update a language it’ll pull in any new strings from the file and create any fallbacks in your nominated default language (en if omitted). If your mileage varies, we’ll have to investigate why and fix it.

I had Deutsch installed on my playground site (en-GB as defaults) which has used the bleeding edge code since forever. When the languages branch landed on /dev, I updated said language. A few days later (and prolly further updates to the language – the thing is, the language displayed as “up-to-date” on the Language panel), I actually selected it as UI language. To my surprise the string User language on the Language panel displayed as a raw string. There was another string (or two?) somewhere that failed, I forgot where though. Deleting and reinstalling the language fixed those issues.

I‘ll fetch the DB of one live site that runs on TXP4.6.2 with a couple of languages installed and install it locally on 4.6.2 then upgrade to 4.7-latest and see what happens. Probably in a few days, if you think about some (easy-to-understand-for-my-old-brain) debug code that you can throw in to get more details, let us know…

(plugins / extension menu) That’s not supposed to happen. Is it repeatable enough to raise an issue so we can check it out and patch it? Does it occur only on that plugin or do others suffer? Is this when you switch UI language or site language?

Here are some STR:

On an install created after the languages branch landed, I added the following plugins: etc_cache and smd_bio, both add an entry under the extensions menu. I verified that the strings for both displayed correctly when using en as UI language.

Switch to any other language. Click to open the Extensions menu, you’ll see the name of both plugins displayed as expected. Now go to any other panel (Diagnostics is fine), click again on the extensions menu: raw strings.

Return to the languages panel and switch back to English, click on the extensions menu: raw strings. Go to any other tab, click the extensions menu: OK.

(But that is actually a minor issue. How often do you access the languages panel?)

If they have Textpacks bundled inside them, they’ll be stored internally from now on when they are installed. For upgrades, this means that to benefit from this feature you’ll need to reinstall your plugins (but quite a few will need upgrading anyway when a new version of Txp hits the shelves). For fresh installs, the language string insertion should be automatic. If it’s not, please raise an issue and we’ll investigate, because that’s how it’s supposed to work.

When the UI-language is any other language than en or en-gb (the default), those plugins mentioned above display raw strings everywhere in the UI anywhere where they are used. I also tested this with smd_thumbnails, latest beta from github, after installing its textpack.

Both plugin issues are repeatable across 3 install: the new one, my trusted playground on localhost and a dummy install on a live server (Dreamhost).


Where is that emoji for a solar powered submarine when you need it ?
Sand space – admin theme for Textpattern

Offline

#22 2017-11-23 10:11:48

Bloke
Developer
From: Leeds, UK
Registered: 2006-01-29
Posts: 11,271
Website GitHub

Re: Languages bundled in core

phiw13 wrote #307947:

To my surprise the string User language on the Language panel displayed as a raw string.

Since that’s one of the new batch of strings that are yet to be translated in many languages, I’ll use that as a starting point and try to recreate this. Thanks for the report. Any more detail would be great if you can dig it up. Putting your site in debug mode and looking at the admin-side trace log will probably be enough to figure out what’s going on when it’s loading stuff from txp_lang.

Switch to any other language. Click to open the Extensions menu, you’ll see the name of both plugins displayed as expected. Now go to any other panel (Diagnostics is fine), click again on the extensions menu: raw strings. Return to the languages panel and switch back to English, click on the extensions menu: raw strings. Go to any other tab, click the extensions menu: OK.

Something odd going on here for sure. I’ll check it out.

When the UI-language is any other language than en or en-gb (the default), those plugins mentioned above display raw strings everywhere in the UI anywhere where they are used.

This I can understand if the plugin has no strings defined in the currently-selected language. When you switch language to one the plugin doesn’t speak, no reinstallation and therefore no fallback string replacement takes place.

In theory – untested right now – if you were to go and modify the Textpack file of the language you were using (e.g. de: add a space, delete it, save file so the timestamp is newer than the DB stamp of that language) you should then be able to Update the language.

At that point of reinstallation, any strings in the current language – including the empty plugin ones – will be checked and fallback strings will be installed. You should then see the plugin’s strings in fallback English.

At any point, if you switch to a language that the plugin does have a pack for, all should be fine. If you switch to a different language that the plugin does not have a pack for, you’ll see raw strings again until you do the Update dance for that language (or reinstall the plugin, which will trigger a language update on the current language file).

This is a bit of an annoyance so we could probably do with some thought put into how to address this. Maybe we should treat non-core strings (those with an owner) as special cases and use fallbacks on the fly – expensive in terms of processing though. Or maybe when you switch language – UI or site – just perform a ‘partial install’ of all non-core strings so any untranslated plugin strings get fallbacks inserted.

Anyone got any thoughts on this or ways to improve the situation?

EDIT: Or try this patch from makss which may help matters significantly as you can just go to the Languages panel and click Update after installing a plugin to do the replacement dance without mucking around in the file system.

Last edited by Bloke (2017-11-23 10:18:29)


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

#23 2017-11-25 00:29:32

Bloke
Developer
From: Leeds, UK
Registered: 2006-01-29
Posts: 11,271
Website GitHub

Re: Languages bundled in core

phiw13 wrote #307947:

Switch to any other language. Click to open the Extensions menu, you’ll see the name of both plugins displayed as expected. Now go to any other panel (Diagnostics is fine), click again on the extensions menu: raw strings.

Delving deeper into this, we’re at the mercy of the Txp loading system. When you select a new admin language, the processing goes like this:

  1. Kick off page load on the Languages panel. Txp has no idea who the user is at this point, because we need to divert to txp_auth if the session has expired or the user is not logged in.
  2. Since we need to display something on the txp_auth page – and need to render the theme’s header bar too on the auth page – we only have one option: load the strings for the language of the public site. In fact, you’ll notice this if your UI language and public language differ: logout then refresh to visit the login page and it’ll be rendered in the public language.
  3. Once you’ve passed the authentication/cookie check, we know the user and can therefore fetch the user’s prefs.
  4. Since we now have the user’s prefs, we can get the user’s preferred admin language and load the strings. But, crucially, it’s still set to the language you just migrated from, because at this point we haven’t stored the new language as we haven’t loaded the panel that will complete the process.
  5. The plugins are loaded. The problem is, as far as they are concerned, you’re still running the site in the old language. The menu items are set up here (plugins register tabs, and request privileges, etc) so if the plugin strings don’t exist in the language you just used, Txp registers the tab name (menu name) in the raw string. Conversely, if you do have the strings in the language you just migrated from, the plugin will be registered with its correct string name during this page load.
  6. After a few more checks, the Languages panel is loaded.
  7. The panel then checks the step and decrees it’s time to set the admin language. It writes this to the database and the prefs AND fetches the strings for the desired language.
  8. The entire page is thus rendered in the desired language, except for the stuff that was registered prior to the language being switched. This unfortunately, means plugins are left with outdated information on this first page load after a language switch.

tl;dr Short of refreshing the page twice when you change admin language, or committing the language change via AJAX and then refreshing the page, there’s not much we can do about it, sorry.

Oleg / makss: what do you think? Is it worth firing off the save_language_ui() call as an AJAX call and if it returns success, refresh the page and pass the success message, or if it fails, call announce with the fail message? Is that possible?

One further side note: When the language is changed, it currently renders the ‘preferences saved’ message in the language that you just left. Would you expect it to be rendered in the language you just loaded instead? So if you switch to French, you get ‘preferences saved’ in French? It’s a one-line switch if people think this is better than using the old language.

Votes please!

Last edited by Bloke (2017-11-25 00:31:22)


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

#24 2017-11-25 02:01:09

phiw13
Plugin Author
From: Japan
Registered: 2004-02-27
Posts: 3,079
Website

Re: Languages bundled in core

Bloke wrote #307982:

Delving deeper into this, we’re at the mercy of the Txp loading system. When you select a new admin language, the processing goes like this: (…)

tl;dr Short of refreshing the page twice when you change admin language, or committing the language change via AJAX and then refreshing the page, there’s not much we can do about it, sorry.

Thanks for explaining. As I said, it is a minor issue – and a one time occurence – testers may change language more often, but a regular user ? Once she has chosen her preferred UI language, she’ll have no reason to change it again, right ?

One further side note: When the language is changed, it currently renders the ‘preferences saved’ message in the language that you just left. Would you expect it to be rendered in the language you just loaded instead? So if you switch to French, you get ‘preferences saved’ in French? It’s a one-line switch if people think this is better than using the old language.

Votes please!

I had been thinking about that, and meant to comment, but it slipped my mind. I think the message should read in the “new” language.


Where is that emoji for a solar powered submarine when you need it ?
Sand space – admin theme for Textpattern

Offline

Board footer

Powered by FluxBB