• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

React - własne podejście do tłumaczeń.

Object Storage Arubacloud
0 głosów
384 wizyt
pytanie zadane 9 marca 2018 w JavaScript przez rafal.budzis Szeryf (85,260 p.)

Hej mam problem który nie wiem jak rozwiązać. Zaprojektowałem sobie system tłumaczeń na 2 komponentach. Posiadam TranslateProvider który przetrzymuje obiekt z tłumaczeniami i udostępnia go przez context oraz Translate który wyświetla tłumaczenie z obiektu który jest w context.

W skrócie działa to tak: 

<TranslateProvider lang={name:'Imie'}>
    <Translate key="name" />
</TranslateProvider>

Jestem bardzo zadowolony z działania tego systemu lecz muszę dodać możliwość pobrania tłumaczenia poprzez funkcje. Potrzebuje tego ponieważ niektóre komponenty wymagają przekazania już przetłumaczonego stringa i nie mogę użyć wówczas komponentu Translate. Chodzi o to aby wprawić w działanie taki kod i stworzyć funkcje translate która pobierze context.

<TranslateProvider lang={name:'Imie'}>
    { translate('name'); /* co zrobić aby zadziałało ?*/}
</TranslateProvider>

 

2 odpowiedzi

+1 głos
odpowiedź 9 marca 2018 przez Jacek Rojek Bywalec (2,380 p.)
jeśli używasz komponentu <Translate > do wyświetlania to jest to błędne podejście, komponenty powinny być  jako "pure fuction" gdzie przekazujesz tylko tekst do wyświetlenia, który otrzymujesz z funkcji.

czego używasz do zarządzania stanem aplikacji? Redux?

Musisz stworzyć oddzielny plik gdzie trzymasz obiekty z tlumaczeniami który ma funkcje np

translate(enum language, string key)

<TranslateProvider > jest zbędny
komentarz 10 marca 2018 przez rafal.budzis Szeryf (85,260 p.)
W głównej aplikacji używam reduxa lecz TranslateProvider i Translate mam w osobnym repo jako "react-components". Jak rozumiem najlepiej zrobić to poprzez reduxa i pozbyć się jednego i drugiego komponentu? Reduxa postrzegam bardziej jako stan który się zmienia i wpływa na całą aplikacje. Języki to bardziej stałe niz zmienne dlatego też nie zdecydowałem się na reduxa. W jaki sposób najzgrabniej napisałbyś funkcje która będzie znała mojego stora? Mi przychodzi tylko jeden sposób a mianowicie zrobić osobny moduł i do niego wstrzyknąć store jakimś setterem. Chciałbym korzystać z języków w wygodny sposób bez mapowania statów i innych magi.
komentarz 11 marca 2018 przez Jacek Rojek Bywalec (2,380 p.)

Jednego nie jestem pewien, czy to tłumaczenie działa na zasadzie "google translator"? Czy jest to po prostu aplikacja dostępna w kilku językach? Jeśli tak to nie jest to tłumaczenie a bardziej i18n(internationalization). Komponenty nie powinny być świadome stanu języka aplikacji tylko wyświetlać dany im tekst. Opisz mi cały kontekst użycia ich w aplikacji. Zarządzanie językiem na poziomie komponentów mija sie z celem używania ich.

komentarz 11 marca 2018 przez rafal.budzis Szeryf (85,260 p.)

Jest to aplikacja dostępna w kilku językach. Logikę wybierania języka mam poza React a całą moją aplikacje otaczam TranslateProvider em który dostaje już wybrany wcześniej obiekt z tłumaczeniami. TranslateProvider nie wie jaki to język wie jedynie jakie są wartości kluczy. 

<TranslateProvider lang={name:'Imie', klucz2: 'wartosc2'}>
    <App />
</TranslateProvider>

Następnie wszędzie gdzie potrzebuje tekstu z wybranego klucza umieszczam tylko Wywołanie  drugiego komponentu

<Translate key="klucz2" />

 

komentarz 11 marca 2018 przez Jacek Rojek Bywalec (2,380 p.)

Ok, to teraz rozumiem dlaczego używasz contextu. Możesz np exportowac funkcje translate() i klase <TranslateProvider > z jednego modułu, jeśli już chcesz to robić w ten sposób.

Czyli gdzie masz  ta logikę wybierania języka?

Możesz po prostu zapisać wartość tego obiektu i mieć funkcje 

let lang={name:'Imie', klucz2: 'wartosc2'}

string translate(string klucz) {

return lang[klucz]  //jesli istnieje

}

 

0 głosów
odpowiedź 9 marca 2018 przez ShiroUmizake Nałogowiec (46,300 p.)
Czy masz dostęp do komponentu translate?

Możesz w komponentcie roota wykonać operacje translate i przekazać wynik jako prop.
komentarz 10 marca 2018 przez rafal.budzis Szeryf (85,260 p.)
Sam napisałem komponenty TranslateProvider i Translate. Nie rozumiem co masz na myśli mówiąc o dostępie do komponentu? Możesz dać jakiś przykład?
komentarz 11 marca 2018 przez ShiroUmizake Nałogowiec (46,300 p.)
Nie są z jakieś paczki :).

Podobne pytania

+2 głosów
1 odpowiedź 4,195 wizyt
0 głosów
1 odpowiedź 176 wizyt
pytanie zadane 1 maja 2015 w Java przez Reflexip Początkujący (450 p.)
+1 głos
0 odpowiedzi 115 wizyt
pytanie zadane 21 września 2016 w JavaScript przez Nasos Bywalec (2,730 p.)

92,567 zapytań

141,420 odpowiedzi

319,616 komentarzy

61,953 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...