Prosty i Nowoczesny Framework dla Vue.js
7 godz. 2 min · Vue.js · Full-stack i Programowanie
Wojciech PołowniakSr. Fullstack EngineerW tym projekcie tworzyć będziemy praktyczny projekt - klona Wikipedii! Minipedia pobierze dane z prawdziwego źrodła danych, zewnętrznego API WikiMedia - będzie łudząco podobna do oryginału oraz współdzieliła najważniejsze funkcjonalności, takie jak dostarczanie treści w różnych wersjach językowych, możliwość wyszukiwania artykułów, czy pobieranie najpopularniejszych wpisów dla danego języka. Stworzymy także podstronę wyświetlającą za każdym razem losowy artykuł w danej wersji językowej.Zobaczysz też, jak dokonać migracji ze statycznej strony HTML na Nuxt - oraz jak tworzyć przykładowe komponenty podczas tego procesu.Dzięki temu wszystkiemu, dowiesz się jak wykorzystać nabytą wiedzę w praktyce.
Dzięki Nuxtowi dowiesz się jak optymalizować Twoje strony www z duchem idei progressive enhancement, dostarczając coraz to lepsze doświadczenia dla swoich użytkowników oraz tworząc aplikację napisaną w 100% w JavaScript, która będzie działała nawet wtedy, gdy użytkownik jawnie wyłączy go w przeglądarce! To wszystko za SSR (Server Side Rendering), dzięki któremu treści będą gotowe do konsumpcji już przy wstępnej, pierwszej odpowiedzi z serwera WWW.Oczywiście, ma to swoje implikacje na wydajność naszej aplikacji - sprawiając że Lighthouse czy optymalizacja pod SEO staje się coraz prostsza!
Czymże jest ekosystem danego frameworka bez wsparcia społeczności! Dlatego podczas tego kursu nauczysz się instalować i wykorzystywać różne pluginy i moduły, które zaoszczędzą Ci dużo czasu. Dowiesz się też, jak tworzyć własne moduły - które rozszerzą działanie Twojej aplikacji Nuxt w sposób czysty i zarządzalny.
Nuxt jest frameworkiem w którym pracujemy zarówno po stronie front-endu, jak i back-endu. W związku z czym, stworzymy swoje własne API (bazujące na express.js) które będzie pewnego rodzaju pośrednikiem pomiędzy API WikiMedia oraz Twoją aplikacją internetową.
W tym kursie, dowiesz się także jak tworzyć swoje własne Middleware'y - czyli fragmenty kodu wywoływane pomiędzy przechodzeniem między stronami, czy podczas innych zapytań HTTP.Dodatkowo, zobaczysz jakie narzędzia daje nam Nuxt aby tworzyć progresywne aplikacje internetowe, oferując wsparcie dla takich funkcjonalności jak np. animacje między przejściami pojedynczymi podstronami naszego serwisu.
Tajemnicze i18n - czyli numeronim odpowiadający angielskiemu słowu "internalisation" - odnosi się w kontekście web developmentu do tłumaczenia danych na różne języki. Podczas realizacji projektu Minipedii, nie tylko wykorzystamy standardowe podejście do tłumaczeń stałych elementów naszego interfejsu użytkownika, ale także przetłumaczymy same dane zwracane z API, wykorzystując inną wersję językową w zależności od preferencji użytkownika!
Poznasz też kilka ciekawych pluginów i rozwiązań dotyczących optymalizacji pod SEO - poza faktem, że podejście spełniające intencje użytkownika jest najlepszym, co możemy zrobić - pluginy generujące nam mapę stron automatycznie na podstawie zadeklarowanych przez nas podstron, czy generatory danych jsonld pomogą w pozycjonowaniu Twojej wydajnej aplikacji jeszcze wyżej w hierarchii wyszukiwarek.
Aby móc efektywnie korzystać z tego kursu, powinieneś posiadać średnio zaawansowaną wiedzę z kategorii Front End, z naciskiem na umiejętność posługiwania się JavaScriptem oraz solidne podstawy NodeJS. Konieczna jest znajomość Vue, jako że Nuxt jest frameworkiem korzystającym z niego u swoich podstaw. Jeśli czujesz się dość swobodnie w wyżej wymienionych aspektach web developmentu, ten kurs będzie idealny dla Ciebie.
Więc w tej lekcji zajmiemy się tłumaczeniem naszego Jurija.
Jest to troszkę taka monotonna praca, ale
faktycznie efekty są tego warte, w związku z czym przejdźmy od razu do roboty.
Skończyliśmy na tym, że przygotowaliśmy sobie plik z tłumaczeniami po angielsku.
On tutaj jeszcze nie jest do końca gotowy, ponieważ po pierwsze nie jest to poprawny
Jackson, czyli tutaj, jeśli sobie stworzymy.
Kilka kursorów Shift option bądź control oraz klik zaznaczy nam kilka rzeczy.
I tutaj możemy po prostu na koniec
postawić przecinek i dzięki temu jest to poprawny obiekt.
Jackson nie jest to faktycznie player, ale jest to obiekt skryptowy,
w związku z czym następnie będziemy musieli przetłumaczyć wszystkie klucze.
Ja tutaj się postaram trzymać paska Lukasa, to znaczy będę się
pozbywał spacji z każdej jednej wartości klucza i będę robił większą literę
każdego pojedynczego słowa, w związku z czym może to troszkę zająć.
Ale jeśli faktycznie
skupimy się tylko i wyłącznie na tym, nie będzie z tym problemu.
Natomiast tłumaczenie treści jest to też
bardzo szeroki temat i wymaga pracy wielu osób, a tak naprawdę
jako developerzy niekoniecznie powinniście zajmować się tłumaczeniami.
Warto jest właśnie przekazywać takie pliki tłumaczeń odpowiednim osobom, które po
prostu Wam je przygotują dla różnych wersji językowych.
Odpowiedzialnością developera powinno być
programowanie, a niekoniecznie praca w taki sposób przygotowywanie kluczy.
Być może jeszcze chociaż
różne narzędzia typu CMS powinny rozwiązać takie problemy na zasadzie, że
musicie wejść w jakiś plik, bo ktoś nie ma do tego dostępu.
I widzimy, że całkiem szybko nam się udało to zaktualizować i w związku z czym mamy
teraz taki plus, że będziemy w stanie zmienić tutaj treść tych tłumaczeń
w innych plikach dosyć szybko, więc jeszcze raz Shift alt klik.
Zaznaczamy kilka.
Wiersze.
Kopiujemy czy możemy cały plik skopiować?
Nie ma to znaczenia na tym etapie wklejamy tutaj.
Podmieniamy tylko.
Biegnij do hiszpańskiego i całą resztę możemy sobie przetłumaczyć w trakcie.
Czyli tutaj kopiujemy, przejdziemy sobie do Google Translate.
Kopiujemy język hiszpański.
Tutaj sobie to wkleiłem, żeby nie uciekło.
No i w tym momencie to co wypadałoby zrobić to zaznaczyć sobie wszystkie te.
2 kropki, bo to jest takie miejsce, po którym możemy zrobić jeden kursor w prawo.
Ja tutaj zrobiłem ponownie control D bądź komendę aby zaznaczyć kilka.
Czyli w tym wypadku wszystkie 2 kropki.
I usuwam wszystko do końca linii i wklejam to, co skopiowali śmy sobie z.
Google Translate.
Jeszcze troszkę cofniemy, pozbędziemy się tego jednego, ale nie udało się.
Jeden za dużo.
Udało mi się zaznaczyć dwukropek.
OK.
Teraz usuwamy i wklejamy wszystkie wartości.
Super!
Dodajemy przecinek na końcu zapisujemy i mamy już drugi plik językowy ukończony.
Pozostał jeszcze francuski, więc ponownie kopiujemy.
Wklejamy tutaj, zmieniamy na.
Wręcz.
Francuskiego niestety nie jestem w stanie czytać, więc nawet nie będę próbował.
Aby nie kaleczyć tego pięknego języka
i przejdźmy do francuskiej wersji językowej.
Tutaj możemy ręcznie zmienić wielką.
Z powrotem na wartość z wielkiej litery.
I teraz ponownie.
Wklejamy tutaj wartości.
Potrzebujemy również klucze.
W związku z czym przejdźmy do języka angielskiego.
Tutaj dodajemy przecinek, bo zabrakło.
Skopiuj wszystkie klucze tym razem.
Shift option
w lewo, aby zaznaczyć wszystko do końca bądź page start czy odwrotność dla NDA.
I w tym momencie wracamy do francuskiego.
Wklejamy tutaj wszystkie klucze.
Ponownie zaznaczamy wszystko.
Tutaj jest trochę nauki takiej pracy z kodem tak naprawdę,
ale wydaje mi się, że jest to całkiem przyjazna i przydatna umiejętność.
Na pewno jest przyjaznym edytorem tekstu.
Kopiujemy wszystkie treści.
Tutaj widzę, że może być problem z niektórymi wartościami, ponieważ
w języku francuskim mamy tutaj apostrofy w tych słowach.
Ale zobaczymy.
I po prostu tutaj wklejamy wartość, a to możemy sobie skopiować.
I w tym momencie nie psuje nam się nasz widok.
Wstręt.
I tak naprawdę to powinno być tyle. Możemy to zapisać.
Wszystkie nasze pliki językowe powinny być już zapisane i to co musimy teraz zrobić,
to zaktualizować nasz layout, bo to właśnie w layoucie znajdują się te pola.
W związku z czym jak to zrobić?
To jest ciekawe zadanie.
Jest to dosyć manualna troszkę praca też,
ale myślę, że jeżeli się sprężyć pójdzie nam to całkiem sprawnie.
W takim razie klucz translacji
tutaj sobie to kopiujemy i będziemy na bieżąco poprawiać.
Patch Wąsy, wąsy.
Aha, funkcja do tłumaczeń
zamykanie, więc warto jest właśnie pracować nad tłumaczeniami na samym
początku, ponieważ później im większa jest Wasza aplikacja, tym ciężej będzie je
wprowadzić ze względu na ilość danych, które trzeba przetłumaczyć.
Oczywiście ma się to troszkę inaczej jeśli
pracujemy z API, więc to jest akurat troszkę prostsze.
Natomiast tak czy siak używanie kluczy translacji to jest coś co musimy robić.
Tak czy siak jako developerzy i wstawiać to w odpowiednie miejsca.
Chyba, że mamy faktycznie na tyle szeroki CMS rozbudowany, czyli system zarządzania
treściami, że nie musimy tego po prostu robić.
Niestety nie zawsze tak jest.
Często zdarza się, że developerzy muszą robić tego typu poprawki.
W związku z czym jeżeli Wasz projekt jest na takim dosyć młodym etapie,
to warto jest zwrócić na to uwagę, aby tłumaczyć treści jak najszybciej.
Po prostu będziecie w stanie.
Zanim dokończę całość, to może zobaczmy, czy to w ogóle nam się za aplikowałam.
Czyli zapisaliśmy.
To przejdźmy do Wikipedii, wejdźmy na język francuski
i faktycznie widzimy, że część treści już nam się tłumaczy.
Więc niesamowita sprawa.
Zawsze uwielbiałem właśnie takie sytuacje, gdzie po ciężkiej pracy
widać efekty tego co robiliśmy i widać, że faktycznie było to tego warte.
Oczywiście w naszym przypadku będzie to o tyle problematyczne, że nie będziemy w
stanie przetłumaczyć naszego działania na wszystkie możliwe
języki, których Wikipedia będzie wspierała.
Albo jeżeli będziemy w stanie, to
oczywiście nie chcielibyśmy tego robić tutaj.
Podczas tego kursu.
No ale gdy zaktualizuje nasze API w taki
sposób, aby ono się też tłumaczyło w momencie gdy zmieniamy wersję
językową danej strony, to efekt będzie niesamowite.
Wydaje mi się, że już niewiele nam brakuje, aby ukończyć tworzenie kluczy.
Moglibyśmy zrobić tutaj jakieś max masy i
bądź różnego rodzaju wyrażenia regularne, aby wyłapać te
klucze i je też przekonwertować na odpowiednią formę.
Ale widzę, że faktycznie już kończymy, więc nie ma to większego sensu.
Czasami prościej jest
poświęcić chwilkę na taką w cudzysłowie małpę pracę, bo stworzenie rozwiązania,
które będzie powiedzmy dynamiczne może nam zająć powiedzmy parę godzin, a my jesteśmy
tak naprawdę w stanie przetłumaczyć ten konkretny przypadek w ciągu kilku minut.
Nie sądzę, aby nasz skrypt napisać zająłby aż tak długo jak parę godzin, ale
są takie przypadki, w związku z czym dokończymy to w ten sposób.
Interesującym aspektem jest też to, że oczywiście jak już będziemy mieli
przetłumaczone treści, to możemy to w HTMLu też odpowiednio oznaczyć.
Jest taki atrybut lang w HTML u,
o którym ja też mówię dużo w moim kursie dotyczącym accessibility.
I jest to o tyle istotne, że Google czy
inne wyszukiwarki internetowe też również na to zwracają uwagę, ponieważ jest to
dosyć istotna rzecz lokalizacja naszych treści.
Więc dzięki pracy z accessibility, dzięki pracy, którą tutaj wykonujemy na potrzeby
tłumaczenia treści, zyskujemy na wielu frontach.
Nie tylko bezpośrednia zyskuje na tym użytkownik, co jest tak naprawdę chyba
najważniejszą, wyniesioną z punktu widzenia moralnego, że tak powiem.
Natomiast, ale zyskujemy też my i nasz
projekt, ponieważ Google priorytety daje kontent, który jest dobry dla użytkownika.
Nie, żadne keyword i Word są popularne, były popularne w tym momencie.
Oczywiście się od tego na szczęście
odchodzi, ponieważ spełniały pewne założenia potrzeb użytkowników.
Więc jeśli pracujemy SEO, warto też
po prostu pamiętać o użytkowniku jak o tym, aby on był w centrum, a wtedy zyski
czy to materialne czy moralne przyjdą same.
I chyba jest to ostatni klucz, który powinniśmy tutaj przetłumaczyć.
Języki będziemy tutaj deklarować dynamicznie.
Oczywiście nie wszystko będzie przetłumaczone.
Jeszcze zostało nam
register, które swoją drogą jest stroną martwą, tzn nie przekierowuje do żadnej
podstrony, więc moglibyśmy się tego pozbyć i po zapisaniu.
Mam nadzieję, że wszystko poszło ok.
Troszkę nam to zajęło kilka minut i
przechodząc na wersję francuską tłumaczy się cała nasza lewa kolumna.
Po wejściu na wersję hiszpańską tłumaczy się cała kolumna na język hiszpański.
W związku z czym to, co będziemy robić na następnej lekcji to po pierwsze
dynamiczne generowanie tychże języków oraz dynamiczne tworzenie
treści w odpowiedniej wersji językowej dla naszych dynamicznych podstron.
Czyli tutaj. Jak na przykład wejdziemy na stronę
Janusza Korczaka, to jeżeli będzie ona dostępna np.
po hiszpańsku, to będziemy mieli zarówno
treść w języku hiszpańskim tutaj, jak i w samej treści artykułu.
W związku z czym do zobaczenia w kolejnej lekcji.
To tyle jeśli chodzi o next?
Internalizacji moczu.
Zmiany wprowadzone w lekcji · 10 min
diff --git a/27/minipedia/lang/en-US.js b/27/minipedia/lang/en-US.js
index 4ae3881..6828090 100644
--- a/27/minipedia/lang/en-US.js
+++ b/27/minipedia/lang/en-US.js
@@ -1,32 +1,32 @@
export default {
- welcome: 'Welcome'
- // 'Main page': 'Main page'
- // 'Contents': 'Contents'
- // 'Current events': 'Current events'
- // 'Random article': 'Random article'
- // 'About Wikipedia': 'About Wikipedia'
- // 'Contact us': 'Contact us'
- // 'Donate': 'Donate'
- // 'Contribute': 'Contribute'
- // 'Help': 'Help'
- // 'Learn to edit': 'Learn to edit'
- // 'Community portal': 'Community portal'
- // 'Recent changes': 'Recent changes'
- // 'Upload file': 'Upload file'
- // 'Tools': 'Tools'
- // 'What links here': 'What links here'
- // 'Related changes': 'Related changes'
- // 'Special pages': 'Special pages'
- // 'Permanent link': 'Permanent link'
- // 'Page information': 'Page information'
- // 'Cite this page': 'Cite this page'
- // 'Wikidata item': 'Wikidata item'
- // 'Print/export': 'Print/export'
- // 'Download as PDF': 'Download as PDF'
- // 'Printable version': 'Printable version'
- // 'In other projects': 'In other projects'
- // 'Wikimedia Commons': 'Wikimedia Commons'
- // 'Languages': 'Languages'
- // 'Register': 'Register'
- // 'Login': 'Login'
+ 'Welcome': 'Welcome',
+ 'MainPage': 'Main page',
+ 'Contents': 'Contents',
+ 'CurrentEvents': 'Current events',
+ 'RandomArticle': 'Random article',
+ 'AboutWikipedia': 'About Wikipedia',
+ 'ContactUs': 'Contact us',
+ 'Donate': 'Donate',
+ 'Contribute': 'Contribute',
+ 'Help': 'Help',
+ 'LearnToEdit': 'Learn to edit',
+ 'CommunityPortal': 'Community portal',
+ 'RecentChanges': 'Recent changes',
+ 'UploadFile': 'Upload file',
+ 'Tools': 'Tools',
+ 'WhatLinksHere': 'What links here',
+ 'RelatedChanges': 'Related changes' ,
+ 'SpecialPages': 'Special pages',
+ 'PermanentLink': 'Permanent link',
+ 'PageInformation': 'Page information',
+ 'CiteThisPage': 'Cite this page',
+ 'WikidataItem': 'Wikidata item',
+ 'PrintExport': 'Print/export',
+ 'DownloadAsPDF': 'Download as PDF',
+ 'PrintableVersion': 'Printable version',
+ 'InOtherProjects': 'In other projects',
+ 'WikimediaCommons': 'Wikimedia Commons',
+ 'Languages': 'Languages',
+ 'Register': 'Register',
+ 'Login': 'Login',
}
\ No newline at end of file
diff --git a/27/minipedia/lang/es-ES.js b/27/minipedia/lang/es-ES.js
index c6b5dc1..132a634 100644
--- a/27/minipedia/lang/es-ES.js
+++ b/27/minipedia/lang/es-ES.js
@@ -1,3 +1,32 @@
export default {
- welcome: 'Bienvenido'
+ 'Welcome': 'Bienvenido',
+ 'MainPage': 'Pagina principal',
+ 'Contents': 'Contenido',
+ 'CurrentEvents': 'Eventos actuales',
+ 'RandomArticle': 'Artículo aleatorio',
+ 'AboutWikipedia': 'Acerca de Wikipedia',
+ 'ContactUs': 'Contáctenos',
+ 'Donate': 'Donar',
+ 'Contribute': 'Contribuir',
+ 'Help': 'Ayudar',
+ 'LearnToEdit': 'Aprender a editar',
+ 'CommunityPortal': 'Portal de la comunidad',
+ 'RecentChanges': 'Cambios recientes',
+ 'UploadFile': 'Subir archivo',
+ 'Tools': 'Herramientas',
+ 'WhatLinksHere': '¿Qué enlaces aquí?',
+ 'RelatedChanges': 'Cambios relacionados',
+ 'SpecialPages': 'Paginas especiales',
+ 'PermanentLink': 'Enlace Permanente',
+ 'PageInformation': 'Información de la página',
+ 'CiteThisPage': 'Citar esta página',
+ 'WikidataItem': 'Elemento de Wikidata',
+ 'PrintExport': 'Imprimir / exportar',
+ 'DownloadAsPDF': 'Descargar como PDF',
+ 'PrintableVersion': 'Versión imprimible',
+ 'InOtherProjects': 'En otros proyectos',
+ 'WikimediaCommons': 'Wikimedia Commons',
+ 'Languages': 'Idiomas',
+ 'Register': 'Registrarse',
+ 'Login': 'Acceso',
}
\ No newline at end of file
diff --git a/27/minipedia/lang/fr-FR.js b/27/minipedia/lang/fr-FR.js
index b2eb007..db133b7 100644
--- a/27/minipedia/lang/fr-FR.js
+++ b/27/minipedia/lang/fr-FR.js
@@ -1,3 +1,32 @@
export default {
- welcome: 'Bienvenue'
+ 'Welcome': 'Bienvenue',
+ 'MainPage': 'Page d\'accueil',
+ 'Contents': 'Contenu',
+ 'CurrentEvents': 'Événements actuels',
+ 'RandomArticle': 'Article aléatoire',
+ 'AboutWikipedia': 'À propos de Wikipedia',
+ 'ContactUs': 'Contactez-nous',
+ 'Donate': 'Faire un don',
+ 'Contribute': 'Contribuer',
+ 'Help': 'Aider',
+ 'LearnToEdit': 'Apprenez à modifier',
+ 'CommunityPortal': 'Portail communautaire',
+ 'RecentChanges': 'Changements récents',
+ 'UploadFile': 'Téléverser un fichier',
+ 'Tools': 'Outils',
+ 'WhatLinksHere': 'Quels liens ici',
+ 'RelatedChanges': 'Modifications connexes',
+ 'SpecialPages': 'Pages spéciales',
+ 'PermanentLink': 'Lien permanent',
+ 'PageInformation': 'Informations sur la page',
+ 'CiteThisPage': 'Citer cette page',
+ 'WikidataItem': 'Élément Wikidata',
+ 'PrintExport': 'Imprimer / exporter',
+ 'DownloadAsPDF': 'Télécharger en PDF',
+ 'PrintableVersion': 'Version imprimable',
+ 'InOtherProjects': 'Dans d\'autres projets',
+ 'WikimediaCommons': 'Wikimedia Commons',
+ 'Languages': 'Langues',
+ 'Register': 'S\'inscrire',
+ 'Login': 'Connexion',
}
\ No newline at end of file
diff --git a/27/minipedia/layouts/default.vue b/27/minipedia/layouts/default.vue
index a507266..f7ed024 100644
--- a/27/minipedia/layouts/default.vue
+++ b/27/minipedia/layouts/default.vue
@@ -8,42 +8,42 @@
</a>
</div>
<ul>
- <li><a href="#main-page">Main page</a></li>
- <li><a href="#contents">Contents</a></li>
- <li><a href="#current-events">Current events</a></li>
- <li><a href="#random-article">Random article</a></li>
- <li><a href="#about-wikipedia">About Wikipedia</a></li>
- <li><a href="#contact-us">Contact us</a></li>
- <li><a href="#donate">Donate</a></li>
+ <li><a href="#main-page"> {{ $t('MainPage') }} </a></li>
+ <li><a href="#contents"> {{ $t('Contents') }} </a></li>
+ <li><a href="#current-events"> {{ $t('CurrentEvents') }} </a></li>
+ <li><a href="#random-article"> {{ $t('RandomArticle') }} </a></li>
+ <li><a href="#about-wikipedia"> {{ $t('AboutWikipedia') }} </a></li>
+ <li><a href="#contact-us"> {{ $t('ContactUs') }} </a></li>
+ <li><a href="#donate"> {{ $t('Donate') }} </a></li>
</ul>
- <h3>Contribute</h3>
+ <h3> {{ $t('Contribute') }}</h3>
<ul>
- <li><a href="#help">Help</a></li>
- <li><a href="#learn-to-edit">Learn to edit</a></li>
- <li><a href="#community-portal">Community portal</a></li>
- <li><a href="#recent-changes">Recent changes</a></li>
- <li><a href="#upload-file">Upload file</a></li>
+ <li><a href="#help"> {{ $t('Help') }} </a></li>
+ <li><a href="#learn-to-edit"> {{ $t('LearnToEdit') }} </a></li>
+ <li><a href="#community-portal"> {{ $t('CommunityPortal') }} </a></li>
+ <li><a href="#recent-changes"> {{ $t('RecentChanges') }} </a></li>
+ <li><a href="#upload-file"> {{ $t('UploadFile') }} </a></li>
</ul>
- <h3>Tools</h3>
+ <h3>{{ $t('Tools') }} </h3>
<ul>
- <li><a href="#what-links-here">What links here</a></li>
- <li><a href="#related-changes">Related changes</a></li>
- <li><a href="#special-pages">Special pages</a></li>
- <li><a href="#permanent-link">Permanent link</a></li>
- <li><a href="#page-information">Page information</a></li>
- <li><a href="#cite-this-page">Cite this page</a></li>
- <li><a href="#wikidata-item">Wikidata item</a></li>
+ <li><a href="#what-links-here"> {{ $t('WhatLinksHere') }} </a></li>
+ <li><a href="#related-changes"> {{ $t('RelatedChanges') }} </a></li>
+ <li><a href="#special-pages"> {{ $t('SpecialPages') }} </a></li>
+ <li><a href="#permanent-link"> {{ $t('PermanentLink') }} </a></li>
+ <li><a href="#page-information"> {{ $t('PageInformation') }} </a></li>
+ <li><a href="#cite-this-page"> {{ $t('CiteThisPage') }} </a></li>
+ <li><a href="#wikidata-item"> {{ $t('WikidataItem') }} </a></li>
</ul>
- <h3>Print/export</h3>
+ <h3> {{ $t('PrintExport') }} </h3>
<ul>
- <li><a href="#download-as-pdf">Download as PDF</a></li>
- <li><a href="#printable-version">Printable version</a></li>
+ <li><a href="#download-as-pdf"> {{ $t('DownloadAsPDF') }} </a></li>
+ <li><a href="#printable-version"> {{ $t('PrintableVersion') }}</a></li>
</ul>
- <h3>In other projects</h3>
+ <h3> {{ $t('InOtherProjects') }} </h3>
<ul>
- <li><a href="#wikimedia-commons">Wikimedia Commons</a></li>
+ <li><a href="#wikimedia-commons"> {{ $t('WikimediaCommons') }} </a></li>
</ul>
- <h3>Languages</h3>
+ <h3> {{ $t('Languages') }} </h3>
<ul>
<li><a href="#беларуская">беларуская</a></li>
<li><a href="#čeština">čeština</a></li>
@@ -61,10 +61,10 @@
<header class="banner">
<ul>
<li>
- <NuxtLink to="/register">Register</NuxtLink>
+ <NuxtLink to="/register"> {{ $t('Register') }}</NuxtLink>
</li>
<li>
- <NuxtLink to="/please-login">Login</NuxtLink>
+ <NuxtLink to="/please-login"> {{ $t('Login') }}</NuxtLink>
</li>
</ul>