When Drupal is being installed, if there are language translations available for an install profile, a list of languages is shown from which you can choose from. This list was never really intended to have so many items, but with l10n_update module in Drupal 7 contrib and being planned to be incorporated into Drupal 8 core, it will list about a hundred languages as of now and it will be even more. Can we somehow work out a more sensible/aesthetic solution for this? It looks pretty bad. Here is a zoomed-out screenshot of the 1/4th of the list of languages.

Parent issue

#1260690: META: Improve multilingual user experience in Drupal 8

CommentFileSizeAuthor
#179 Screen shot 2012-01-02 at 5.56.55 PM.png12.13 KBGarrett Albright
#179 Screen shot 2012-01-02 at 5.58.08 PM.png15.36 KBGarrett Albright
#176 1260716-176-clean-up.patch3.7 KBDavid_Rothstein
#164 1260716-164.patch25.4 KBGábor Hojtsy
#162 1260716-162.patch26.9 KBezra-g
#155 D8Language1.png51.33 KBGábor Hojtsy
#155 D8Language2.png72.79 KBGábor Hojtsy
#155 D8Language3.png39.88 KBGábor Hojtsy
#155 D8Language4.png42.03 KBGábor Hojtsy
#155 D8Language5.png48.45 KBGábor Hojtsy
#150 1260716-150.patch26.93 KBgood_man
#145 1260716-145.patch26.8 KBDavid_Rothstein
#142 D8Language.png48.66 KBGábor Hojtsy
#142 1260717-142.patch24.7 KBGábor Hojtsy
#136 1260717-136.patch24.83 KBGábor Hojtsy
#132 ChooseLanguageDrupal8.png78.74 KBGábor Hojtsy
#132 1260717-132.patch24.32 KBGábor Hojtsy
#129 1260716-129.patch10.7 KBDavid_Rothstein
#127 1260716-127.patch6.71 KBgood_man
#124 1260716-124.patch6.94 KBgood_man
#114 1260716-114.patch6.86 KBgood_man
#112 1260716-112.patch7.13 KBgood_man
#81 installer-01-language.png82.9 KBGábor Hojtsy
#81 installer-02-language.png84.64 KBGábor Hojtsy
#81 installer-03-language.png83.86 KBGábor Hojtsy
#81 installer-04-language.png57.78 KBGábor Hojtsy
#74 01_detected_language.jpg131.42 KBtkoleary
#74 02_Language_ltr.jpg132.01 KBtkoleary
#74 03_Language_rtl.jpg132.05 KBtkoleary
#74 04_s04.jpg124.66 KBtkoleary
#58 edit_locale_as_select-1260716-58.patch4.26 KBemarchak
#56 edit_locale_as_select-1260716-21.patch0 bytesemarchak
#50 tooltip.png89.51 KBdelmarr
#31 language-selection.png35.92 KBdanillonunes
#31 language-selection-chosen.png54.39 KBdanillonunes
#31 language-selection-chosen-search.png40.41 KBdanillonunes
#22 MacLanguage.jpeg55.82 KBGábor Hojtsy
#21 Install - English (or nothing) is auto detected36.15 KBemarchak
#21 Install - German is auto detected40.09 KBemarchak
#21 Install - User has selected German and continues the install process in their selected language27.38 KBemarchak
#4 01_s01.jpg35.96 KBtkoleary
#4 02_s02.jpg41.92 KBtkoleary
#4 03_s03.jpg104.66 KBtkoleary
ChooseLanguage.png54.66 KBGábor Hojtsy
Support from Acquia helps fund testing for Drupal Acquia logo

Comments

Gábor Hojtsy’s picture

Title: Improve langauge onboarding user experience » Improve language onboarding user experience

Title typo.

Gábor Hojtsy’s picture

Kevin asked for a list of languages for designing this to make it simpler to work on a proposal.

English (built-in)
Afrikaans
Amharic (አማርኛ)
Arabic (العربية)
Asturian
Belarusian (Беларуская)
Bulgarian (Български)
Bengali
Tibetan
Bosnian (Bosanski)
Catalan (Català)
Czech (Čeština)
Welsh (Cymraeg)
Danish (Dansk)
German (Deutsch)
Greek (Ελληνικά)
English, British
Esperanto
Spanish (Español)
Estonian (Eesti)
Basque (Euskera)
Persian (فارسی)
Finnish (Suomi)
Filipino
Faeroese
French (Français)
Irish (Gaeilge)
Scots Gaelic
Galician (Galego)
Swiss German
Gujarati
Hebrew (עברית)
Hindi (हिन्दी)
Croatian (Hrvatski)
Haitian Creole
Hungarian (Magyar)
Armenian (Հայերեն)
Indonesian (Bahasa Indonesia)
Icelandic (Íslenska)
Italian (Italiano)
Japanese (日本語)
Javanese
Georgian
Kazakh (Қазақ)
Cambodian
Kannada (ಕನ್ನಡ)
Korean (한국어)
Kurdish (Kurdî)
Kyrgyz (Кыргызча)
Lithuanian (Lietuvių)
Latvian (Latviešu)
mfe
Malagasy
Māori
Malayalam (മലയാളം)
Mongolian
Marathi
Malay (Bahasa Melayu)
Maltese (Malti)
Burmese
Norwegian Bokmål (Bokmål)
Nepali
Dutch (Nederlands)
Norwegian Nynorsk (Nynorsk)
Occitan
Punjabi
Polish (Polski)
Portuguese, Brazil (Português)
Portuguese, Portugal (Português)
Portuguese, International
Romanian (Română)
Russian (Русский)
Scots
Northern Sami
Sinhala (සිංහල)
Slovak (Slovenčina)
Slovenian (Slovenščina)
Albanian (Shqip)
Serbian (Српски)
Swedish (Svenska)
Swahili (Kiswahili)
Tamil (தமிழ்)
Telugu (తెలుగు)
Thai (ภาษาไทย)
Tigrinya
Turkish (Türkçe)
tyv
Uighur
Ukrainian (Українська)
Urdu (اردو)
Vietnamese (Tiếng Việt)
Lolspeak
Chinese, Simplified (简体中文)
Chinese, Traditional (繁體中文)

Gábor Hojtsy’s picture

Some more notes:

1. Of course this language list will just grow and grow, it is what we have on localize.drupal.org currently :)

2. The three letter "language names" are missing stuff from the installer, little bugs. Irrelevant for this issue. Just saying, safe to ignore those.

3. What we don't do right now but we can is to reuse the locale negotiation code to figure out the user preference language from what the browser sent. That is not at all a 100% solution and many people don't set it, but if they do, we can get the data to preselect a language for them. But this is so early in the process, that we cannot really have any other data to preselect something for them and help with the installation.

tkoleary’s picture

FileSize
104.66 KB
41.92 KB
35.96 KB

Ux design states attached

Gábor Hojtsy’s picture

Great suggestions. I like and agree that showing native names only (where available) makes most sense. Simplifies and makes the form easier to scan. Feedback welcome so we don't rush implementing this before we see we have support for it :)

Gábor Hojtsy’s picture

Gábor Hojtsy’s picture

Status: Active » Needs review

Marking needs review (on the design).

attiks’s picture

I like the screenshot and flow proposed in #4, nice work

jherencia’s picture

I like #4 too, subscribing.

yoroy’s picture

Subscribe

David_Rothstein’s picture

It looks very nice, but is someone who doesn't speak a word of English going to understand how to use it? (Compared to the long ugly list, where at least you can scan the list until you see the language you recognize.)

Gábor Hojtsy’s picture

@David: well, the current Drupal 7 experience is you get "English" as a sole radio button or read instructions, and come up with files to make more radio buttons show up. Many people fail at this. So putting in the whole list is to solve that. So previously we wanted them to understand elaborate instructions on how to download files and put them to the right place, while here, we rely on them understand the button text "Show all languages". Much less to ask for, right? :)

Hopefully we'd hit many people with our autodetection from the browser language preferences, so they'll not even need to think about looking at the whole list. I think we maybe can simplify that by merging the first two steps, showing English and the detected language as options + a show all languages or the autocomplete with a show all languages. Then you can jump right away to localized there with the radio box without clicking buttons.

What do you think? Any other feedback? :)

yoroy’s picture

## Mockup 1
 Use another language

---

## Mockup 2
screenshot showing additional options when choosing 'use another language'

With the 'use another language' radion button selected, some more form elements are added to the form below:

label: Is this your language?

- radio button 'Italiano' (I assume this is a language already available to the installer)
- auto-complete textfield 'start typing to choose another language'

Below that 2(!) submit buttons:

- Continue
- Show all languages (I think this should be a regular link positioned close to the auto-complete text field)

---

## Mockup 3
showing all available languages in 4 columns below the form

Should you click the 'show all languages' button then all languages are shown (about 80 in this mockup) in 4 columns, each with a radio button. This list is shown below the submit button now labeled 'Hide all languages' but above the 'Continue' submit button. (So the two submit buttons have swapped places, hmm)

attiks’s picture

## Mockup 2 + 3
Isn't it better to show the full list right way and mark the detected language as default, maybe even write it at the top of the list?

People will immediately see all available languages right away, so they don't have to start guessing

Gábor Hojtsy’s picture

@attiks: well, the idea is to not overwhelm people with a sea of radio buttons, therefore the steps. I think as I said above that we could be fine to build step 1 and 2 together and rework "show all languages" to be a link instead maybe. @Yoroy: do you agree showing all languages at the start is overwhelming? It will use the language list from localize.drupal.org which is close to 100 items.

yoroy’s picture

Gábor, can you explain the 'Italiano' radio button in step 2? Does that mean that Italian is already available for this installer?

We should try to find an interaction that postpones having to show the big big list because yes, it is ovewhelming.

attiks’s picture

#16: i think it's the automatically detected language.

#15: i find the search box confusing, maybe show English and the detected language as step 1, and use a link the show all other languages?

Gábor Hojtsy’s picture

@yoroy: yes, the plan is to use our existing language detection based on browser settings (if available from the headers) to guess your preferred language; that is all we can do in core; contrib could do IP based guessing (like google does), but core can work with the http info only. http://www.w3.org/International/questions/qa-lang-priorities has more info on how browsers do this. I'm not sure people actually set this usually, but at least for those who do, we can default to something sensible. Others will need to pick from the sea of radio buttons, since we have no other info to base our guesses on.

Gábor Hojtsy’s picture

Issue tags: +montreal

Tagging for Montreal sprint. Discussion writeup coming up.

Mirabuck’s picture

Hello everyone,

Here are my notes on this issue from our discussion at today's code sprint. Please correct them or add to them if you see anything that I've missed.

Montreal Code Sprint Recommendations

  • Default language selection should occur prior to profile selection to ensure that users only have have to deal with an interface in a potentially non-familiar language for a single step.
  • A single select list should be used containing all available languages and defaulting to English.
  • Language options should appear in their own languages/character sets with text in that language indicating that the user is selecting a default language for the install. This list should be ordered alphabetically by language.
  • There was some debate as to whether or not English equivalents of each language should appear alongside each option. As I recall we were leaning towards not taking this approach to keep things simple and prevent the UI from being too anglo-centric. It was suggested that users seeking to install Drupal in a given language would be able to recognize that language in its given language/character set.
  • JavaScript should be used to display sidebar information about what percentage of core Drupal is translated in a given language once it has been selected.
  • On the profile selection page (reordered as the second step in the installation process) JavaScript should be used to indicate what percentage of a particular distribution has been translated to the language chosen in step 1. Some sort of mechanism would need to be created to allow distro owners to report this data.
emarchak’s picture

These are some mock ups of what we discussed at the Montreal Coding Sprint. I've added a help tip (the question mark) by the translation status bar, in case a User is confused by the numbers that appear. Example: "What do you mean lolspeak is only 0.96% translated?!"

English detected (common case):

German detected:

Second screen after German is picked:

Translations from English meticulously done by the Google bot.

Gábor Hojtsy’s picture

FileSize
55.82 KB

Some additional notes:

  • We talked about this screen today a LOT, like 90 minutes with a group of 5-6 people. It was intense :) We looked at the current flow, the proposed flow from above and made our suggestions based on lots of observations. Some more that I have not seen above:
  • Language selection as a second step after profile selection was really there for technical reasons (we looked at local files for the profile after you picked your profile). Since we want to unify the translation file directory to one place (and add remote download possibility there AKA l10_update in core), we basically remove the connection between profiles and translations, so we can move translations up front.
  • We looked at how others do it, and were really inspired by Apple's approach, because (a) it is a select box so it lets you start typing and "autocomplete" to your language, (b) its welcoming with a full sentence explaining the consequence of your choice; we acknowledge that Apple can fit in their languages on one screen and the scroll bar might make it harder to grasp this here - also how widespread is the knowledge that you can type in a select box to jump to options?
  • Not all languages are equal, many are far from ready. We discussed defining a limit of readyness before your language can show up here, but that would hide languages like Irish, Serbian, Macedonian, etc. where we want to encourage the community to grow, not to hide that it exists. So we came up with this suggestion to show the approximate completeness of the language based on the core translation completeness. This we can pre-compute on localize.drupal.org and download and show for all languages in an up-to-date fashion. Or even use json data directly from localize.drupal.org. Anyway, obviously your exact translation level would depend on all the contrib modules your profile would include (which is the next step), so we decided we can even make that step show a more accurate idea of the completeness, but would make that a stretch goal, not really part of the initial plan :) But this is basically to help set expectations

All-in-all, we really liked the fact that we should prioritize the autodetected language, we did not like the empty autocomplete box because how would users know whether to type their native language name or their English language name, etc. While we recognized a big select box works like an autocomplete as well and can show a friendly description of what you are going to do too.

I think this should help put even more light on our discussions. What do you think?

Anonymous’s picture

Just a quick thing to point out:

If you're not an english speaker, the mockups in #4 might not make sense as they lean more on native system phrases like "Is this your language?" and "See all languages" which it is not safe to assume the user will understand.

However, when the long list of languages is on the screen, a non-english user can tell what to do by the context of there being all these different languages there, regardless of whether or not they understand the surrounding instructions. This would mean a +1 for #21.

DamienMcKenna’s picture

Where does the use case fall for admins who want multiple languages? Should there be a note underneath to say e.g. t("This is for the default language of your site, others can be added later.") to not give the impression that you can only install one language set?

jami3z’s picture

Less clicks is better. More clicks takes more time and is unnecessary. I think the concepts in #21 provide a good starting point.

Can I suggest though that we make the UI design a lot better, and not make it look like where using something thats 15 years old, it looks absolutely terrible, I hate the look of the current install and update screens.

webchick’s picture

Hm. Not sure. i18n module (which I assume almost all multilingual sites have enabled) is in the top 50 of most-used contributed modules, but still only represents about 10% of site installs (~44K / ~483K): http://drupal.org/project/usage

Kevin's screenshots in #4 seem far, far less cluttered for the 90% case, and also matches well the "starkness" of the rest of the installer.

I do love the idea though of something like #21/#22 for the "other" case.

nicholosophy’s picture

I do like #21 but it could get out of hand with more and more languages being added. The concept of choosing the default language based on the browser as per #4 settings is great where it is possible to do so.

It is really important that if English is to be used on buttons as per #4 that very simple phrases be used. "Start typing to choose another language" could be difficult to understand for someone with very limited English.

I would also agree with screens 1 and 2 from #4 being combined as the one step.

DamienMcKenna’s picture

@jamienotweet: Agreed on the UI, but that's a separate issue for now.

Given that there is a distinction between languages that have first-rate support and ones that are lagging, might it make sense to draw a distinction in the UI? A styled opt-group, or an icon (with a translated tooltip explaining what it means) might suffice, just so that admins don't pick their native language only to find out that the only thing that was translated was the installer ;)

Gábor Hojtsy’s picture

@webchick: i18n is not required for single language foreign language sites at all, which there are WAY MORE of then multilingual sites. Drupal does single language foreign language sites remarkably well :) If you look at http://drupal.org/project/installation+profiles which is supposedly listed by most installed first, you'll see various profiles which are just translations packaged with Drupal for easier local installation. That is apparently what lots of people want, looks like. From the top 25 profiles, these are among them: Russian, French, Norwegian, Japanese and German. Obviously it is just 5 of the top 25, but it probably shows that people do go pretty far to implement this functionality :)

shuklasp’s picture

Subscribing

danillonunes’s picture

I made a mockup based on #4 ideas with a few changes:

I think there's no need to have a "Use another language" first step. Show all options at init would be fine and will not bother so much the English users.

The "Is this your language?" part can be merged into the detected language name, showing a more clear message for the option like "Install in Italian (auto-detected language)" . Also, this string can be displayed in native language instead of English.

The textfield + "all languages" link is fine, but I like the way how Chosen do that, with a select field integrated with search. Don't know about possible technical and legal troubles of including it on Core.

Gábor Hojtsy’s picture

Also, one more thing to support listing languages, while making it very easy with the preselected English to move on as in #21.

I hate to cite Apple again, but they were a major inspiration here, so there you go :) I believe they did list all the languages on installation (although it already looks clunky there), to demonstrate their global reach, to show that this product is truly worldwide and supported for those markets on the same level, those markets/languages are not sub-items. They also made a little intro video for the Mac, that is pretty interesting. Basically all it does it cycles through translations of "Welcome" in all kinds of languages (http://www.youtube.com/watch?v=miU5yr6qUhQ). And they show this once you've installed the Mac and you cannot exit from the video. What is that useful for? Looks pretty pointless, right? A time-waste, while you actually want to use your computer. Well, I was trying to look for objective analysis to back my thinking up on this but could not find any, so here is my personal take: it totally makes me feel I'm part of something huge, a big community of people all around the globe (or telling from the video, all around the universe even). So is that a coincidence that there is that list of languages at the very start and that intro video with numerous translations of "Welcome" at the very end of the installation. Maybe, maybe not.

All I'm trying to say here is that we should weight if the list of languages showing is more scary then it is reassuring that you just chose a widely used, globally spread product/community. I think its equally quick to move on to English in either design, and yes, #21 is much bussier, but #21 carries this message, this reassurance that you just chose a world-class product. Even if you move ahead right away in English, you got this bit settled in. :) So a bland item of English only with a button or radio box to install it in a different language is a pretty bare first screen for a CMS I think. I agree it gets the job done, but seriously, this is going to be the first screen for everybody using the install UI for years, so what if it holds a great empowering message as well?

sylvain_a’s picture

Suscribing.

izmeez’s picture

Lots of great ideas here.

Comment #31 brings much together. I like the select box and search while typing.

I also like it when the language name comes first. e.g.

Rather than "Install in English" something like "English for default language"

And "You can add more languages after." to "You can add more languages later."

David_Rothstein’s picture

Language selection as a second step after profile selection was really there for technical reasons (we looked at local files for the profile after you picked your profile). Since we want to unify the translation file directory to one place (and add remote download possibility there AKA l10_update in core), we basically remove the connection between profiles and translations, so we can move translations up front.

Having the language selection after the profile selection also means that profiles in Drupal 7 can completely modify or replace the language selection UI that ships with core, just by using hook_install_tasks_alter().

I don't think we want to lose that ability. Not sure what to do about it, but perhaps we can come up with some ugly special case that allows profiles in the file system to alter that one install task (if they really really want to), even though they aren't the actual chosen install profile yet?

pp’s picture

#21 is the best.

timmillwood’s picture

my 2¢: I prefer the idea of a select list rather than radio buttons. Users are familiar with this from choosing their country on shopping card forms.

Ranko’s picture

I am also for the verbose, full sentence option, but I would definitely like to see the ISO codes included as well. In a side column or something, not to intrude onto the focal sentence; but to give the "power" user a clear understanding of the language pack installed (en_uk, en, en_us, en_au, etc.).

The idea of including the status of the translation is also very helpful so I am all for that one as well. Maybe expand it with

  1. Full translation indicator (96%), and a split between admin interface and user interface translated. Is there such a split between the translatable strings?
  2. A Drupal sel-promoting link: YOu can help with translation here link to the localize of your language
danillonunes’s picture

I also like it when the language name comes first. e.g.

Rather than "Install in English" something like "English for default language"

Agree. But I don't know if this can be done on every language (maybe some foreign grammar rules don't allow the sentence in this order). That's why a search field on top on the select list is useful, because it can search in the middle of the string too.

Also, for #21, I think we can introduce a search field too for the same reasons. It's also sends a clear message for the user that he/she can start typing for search on the select box.

Another thing about #21 is that I like the button with a arrow as a elegant solution for avoid using a English string there, but I don't know if it's gonna work for RTL language speakers. Well, there's just this button, the user has no way to go wrong, but we may have to pay attention to this.

Gábor Hojtsy’s picture

@danillonunes: Drupal is full of strings like "%username was saved", "%node title deleted", etc. so translators already figured out how to make the first word of the sentence customizable to something. In this case, they will have full control of the string, but we'd obviously tell them to put the language name first if at all possible for usability reasons (so the "autocomplete" behavior works). On the button text/arrow, we talked about this quite a bit, and agreed if its only one button on the form, whatever is on it, people will realize it should be a continue button. Either its an arrow or just text to say continue or select language or whatever.

emarchak’s picture

I do like #21 but it could get out of hand with more and more languages being added. The concept of choosing the default language based on the browser as per #4 settings is great where it is possible to do so.

We thought of having many different languages to choose from, so we built in the ability to scroll. By auto-selecting the language for the user, they're going to see immediately what they need - but if they want to explore more, they have the ability to see their auto-selected language in context of the rest.

On a second note, having the full list of languages immediately available to the user encourages them to explore and engage with it, if they so desire. By showing all that we have to offer, we may get more people contributing to translations. The overall goal is to make it easy for them to do it, so they're delighted by the idea of having Drupal in their own language. Making this process a single, pleasurable step will encourage people to use it again and again, either for functional websites or experimental ones to help translate Drupal.

emarchak’s picture

Given that there is a distinction between languages that have first-rate support and ones that are lagging, might it make sense to draw a distinction in the UI? A styled opt-group, or an icon (with a translated tooltip explaining what it means) might suffice, just so that admins don't pick their native language only to find out that the only thing that was translated was the installer ;)

The issue was that we didn't want to appear to be recommending or devaluing languages by incorporating that into the selection process. We should encourage Users to experiment and explore at this stage - it's about the possibilities that Drupal provides, not requirements. Having a warning sign on the install page of Drupal is not a way to make a good impression.

Additionally, some languages only need 1-2% translated to be considered "complete," such as English British. While it is complete, calculating it's completeness based on percentage would display it as not. There's no context for the icons if we were to incorporate it into the list of icons displayed.

We tried to answer that by displaying the percentage of completeness in the selected language. We can pull it quickly, and easily, as a JSON file from http://localize.drupal.org, which contains all of the information anywho. This information is only displayed after the user selects the language, and saying that "Drupal core is XX% translated into English" with a tool tip to a relevant page on http://localize.drupal.org/ which explains what this means. It removes the taboo of a warning icon, addresses accessibility issues, gives context to the information and lets users make an informed opinion of what language they would like to install.

Bojhan’s picture

Interesting to see movement on this issue, I really like all the new ideas that are putting forth.

Let me assure you that most commercial software is unable to gracefully handle this situation. Often the decision is made to go for an inflexible interaction, because the majority installs a pre-configured localized version or the number of people choosing outstide of the top 5 languages captures the 80% usecase.

As a general strategy I would like to avoid complex interactions, such as chosen(#31) or searchable radio options (#13) because aside from their accessibility problems - they put us in the mindset of trying to capture "everything" in one interaction. I already see that from the discussion here, trying to add level of completion, iso codes and promotion links into it.

@Gabor Although I would favor showing many languages for the sake of, showing off that we are a international platform - but we cannot do that with an interaction that you showed. This because it isn't very usable (hidden features), doesn't scale(scrolling becomes hard) and its hard to scan (weight of languages on importance not alphabetic order.). I dont think that webchick's argument applies if we find an interaction that allows for easy find-ability of other languages and not making selection of English more difficult.

What about something more simple like a "Additional languages" link or fieldset(collapsed) that shows 3 rows of language options with a search box on top.

The fact that few systems do this well, should also push us to do some more experiments.

Gábor Hojtsy’s picture

@Bojhan: well, three rows of language options with a search box on top is what Chosen is basically, right? (As in the mockup on #31). However you said you'd like to avoid that complex interaction right away on the first screen.

xmacinfo’s picture

Sorry I cannot join the Code Sprint in my home town. Too busy!

Please note that on all these mockups there are a lot of text in English! This means that a user needs to understand English to know how to use the language selection screen.

That's why #31 is the wrong way to do this and the best I see is #21.

For 90% of the world, English is foreign. So please do #21.

It's great to see how things are progressing in the code sprint!

Everett Zufelt’s picture

Please provide descriptions of screen-shots of suggested UIs.

Chosen is likely not going to make it into D8, if it does a * great * deal of accessibility work will be required upstream.

Gábor Hojtsy’s picture

@Everett: here are some descriptions

- In comment 4, there are three screenshots. Number 1 is showing two radio buttons titled "Use English" and "Use another language" plus a button titled "Continue". If you choose the second radio button, it gets you two more radio buttons: "Italiano" (which is autodetected from your browser) and an autocomplete box with text in it to tell you you can type your language name there. You also get a "Show all languages" button there. If you click that, you get a 4 column listing of all 100 languages Drupal currently supports to some degree, all of which are radio buttons. So you can continue with English, then after some interaction continue with the autodetected one, or pick another one from an autocomplete or a list of radio buttons.

- In comment 21, its basically a design very close to Apple's Mac installer's first screen. You get a huge select box with items using full sentences like "English is my default language", and the same text translated to all 100 languages. We only display the first few of them, so it has a scrollbar. (Apple does not have a 100 languages, so they can fit it all on one screen). So basically you need to choose the right sentence in your language in a select box. The second screenshot in 21 shows how autodetection plays here, basically it moves the detected language up to the top (the mockup shows German as an example). The continue button uses an arrow graphic to avoid using text, but we already discussed above that since its one button anyway, people will understand its the continue button regardless of graphic vs. text. Finally, the third screen there just shows how the install profile selection screen (next screen in the installer) looks like in German. No changes there for how core works now.

- In comment 31, you have three radio buttons right away. First is "Install in English", the second is "Install in X (autodetected)" for the autodetected language X (but the sentence is translated to that language in-place, the screenshot shows Portuguese as an example). And the final radio button is a Chosen widget which says "Select a language to install". Sounds like from the above you are already familiar with the Chosen widget, so I'm not going to explain that.

Hope this helps with accessibility suggestions, thanks in advance :)

Everett Zufelt’s picture

Thanks for the descriptions.

None of those sound like they will cause any problems from an accessibility perspective.

moshe weitzman’s picture

My only contribution is to *please* skip the "language selection and education" screen when the current install only has english. We need to find other places to educate about additional languages. Thats mostly a distro thing IMO (folks who repackage drupal).

delmarr’s picture

FileSize
89.51 KB

Perhaps changing the proximity of the tool tip, so it located at the top. I think the switch would establish a closer/stronger relationship to the language you choose, as well as leave the next arrow as the last action item, moving the administrator through the process.

Gábor Hojtsy’s picture

@moshe: the idea is to skip education for stuff that scripts can do automatically. Its silly to make people do things that we can easily do for them. So Drupal 8 will be able to download the list of languages and the translations themselves, like l10n_update module does in contrib for D6/7. There are no instructions involved, it will just work. So in that light, I guess you are advocating we show the very simple "Go on in English, I don't care about the rest" as a standalone screen and make everyone else do further interaction if they want something else?

moshe weitzman’s picture

Sorry, I didn't understand the proposal for D8. If we can fetch the list of languages and download the selected language in real time, then I don't think we need a separate 'proceed using english' page.

It would be good if folks started thinking about drush's site-install and how it should participate in the 'download selected language during installation' feature.

dcmistry’s picture

Subscribe

Gábor Hojtsy’s picture

@David_Rothstein from #35:

Having the language selection after the profile selection also means that profiles in Drupal 7 can completely modify or replace the language selection UI that ships with core, just by using hook_install_tasks_alter().

I don't think we want to lose that ability. Not sure what to do about it, but perhaps we can come up with some ugly special case that allows profiles in the file system to alter that one install task (if they really really want to), even though they aren't the actual chosen install profile yet?

We've been thinking about this too. The conclusion is that core will not have profiles like that, and contrib profiles always involve some kind of packaging/build script. We can introduce a settings.php setting, and .info file or whatever to be able to specify a concrete language list (or skip that) and to specify a concrete install profile too for that package. These would be new features, at least specifying a no-questions-asked default profile is not possible with Drupal 7 that I know for distros, and yes, languages then can be altered by the profile. I think these are good features, and don't think it would be hard to provide via some simple means for packaged profiles. The only place where we'd lose this is packaged profiles that do have multiple profiles supported consciously, which is probably way in the minority, isn't it?

emarchak’s picture

Just as a defensive mechanism, the design in #21 was specifically built to not complicate the whole process. By adding additional elements to the page (radial buttons, second drop downs, etc.) we're going to complicate things for anyone who has accessibility issues, cannot read English, and for beginner users. Keep It Simple, Sweetheart!

I really like the suggestion of moving the "Drupal Core is % Translated Into Language" tooltip up to the top as suggested in #50. The only thing that we have to be careful of is making sure that it's appearance is handled smoothly as it'll push the rest of the content down.

emarchak’s picture

As a proof of concept, here's a patch to transform the radio buttons into a select list, and auto detect the browsers language. There are some issues with the function locale_language_from_browser that are being addressed in #221712: locale_language_from_browser() doesn't parse language tags correctly, has a broken logic. It works generally well in firefox.

Gábor Hojtsy’s picture

Status: Needs review » Needs work

Your patch is 0 bytes.

emarchak’s picture

Reposted.

Gábor Hojtsy’s picture

Status: Needs work » Needs review

First off, thanks for tirelessly working on this. It is really exciting! Patch conceptually looks good. Some notes:

- Variable names cleaned up, like $langlist => $language_options IMHO,
- Whitespace is off, sometimes you used one less space then other lines in the same area or at the first place a tab.
- st() should not take language code in "context", that is for supplemental information on the string like "Long month name", not to request it in a language. That is the "langcode" key. Unfortunately that will not work (yet), but for the work in progress, we can IMHO assume it does and figure this out as we go.
- $currentlang would also be good as $langcode_detected or something like that; its really not the current language, its gonna be the future language :)
- the drupal_add_css() as you used is good for prototyping, will need to go into one of the .css files eventually

Can you provide a screenshot of how does this look like now? That would be fantastic :)

webchick’s picture

I tried to mockup something like #4 (just two choices, English and Other) with #22 (A large select box asking you to use "English as my default language", "Deutsch something german", etc.) showing if you chose "Other", however I didn't actually like how that looked in reality. :P Of the proposed options, #22 limits it to just one choice, which is nice. Although my first inclination there was it seemed a bit visually OMG LOOK AT ME!! for something that most people are just going to click right through. The longer text is more friendly, but it also requires a lot more thought than a simple scan for the word "English" in a list. But I also think that could just something that would take some getting used to, not sure.

Here's what the patch in #58 does; similar to the mockup #22:

A select box showing 5 items like 'English is my default language', 'Afrikaans is my default language', etc.

danillonunes’s picture

The context option used in st() calls in #58 should be a langcode instead, so each option will be translated into their native language.

Also, later we'll need a way to ship with Core the translations of this string for all supported languages.

dcmistry’s picture

This is such an interesting discussion :)

I do like #21, but I have a few comments. So, we can detect the locale of the user, and this screen is going to present the languages based on the locale. That's great! But can we have a visual differentiation between the languages that might be relevant to the user from the rest of the languages?

With the preferred languages, the need to select a language from the endless list would be drastically reduced. But if they have to go through the list, we need to have some way to sort these languages.

On a another a-bit-crazy thought, I was toying with the idea of having a clickable world map as the first step. I did a very dirty paper prototype study with five people in the office and told them if "You are installing a software and this is the first screen you see, where would you click?". All the participants told that they would click on their home country/ country of residence/ their time zone. Based on what country they click, an icon of home (with a flag) can appear on the country which will determine the context of what we are asking them to click. Of course, we can skip all this because we know their locale.

But, I thought it was just cool and it also talks about our global presence.

Gábor Hojtsy’s picture

@dcmistry: Thanks for the feedback! I think we are cycling around the possibility to pull out the preferred language detected from the select list, which seems to be the way to make it more special. Angie did a quick mockup for though and she did not look like it (just like others in the room at the time). I'm not sure how could we highlight the item if we keep it in the select box. What is your suggestion there?

On the world map suggestion, it does sound impressive, but languages and countries have an intricate relationship. French is spoken in Canada and France. If we figure out you prefer French, do we highlight France or Canada? There are some so small languages that their geographic region would be very hard to pinpoint on a map. Do you suggest we also display the list of languages under the map? Once again, how do those two interact then? I think this sounds like lots of things to build into Drupal core just for the first screen of the installer, so does not sound feasible. Unless we really want to do real impressive stuff here for their initial experience that is :)

xmacinfo’s picture

The map idea would not work. Spanish is spoken in a lot of countries as well as French.

We need only look at the “Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3” header request to know the browser languages of the user’s browser.

Having a list of the other languages is fine, but I guess we should offer only the languages already defined in the Accept-Language Header Request.

Furthermore, the sorting is already defined in the header request:

For example, Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3 orders the languages to:

fr
fr-FR
en-US
en

This data is ready to read and parse.

I have not looked at the patch to see if you actually read the Header Request. But I guess you are already doing this already!

The globe idea, though, can be applied in the “localization part” (which is another story) of the timezone selection.

xmacinfo’s picture

Status: Needs review » Needs work

Please remove the white spaces in the patch. :-)

Gábor Hojtsy’s picture

@xmacinfo: yes, Drupal 7 core already had accept-language handling, so we'd just use that. There are some bugs in #221712: locale_language_from_browser() doesn't parse language tags correctly, has a broken logic that need to be looked at, but otherwise we'll just use that.

Mirabuck’s picture

@dcmistry: in addition to the issues the @xmacinfo mentioned, I suspect the map UI would require a significant amount of accessibility work.

kika’s picture

subscribing

anavarre’s picture

Subscribe

moshe weitzman’s picture

Perhaps a separate issue, but it would be great to combine screens. We should be able to do better than a 7 page install (thats the last screenshot here).

dcmistry’s picture

Agree that the world map has its drawbacks and might seem like re-inventing the wheel. Thank you all for the comments. I wanted to just wanted to try different ideas :)

reglogge’s picture

subscribing

Gábor Hojtsy’s picture

Related: #1295696: Sync predefined list of languages with localize.drupal.org and extend native language information. (Provides all the native names for all the languages and syncs the list with localize.drupal.org languages).

tkoleary’s picture

FileSize
124.66 KB
132.05 KB
132.01 KB
131.42 KB

New design comps attached

dcmistry’s picture

To provide some background to Kevin’s design:

1. Reduce the clutter by displaying only the native language and not the sentence
2. Produced a “Chosen” (http://davidwalsh.name/query-chosen) type of approach, but opened by default (include a textbox at the top of a select box that would jump to item typed vs. filtering the list to that). This is to reproduce the select box type behavior that people might not know.
3. The first language is auto-selected by the user’s browser language settings
4. The “100% translated” string will be in corresponding language
5. If an RTL language is selected, the design swaps in an RTL sheet immediately to move the controls to the right side of the screen
6. A note (in the language selected) at the bottom of the box informs the user that they can add more languages later

Bojhan, Yoroy and I discussed the design in the UX happy hour. They thought the design was good (we did not talk about branding, because it is a separate and a bigger issue). However, their concerns:

1. How is the list to be sorted?
The way it was designed, it was suppose to have the auto select language followed by languages in the order of their ISO codes. However, Another approach to sort was: what if the list should be sorted in the following way: auto selected and then sort by their occurrence (how many people speak that language in the world) and then sort by ISO codes.
2. There is no help text. It is like a chicken and egg solution. How do you write help text when you don’t know user’s language. Perhaps, have it in the default language?

We also want to make sure it meets the accessibility needs.

Bojhan’s picture

Some descriptions for the accesibility maintainers, the approach that tkoleary proposes is :

A vertical list of language options; English 100% translated, Spanish 98% translated. (this can technically be a select list, and/or radio list). This list is currently visually limited to 8 options.
Above this list of options a search box is shown, this search box filters the listed options below (similariy to autocomplete, going per letter).

Although similair to choosen in terms of interaction, it should conceptually be a bit different and allow us to use WAI-ARIA live region or degrade nicely to a full list.

I hope my description was understandable and accurate, I will adress the design problems dcmistry listed later.

danillonunes’s picture

"select box that would jump to item typed vs. filtering the list to that" and "sort by their occurrence (how many people speak that language in the world)" together can be a bit tricky if, for example, the list has the order:

- English (US)
- Spanish
- Chinese
- [...] A lot of another languages
- English (UK)

So if the user type "english" on the text box, only the US option will gain focus.

Also, this sort will looks a lot "WTF" for the user who don't want to use the keyboard and prefer to find the language by scrolling on the list.

I suggest to keep alphabetic sort.

xmacinfo’s picture

I love the design and simplicity of #74. Looks like Drupal 8 will have a very nice installer!

As for sorting, the installer should link in order all the “Accept-Language” defined in the browser request header. All other languages should be invisible, or a “+” button to show the complete language list.

There should not be any English text on that page, so no help text below.

As for the list in itself, we should list them like this, each line in it's own language:

*French-France (installer en) 100 % traduit
*French-Canada (installer en) 98 % traduit
*English (install in) 100 % translated
*English-USA (install in) 99 % translated

Likewise, the xx% translated should be shown in the native language.

dcmistry’s picture

danillonunes,
As far I understand it correctly, if the user types "English", all the languages matching to that string will show on top of the list i.e. "English (US)" and "English (UK)". And below that, other languages will be displayed.
Does this take care of your concern?

xmacinfo’s picture

@dcmistry: “Does this take care of your concern?”

Well… no. There should not be any need to type English or any other language since all that information is already known by reading the Accept-Language request header. So by default, the top of the list should be auto-generated.

For example, if my browser is set to Italian, the list should automatically display Italian at the top. And if my browser accepts other languages (as read in the Accept-Language request header), you display these known languages at the top of the list in the same order defined in the Accept-Language request header.

See Gábor comment in #66 about the Accept-Language request header.

Now, if I really want to install in a language not defined in the Accept-Language header of my browser, I would probably need to read the language name in a language I can read. If the browser is set to French, we should display all languages name in French. But this last paragraph goes against the gist of this issue. :-)

Gábor Hojtsy’s picture

@xmacinfo et. al.: let's put some things straight. Here are the "main" designs without the wrapper branding, so we can concentrate on the actual UI proposed for this issue. (Let's consider the main UI elements here too):

If English is autodetected, that would show first (the screenshot does not show but % translated is always translated to the appropriate language):
installer-01-language.png

If the user types something, the list *jumps* there, not filters to that (also although the screenshot does not show, the message on "The language you choose will be the default. You can change the default or add other languages later" under the list would show translated at all times to the currently selected language):
installer-02-language.png

If an RTL language is picked, everything on the page turns RTL immediately (additionally to all the text being in that language as explained above):
installer-03-language.png

Once you picked your language, you can go on with the installation:
installer-04-language.png

Some more notes additionally to the above:

1. We do not display the progress indicator of the installer on the language screen to avoid clutter and let you focus on your language. This kind of moves language selection out of the process, and we don't need to deal with lots of English text showing on a page used to select language (and also need less to translate on the fly).

2. We chose to display the language name only to declutter the page (vs. the designs from Montreal with full sentences which people we asked found cluttered).

3. @danillonunes: I understand people would prefer an alphabetic ordering. Please explain how you order language names that include Chinese, Arabic, Russian, Hindi, etc. with their native names in scripts that don't share the same alphabet in an alphabetic order! The screenshot is tricky as it shows Arabic with its English name, however it would not be shown in English.

4. @xmacinfo: on showing only the languages your browser has in Accept-language, that is tricky, because (a) we believe many people might not actually set this value (b) Macs with Safari will only send the first language and nothing else, even if you have multiple preferred languages. So instead we chose to highlight the detected language just like in the designs above from Montreal. If we move the preferred language/languages on the top of the list vs. highlight them, we'll have this issue with different language variants disconnected in the list, eg. if we detect a kind of Portuguese, we'll list that up top and the other two kinds well below. Redefining the input field behavior to filter instead of jump might help with this. See second image.

5. @xmacinfo: showing the language list with all languages in their native names is by design. Showing all language names in French just because we think you understand French might halt the installation if we were not right :) Also, if you do choose Chinese, the whole installer will be in Chinese from then on, so you'd better understand Chinese and recognize its name in Chinese.

lslinnet’s picture

A speech-bubble represents a comment to me and as far as I have seen it's also what it's being used for in other applications/sites, a bundle of flags or similar is usually used to indicate the choice of language.

danillonunes’s picture

@Gábor, there's another softwares and sites that do it in some way.

Here are samples of Ubuntu and Facebook language selector screens. I guess they both use the ISO code for language sorting.

If you look at sidebar of Wikipedia, you will see that they try to sort first by the native language name, if the first letter is a latin character, and if not then they sorts by the their subdomains (which is basically the ISO code for sorting purposes) - so languages like Magyar (hu) and Suomi (fi) looks "right" on the list - and you probably know if this is better or not.

Also, I don't know how speakers of languages that don't have a latin alphabet feels about it. My guess is that Chinese speakers know that they language can always be found on the end of the list, even if they don't know why. So it's better to be a bit more predictable here.

(By the other hand, I found that Twitter language selector doesn't make any sense. It probably uses Bogosort...)

Gábor Hojtsy’s picture

@danillonunes: well, if your examples prove something, it is that there is no good rule for sorting, right? :) Ubuntu and Facebook looks to be using the language code indeed, which make Suomi, Bahasa Indonesia, Leet speak, etc. fall at seemingly random places. Wikipedia seems to have it what look to be "more right", but my guess is that they actually use the English names for sorting(?) (or do you have some insider info on that?).

dcmistry’s picture

Yep, I hear you lslinnet
tkoleary and I did contemplate a few options as to what should go there. As much as I like the idea of flags, I see the next obvious question being raised "Which flags should be there and which should not be?". We certainly do not want to alienate any of our users - They all are the awesome Drupal sauce. Thinking (aloud), some options:

  • How about having a map there instead? It may reflect the geographical reach? Hmm. Not sure about that one, seems like its got flaws. People might confused that with the country of residency.
  • How about having human face figures with voice emitting from their mouths? The icon may be seen as "audio" but in this context they can see it is about the language
  • How about having no icons at all? Do we need them? They do add visual value, but without them the job gets done well too
tkoleary’s picture

Point taken on the bubble. I will explore other options.
Flags are a non-starter because it will be impossible not to alienate the nationalities who are excluded. Also flag denotes nationality which is not synonymous with language.

Bojhan’s picture

Awesome work, really like the direction we are taking with this. Given that this is the first screen almost all Drupal users see, we can set quite some expectations :)

Let me start by describing what is really good, it narrows down the long list to a comprehensible 8 items and uses search as the main interaction. I think both these are major wins to other solutions, with auto detection the likelyhood that you will spend a lot of time finding the appropiate language is minimal.

It is very likely we can optimize this interaction to be accessible, however I would like feedback from our accesibility maintainers before we commit to working on code.

Now, onto my remarks:
1) Why are we removing page titles, they serve a clear purpose of informing the user on which page they are on. Especially if we concider, those with cognitive and/or visual impairments the gains seem confusing? Additionally this theme is used for all updates/module installs, do they also have no titles?

2) The removal of the progress indicator on the first step seems somewhat vague. I understand that it adds clutter, but we introduce it the next step? I feel that the progress indicator is increadibly valuable information to users, knowing that you are at the begin of a process and how long it will approximatly take is key information when installing something. Even visually, without being able to read english - the actual visual signals of the progress indicator should give the user some insight. I am not really too afraid of showing a little bit of English, and its not uncommon for software either to show a progress bar in language selection screens.

3) In terms of ordering, I am still on the fence what the right approach would be. Using the ISO code for language sorting is what Gabor seems to propose, can you ellaborate more what that means? Hopefully the automatic detection is so usefull, we can show the first top 2 (your own language) + English (or other browser supplied default).

4) The RTL switching is very jarring, lets not do this kind of magic on the fly - it will confuse people more than some english :).

5) I think we are trying to be too smart with the icons, if we put the progress indicators back in - we shouldn't have to worry finding a icon that represents "the world" and "languages". I am conflicted about their aesthetic value, because it is not a design element that will return often in the branding of Drupal core.

6) How do we determine the langauges listed here, is there a certain treshold to be included here? For example 80% translated?

Gábor Hojtsy’s picture

@Bojhan: I'm most involved with figuring out the widgets and behaviors here, so let me reflect on those points:

3) Ordering. Based on more discussion above, seems like we could get the best ordering if we in fact order languages by their English names, before translation. If we move up items based on detection of course, that is no clear universal ordering then. The idea of all the mockups above (in all comments above) was to highlight THE detected language, and use a standard ordering for languages. If we reorder languages based on your preferences, then the order will hardly be the same for two installers.

4) All right.

6) Languages. If we require 80% translated, languages like Hindi, Irish, Thai, Hebrew, Turkish, etc. will not show. Its a loooong list of languages that would not be included. You can go to http://localize.drupal.org/translate?sort=asc&order=Drupal+core+progress and see for yourself. Only 26 of the 95 translation teams reached 80%+ status even on Drupal core. I don't think that we should make it appear we don't support Hindi, Irish or Turkish, right? The reason we did include the percentages is so that you see if its only 20% done yet.

Bojhan’s picture

3) Ordering, sounds like that approach is fine. I am somewhat sad that we push people to go with the language of their browser. Because of my own bias, knowing that many dutch people never go with the Dutch translation - but I guess that only applies to countries where English is like a second language.

6) This problem is a bit of a bottleneck. I understand the completely valid reasoning to elevate these languages to attract more contributors and the use case of only using it to translate the front-end. However I think the whole concept of showing the percentage of translation is quite a "Drupalism", I have never seen this in other software.

If we decide to show all languages, we need to consider the experience of users that install Drupal with a language only half or even less translated, because this is a really horrible one.

We do it to inform people their language exists, its just not translated to the point its usable. Why do we want to trouble the ordinary user with that information?

What if this threshold is lower, say 60%? You could say, we hide these languages (thus don't encourage collaboration) but you could also say, this is a challenge for them to get to that 60%.

Gábor Hojtsy’s picture

@Bojhan: there are three use cases for showing languages below 60%:

A. Variants of English. This is an edge case indeed. British English will never reach 60% because the built-in text is mostly good. We can accommodate this and make exceptions I guess.

B. Business reasons. If you google for "Drupal front end translation", you'll find countless people, who are looking to translate the site *front end* to a language and have no business interest in translating the backend. They'll use the backend in English or whatever other single language. So for them, a 80% or even 60% done translation is not a goal, they need good front-end translation and they have no needs on the backend. Unfortunately Drupal by design makes it hard to tell which string belongs to the front or backend, so people use http://drupal.org/project/admin_language and friends to cover up for that. http://drupal.org/node/191362 is a good example for this:

I'm planning a multilanguage corporate brochure + blog website (Drupal 6) for one of my clients. Website frontend will be available in eight languages though backend only in English. The reason for that desision is to avoid the trouble of translating the whole Drupal 6.0 in all eight languages.

C. Community nurturing. Languages we don't show here will have no visibility to people. I guess the same filtering would apply for languages we show later on in locale module for remote language import/addition as "built-in" languages. Whatever languages we hide here will be invisible to people, so we risk them starting over translations from scratch instead of building on the community. Even continuing a 30% translation further would need less resources compared to "darn, Drupal has no support for my language".

Yes, I do understand that offering people to install Drupal in 20%-30% or even less translated languages might end up in a crappy experience. That is why we show the percentage, so they are aware that its not going to be a perfect solution. We'd show them because they might still be pretty complete in terms of front-end translation (good for business), because we support those language communities to grow (Drupal as a growing community vs. done-done software product) and there are edge cases, like British English (or Facebook even supports Pirate English as per the screenshot above).

Unfortunately I don't have numbers as to how many people are happy with just their front end translated, but I'm seeing the request pop up all the time. I also don't have numbers on how big (in %) strings mostly used on the front end of Drupal (there is no way to tell this automatically), but my guess it would be way less than 60%. Most strings are help text, admin form labels and descriptions, etc. The Drupal front end is mostly built by configuration minus mainly the user and node interaction pieces and success/error messages.

mgifford’s picture

This looks like it could add a lot of usability to new users.

As long as the autocomplete is using tools that have been tested for accessibility many issues there will be dealt with. Hopefully jQuery improves their code before we are fixed on a version for the release:
#675446: Use jQuery UI Autocomplete

The list of languages should all be tagged as per:
#1164926: Nodes need to have languages specified separately for accessibility

Edit, on that point, a related discussion from GDO http://groups.drupal.org/node/145894

Gábor Hojtsy’s picture

Regarding the % question, I've asked this question on twitter expecting many people to come here and comment:

Are 30% ready translations better than nothing or annoy you to hell? Do you need only the #Drupal frontend translated?
at https://twitter.com/#!/gaborhojtsy/status/121542549738504192

They did not come. I only got one comment on twitter too:

Completly translated front-end is way more important than partially translated back-end. Every admin can work with EN back-end.
at https://twitter.com/#!/ivanjaros/status/121544272922165248

That is unfortunately not too representative.

attiks’s picture

@Gabor, they are better than nothing, but I'm with ivanjaros, front-end is way more important then backend, we build a lot of multi language sites (EN, NL, FR, JA, CN), but we always start in English and add translation in a second phase, most of our clients don't care if there's an English word in the backend, but they do mind if it's in the front end.

IceCreamYou2’s picture

Is there any way for languages to indicate some "meta" information like whether the front-end is mostly translated or not? As others have noted, a random 30% of strings translated is a lot different from 95% of front-end strings translated.

If not, I'd say just include them all. There's no way it could be that much of an annoyance. Worst-case scenario, you see that your language isn't very well covered, and you either try it (and have some of the UI in English, and potentially help translate the rest) or you just decide to go with English instead. In fact, it might make sense to always show English as an option even when the list of languages starts filtering as you type in the search box -- that way people can always choose it as a fallback language if their language doesn't exist or isn't fully covered.

Gábor Hojtsy’s picture

@IceCreamYou2: its not really possible to tell which string is on the frontend of backend. Various strings appear at both places and certain things are backend of frontend depending on site configuration. Eg. the node admin pages or book module pages might be front end of backend depending on your use case.

drifter’s picture

I think partly translated languages should be kept. If nothing else, it will keep a level playing field and allow those languages to evolve. If these languages need to be installed in a different way, many people won't bother to keep improving it.

Re: marking front-end strings, I think that would be very useful. Often front-end strings make up just 10% of the strings to translate, and I need to hunt them down, and I often miss some. And the reality is that many admins are comfortable with English. We couldn't make this mandatory, but some way of marking strings as front-end would be nice.

good_man’s picture

The designs look very promising. As a developer who worked on many multilingual sites, hiding the percentage of the language is better, and it's (most of the time) not needed info on install.

@Gabor: When are you going to implement it? is it dependant on other issue(s)? I'm willing to help/do this.

Gábor Hojtsy’s picture

@good_man: the initial version of this would use local files, so theoretically the only dependency for this is #1260586: Consolidate .po file import to one directory, which centralizes translation files into one directory, so that we can just look at that (independent of install profile). Ultimately if an internet connection is available, we'll grab the language list from localize.drupal.org (#568986: Dynamically update standard language list from localization server) and download and import those translation files with the integrated l10n_update module (#1191488: META: Integrate l10n_update functionality in core) but we don't need that for the initial implementation of this page. We need the consolidation of translation files to one directory to feed this language list.

IceCreamYou2’s picture

@IceCreamYou2: its not really possible to tell which string is on the frontend of backend.

I was thinking more along the lines of a single property for the entire translation, like "readiness = FRONT/BACK/ALL" or similar, set by the translators based on how far along they are.

Gábor Hojtsy’s picture

@IceCreamYou2: most websites are not satisfied with Drupal core features alone and going to use tens of modules to build their functionality. The percentage display idea was really just to show some data that informs the user on the expected level of completion. And since we are before your install profile selection we are to display the core status here. That Drupal core translation is front-end complete still does not mean anything for the resulting website, so I'm afraid of making such flat out statements. The percentage idea was designed to be a little supporting detail and purposefully not a clear statement about level of quality of those strings or completeness of the whole thing once you installed your 30 contrib modules. Also, showing technical details like front end of backend translation status sounds like way too much information here, especially that the simple percentage is considered too much information by some :) We'd like to make this step simple and easy to move on from, not to occupy you making calculations...

Gábor Hojtsy’s picture

To provide us with the native names needed for this UI implementation I went ahead and suggested a more complete language list at #1295696: Sync predefined list of languages with localize.drupal.org and extend native language information. The storage of the language list is temporary until the config management initiative comes along with a solution for shipped configuration that can be changed later, and we'll migrate to that, but getting in #1295696: Sync predefined list of languages with localize.drupal.org and extend native language information is needed to move forward with this UI improvement, so a quick review of the plans there would be great!

Gábor Hojtsy’s picture

Now that English is made a first class language in #1266318: Make English a first class language, I'm copying the installer related note from there to make sure we take care of that. It should be the job of this issue IMHO.

The installer still lumps English and built-in together, and its a good question how to make this work there. Whether you select English or something else decides whether we enable locale module for you or not. Maybe we want to downplay the built-in nature of the English being referenced there. Or make it a bit more intelligent. If you do have English .po files to import, do enable the locale module since you clearly were up to customizing it, but otherwise just keep using the built-in English as-is. I think that would be the best approach.

This issue still on the waiting line until #1260586: Consolidate .po file import to one directory is fixed.

Gábor Hojtsy’s picture

Note that all dependencies are now committed, so this should be free to start with considering the one .po source directory established in #1260586: Consolidate .po file import to one directory and all the native names for languages added in #1295696: Sync predefined list of languages with localize.drupal.org and extend native language information. Go!

Gábor Hojtsy’s picture

In terms of implementation what we agree on seems to be the following:

1. Move the language selector up front to the first step. The changes in #1260586: Consolidate .po file import to one directory now allow for that.
2. Change the language selector from one list of radio buttons to one select box.
3. Display just native language names in that list.
4. Use language detection (core capability) to pick the browser preferred language and pre-select that. If not detectable, select English.

What we might have agree on:

5. Build a textbox above the select box to jump to the language typed (or filter to the language typed), both were mentioned above.

What we did not agree on:

6. Hide the list of steps on the side.
7. Switch to RTL on the fly when an RTL language is selected.
8. Display percentages of languages.
9. Display a limited list of languages.

Now pre-requisites for 8 and 9 are not done yet (we'll just display the locally available languages for now) and coding 5, 6 and 7 we can skip for now while we debate. So I think what is buildable is 1-4 which we agreed and have pre-requisites for. That should already be a big usability improvement. Anybody disagrees?

dcmistry’s picture

Gabor,
If you are referring to talk we all had a few weeks back, then I think remember things from that convo

5. Build a textbox above the select box to jump to the language typed (or filter to the language typed), both were mentioned above.

Yes!

6. Hide the list of steps on the side.

Yes, because the steps start only once you select the language. It also helps to take the problem in what language do we use the steps when the language selection is the first step.

7. Switch to RTL on the fly when an RTL language is selected.

Yes, Kevin suggested this.

8. Display percentages of languages.

I think what we talked about was to show the percentage when the language is selected

9. Display a limited list of languages.

I think it was to show the full set of languages to show that Drupal is really global. But I may be wrong.

SebCorbin’s picture

Hey there, just giving my opinion on this: I agree on the fact that 3 columns of radios are ugly and not user friendly. But I do think that radios are the best way to display the "main" options:

  1. First option : "[User's detected language]"
  2. Second option : "English"
  3. Third option : "Other language" with ajax-enabled textfield+list

Why this ?

  • English-speaking people like moshe weitzman (#49) will only see "English" as it is the same as user detected.
  • The UI is kept simple, only 3 options at first sight, most important are already here, additional ones will appear via Ajax
  • This is still a standard form, hitting tab and enter will submit it

I love this anyway!

danillonunes’s picture

@SebCorbin, I think the screen as proposed in #81 is a good way to move. English, although is the default language to code, has nothing special from a product point of view, so there's no reason to keep a permanent "English" option.

A select list of all languages, quoting Gábor, "shows that this product is truly worldwide and supported for those markets on the same level". Also, the language auto-detect-thing ensure that English speakers who wants to install Drupal in English will not be bothered with the big language list (and it's also valid for French speakers who wants to install Drupal in French, Spanish speakers who wants to install in Spanish, etc).

Gábor Hojtsy’s picture

@dcmistry: I'm referring to the discussion above. Let's keep this discussion open and implement those pieces we agreed on above, namely 1-4 in my view (based on the list in #104).

dcmistry’s picture

Gabor: That's fine by me :)

good_man’s picture

I've begun writing the patch. Installer stuff are not easy since many things are not loaded. I reached a point where I have to put the autocomplete textbox, resulting in lock.inc & semaphore table errors, since this table is not there yet (it's called from menu.inc, because autocomplete path trigers this), any idea if anyone has done something similar here? or we should write our own autocomplete script for an installer? The other points (1,3,4) are done now.

#675446: Use jQuery UI Autocomplete might be dep.?

Gábor Hojtsy’s picture

@good_man: as per the design this does not use a regular Drupal autocomplete box. The list is already there, there is no server interaction in the behavior, so the Drupal autocomplete would not apply. IMHO would be best if you can post what you have and forget about the autocomplete for now. Thanks! I am sure we will have plenty to discuss there in terms of both code and UX.

good_man’s picture

Status: Needs work » Needs review
FileSize
7.13 KB

I've done 1,3,4 from the list of comment #104 by Gabor. I have 4 questions now to ask/agree on.

1- Should we put our language highlight and selecting stuff in new js file (e.g. /core/misc/selecthighlight.js)?
Some cool selector stuff:
http://jquery.bassistance.de/autocomplete/demo/
http://andrew.hedges.name/experiments/narrowing/

2- Putting language selector in first step cause me to remove this:

$function = $profilename . '_profile_details';
if (function_exists($function)) {
  $details = $function();
  if (isset($details['language'])) {
    foreach ($locales as $locale) {
      if ($details['language'] == $locale->name) {
        $install_state['parameters']['locale'] = $locale->name;
        return;
      }
    }
  }
}

do we need this one? i.e. selecting default language from profiles? if so I think we should put somekind of hook for it?

3- I'll replace this silly multiselect box when we agree on how to do it, do we want to put it in table and then use the script in point #1 to select/autocomplete/hightlight?

4- We need a form validator handler (to make sure the user didn't type any invalid language), and a form submit handler (to replace the langname in textbox with langcode, the former radio box didn't need this since it holds the langcode in it's structure).

Gábor Hojtsy’s picture

Status: Needs review » Needs work

1. I think we should skip this for now as said above.

2. Yes, we discussed this above and concluded that we can put in a $conf setting for distros that want to ship with a specific language. By moving the language selector first, we cannot rely on calling a hook from the profile, since we don't know which profile to call. Also given no database system, etc. are field is very limited, so we can only rely on very core functionality, like the config file. I believe that is loaded/loadable at that stage, no? We need to introduce a new $conf setting for this something like 'profile_default_language' or 'profile_preselected_language' or something like that.

3. I believe we need a single select box but with a higher display of multiple languages, right? It should not be a multiselect box.

4. I can imagine we get in this solution without the textbox and then get in the textbox as an enhancement in a followup, so not sure we need to handle that textbox (or even include it) for now. BTW even if we have it there, I believe we should not treat it as input, we should treat the select box as input, and the textbox would only manipulate which item is selected in the select box, right? So the textbox itself could be created with JS and its behavior would be done with JS. If there is no JS available, only the high single-select box would show.

Anyway, once again, I think we'll have plenty to discuss about the current patch too. Comments on the code:

+++ b/core/includes/install.core.incundefined
@@ -1254,25 +1238,52 @@ function install_select_locale(&$install_state) {
+  $default_language = locale_language_from_browser($enabled_languages);

Name this $browser_langcode IMHO to convey it comes from the browser and is a langcode (vs. language object) Nice trick BTW with emulating the language objects!

+++ b/core/includes/install.core.incundefined
@@ -1254,25 +1238,52 @@ function install_select_locale(&$install_state) {
+  $form['locale'][$locale->langcode] = array(
+    '#type' => 'textfield',
+    '#default_value' => $locale->langcode == 'en' ? 'en' : '',
+    '#title' => st('Default Language'),
+    '#size' => 12,
+    '#maxlength' => 60,

Let's drop this field for now. It should be created with JS only on the client side. Postpone for later.

+++ b/core/includes/install.core.incundefined
@@ -1254,25 +1238,52 @@ function install_select_locale(&$install_state) {
+    '#title' => t('Available Language'),

No title should be used for this select box right?

good_man’s picture

FileSize
6.86 KB

1. I think we should skip this for now as said above.

I was talking about the functionality in #81, when user types a highlight should indicate the language in the below box, right? just like the normal autocomplete but with the box/list below it, not a popup.

2. Yes, we discussed this above and concluded that we can put in a $conf setting for distros that want to ship with a specific language. By moving the language selector first, we cannot rely on calling a hook from the profile, since we don't know which profile to call. Also given no database system, etc. are field is very limited, so we can only rely on very core functionality, like the config file. I believe that is loaded/loadable at that stage, no? We need to introduce a new $conf setting for this something like 'profile_default_language' or 'profile_preselected_language' or something like that.

Yeah it can be loaded from settings file. We should document this.

3. I believe we need a single select box but with a higher display of multiple languages, right? It should not be a multiselect box.

We need something like, readonly-textarea. Is this the best option for this list? or we put it simply in table? (table theming causes problem at installation stage).

$default_language now is $browser_langname, not $browser_langcode, because locale_language_from_browser() returns the langname not the langcode. I removed $form['locale'][$locale->langcode] field too. Removed the title for the second field (the multiple select box for now), I put previously just to show what this box holds.

good_man’s picture

Status: Needs work » Needs review
Gábor Hojtsy’s picture

Status: Needs review » Needs work

@good_man:

1. Yes, I understand that the textfield would need to be incorporated, I'm just trying to get something pinned down that we can agree on, that already makes significant changes and then move on with even more good stuff :)

2. Yeah, let's figure this out here and now so we have replacement for the functionality you remove. Can you try using a $conf value and test it works with a settings file?

3. Is a select box so bad? :) I mean we do need a form API construct to use proper for client-server communication, and I assume that sure is going to be a select box. We can build whatever extra sugar on top with JS and client side magic, but we need to pin down the initial control first. I assumed #size can be used on a select box without #multiple, so we can still force selection of *one* language, but display the select box with multiple values as per the design. Is that not workable?

4. On $browser_langname, you compare it like so "$language->language == $browser_langname", so it should be a $langcode. The language property on a $language object is a langcode. Yes, it is not named like so, #1216094: We call too many things 'language', clean that up discusses that in endless details. The current conclusion is that standalone language code values should use the "langcode" name, so $browser_langcode would be most appropriate here AFAIS.

Gábor Hojtsy’s picture

Ok, realized your confusion might in fact root in the pretty incorrect original code that started to default $name with the langcode. Let's consider that $langcode all the way, now that we don't use it for presetting the name and that should clean this up a lot:

+++ b/core/includes/install.core.incundefined
@@ -1254,25 +1238,43 @@ function install_select_locale(&$install_state) {
     $name = $locale->langcode;

$name should be $langcode.

+++ b/core/includes/install.core.incundefined
@@ -1254,25 +1238,43 @@ function install_select_locale(&$install_state) {
+        'language' => $langname,

'language' property on a language object contains a langcode, so this should do => $langcode, based on the above rename. Not $langname! locale_language_from_browser() also works with langcodes, not language names.

David_Rothstein’s picture

2. Yes, we discussed this above and concluded that we can put in a $conf setting for distros that want to ship with a specific language. By moving the language selector first, we cannot rely on calling a hook from the profile, since we don't know which profile to call. Also given no database system, etc. are field is very limited, so we can only rely on very core functionality, like the config file. I believe that is loaded/loadable at that stage, no? We need to introduce a new $conf setting for this something like 'profile_default_language' or 'profile_preselected_language' or something like that.

I don't understand how this would work? You can only set $conf in settings.php, but it's not a good idea for a distribution to ship with an actual settings.php file (for the same reason core doesn't). Also, I think that distributions on drupal.org (not to mention plain old install profiles that aren't packaged as a distribution) don't have any way to do this even if they wanted to.

Also, we're not just talking about the ability of profiles to pre-select a language; they also currently have the ability to completely swap out the language selection UI and it seems like that would go away too.

In #54 you suggested .info files as a way to deal this, which makes more sense to me. For example, a profile could have an info file setting that says "I need to modify the language selection", and maybe if any profile on the system has that, we switch the order and put the profile selection screen first. Then the profile author could proceed as normal and modify the language stuff however they see fit. Even with the profile selection screen first, things would go pretty smoothly for a profile that pre-selects a language, because (presumably) the hypothetical "German install profile" would write its name and description in German; therefore a German speaker who downloaded this and started to install Drupal with it would still see something in their language on the profile selection screen and know right away to pick that instead of Standard or Minimal.

Of course, what would be a real killer (additional) feature is for distributions to be able to skip the profile selection screen altogether (i.e., indicate somehow that all the core profiles should be hidden). Then you'd download the (fully packaged) German distribution from drupal.org and it would skip the first two screens of the installer automatically and you'd start off with the database configuration screen already translated to German. I think that's what you were getting at with #54 also. That part is a separate issue though.

Gábor Hojtsy’s picture

@David_Rothstein: all right, yeah, sorry, I mixed this up. I don't think moving around install steps if a profile wanted to modify languages is a good idea, I agree skipping both profile and language selection if a profile wanted to (that is giving the whole install experience in the hand of the profile) is a good idea though, but is clearly way out of scope for this patch. So to avoid side-tracking us to a solution that is doomed to removal, I propose we live with profile not being able to pre-select a language for this issue and solve it as part of an overall "let profiles override install stuff before they are selected" issue.

@good_man: that would mean that point 2 from #116 is considered skipped for this issue.

David_Rothstein’s picture

What's wrong with changing the order of the install steps if the profile wants to modify languages?

I don't see how it can really work without that, and it should be very easy to do. I think that's better than removing this feature and hoping we'll find a way to add it back again as part of another larger issue.

The only argument I can think of against it is that this would lead to an inconsistent installer UI based on which profiles you have in the system. However:

  1. This is an edge case anyway; not too many profiles will do this.
  2. When you download a random contrib profile to your system it's usually because you intend to use it... and since any profile that is modifying the language selection is already changing the standard installer UI (by definition), it's not like someone following along with generic "how to install Drupal" documentation would be able to do it for that profile either way.
Gábor Hojtsy’s picture

@David_Rothstein: note we have plans above to do language dependent things on the profile selection page for example above. If we need to build for install profile tasks in different orders, we'll spam the code with conditions for this case and that case, while as you explained this is a real tiny edge case and people who want to override the language form will likely want to override the profile form as well, and can therefore be solved the same way. So whatever we work out here would be pulled out altogether and I'm not keen on working on stuff we plan to remove soon.

David_Rothstein’s picture

note we have plans above to do language dependent things on the profile selection page for example above. If we need to build for install profile tasks in different orders, we'll spam the code with conditions for this case and that case

I don't see what the spam would be. Any code you write for this in the future would always have to check what the language is before using it anyway, right? In this case it would just be NULL sometimes...

people who want to override the language form will likely want to override the profile form as well, and can therefore be solved the same way.

That would be OK if we had a plan to solve things that way, but I don't understand how a profile that hasn't been selected yet can override the language form... How would that ever work? :) It sounds like we'd have to build a whole new system which definitely isn't necessary just to keep the language form modifiable.

So whatever we work out here would be pulled out altogether and I'm not keen on working on stuff we plan to remove soon.

The code I'm thinking of is extremely simple and will hopefully take me only 20-30 minutes to write. I'll happily write it later today and add it to the patch, and if it needs to be removed later, I'll survive :) Per above, I don't see why it would need to be removed, though.

Gábor Hojtsy’s picture

Well, I am not sure it is in scope to solve larger systemic goals as part of a patch to improve language UX and am trying to keep issues focused and to the point to advance and iterate faster, but I see your point. Let's see how would that look. Looking forward to your additions. Thanks!

good_man’s picture

Status: Needs work » Needs review
FileSize
6.94 KB

$name should be $langcode.

That's right.

'language' property on a language object contains a langcode, so this should do => $langcode, based on the above rename. Not $langname! locale_language_from_browser() also works with langcodes, not language names.

Not sure about the langcode, since for example langcode is 'en' and langname is 'English'. The only incorrect var name was the above one ($name) which is $langcode now.

Also, I've looked into the API for locale_language_from_browser(), it says that it should return a langcode (en, ar), but in reality I'm getting a langname (English, العربية). Can you double check it too, so we can open another issue if it's a bug either in documentation or in implementation?

@good_man: that would mean that point 2 from #116 is considered skipped for this issue.

Yes but let's not forget to open this issue, since we removed it here.

I don't see what the spam would be. Any code you write for this in the future would always have to check what the language is before using it anyway, right? In this case it would just be NULL sometimes...

I guess we should make sure it's 'en' by default (if skipped) not NULL. right?

The code I'm thinking of is extremely simple and will hopefully take me only 20-30 minutes to write. I'll happily write it later today and add it to the patch, and if it needs to be removed later, I'll survive :) Per above, I don't see why it would need to be removed, though.

Your point is very true, also wants to see how would you solve it.

Gábor Hojtsy’s picture

@good_man: it returns a language name because you feed it with a language name in $language->language, no? I am saying that should be a language code, see all other Drupal code :)

good_man’s picture

ohh that's right! I don't know how I missed that -_-

good_man’s picture

FileSize
6.71 KB

The code is much cleaner now, thanks for mentioning this point Gabor.

good_man’s picture

The code is much cleaner now, thanks for mentioning this point Gabor.

EDIT: sorry duplicated, don't know how it happens, I think it's my connection.

David_Rothstein’s picture

FileSize
10.7 KB

OK, I've rerolled this patch per my comment above, so that the patch no longer removes the core feature which allows profiles to alter or skip the language selection step. Overall, the code for this did wind up to be pretty simple, I think.

By default, the patch should work the same as the one above.

To test that the alteration works correctly, you can add something like this to standard.profile:

/**
 * Implements hook_install_tasks_alter().
 */
function standard_install_tasks_alter(&$tasks) {
  $tasks['install_select_locale']['display_name'] = 'This is a test';
}

And at the same time add this to standard.info:

custom_locale_selection = true

This should cause the profile selection screen to be first. If you select the standard profile, the language selection step will be next and the above "This is a test" modification should appear immediately.

You could also try to test the automatic language selection feature (formerly in the pseudo-hook hook_profile_details but I decided it made a lot more sense to put it in the .info file now), by adding this code to standard.info:

locale = XX

where XX is a langcode. But note you have to have at least one language besides English available on your system for this to work, due to a preexisting bug/feature (I'm pretty sure it's a bug).

David_Rothstein’s picture

Status: Needs review » Needs work

Oh, also, for both #127 and #129 I get a fatal error when I actually try to click the "Save and continue" button on the language selection form:

Call to undefined function db_delete() in /home/droth/web/drupal/core/includes/cache.inc on line 511

Anyone else experience that too!?

Assuming it's not pilot error, I'm marking the patch "needs work" for that.

Gábor Hojtsy’s picture

Assigned: Unassigned » Gábor Hojtsy

@David_Rothstein: all right, well, the improvements sound good. I wanted to avoid including renaming "locale" to "langcode" and/or "language" as applicable in this patch, trying to focus it again on the functionality change, but "locale" is almost nowhere used in Drupal to designate a language code, and now you propose we introduce more settings and ini directives including "locale" in their name, so that makes it pretty much unavoidable to blow up this patch and rename locale appropriately. (I feel this is analogous to the if you don't muck with SQL queries, you don't need to introduce dbtng but otherwise you need to kind of thinking). I'll try and do it now.

Gábor Hojtsy’s picture

FileSize
24.32 KB
78.74 KB

@David_Rothstein: ok, the cache db bug you've been seeing was due to @good_man not naming the select box just simply 'locale'. Since there is no DB system at install time, the installer is dependent on data coming in exactly in the $POST structure as it expects (and it needs to validate that data itself against the file list again when it comes in). So once the field is properly named it works.

@good_man: in simplifying the patch you lost track of the fact that locale_language_from_browser() would return FALSE if there was no browser preference data sent or nothing there is among the languages available on the site. We need to default to English in those cases. So put that logic back (albeit simpler to how you originally had it).

@David_Rothstein: since you wanted to introduce these new profile features here, I went ahead and renamed 'locale', 'locales', etc. appropriately in the installer to say "langcode", "file", "translation", etc. as appropriate for the context. It just doubled the patch in size, yeah. There is no "locale" thing in Drupal 7 even (besides the module named locale). Language codes are "langcode", language objects are "language" and then there are the UI "translations". It is a huge can of worms either way, and no we are straight in it. See #1216094: We call too many things 'language', clean that up for 110+ comments discussing the topic.

The attached patch works pretty well for me, it figures out I prefer Hungarian and gets me this UI (with the following empty files in the filesystem at sites/default/files/translations for demonstrational purposes):

install.ar.po	install.eo.po	install.hu.po	install.ja.po	install.pl.po	install.ru.po
install.de.po	install.es.po	install.it.po	install.ko.po	install.ro.po	install.uk.po

ChooseLanguageDrupal8.png

Reviews welcome.

Gábor Hojtsy’s picture

Status: Needs work » Needs review

Status: Needs review » Needs work

The last submitted patch, 1260717-132.patch, failed testing.

webchick’s picture

That is SO freaking hot.

Gábor Hojtsy’s picture

Status: Needs work » Needs review
FileSize
24.83 KB

The testbot cannot really test this as-is of course, since it still tries to bypass the language screen with "locale=en", which is not useful anymore. Looks like we need the testbot modified too (yay?!) to also pass langcode=en to run well for patches before and after this change. Once this lands, we can make testbot run with "langcode=en" only.

I talked to DamZ and webchick on IRC and they suggested we put in a small compatibility layer for the testbot only and once this patch lands, file a critical/major to remove it which would have the external dependency of testbot changed. We can work with a (hopefully) passing patch in the meantime.

DamZ: GaborHojtsy: any reason not to add a thin compatibility layer?
DamZ: GaborHojtsy: that's what we did for another patch that changed the installer
DamZ: GaborHojtsy: "temporary" thin compatibility layer
GaborHojtsy: DamZ: I'm happy to add a compatibility layer, if our policy is to not touch testbot but  rather put in testbot only code in our shipping software
webchick: GaborHojtsy: could add it, then a major/critical task to remove.
DamZ: GaborHojtsy: it all depends if you want you patch in or not 
DamZ: GaborHojtsy: if you depend on the test bot code getting changed and deployed, you can wait
webchick: DamZ: so is the workflow: 1) Get patch in with compatibility wrapper, 2) Fix testbot, 3) Remove compatibiity wrapper?
DamZ: webchick: yep
GaborHojtsy: webchick: ok, we are above criticals and almost above majors, so adding one more.....
webchick: GaborHojtsy: well we don't add it until the patch gets committed. 

Also on review of my changes, I figured out the "localize" GET argument modification to "translate" was not done in the GET handler. Fixed patch for that.

Gábor Hojtsy’s picture

All right, it passes, so let's not try to expand the scope anymore for here and try and perfect this patch in ways people see it needs to and get it in. Let's deal with the textbox and how it should work as well as the general installer theming elsewhere. Reviews, comments, please!

good_man’s picture

Status: Needs review » Needs work
+++ b/core/includes/install.core.inc
@@ -523,20 +531,40 @@ function install_tasks_to_perform($install_state) {
+  $custom_language_selection = FALSE;
+  foreach ($install_state['profiles'] as $profile) {
+    $info = install_profile_info($profile->name);
+    if (!empty($info['custom_language_selection'])) {
+      $custom_language_selection = TRUE;
+      break;
+    }
+  }
+  if ($custom_language_selection) {
+    $tasks = array_reverse($tasks, TRUE);
+  }

We can simply get rid of $custom_language_selection local variable like this:

foreach ($install_state['profiles'] as $profile) {
  $info = install_profile_info($profile->name);
  if (!empty($info['custom_language_selection'])) {
    $tasks = array_reverse($tasks, TRUE);
    break;
  }
}

Also do we need to swap profile functions order (place in file) with translation functions first? as the default order of the installer wizard?

Regarding the languages textbox, we have three options IMO:
1- Multiple select box (and remove the multiple with jquery), so we get the look of expanded box with only one language to choose.
2- Readonly textarea.
3- Themed div.

20 days to next Drupal core point release.

Gábor Hojtsy’s picture

@good_man: it is already not a multiselect box, I've swapped in #size for that (like I've explained above, but you did not take it). It works as it should, a high select box with only one option to choose.

Bojhan’s picture

Interm approach seems fine, I would like to see a clear plan which parts of the design we want to tackle (perhaps already with issues).

I really dislike the help text, why are we adding this again? The usual Drupalism, of informing users of potential things that you might want to do but probally wont?

Gábor Hojtsy’s picture

@Bojhan: yes, sure. I've opened and commented on the following issues that should IMHO be used to break out major parts of this issue (based on mockups above).

A. #1337554: Develop and use separate branding for the installer to deal with the branding / theming of the overall install experience. Does not belong in our focused issue, but did not want to loose Kevin's ideas at all.
B. #605710: Decide on if and if so, how to implement the Drupal wordmark in core for using the wordmark in Drupal (was opened pretty long ago, but posted the new D8 wordmark derivative from Kevin there for discussion).

The rest of the followup issues would concern this screen I believe, as outlined above (http://drupal.org/node/1260716#comment-5193608). These were those:

5. Build a textbox above the select box to jump to the language typed (or filter to the language typed), both were mentioned above.
6. Hide the list of steps on the side.
7. Switch to RTL on the fly when an RTL language is selected.
8. Display percentages of languages.
9. Display a limited list of languages.

I think we can discuss 5, 6 and 7 in one followup or three separate followups. For 8 and 9, we do actually need to have the language list not come from local files but from remote data, since now the local files are ones your specifically put there, so you theoretically have files/languages which are meaningful to display and we don't have percentage data from them (we are gonna be fed with that from remotely).

So all-in-all I think this patch solves 1-4 (moves install step to start, uses select box, uses native names, uses autodetection).

Then once remote data feeding is there, we can get to 8 and 9. We don't have data for that level and neither do we need to be worried about those problems yet.

Gábor Hojtsy’s picture

FileSize
24.7 KB
48.66 KB

On that help text, here, removed. It was both suggested by the Montreal sprint people who are actively using these tools and in our discussion with dcmistry, webchick and tkoleary. We can chalk it up for a Drupalism and get rid of it if that is preferred. So this is what you get:

D8Language.png

(Did not change anything based on @good_man's comments, deferring that to @David_Rothstein).

Gábor Hojtsy’s picture

@Bojhan: opened #1337628: Enhance language select form with textbox and other tools for the UX followups 5-7 as discussed considering the output of this patch as baseline.

xmacinfo’s picture

The “locale”, “locales” are not a very good idea to name languages. Locale represents a lot more than languages and a lot of times, locales are location-based.

To localize a software for, let’s say French Canada (fr-CA), we would need to:

1- Set the language to French (or French-Canadian if available).
2- Set the date format to French Canada (date format and order in addition to the French naming).
3- Set the number format to French Canadian format. For example space for thousand separators.
4- Set the decimal separator to a comma for the French Canadian locale.
and the list may go on…

If the installer plan to also set all the localization attributes, and not set only the language, we may still use “locale”. But if this patch and the functions are only setting a language no matter the localization of the user, we should then stick to “language”.

David_Rothstein’s picture

Status: Needs work » Needs review
FileSize
26.8 KB

Rerolled to address @good_man's feedback from #138. (I guess I introduced that variable thinking I would use it more than once, but apparently in the end I didn't!)

I also added some extra help text about this feature to hook_install_tasks_alter() and also some warnings about why it should rarely be used, plus updated that hook's example code for the locale->language change.

I'm not sure we needed to change that terminology in this issue (since it was already pretty inconsistent before!) but the changes do look very good and the new terminology makes sense.

David_Rothstein’s picture

Also, while working on the above patches I discovered some nasty caching bugs in the install_profile_info() function. These are preexisting bugs, but given that this patch shuffles around the order of when that function gets called, it seems likely that it has an effect on that bug (whether it makes it better or worse I'm not sure).... So in case anyone notices any strange behavior with the wrong profile modules getting installed while testing this patch, that's probably why.

Since it's an unrelated bug (and in Drupal 7 also) I created a separate issue with a fix for it here: #1338384: install_profile_info() returns inconsisent data

Gábor Hojtsy’s picture

@xmacinfo: thanks for the more detailed explanation, that should support us using language here.

Any other concerns with the patch? I think its looking good for setting a new baseline for the language selector from where we can improve further in #1337628: Enhance language select form with textbox and other tools.

isholgueras’s picture

Hi,

I executed the install in several browsers (IE7, IE8, IE9, Chrome and FF8) in a Windows 7 x64 With Zend server 5.5 (Apache 2.2.16 and PHP 5.3.8). My default language is Spanish international.

I download the drupal.8.x-dev and applied the #142 patch. I created 6 install.xx.po files. Three of them was valid (es, de, ar) and three wasn't (22, cr, es-ES)

In all browsers, the first time I run drupal, selects by default spanish language and shows 4 languages, english, العربية, deutsch, español. Without that patch (#142), shows me 7 language (three languages not valid like 22, es-ES and cr) with radio buttons.

If I change my default language to english or german, Drupal changes the default language too. (even in IE7 :) )

In my computer, this functionality works great.

Gábor Hojtsy’s picture

Status: Needs review » Needs work

@Ingacio: thanks for testing. Your feedback does indeed point out an interesting side effect, that "invalid" languages are not allowed anymore with the patch. I don't think that is intended. That would make it impossible to ship Drupal with language files for languages not in standard.inc. While we want to make that use configuration storage and be overridable by distributions consequently, I don't think we should drop the feature here.

@good_man: So let's display the languages for which we cannot produce a native name with their language code. That does not look fancy, but is the same functionality we had before the patch, and is out of scope for this patch to resolve. Marking needs work for this. Otherwise testing seems to confirm the patch works good and we had no other concerns, so we are progressing fine :)

good_man’s picture

Status: Needs work » Needs review
FileSize
26.93 KB

I thought that standard.inc indeed has all the languages out there so we shouldn't need any other language, anyhow as you said we don't want to let's-fix-everything-while-here. So, I've left the standard languages check and added an else statement, this way we can easily in future get rid of this else.

Status: Needs review » Needs work
Issue tags: -Usability, -Needs accessibility review, -D8MI, -montreal

The last submitted patch, 1260716-150.patch, failed testing.

good_man’s picture

Status: Needs work » Needs review
Issue tags: +Usability, +Needs accessibility review, +D8MI, +montreal

#150: 1260716-150.patch queued for re-testing.

Gábor Hojtsy’s picture

Status: Needs review » Reviewed & tested by the community
Issue tags: -Needs accessibility review

All right, this looks good to me now. We have followups open for the remaining issues, got good work and reviews from @good_man, @David_Rothstein, @Ignacio Sánchez and myself, and we are seem to be happy with the numerous improvements introduced. Let's get this in and keep refining it!

(Removing needs accessibility review tag since we got that feedback above from Everett).

yoroy’s picture

This is a good candidate for a short screencast to see it in action. An issue summary would be good to have though, there's been a solid design discussion going here and it has value to write up how this solution was reached. #142 has the latest screenshots and follow-ups are in @141 and 143. (But I'm keeping this rtbc regardless :-)

Gábor Hojtsy’s picture

FileSize
48.45 KB
42.03 KB
39.88 KB
72.79 KB
51.33 KB

@yoroy: here is another set of screenshots. Note the UI did not change since the ones posted above (and otherwise its the same as D7), so I I'm not sure if these add more to your understanding.

1. D8 out of the box will only list English. There are two changes from D7 here (a) the language step is moved to be the first (b) languages are shown in a dropdown not a set of radio buttons

D8Language1.png

2. The language download screen is still included mostly untouched.

D8Language2.png

3. Once you have a couple translations, install.it.po and install.ko.po in this case, they show up. The change from D7 is that we use the native language name only. D7 used the English name with the native name in parenthesis.

D8Language3.png

4. If an unknown language code is found, it is shown just with the language code. Same as in D7. This is because we don't have language metadata based on the language code, but we don't want to limit Drupal to only be able to use the languages we possibly know about. This should be a rare case though, since we ship with all the languages people contributed Drupal translations in the community ever.

D8Language4.png

5. If one of the languages matches one of your preferred languages (from your browser settings), then that is going to be selected automatically. This is new to D8.

D8Language5.png

The eventual goal is to (a) grab this language list from a remote localization server, such as localize.drupal.org (#568986: Dynamically update standard language list from localization server), which would mean this list will contain up to a hundred languages, which would necessitate (b) enhancing language language selection with a textbox and possibly displaying percentage of languages (#1337628: Enhance language select form with textbox and other tools) and (c) build in downloading of .po files for the selected language (#1191488: META: Integrate l10n_update functionality in core), which would mean no need for the manual download instructions anymore. Both these assume a network connection, so the local setup will need to still work without a network connection, and that is what we are working out now, so this in itself should be a great improvement with more improvements and even easier usability coming later.

The patch also makes it possible for an install profile to pre-select the language or provide a separate language selection screen (which in that case would show after the profile selection screen). Since that would be custom to the profile, no screenshot or screencast is possible for that.

Helpful?

yoroy’s picture

Yes very helpful, thank you.

I did *not* apply the patch and ran through all these scenarios myself, but still:

- There's some solid ground work being done here and it's clear how this is a good first chunk of work to commit.
- Nice how the different scenarios are handled, I see serious effort to make this as painless as possible for the user.
- It's clear what the follow-ups are and the important ones are opened.

Good work.

catch’s picture

Status: Reviewed & tested by the community » Needs work

OK so the UX changes here look great, but right at the end of the patch there is this:

+ * You can also use this hook to modify the language selection task (which by
+ * default comes before the profile selection) but only if you also set the
+ * special 'custom_language_selection' property in your profile's .info file,
+ * as described in install_profile_info(). This will cause the installer to run
+ * the profile selection task before the language selection task, so that if
+ * the user does wind up choosing your profile, your modifications to the task
+ * will be able to take effect. Because this change of order results in a more
+ * difficult profile selection experience for non-English speakers, you should
+ * only do it if absolutely necessary.
+ *

There's several issues with this:

1. A hook that only gets implemented by one thing ever (and only executed once too) is not a hook. Especially when it's not implemented by a module. That's not the fault of this patch though.

2. This makes the already weird non-hook thing significantly weirder.

3. It is a cool idea to allow a profile to override the behaviour before the profile is selected (since you should not have more than one profile in your Drupal install that is trying to do this - although, what happens if you do?), but that is a new feature for install profiles, and doesn't belong in an issue called "Improve language onboarding user experience".

I realise this means we will lose one feature here, but that seems worth it to get the UX improvements in cleanly, and to have a separate (probably major?) follow-up issue to sort out the distro settings stuff, which is entangled with some other issues as well (Gabor directed me to one about customizing the theme).

Generally the screenshots here look /amazing/ and I did not see much to complain about with the patch.

Ultra-nitpick: "Profiles which" should be "Profiles that".

David_Rothstein’s picture

Status: Needs work » Needs review

3. It is a cool idea to allow a profile to override the behaviour before the profile is selected (since you should not have more than one profile in your Drupal install that is trying to do this - although, what happens if you do?)

The patch works fine in that case, because it only does alterations after the profile is selected, not before. (Actually having the alterations take place before could only happen at the distro level, but that would be a new feature and is not part of this patch.)

but that is a new feature for install profiles, and doesn't belong in an issue called "Improve language onboarding user experience".

See above - I don't think this patch really adds a new feature. It does rework an existing feature (ability to alter or skip the language screen), but only because the patch makes the previous way of doing that impossible. The only alternative is, as you say, to remove the feature for now and hope it gets added back later.

I realise this means we will lose one feature here, but that seems worth it to get the UX improvements in cleanly, and to have a separate (probably major?) follow-up issue to sort out the distro settings stuff, which is entangled with some other issues as well (Gabor directed me to one about customizing the theme).

I don't think we should push it off without a clear plan for adding the missing feature back. The "distro settings" idea is interesting, but potentially requires infrastructure changes on drupal.org to be able to have distributions downloaded from there actually ship with these settings, etc. No one has figured out how that will work yet, so there's a good chance of it not happening. And it would be preferable not to lose this feature in Drupal 8 (ability to distribute a version of Drupal that is in a particular language from the very first screen, without having to write your own custom install script).

It's also not a one-to-one replacement (profile settings and distro settings aren't really the same thing), although given that you can choose to have your install profile on drupal.org downloaded as a distribution I guess that's not too bad.

Ultra-nitpick: "Profiles which" should be "Profiles that".

Ultra-ultra-nitpick: The dictionary actually says both are equally acceptable, although it's a very common misconception that they're not :)

http://oxforddictionaries.com/page/grammartipthatorwhich
http://dictionary.reference.com/browse/which (see "usage note" at the bottom)

Gábor Hojtsy’s picture

Status: Needs review » Reviewed & tested by the community

Back to @catch for feedback then.

catch’s picture

Title: Improve language onboarding user experience » Improve language onboarding user experience, all profiles to modify installer order via .info keys
Status: Reviewed & tested by the community » Needs review
Issue tags: +API change

I don't think we should push it off without a clear plan for adding the missing feature back.

I don't want to add the API oddity (alter hooks dependent on .info key) without at very least a plan to clean it up. Install profiles are already weird and fragile enough as it is.

I've also not seen any reviews of the API change here from people other than Gabor or David, so putting this back for more discussion, and tagging.

webchick’s picture

Title: Improve language onboarding user experience, all profiles to modify installer order via .info keys » Improve language onboarding user experience, allow profiles to modify installer order via .info keys

Fixing typo.

ezra-g’s picture

FileSize
26.9 KB

I found comments 118, 157 and 158 helpful to understanding the main issues under review here.

I find David's explanations in 158 convincing, and absent a better solution, I don't object to allowing profiles to use .info files as a way of changing the order of installer tasks. While this feels a bit unconventional, it seems reasonable to me that profiles and the installer define some conventions that differ from how we might deal with Drupal once it's actually installed.

I re-rolled 150, tweaking only the documentation change to hook_install_tasks_alter(), using language that feels slightly clearer to me. It can be difficult to describe/undertand sequence and modification of a sequence through language :).

catch’s picture

absent a better solution

I'm not going to commit this without a commitment to finding a better solution somewhere. There are enough areas of confusion around install profiles at the moment, including unresolved major bugs in Drupal 7, that adding any more feels like just piling on.

I don't particularly object to dropping the feature if the usability improvement here is considered more important, but this doesn't feel like the issue to be adding new API patterns - so for me that needs to be split out either way (whether it blocks this issue or it's a follow-up to add back the feature that is being removed here).

Gábor Hojtsy’s picture

FileSize
25.4 KB

All right, as I've said, let's not derail this issue with this, I think we are way-way past David's 30min estimate for this problem. I've opened #1351352: Distribution installation profiles are no longer able to override the early installer screens for distro level settings, removed them from this patch and going to post the code suggestions from here on there. Let's review this patch that now only deals with the .po files and the installer screen and get it in.

Gábor Hojtsy’s picture

Title: Improve language onboarding user experience, allow profiles to modify installer order via .info keys » Improve language onboarding user experience
good_man’s picture

Status: Needs review » Reviewed & tested by the community

The patch in #164 looks good for me, reviewed and tested it. Will move to #1351352: Distribution installation profiles are no longer able to override the early installer screens after committing this, to continue improving the distro settings.

catch’s picture

OK thanks for the re-roll.

I don't see a follow-up issue for the test bot fixing linked from here? Could we open that before committing this so it doesn't get lost?

Gábor Hojtsy’s picture

@catch: #1352220: Drupal 8 changes installer language to take from GET langcode. The core issue to remove the @todo is supposed to be opened *after* this issue lands as per the above pasted discussion from IRC.

catch’s picture

Title: Improve language onboarding user experience » Change notification for: Improve language onboarding user experience
Priority: Normal » Critical
Status: Reviewed & tested by the community » Active

Thanks, #1352220: Drupal 8 changes installer language to take from GET langcode is what I was after.

Committed and pushed to 8.x. See you in #1351352: Distribution installation profiles are no longer able to override the early installer screens.

This will also need a change notification for the UI change and the fact the alter no longer works on the languages form.

Gábor Hojtsy’s picture

Title: Change notification for: Improve language onboarding user experience » Improve language onboarding user experience
Priority: Critical » Normal
Status: Active » Fixed
rfay’s picture

No tests added with this?

Gábor Hojtsy’s picture

@rfay: well, we discussed this in detail with @chx. His idea was to do a test, which would modify the database prefix making Drupal think it is not yet installed and then hit the installation screen. That would let us test that the language selector was shown. To test anything else, we'd need to save language files dynamically to the filesystem and/or hack $conf to point the directory to somewhere else where we have the files prepared. Basically the test would need to prove the files resulted in options in the select list. The browser based detection for languages has *very deep* test coverage, so not really useful to wrap it in here again. All-in-all we agreed there is not much to test here and we got various people to test it instead above.

rfay’s picture

Works for me. Still baffled why simpletest needs to change if this can't be tested, and if the current patch tests out ok. Continued conversation on that over in #1352220: Drupal 8 changes installer language to take from GET langcode

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.

David_Rothstein’s picture

Status: Closed (fixed) » Needs work

All right, as I've said, let's not derail this issue with this, I think we are way-way past David's 30min estimate for this problem.

Fair enough :) .... I still don't think we should be worrying too much about DX concerns for a hook that literally almost no one implements, especially when the existing DX is confusing anyway (it's a hook where everything passed to it can be altered but only some of those alterations have any effect). That said, if the feedback is that we need to work on the DX to get it committed, we can work on that in a followup issue.

I have created #1386394: Add back the ability for install profiles (or at least distros) to pre-select a language or modify the language-selection screen as the followup issue for that, since #1351352: Distribution installation profiles are no longer able to override the early installer screens (which was previously linked to above) is way too broad; it's an entirely new feature request with a lot more components to it than just adding back the single feature that was removed. However, for the time being, I've marked the first issue postponed on the second, since if the second issue does wind up getting some activity (it has none so far), it may turn out to be a better way to solve the problem.

Anyway, I'm looking at the patch that was committed here and we definitely have to reopen this. The consensus above was not to add any of the new .info file properties but rather to defer that discussion to the followup issue and remove the feature for now, right? However, it looks like the patch here actually did add them, just didn't add the code that actually made them do anything. So as far as I can see, the result is that install profiles in D8 have two new info file properties ('langcode' and 'custom_language_selection') that do absolutely nothing when you try to use them...

David_Rothstein’s picture

Status: Needs work » Needs review
FileSize
3.7 KB

Here's a followup patch to remove the .info file properties that were introduced but that don't do anything, as well as some other minor cleanup.

Hopefully this is a really quick RTBC + commit, so no need to make a separate issue. We'll see :)

Gábor Hojtsy’s picture

Status: Needs review » Reviewed & tested by the community

Looks good on a visual review.

Gábor Hojtsy’s picture

Issue tags: +langcode

Tagging with langcode for the locale => langcode API change to group issues related to unifying under this umbrella.

Garrett Albright’s picture

EDIT: Whoops, reported an issue that was already mentioned above. (Forgive me for not skimming the entire thread before posting.)

Garrett Albright’s picture

Okay, and functionality-wise, this doesn't seem to even work. Is there still more to be done? I select Japanese and click "Save and continue," and the next screen is still in English. The st() function still has:

    if (isset($install_state['parameters']['profile']) && isset($install_state['parameters']['langcode'])) {

…so it looks like it's still not going to do anything until a profile has been selected. Yet even if I select a profile, everything is still in English on the requirements screen. That's a step back from D7!

Am I missing something? Should I try to fix this? Anyone familiar with this problem, feel free to ping me (as Albright) on IRC.

Gábor Hojtsy’s picture

@Garrett: not sure about your issue in #179, before you have a language file in place, it is a 1 item list, since English is built-in, afterwards, it is a two item list, since you have your language available. On #180, great find with the issue in st(), that should only be a problem on the profile selection screen itself. If the .po file has translations for the installer strings and those use st(), the strings should be translated onwards. Please submit a separate bug report for the st() condition, we should be able to get that in fast :)

Garrett Albright’s picture

Gábor, my original problem in #179 is that the form control starts out as a drop-down menu and then turns into a select box for no reason that I can discern, but it turns out you mention it in #155. I still think that's incredibly strange, but I guess it's not the most important issue here.

As for filing a bug with st(), before I do that, I want to double-check and make sure that I've installed the language file correctly and stuff. As I'm new to multi-lingual sites and definitely new to D8 (and D7, for that matter), I'm not sure of that yet. I again invite anyone who may be interested in helping me out with this to ping me on IRC.

Garrett Albright’s picture

Okay, I've patched two issues I've found: #1392174: install_find_translation_files() breaks if $langcode is passed and #1392192: st() still requires profile to be selected before translating. With these two apply, the names and descriptions of installation profiles are untranslated, but everything else is translated. That's correct behavior, yes?

Gábor Hojtsy’s picture

@Garrett: superb, thanks for these two issues, and especially the patches! For the names and descriptions, it is just a matter of missing st()s in the code. I've added a third issue for that with a patch at #1392348: The installer does not translate profile names and descriptions. It would be great if you can help try that out and validate it :) Thanks a lot!

Gábor Hojtsy’s picture

@Garrett Albright: btw on the drop down menu / select box problem, the drop down menu is merely a 1 item select box, that is how browsers display a 1 item select box. The idea is that it displays items up to a limit and then becomes scrollable. When it has only 1 item, that is how it is rendered.

catch’s picture

Status: Reviewed & tested by the community » Fixed

OK, committed/pushed the follow-up.

Garrett Albright’s picture

Sorry, but I'm going to have to switch gears and look back at my current work for the moment. The whole reason I got on this tangent was to see if there was something here that could be backported to D7, even as a kitten-killing hack, but that's not looking like a promising route to take, so back to D7 land I go. But hopefully others will be able to continue where I left off.

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.

Gábor Hojtsy’s picture

Issue tags: +language-base

Tagging for base language system.

Gábor Hojtsy’s picture

The testbot was updated, so the little compatibility layer we added here is no longer needed. Submitted #1426954: Remove locale backward compatibility layer in installer.

Gábor Hojtsy’s picture

Issue summary: View changes

Add parent, change format