Selettore di Localizzazione dell'Intestazione

|||
| — | — | — |
| :information_source: |Riepilogo|Header Locale Selector aggiunge un selettore di lingua all’intestazione del sito per gli utenti.|
|:eyeglasses:|Anteprima|Anteprima su theme-creator.discourse.org |
|:hammer_and_wrench:|Link al Repository|https://github.com/Ahmedgagan/header-locale-selector|
|:open_book:|Nuovo per i temi di Discourse?|Guida per principianti all’uso dei temi di Discourse |

Installa questo componente del tema

Questo componente del tema aggiunge un menu a discesa delle lingue disponibili all’intestazione del sito. Sarà molto utile per gli utenti che non hanno familiarità con la lingua predefinita del sito.

Nota: questa funzionalità è disponibile solo per gli utenti connessi.

Sponsor

Un ringraziamento speciale a @Richard_Millington per aver sponsorizzato questo componente.

13 Mi Piace

Avere questo più evidente e l’inclusione di bandiere potrebbe davvero aiutare le persone sui forum multilingue.

Ottima aggiunta all’ecosistema. :+1:

5 Mi Piace

Questa è una funzionalità fantastica e incredibile! È mia raccomandazione che il Team dovrebbe considerare di aggiungere questo componente, almeno come tema preinstallato nel core!

Grazie mille per averlo rilasciato!
:vulcan_salute::star_struck::+1:

2 Mi Piace

Ho una piccola richiesta di funzionalità.

Sarebbe possibile far sì che il link a discesa si adatti ai dispositivi mobili?

Se abilitassi il plugin della chat, diventerebbe molto affollato. Forse anche renderlo configurabile per utilizzare le bandiere sul desktop, mentre sui dispositivi mobili si utilizzano le 2 lettere, simili a come funzionava in precedenza su Windows? È passato un po’ di tempo. lol

Anche se il ridimensionamento potrebbe funzionare per essere simile in dimensioni alla lente d’ingrandimento della ricerca.

Solo un feedback da uno dei nostri membri.

Ottimo componente

la selezione delle lingue con le bandiere è fantastica, purtroppo contiene alcuni errori. La Croazia non ha ricevuto una bandiera.
La Catalogna fa parte della Spagna.


Puoi anche condividere del codice per ridurre le dimensioni delle bandiere sui dispositivi mobili?

Sarebbe possibile avere un’opzione per utilizzare il codice del paese invece delle bandiere? Simile alla lingua della tastiera su Windows.\n\nie en es ecc.. La bandiera è enorme sul cellulare. O un’opzione per ridurre le dimensioni della bandiera.\n\nAnche un override CSS sarebbe utile. Grazie

1 Mi Piace

Sì, questo interruttore deve essere modificato per adattarsi allo stile generale del discorso. È terribile adesso

1 Mi Piace

Screenshot dell’aspetto attuale come riferimento:

Desktop:

Mobile:

Questo componente non funziona per me. C’è qualcos’altro da fare oltre ad accenderlo e selezionare un modello?

Ha bisogno almeno di una rielaborazione parziale. Se qualcuno vuole contribuire e inviare PR per correggere varie cose, è benvenuto :slight_smile:

1 Mi Piace

Etichettato come #rotto per ora

Il componente è rotto, ma è contrassegnato come compatibile con l’ultima versione

@volanar Non è lo stesso componente.

1 Mi Piace

Sto rimuovendo il tag broken.

Per cominciare, il componente non è mai stato rotto!
C’è stato un malinteso riguardo a un altro componente del tema di Discourse che Volanar ha segnalato come rotto.

Ho testato il componente, che funziona ancora sull’ultima versione di Discourse.
Tuttavia, richiede ancora alcuni aggiornamenti per modernizzarlo, risolvere una deprecazione e correggere problemi minori in modo che funzioni bene sull’ultima versione di Discourse.

Ho proceduto e ho creato una PR (sponsorizzata da @Richard_Millington) :+1:

6 Mi Piace

La PR è stata unita; grazie, Ahmed. :+1:

4 Mi Piace

come usare 2 o 3 lingue e rimuovere le altre?
a proposito, ho ottimizzato il codice per locale-selector.js:

import Component from "@ember/component";
import { action } from "@ember/object";
import { inject as service } from "@ember/service";
import { ajax } from "discourse/lib/ajax";
import { userPath } from "discourse/lib/url";
import { isTesting } from "discourse-common/config/environment";

export default class LocaleSelector extends Component {
  @service currentUser;

  get availableLocales() {
    // Cache filtered locales for performance optimization
    if (!this._filteredLocales) {
      const allLocales = JSON.parse(this.siteSettings.available_locales);
      this._filteredLocales = allLocales.filter(locale => ['en', 'ar'].includes(locale));
    }
    return this._filteredLocales;
  }

  @action
  onChangeLocale(value) {
    this.set("currentUser.locale", value);
    ajax(userPath(`${this.currentUser.username_lower}.json`), {
      data: { locale: this.currentUser.locale },
      type: "PUT",
    }).then(() => {
      if (!isTesting()) {
        location.reload();
      }
    });
  }

  defaultItem() {
    const currentUserLocale = document.documentElement
      .getAttribute("lang")
      ?.replaceAll("-", "_");

    return (
      this.content.find((val) => val.value === currentUserLocale) ||
      this.content.find((val) => val.value === this.siteSettings.default_locale)
    );
  }
}

dopo averlo testato, discourse continua a bloccarsi
qualche idea?

available_locales ha questa struttura:

[
  {
    name: "English (US)",
    value: "en"
  },
  ...
]

Quindi nel tuo codice dovrai usare locale.value. :+1:

@Ahmed_Gagan Sembra esserci un nuovo problema con questo componente del tema:

Solo una nota qui che questo componente del tema non è più necessario ed è supportato dal core nelle impostazioni del sito sopra elencate. (Documentazione)