Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Konwencja plików językowych, Nazwy kluczy
markonix
post 14.10.2018, 15:00:13
Post #1





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Jakiej konwencji używacie jeżeli chodzi o aplikacje multi-języczne na prostych plikach językowych (tablice)? Np. Laravel.

PHPSTORM fajnie podpowiada użyte indeksy więc warto trzymać się jakiegoś standardu, a nie potrafię wybrać najlepszego, a teraz na dodatek muszę przepisać 10% plików językowych bo nie można użyć czegoś takiego:

  1. 'teacher.name' => 'Nauczyciel',
  2. 'teacher.name.placeholder' => 'Podaj imię i nazwisko',


Ponieważ biblioteki które pozwalają na zarządzanie plikami językowymi dumpują potem to wszystko do tablicy i dot notation jest zmienione na zagnieżdżenia. Tak więc spowoduje to nadpisanie i trzeba stosować np.

  1. 'teacher.name.label' => 'Nauczyciel',
  2. 'teacher.name.placeholder' => 'Podaj imię i nazwisko',


To tyle przestrogi, może kiedyś komu zaoszczędzi to czasu, ja teraz mam około 200 linijek CTR+F i CTR+R sad.gif

Wracając do tematu podzielcie się swoimi konwencjami. Moje przemyślenia:
Na pewno warto nie bać się podziału na pliki. Ja tego żałuje bo teraz gdy pliki mają 2500 linijek to przy edytorach webowych troszkę przymula.
Pliki podzielone na jakieś ogólne, wspólne np. app.php czy system.php oraz na większe moduły (fragmenty systemu).
W samych plikach stosuje podgrupy np.

button.add => Dodaj
button.delete => Usuń

Przy PHPSTORM taka konwencja mega się sprawdza, nie musisz zaglądać do pliku językowej tylko bez problemu na "czuja" zakodujesz widok.

Problem z konwencją mam już przy konkretnym widoku, powiedzmy formularz z nauczycielem.

Plik modules.php

teacher.title => Dodawanie nauczyciela, // Konwencja na tytuł strony, title, text główny?
teacher.form.name.label' => 'Imię',
teacher.form.name.text' => 'Minimum 2 znaki',
teacher.form.name.placeholder' => 'Proszę wprowadzić imię',

Wygląda w porządku, ale już reusable troszkę kuleje, bo wszystkie labele można by użyć w widoku typu "show" czyli profilu nauczyciela.
  1. <span>{{ __('teacher.form.name.label') }}</span>: {{ $teacher->name }}

Troszkę to nie pasuje bo to nie formularz, znowu przejrzyściej byłoby dla mnie:
  1. <span>{{ __('teacher.name') }}</span>: {{ $teacher->name }}

Wtedy, bez zaglądania w pliki wiem na 99% co jest pod tym tłumaczeniem.

teacher.name i opcjonalne teacher.name.placeholder nie wchodzi w grę, tak właśnie robiłem i teraz żałuje (patrz wyżej).
Ewentualnie teacher.name-placeholder lub name_placeholder. Jaki widzicie w ogóle _ - w nazwach? _ staram się używać wyłącznie jako spacja (dwu wyrazowe zmienne), nigdy w innym celu.

Macie jakieś swoje przemyślenia, może swoje koncepcje? Na stacku nic nie znalazłem, jest dużo o konwencjach nazewnictwa zmiennych, klas czy plików, ale kluczy w plikach językowych nie.

Ten post edytował markonix 14.10.2018, 15:02:29


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 14.10.2018, 15:19:15
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Zawsze można pisać coś w stylu `__('Nauczyciel');` a potem tylko zrobić translacje do języka innego niż PL dzięki temu masz gotowy fallback po polsku a jeśli jest tłumaczenie EN to je zastosuje.
Go to the top of the page
+Quote Post
markonix
post 14.10.2018, 16:00:27
Post #3





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Wiem ale nie lubię takiego podejścia:
1) pliki językowe mniej czytelnie (json brak komentarzy, bloków itp).
2) nie motywuje do uzupełniania plików językowych
3) storm nic tu nie pomoże
4) biblioteki nie obsługują takich tłumaczeń (bo faktycznie to trudniejsze)
5) wszystko musi być w jednym pliku
6) mniej wygodne np. lubię takie konstrukcje: <button>{{ __('system.button.'. $teacher ? 'edit' : 'create') }}
7) PL w kodzie
8) Jedna mała zmiana (literka, kropka) spowoduje z automatu konieczność edycji wszystkich plików językowych

Ten post edytował markonix 14.10.2018, 16:01:31


--------------------
Go to the top of the page
+Quote Post
kayman
post 14.10.2018, 20:36:50
Post #4





Grupa: Zarejestrowani
Postów: 556
Pomógł: 40
Dołączył: 20.07.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


mnie najbardzie pasuje takie

  1. class Lang {
  2.  
  3. private static $data = [];
  4. private static $instance;
  5.  
  6. private function __construct() {
  7. $filename = ROOTPATH . 'Langs/' . Session::get('lang') . '.php';
  8. if (file_exists($filename)) {
  9. self::$data = require $filename;
  10. }
  11. }
  12.  
  13. public static function get($key) {
  14. if (!isset(self::$instance)) {
  15. self::$instance = new self();
  16. }
  17. if (isset(self::$data[$key])) {
  18. return self::$data[$key];
  19. }
  20. return $key;
  21. }
  22.  
  23. }


plik langu pl.php

  1. return [
  2. 'Add' => 'Dodaj',
  3. 'Edit' => 'Edytuj',
  4. 'Delete' => 'Usuń'
  5. //......
  6. ];


usage

  1. echo Lang::get('Delete'); // Usuń
  2. echo Lang::get('Deleted'); //Deleted


podobne rozwiązanie stosuje Yii, polega ono na przyjęciu defautowego langu np en, potem już jak nie ma klucza w tablicy wyświetla klucz, jest wyświetla tłumaczenie

wianuszki typu teacher.name.label są chyba trudniejsze do ogarnięcia
Go to the top of the page
+Quote Post
markonix
post 14.10.2018, 22:37:20
Post #5





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Ty podałeś konstrukcję systemów plików, a dokładnie jednego pliku, ja piszę tutaj o konwencji nazewnictwa już w tych plikach.

Kilka inspiracji jakie znalazłem:

https://github.com/CachetHQ/Cachet/blob/2.4...ng/en/forms.php (od razu w tablicy, też czytelne i od razu wymusza odpowiednie indeksy w tablicy)

https://stackoverflow.com/questions/2819690...-language-files - tu dokładnie ten temat ale mało informacji.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 01:59