Jâai ouvert une PR qui corrige (en grande partie) ce bug !
main â Honeyxilia:fix
opened 10:02AM - 08 Feb 24 UTC
**Note: Currently, this PR doesn't fix a specific case that I'll explain later -⊠it's still a relative improvement but might need some tweaking!**
# Base situation
On a forum me and my company are hosting, we're currently using this plugin to show both French and German users the translated names and descriptions of the categories, with the custom translation feature!
Unfortunately, we've noticed that for logged off users only see the site's default locale version of the translation, which creates a discrepancy between the base site and the categories, that the plugin should arrange :(
For reference, here are some screenshots - these are all coming from a local installation of Discouse running on Ubuntu 22.04 with English as the default locale:
* Base version, while logged on/off

* Custom french translation, logged on

* Logged off user with fr locale in browser, pre-fix

As you can see, while the category and topic nouns are translated (__"Catégories"__ and __"Sujets"__), the categories names, descriptions and subcategories are not translated and remain in the site's default locale, and this mismatch is what I aimed to fix - now, I present to you this fix!
# Fix
In the current production code, the locale is detected in the `plugin.rb` files, in the `add_to_serializer` relating to the custom translations of the category names, descriptions, and subcategories.
However, the way it infers the used locale is by getting either the logged-on user's Interface language setting `scope.current_user.locale`, or the default locale of the site `SiteSetting.default_locale`.
```rb
if object.uncategorized?
I18n.t('uncategorized_category_name', locale: SiteSetting.default_locale)
elsif !(scope && scope.current_user && scope.current_user.locale && object.slug_path && Multilingual::Translation.get("category_name", object.slug_path)).blank?
Multilingual::Translation.get("category_name", object.slug_path)[scope.current_user.locale.to_sym] || object.name
else
object.name
end
```
This is not ideal, as for a multilingual plugin, it would be right to assume that a given user's client wouldn't match the site's default locale, and it would be preferable to show them the translation that are in their language (if the translation exists).
As a fix, I've decided to use the `I18n.locale` variable - indeed, this variable is set by the site through cookies or HTTP requests (if the site allows so), and when the value is updated, it runs through the serializers to get the corresponding translation, or the base one if the translation is not available.
So, I've inserted this lambda that tests if a current user is logged on, or if the locale set by I18n is supported in the plugin (through the overridden `locale_available?` method)
```rb
find_locale = -> (scope) {
if (scope && scope.current_user && scope.current_user.locale)
scope.current_user.locale
else
I18n.locale_available?(I18n.locale) ? I18n.locale : SiteSetting.default_locale
end
}
```
Then I've modified the corresponding `add_to_serializer` calls to use this lambda. For instance, here's the `add_to_serializer` call getting the translation for a main category's name :
```rb
add_to_serializer(:basic_category, :name, respect_plugin_enabled: false) do
if object.uncategorized?
I18n.t(
'uncategorized_category_name',
locale: I18n.locale_available?(I18n.locale) ? I18n.locale : SiteSetting.default_locale
)
elsif !(object.slug_path && Multilingual::Translation.get("category_name", object.slug_path)).blank?
Multilingual::Translation.get("category_name", object.slug_path)[find_locale.call(scope).to_sym] || object.name
else
object.name
end
end
```
# Results of the fix
With this implemented, the logged-on users are not affected - as for the logged-off users, here are the differences :
* The custom translations of the name and description are displayed to users in their language (if the site allows header or cookies reading)
* The custom translations of the sub categories are only shown when a given category's `show_subcategory_list` is activated/true
* Base version (English) - unaffected

* Custom translation post fix (French) - `show_subcategory_list` off for `Test deux`

* Custom translation post fix (French) - `show_subcategory_list` on for `Test deux`

As you can see, the fix is mostly functional, except for this specific case for subcategories when the option to show a list of subcategories in a main category is off. After testing, it would seem that this is the case because the site doesn't rerun/yield the serializer relating to the subcategories unless this option is on, so only the default names are shown (initiated when the instance is launched, with the default locale).
Sadly, I'm not well versed enough in either Ruby or the structure of the main discourse code as well as this plugin's - so, if maintainers on this repository wish to fix that specific case and then fuse this PR with the main code, I'd be very pleased :)
Ăa fonctionne pour les noms de catĂ©gories, les descriptions et les sous-catĂ©gories lorsque lâoption show_subcategory_list est activĂ©e sur une catĂ©gorie !
Le seul problÚme restant concerne les sous-catégories lorsque show_subcategory_list est désactivé
4 « J'aime »
thoka
(Thomas Kalka)
Juillet 20, 2024, 6:50
126
Si je veux traduire des catégories, des descriptions de catégories et des tags dans mon forum vers 10 langues différentes, je dois créer et télécharger 3 x 10 = 30 fichiers de configuration et de mise à jour distincts.
Je pense avoir toutes les traductions dans un seul fichier avec la structure suivante :
categories:
slug:
_de: Nom allemand
_en: Nom anglais
.description:
_de: Description allemande
_en: Description anglaise
tags:
tag:
...
Cela présenterait plusieurs avantages :
Toutes les traductions pourraient ĂȘtre mises Ă jour en une seule fois
Les traducteurs voient le contexte pendant la traduction
Rationaliser les tĂąches de traduction en utilisant de grands modĂšles linguistiques
Quelquâun a-t-il dĂ©jĂ essayĂ© cela ?
Y a-t-il des inconvénients que je ne vois pas ?
Concernant une premiĂšre implĂ©mentation, jâessaierai dâĂ©crire un plugin qui crĂ©e et met Ă jour toutes les entrĂ©es nĂ©cessaires dans Multilingual::CustomTranslation.
3 « J'aime »
angus
(Angus McLeod)
Juillet 23, 2024, 10:49
127
Ce plugin a besoin dâune mise Ă niveau. Je veux Ă©valuer si cela en vaut la peine et ce qui est nĂ©cessaire. Si vous ĂȘtes intĂ©ressĂ© par les fonctionnalitĂ©s multilingues, veuillez voter :
Jâutilise le plugin et je veux juste quâil continue de fonctionner.
Jâutilise le plugin et je veux une meilleure/diffĂ©rente fonctionnalitĂ© ou expĂ©rience utilisateur.
Je veux une meilleure fonctionnalitĂ© multilingue dans Discourse mais je nâutilise pas ce plugin (veuillez expliquer ci-dessous).
Aucune des options ci-dessus (veuillez expliquer ci-dessous pourquoi vous avez voté).
2 « J'aime »
UlBre
Août 7, 2024, 9:29
130
Ma rĂ©ponse « Je veux une meilleure fonctionnalitĂ© multilingue dans Discourse mais je nâutilise pas ce plugin (veuillez expliquer ci-dessous) » est due au fait que nous sommes en train dâĂ©valuer une bonne option multilingue. Ce serait formidable si votre outil sâavĂ©rait ĂȘtre celui-ci.
Comme vous avez demandé ce qui est nécessaire, je poste ici mon message écrit pour une question générale sur le support multilingue :
Nous avons un site web avec un seul domaine et deux langues (allemand, anglais). Le contenu est divisé par domaine.org/de/[nomdusite] et domaine.org/en/[nomdusite] .
Nous avons un forum Discourse en langue allemande sur le sous-domaine [mot-clé-allemand]-forum.domain.org
Maintenant, nous voulons ajouter une version anglaise du forum.
Malheureusement, le mot-clé anglais, qui décrit bien le sujet et que nous aimerions utiliser pour le forum anglais ([mot-clé-anglais]-forum.domain.org), diffÚre du mot-clé allemand. Le mot-clé allemand ne fonctionne pas en anglais et le mot-clé anglais ne fonctionne pas en allemand.
Question :
Est-il possible de faire fonctionner un (un) forum Discourse avec différents sous-domaines pour différentes langues tout en utilisant une seule gestion de compte ?
Ou devons-nous construire un tout nouveau forum anglais avec son propre sous-domaine et sa propre gestion de compte ?
Par le terme « une seule gestion de compte », jâentends une seule base de donnĂ©es pour les utilisateurs et une seule connexion pour les deux langues.
Y a-t-il une possibilitĂ© dâĂ©viter que les utilisateurs qui souhaitent utiliser les deux langues doivent sâinscrire deux fois ?
Ou devons-nous nous limiter strictement Ă un seul domaine si nous voulons offrir les mĂȘmes connexions pour diffĂ©rentes langues du mĂȘme forum ?
Si nous avons besoin dâun seul domaine et dâun seul forum, est-il possible dâafficher la langue dâun message dans le nom du lien du message ?
Comme par exemple
https://meta.discourse.org/t/multilingual-plugin/*en/*142740/125
pour les messages en anglais et
https://meta.discourse.org/t/multilingual-plugin/*de/*142740/125
pour les messages en allemand ?
DĂ©solĂ© si mes questions Ă©taient trop stupidesâŠ
2 « J'aime »
angus
(Angus McLeod)
Août 8, 2024, 12:46
132
En bref, non, ce nâest pas possible.
Une partie de lâobjectif de ce plugin est de permettre Ă diffĂ©rents locuteurs natifs dâexister sur le mĂȘme forum et que leur langue prĂ©fĂ©rĂ©e leur soit naturellement proposĂ©e. CâĂ©tait lâintention originale du plugin.
Oui, vous les auriez sur le mĂȘme forum. Si vous devez vraiment avoir deux forums sĂ©parĂ©s, vous devrez utiliser un fournisseur dâidentitĂ©, par exemple auth0 ou okta, qui fournit ensuite lâauthentification pour les deux forums.
Ce nâest pas actuellement une fonctionnalitĂ© du plugin, mais il serait possible dây parvenir avec un travail supplĂ©mentaire. Pour rĂ©aliser pleinement votre vision, des travaux supplĂ©mentaires seraient nĂ©cessaires dans tous les cas. Vous pouvez mâenvoyer un message privĂ© sur coop.pavilion.tech .
2 « J'aime »
angus
(Angus McLeod)
Août 8, 2024, 1:04
133
Compte tenu des rĂ©sultats de ce sondage, je vais travailler sur la prochaine version majeure de ce plugin Ă partir de septembre. Si vous avez des demandes spĂ©cifiques de fonctionnalitĂ©s, câest le moment de les faire. La prochaine version du plugin disposera Ă©galement dâun abonnement professionnel payant avec support et dâautres avantages. Le plugin restera 100% open source.
4 « J'aime »
pfaffman
(Jay Pfaffman)
Août 8, 2024, 8:33
135
Vous pourriez avoir deux instances et utiliser discourse connect pour faire de lâune dâelles le site qui gĂšre lâauthentification.
1 « J'aime »
Jagster
(Jakke Lehtonen)
Août 8, 2024, 11:17
136
En tant que membre dâune famille de langues trĂšs restreinte et difficile, jâai besoin de traductions basĂ©es sur lâIA pour mes utilisateurs finlandais et estoniens. Les services de traduction sont horriblement mauvais en dehors des langues principales.
Les traductions en anglais sont un peu meilleures, cependant.
4 « J'aime »
das-g
(Raphael Das Gupta)
Août 16, 2024, 4:32
138
Je cherche Ă utiliser le rĂ©glage multilingual guest language switcher footer visible pour rendre les langues principales de la communautĂ© facilement accessibles en tant que langues dâinterface pour les visiteurs. Voici ce que jâai observĂ© :
La barre avec la liste restreinte des langues dâinterface nâest visible que lorsque multilingual guest language switcher est dĂ©fini sur footer, mais pas lorsquâil est dĂ©fini sur header .
Comme la barre est Ă©galement appelĂ©e « pied de page » dans le nom du rĂ©glage (mĂȘme si elle ne se trouve pas dans le pied de page de Discourse, mais flotte au-dessus du contenu prĂšs du coin infĂ©rieur droit de la fenĂȘtre), cela pourrait ĂȘtre attendu. Cependant, sur les sites proposant un grand nombre de langues dâinterface (par exemple, toutes celles actuellement disponibles dans Discourse), il serait souhaitable dâavoir une liste restreinte dâaccĂšs rapide aux langues principales de la communautĂ©, indĂ©pendamment de lâemplacement du menu complet de sĂ©lection de langue pour les visiteurs. (Et je pense quâun bouton de menu dans lâen-tĂȘte est beaucoup plus Ă©lĂ©gant quâune barre flottant sur des parties alĂ©atoires du contenu de la page, en en couvrant une partie.)
Peut-ĂȘtre que lorsque header est choisi et que des langues sont sĂ©lectionnĂ©es dans multilingual guest language switcher footer visible, celles-ci pourraient ĂȘtre triĂ©es en haut du menu et mises en surbrillance ?
Le réglage permet de réorganiser les langues sélectionnées pour la liste restreinte dans la barre :
Cependant, la barre semble ignorer cet ordre et semble plutÎt trier les langues par ordre alphabétique de leur code court à 2 lettres :
Il serait souhaitable que lâordre configurĂ© dans le rĂ©glage soit respectĂ© (soit par dĂ©faut, soit via une option de rĂ©glage supplĂ©mentaire).
1 « J'aime »
das-g
(Raphael Das Gupta)
Août 16, 2024, 4:39
139
Oh, et lorsque multilingual guest language switcher est dĂ©fini sur header, le menu avec la liste des langues nâest pas dĂ©roulable (ni limitĂ© par la hauteur de la fenĂȘtre du navigateur), de sorte que certaines langues ne sont pas sĂ©lectionnables, car elles se retrouvent en dessous du bord infĂ©rieur du navigateur. (Solution de contournement dans Firefox : DĂ©zoomez avec Ctrl+molette de la souris, de sorte que lâensemble du menu tienne dans la fenĂȘtre du navigateur.)
Ceci est avec la version 0.2.9 (ba63f9a ) du plugin « Multilingual ».
1 « J'aime »
das-g
(Raphael Das Gupta)
Août 16, 2024, 5:26
140
Un administrateur prĂ©cĂ©dent de notre instance semble avoir dĂ©jĂ tĂ©lĂ©chargĂ© certains fichiers category_name.<code langue>.yml Ă lâadresse https://<URL de base de Discourse>/admin/multilingual/translations.
Cependant, ils ne semblent pas fonctionner. Existe-t-il un moyen de visualiser ou de télécharger leur contenu, afin que je puisse les modifier et les télécharger à nouveau ?
Ădition :
Ils fonctionnent maintenant. (Je ne sais pas ce qui a changĂ©.) Je serais toujours intĂ©ressĂ© Ă les tĂ©lĂ©charger (ou Ă y accĂ©der sur le serveur, sâils se trouvent dans le systĂšme de fichiers lĂ -bas), au cas oĂč jâaurais besoin de les modifier Ă un moment donnĂ©.
1 « J'aime »
evenlo
Septembre 4, 2024, 9:56
142
Bonjour, jâai installĂ© discourse-multilingual sur deux sites.
Il y a une erreur avec require is not defined dans i18n.js :
Lorsque jâai dĂ©sactivĂ© discourse-multilingual, lâerreur ne sâest pas produite. Pourriez-vous sâil vous plaĂźt me dire ce qui pourrait causer cela ?
Merci.
Jâai dĂ©couvert un deuxiĂšme bug sur ce sujet .
Jâai remplacĂ© çźäœäžæ par íê”ìŽ .
Une icĂŽne de crayon est apparue, signalant un changement.
Mais si vous regardez lâentrĂ©e de lâhistorique des modifications, le changement de langue du sujet nâest pas affichĂ©.
Le Avant et AprĂšs sont identiques, mĂȘme en mode Brut.
Moin
Novembre 18, 2024, 9:52
145
Je pense que câĂ©tait aussi le problĂšme dans
Something is severely broken with your site @TheBaby5 â the list of available locales on your site is null and itâs causing a whole lot of problems. Are you running a supported install? Do you have any non-official plugins?
1 « J'aime »
Sheena
Février 8, 2025, 7:28
146
Bonjour !
DĂ©solĂ© si ma question est Ă©trange, mais y a-t-il un endroit oĂč je peux voir le plugin en action ? Jâai lu la documentation et parcouru ce fil de discussion, mais la plupart des sites dâexemples liĂ©s ne semblent pas fonctionner ou ont changĂ©. Par exemple : Pavilion et http://try.thepavilion.io/ Pour cette raison, je ne peux pas consulter les exemples mentionnĂ©s pour le plugin, le sĂ©lecteur de langue, etc.
Sâil nây a actuellement aucun moyen de le tester, quelquâun serait-il assez gentil pour rĂ©pondre Ă quelques questions ?
Les utilisateurs peuvent-ils choisir leur(s) langue(s) prĂ©fĂ©rĂ©e(s) lors de lâinscription, afin que le contenu du forum soit automatiquement filtrĂ© en fonction de leur sĂ©lection ?
Est-il possible de changer le bouton âLanguageSwitchâ en une icĂŽne de globe ou autre chose ? Pour lâinstant, il semble sâagir dâun caractĂšre japonais, mais comme personne sur mon forum nâutilise cette langue, cela pourrait confondre les utilisateurs ou les amener Ă lâignorer.
Je comprends que les catĂ©gories et les descriptions peuvent ĂȘtre traduites (si jâai bien compris), mais cela fonctionne-t-il aussi pour les sous-catĂ©gories de sous-catĂ©gories ? De plus, cela pourrait-il sâappliquer Ă des Ă©lĂ©ments tels que les liens dans lâen-tĂȘte de la marque (plugin) ? Par exemple, le mot âProductsâ pourrait-il ĂȘtre traduit et rediriger les utilisateurs vers la version espagnole ou anglaise, en fonction de la langue sĂ©lectionnĂ©e ? Je pose cette question car il sâagit dâun plugin trĂšs populaire et je me demandais sâil Ă©tait pris en charge par le plugin multilingue.
DĂ©solĂ© pour toutes ces questions ! Jâai fait de mon mieux pour tout comprendre en regardant les captures dâĂ©cran et la documentation.
Zas666
(Zas)
Février 25, 2025, 12:43
147
Il semble que ce plugin ne fonctionne pas bien avec Discourse 3.5.0beta1, jâai dĂ» le dĂ©sactiver pour reprendre le forum. Je nâai rien trouvĂ© dans les journaux sauf :
Avis de dĂ©prĂ©ciation : add_to_serializer ne doit pas ĂȘtre utilisĂ© pour remplacer directement les mĂ©thodes include_* ?. Utilisez plutĂŽt lâargument keyword include_condition
Ă /var/www/discourse/plugins/discourse-multilingual/plugin.rb:314:in block in activate!
2 « J'aime »
thoka
(Thomas Kalka)
Février 25, 2025, 9:56
148
Je reçois une erreur 500 / Oops avec le discours actuel :
ArgumentError (nombre incorrect d'arguments (donné 2, attendu 1))
app/controllers/extra_locales_controller.rb:44:in `url'
Backtrace
plugins/discourse-multilingual/extensions/extra_locales_controller.rb:21:in `bundle_js_hash'
app/controllers/extra_locales_controller.rb:44:in `url'
plugins/discourse-multilingual/lib/multilingual/locale_loader.rb:30:in `preload_tag_translations'
plugins/discourse-multilingual/plugin.rb:77:in `block (2 niveaux) in activate!'
Ma locale est réglée sur de_DE.UTF-8.
Au fait : âSignaler un bugâ au-dessus renvoie vers le domaine actuellement inconnu discourse.pluginmanager.org.
1 « J'aime »
Ce plugin fait planter mon site en ce moment mĂȘme.
1 « J'aime »
angus
(Angus McLeod)
Février 25, 2025, 12:54
152
Le plugin a été mis à jour pour ne pas se casser sur la derniÚre version de Discourse.
14 « J'aime »