J'ai besoin de trier les libellés en angle. Je le fais à partir du fichier component.ts. Le tri fonctionne très bien. Il attribue la valeur clé de l'étiquette pour le tri. Mais mon application est en deux langues. donc le trier à l'aide de la clé ne fonctionne pas lorsque je passe à une autre langue. Y a-t-il un moyen de le trier dans n'importe quelle langue
getlabel(Id: string): Observable<Dto[]> { return this.httpClient .get( url ) .pipe( map((data: any) => { data.sort((a, b) => { return a.label > b.label ? 1 : -1 }) return data }) ) as Observable }
3 Réponses :
Utilisez la fonction localeCompare :
.pipe( map((data: any) => { return data.sort((a, b) => { return a.label.localeCompare(b.label, 'he'); }) }) ) as Observable
'he' est pour la langue hébraïque, remplacez-le par code de langue
C'est la langue hébraïque
j'ai deux langues en et fr
Savez-vous quelle est la langue d'affichage actuelle à chaque fois? vous écrivez "quand je passe à une autre langue", lorsque vous changez de langue, enregistrez-la dans une variable locale et passez-la à localeCompare func
ok j'ai compris comment utiliser la comparaison locale pour trier dans les deux langues, mais le tri ne change pas tant que je ne recharge pas la page. Supposons que son anglais, il trie et puis quand je clique sur français, il reste avec le tri anglais jusqu'à ce que je recharge la page
Je pense que je dois utiliser onLanguagechange mais puis-je l'utiliser en service
Il s'agit d'un bogue dans votre code, je mettrai à jour la réponse pour le corriger pour vous
Et? toujours pas de changement dans la liste triée?
ne trie pas à moins d'être actualisé après le changement de langue
Ceci est dû au fait que vous n'exécutez pas cet événement observable sur l'événement «changer de langue». lorsque vous changez de langue, appelez cette fonction pour trier la liste avec le nouveau code de langue.
Je vais créer une démo simple pour vous montrer. Comment faire "quand je passe à une autre langue", est-ce avec une balise select
?
continuons cette discussion dans le chat .
Cela fonctionne pour le tri dans différentes langues
.pipe( map((data: any) => { data.sort((a, b) => { return this.translate .instant(a.label) .localeCompare(this.translate.instant(b.label)) }) return data }) ) as Observable
function sortByKey(array: [], key: any, sortType = '') { if (!array.length) { return array; } return array.sort((a, b) => { if (sortType === 'desc') { if (b[key] < a[key]) { return -1; } if (b[key] > a[key]) { return 1; } } else { if (a[key] < b[key]) { return -1; } if (a[key] > b[key]) { return 1; } } return 0; }); }
Veuillez envisager de fournir un exemple minimal reproductible si possible. De cette façon, il est plus probable que les bénévoles de SO peuvent vous aider.