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

Java - PDF w różnych językach - jak uniknąć redundancji kodu

Object Storage Arubacloud
0 głosów
375 wizyt
pytanie zadane 27 czerwca 2018 w Java przez softkdp Obywatel (1,060 p.)
Witam, mam już kod generujący raport PDF w języku polskim. Potrzebne jest, aby była możliwość zrobienia tego także po angielsku. Udało mi się zrobić tak, żeby tekst nie był hard-coded i to działa, problem jednak z samą strukturą PDFa. Tekst po angielsku często różni się objętościowo od polskiego odpowiednika, przez co nie mieści się w zdefiniowanym dla niego miejscu. Struktura jak to PDF jest zdefiniowana jako mnóstwo pozycji x i y, dlatego ruszanie tego raczej nie ma sensu. Prostym rozwiązaniem byłoby utworzenie osobnej klasy dla wersji angielskiej bo różnic nie ma wiele, jednak 95% kodu to będzie to samo i będzie to chyba niepotrzebne duplikowanie kodu. Czy ktoś poleca jakieś rozwiązanie w tej sytuacji?
komentarz 27 czerwca 2018 przez mbabane Szeryf (79,280 p.)
Z ciekawości, czego używasz do generowania pdf?
1
komentarz 27 czerwca 2018 przez softkdp Obywatel (1,060 p.)
Apache PDFBox

2 odpowiedzi

+2 głosów
odpowiedź 27 czerwca 2018 przez Wiciorny Ekspert (269,710 p.)
Factorry Pattern ... może Ci coś to podpowie wzorzec projektowy, wtedy kod umieścisz w jednej implementacji  a korzystasz dowolnie  podmieniając niektóre funkcjonalności ... np a nie duplikując wszystko 2 razy
komentarz 27 czerwca 2018 przez softkdp Obywatel (1,060 p.)
Ktoś już mi o tym napomknął i trochę czytałem, ale chyba nie do końca rozumiem co masz na myśli. W jakim sensie mogę umieścić kod w jednej implementacji i go podmieniać? Ja zrozumiałem tyle, że do metody fabryki zwracającej instancję jakiejś klasy podam np. parametr, że język angielski i w środku jest if, który zwróci odpowiedni obiekt. Czy w takim wypadku posiadanie mega podobnych klas jest już w porządku?
komentarz 27 czerwca 2018 przez Wiciorny Ekspert (269,710 p.)

no jest w porządku na takiej bazie, że mimo iż wnętrze klasy JEST BARDZO PODOBNE, to klasa X nie jest klasa Y to dwa różne szalbony/ kontenery.

Więc jak najbardziej jest okej, a jesli jakieś funkcjonalności w obu klasach się powtarzają "sa te same i niezmienne, niezależne od klasy" to je wyodrębniasz jako  osobną funkcjonalność i np rozszerzasz w klasach dziedziczących - nie wiem w jakiej wersji JAVA korzystasz ale od 8-smej możesz tworzyc interfejsy funkcjonalne, ew interfejsy mające implementacje metody defaultowe

http://blondynkakoduje.blogspot.com/2016/08/java-8-domyslne-metody-w-interfejsie.html

Co to daje w praktyce?
Plusy:
Możesz napisać domyślną metodę, co może oszczędzić powielenia kodu w klasach implementujących interfejs. Klasa implementująca interfejs nie musi implementować metod, które mają domyślną implementację, ale w przypadkach gdy to potrzebne, można je nadpisać w danej klasie.

+1 głos
odpowiedź 27 czerwca 2018 przez mbabane Szeryf (79,280 p.)

A ResourcesBundle i internacjonalizacja? - polega to na tym że, masz pliki z komunikatami (plik typu klucz-wartość (tzw. "propertisy")), i na podstawie parametru Locale wybiera odpowiedni plik z wiadomościami.

https://docs.oracle.com/javase/8/docs/api/java/util/ResourceBundle.html

https://www.youtube.com/watch?v=WYbjJzP95s8&index=27&t=240s&list=PLpzwMkmxJDUwQuQR7Rezut5UE_8UGDxkU

Podobne pytania

+1 głos
1 odpowiedź 203 wizyt
pytanie zadane 10 marca 2022 w Java przez XavRock Obywatel (1,390 p.)
0 głosów
3 odpowiedzi 1,709 wizyt
pytanie zadane 8 stycznia 2018 w Java przez marcinconn Obywatel (1,560 p.)
+2 głosów
1 odpowiedź 589 wizyt
pytanie zadane 19 września 2020 w HTML i CSS przez manjaro Nałogowiec (37,390 p.)

92,556 zapytań

141,404 odpowiedzi

319,563 komentarzy

61,942 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!

...