Ta lekcja jest w bazie eduweb
Zaloguj się kontem z dostępem albo wykup dostęp do bazy, żeby obejrzeć wideo.
Lekcja 32/ 42Lista dostępnych języków
Programiści specjalizujący się w JavaScript już dawno przestali być postrzegani jako tylko i wyłącznie Front-End developerzy. JavaScript po stronie serwera jest już z nami ponad 10 lat za sprawą pierwszych wersji NodeJS.
W świecie gdzie frameworki takie jak React, Angular, Svelte czy VueJS są podstawą tworzenia współczesnych aplikacji internetowych, rozwiązania pozwalające pojedynczemu developerowi stworzenie pełnoprawnej aplikacji zaczęły kiełkować.
Tym właśnie jest NuxtJS - intuicyjny framework dla VueJS, który pozwoli Ci tworzyć zaawansowane konfiguracje Twoich wydajnych aplikacji internetowych, bazując na wiedzy którą już posiadasz z VueJS.
W 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.
Zmiany wprowadzone w lekcji · 21 min
diff --git a/28/minipedia/api/routes/wiki.js b/28/minipedia/api/routes/wiki.js
index c3c4cc9..194cd4a 100644
--- a/28/minipedia/api/routes/wiki.js
+++ b/28/minipedia/api/routes/wiki.js
@@ -56,6 +56,31 @@ router.get('/summary/page/:id', async (req, res) => {
}
});
+router.get('/langlinks/page/:id', async (req, res) => {
+ try {
+ const id = req.params.id;
+ const page = await Wiki.page(id);
+ const content = await page.langlinks();
+ return res.status(200).json(content);
+
+ } catch (e) {
+ console.error(e);
+ return res.status(500).json(e);
+ }
+});
+router.get('/summary/page/:id', async (req, res) => {
+ try {
+ const id = req.params.id;
+ const page = await Wiki.page(id);
+ const content = await page.summary();
+ return res.status(200).json(content);
+
+ } catch (e) {
+ console.error(e);
+ return res.status(500).json(e);
+ }
+});
+
router.get('/mainImage/page/:id', async (req, res) => {
try {
const id = req.params.id;
diff --git a/28/minipedia/lang/en-US.js b/28/minipedia/lang/en-US.js
index 6828090..0490bf6 100644
--- a/28/minipedia/lang/en-US.js
+++ b/28/minipedia/lang/en-US.js
@@ -29,4 +29,5 @@ export default {
'Languages': 'Languages',
'Register': 'Register',
'Login': 'Login',
+ 'Disclaimer': 'From Wikipedia, the free encyclopedia'
}
\ No newline at end of file
diff --git a/28/minipedia/lang/es-ES.js b/28/minipedia/lang/es-ES.js
index 132a634..788f80f 100644
--- a/28/minipedia/lang/es-ES.js
+++ b/28/minipedia/lang/es-ES.js
@@ -29,4 +29,5 @@ export default {
'Languages': 'Idiomas',
'Register': 'Registrarse',
'Login': 'Acceso',
+ 'Disclaimer': 'De Wikipedia, la enciclopedia libre'
}
\ No newline at end of file
diff --git a/28/minipedia/lang/fr-FR.js b/28/minipedia/lang/fr-FR.js
index db133b7..c7a2eda 100644
--- a/28/minipedia/lang/fr-FR.js
+++ b/28/minipedia/lang/fr-FR.js
@@ -29,4 +29,5 @@ export default {
'Languages': 'Langues',
'Register': 'S\'inscrire',
'Login': 'Connexion',
+ 'Disclaimer': 'Un article de Wikipédia, l\'encyclopédie libre'
}
\ No newline at end of file
diff --git a/28/minipedia/layouts/default.vue b/28/minipedia/layouts/default.vue
index f7ed024..a54e515 100644
--- a/28/minipedia/layouts/default.vue
+++ b/28/minipedia/layouts/default.vue
@@ -45,16 +45,9 @@
</ul>
<h3> {{ $t('Languages') }} </h3>
<ul>
- <li><a href="#беларуская">беларуская</a></li>
- <li><a href="#čeština">čeština</a></li>
- <li><a href="#deutsch">deutsch</a></li>
- <li><a href="#kaszëbsczi">kaszëbsczi</a></li>
- <li><a href="#lietuvių">lietuvių</a></li>
- <li><a href="#polski">polski</a></li>
- <li><a href="#русский">русский</a></li>
- <li><a href="#українська">українська</a></li>
- <li><a href="#中文">中文</a></li>
- </ul>
+ <li v-for="lang in languages">
+ <nuxt-link :to="switchLocalePath(lang.lang)"> {{ lang.displayName.nativeName }} </nuxt-link>
+ </li>
</ul>
</nav>
@@ -79,10 +72,10 @@
</template>
<style>
- h1 {
- font-size: 2rem;
- font-weight: normal;
- margin-top: 0;
+ h1 {
+ font-size: 2rem;
+ font-weight: normal;
+ margin-top: 0;
}
h1,
@@ -91,207 +84,964 @@
h4,
h5,
h6 {
- border-bottom: 0.1rem solid var(--border-color)
+ border-bottom: 0.1rem solid var(--border-color)
}
figure {
- margin: 0;
- margin-bottom: 0.5rem;
+ margin: 0;
+ margin-bottom: 0.5rem;
}
figcaption {
- white-space: nowrap;
- font-weight: normal;
- font-size: 0.9em;
+ white-space: nowrap;
+ font-weight: normal;
+ font-size: 0.9em;
}
h2 {
- font-weight: normal;
+ font-weight: normal;
}
.side-navigation h3 {
- font-weight: normal;
- font-size: 1em;
- color: black;
- opacity: 0.6;
+ font-weight: normal;
+ font-size: 1em;
+ color: black;
+ opacity: 0.6;
}
body {
- line-height: 1.6;
- font-size: 0.9rem;
- font-family: sans-serif;
- padding: 0 1rem;
+ line-height: 1.6;
+ font-size: 0.9rem;
+ font-family: sans-serif;
+ padding: 0 1rem;
}
:root {
- --gray: #f6f6f6;
- --border-color: rgb(162, 169, 177);
- --light-blue: #A7D7F9;
+ --gray: #f6f6f6;
+ --border-color: rgb(162, 169, 177);
+ --light-blue: #A7D7F9;
}
.box {
- background: var(--gray);
- padding: 0.1rem;
- border: 0.1rem solid var(--border-color);
+ background: var(--gray);
+ padding: 0.1rem;
+ border: 0.1rem solid var(--border-color);
}
.full-bio {
- max-width: 271px;
- border-collapse: separate;
- border-spacing: 0.5rem;
- float: right;
- margin-left: 1rem;
- margin-bottom: 1rem;
- position: relative;
- font-size: 0.85rem;
+ max-width: 271px;
+ border-collapse: separate;
+ border-spacing: 0.5rem;
+ float: right;
+ margin-left: 1rem;
+ margin-bottom: 1rem;
+ position: relative;
+ font-size: 0.85rem;
}
.full-bio::before {
- position: absolute;
- left: -1.1rem;
- width: 1rem;
- height: 100%;
- background: white;
- z-index: 1;
- content: '';
- display: inline-block;
+ position: absolute;
+ left: -1.1rem;
+ width: 1rem;
+ height: 100%;
+ background: white;
+ z-index: 1;
+ content: '';
+ display: inline-block;
}
.full-bio [colspan="2"] {
- text-align: center;
+ text-align: center;
}
.full-bio td {
- vertical-align: center;
+ vertical-align: center;
}
.full-bio td:first-child {
- font-weight: bold;
+ font-weight: bold;
}
.site-search {
- font-size: 1rem;
- padding: 0.2rem;
- padding-left: 0.5rem;
- width: 15rem;
- border-color: var(--border-color);
- border-style: solid;
- ;
- border-radius: 0.5rem;
- margin-bottom: 0.4rem;
- font-size: 0.9rem;
+ font-size: 1rem;
+ padding: 0.2rem;
+ padding-left: 0.5rem;
+ width: 15rem;
+ border-color: var(--border-color);
+ border-style: solid;
+ ;
+ border-radius: 0.5rem;
+ margin-bottom: 0.4rem;
+ font-size: 0.9rem;
}
.wrapper {
- display: grid;
- grid-template-areas:
- "sidenav banner banner banner"
- "sidenav content content content";
- grid-template-columns: max-content 1fr;
- grid-template-rows: max-content 1fr;
+ display: grid;
+ grid-template-areas:
+ "sidenav banner banner banner"
+ "sidenav content content content";
+ grid-template-columns: max-content 1fr;
+ grid-template-rows: max-content 1fr;
}
.logo {
- grid-area: logo;
+ grid-area: logo;
}
.logo a {
- text-decoration: none !important;
- color: black !important;
+ text-decoration: none !important;
+ color: black !important;
}
.side-navigation {
- grid-area: sidenav;
- padding: 1rem;
+ grid-area: sidenav;
+ padding: 1rem;
}
.content {
- grid-area: content;
- background: white;
- padding: 1rem;
- border: 0.1rem solid var(--light-blue);
- background: white;
+ grid-area: content;
+ background: white;
+ padding: 1rem;
+ border: 0.1rem solid var(--light-blue);
+ background: white;
}
a {
- text-decoration: none;
- color: #0645ad;
+ text-decoration: none;
+ color: #0645ad;
}
ul {
- padding: 0;
- margin: 0;
- list-style-type: none;
+ padding: 0;
+ margin: 0;
+ list-style-type: none;
}
ol {
- padding: 0 2ch;
+ padding: 0 2ch;
}
body {
- background: var(--gray);
+ background: var(--gray);
}
.toc .box {
- display: inline-block;
- grid-template-columns: max-content;
- padding: 0.5rem;
+ display: inline-block;
+ grid-template-columns: max-content;
+ padding: 0.5rem;
}
.toc h2 {
- margin: 0 auto;
- font-weight: bold;
- border: none;
- font-size: 1rem;
- text-align: center;
+ margin: 0 auto;
+ font-weight: bold;
+ border: none;
+ font-size: 1rem;
+ text-align: center;
}
.references {
- column-count: 2;
- column-gap: 2rem;
+ column-count: 2;
+ column-gap: 2rem;
}
.references li {
- margin-bottom: 0.5rem;
+ margin-bottom: 0.5rem;
}
.banner {
- margin-left: auto;
- text-align: right;
+ margin-left: auto;
+ text-align: right;
}
.banner ul {
- display: flex;
- justify-content: flex-end;
- margin-bottom: 1rem;
+ display: flex;
+ justify-content: flex-end;
+ margin-bottom: 1rem;
}
.banner ul li {
- margin-left: 1rem;
+ margin-left: 1rem;
}
.banner input {
- display: inline-block;
+ display: inline-block;
}
.notice {
- display: block;
- margin-bottom: 1.5rem;
+ display: block;
+ margin-bottom: 1.5rem;
}
.logo a {
- display: flex;
- flex-direction: column;
- align-items: center;
- margin-bottom: 2rem;
- text-transform: uppercase;
- font-family: cursive;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin-bottom: 2rem;
+ text-transform: uppercase;
+ font-family: cursive;
}
.logo img {
- width: 7rem;
- margin-bottom: 0.3rem;
+ width: 7rem;
+ margin-bottom: 0.3rem;
}
+
</style>
+<script>
+ export default {
+ middleware: 'wiki-translations',
+ computed: {
+ languages() {
+ return this.$store.state.langlinks
+ .filter(lang => {
+ return ['es', 'fr', 'en'].includes(lang.lang);
+ })
+ .map(lang => {
+ return {
+ ...lang,
+ displayName: this.languageDisplayNames[lang.lang]
+ }
+ })
+ },
+ languageDisplayNames() {
+ return {
+ "ab": {
+ "name": "Abkhaz",
+ "nativeName": "аҧсуа"
+ },
+ "aa": {
+ "name": "Afar",
+ "nativeName": "Afaraf"
+ },
+ "af": {
+ "name": "Afrikaans",
+ "nativeName": "Afrikaans"
+ },
+ "ak": {
+ "name": "Akan",
+ "nativeName": "Akan"
+ },
+ "sq": {
+ "name": "Albanian",
+ "nativeName": "Shqip"
+ },
+ "am": {
+ "name": "Amharic",
+ "nativeName": "አማርኛ"
+ },
+ "ar": {
+ "name": "Arabic",
+ "nativeName": "العربية"
+ },
+ "an": {
+ "name": "Aragonese",
+ "nativeName": "Aragonés"
+ },
+ "hy": {
+ "name": "Armenian",
+ "nativeName": "Հայերեն"
+ },
+ "as": {
+ "name": "Assamese",
+ "nativeName": "অসমীয়া"
+ },
+ "av": {
+ "name": "Avaric",
+ "nativeName": "авар мацӀ, магӀарул мацӀ"
+ },
+ "ae": {
+ "name": "Avestan",
+ "nativeName": "avesta"
+ },
+ "ay": {
+ "name": "Aymara",
+ "nativeName": "aymar aru"
+ },
+ "az": {
+ "name": "Azerbaijani",
+ "nativeName": "azərbaycan dili"
+ },
+ "bm": {
+ "name": "Bambara",
+ "nativeName": "bamanankan"
+ },
+ "ba": {
+ "name": "Bashkir",
+ "nativeName": "башҡорт теле"
+ },
+ "eu": {
+ "name": "Basque",
+ "nativeName": "euskara, euskera"
+ },
+ "be": {
+ "name": "Belarusian",
+ "nativeName": "Беларуская"
+ },
+ "bn": {
+ "name": "Bengali",
+ "nativeName": "বাংলা"
+ },
+ "bh": {
+ "name": "Bihari",
+ "nativeName": "भोजपुरी"
+ },
+ "bi": {
+ "name": "Bislama",
+ "nativeName": "Bislama"
+ },
+ "bs": {
+ "name": "Bosnian",
+ "nativeName": "bosanski jezik"
+ },
+ "br": {
+ "name": "Breton",
+ "nativeName": "brezhoneg"
+ },
+ "bg": {
+ "name": "Bulgarian",
+ "nativeName": "български език"
+ },
+ "my": {
+ "name": "Burmese",
+ "nativeName": "ဗမာစာ"
+ },
+ "ca": {
+ "name": "Catalan; Valencian",
+ "nativeName": "Català"
+ },
+ "ch": {
+ "name": "Chamorro",
+ "nativeName": "Chamoru"
+ },
+ "ce": {
+ "name": "Chechen",
+ "nativeName": "нохчийн мотт"
+ },
+ "ny": {
+ "name": "Chichewa; Chewa; Nyanja",
+ "nativeName": "chiCheŵa, chinyanja"
+ },
+ "zh": {
+ "name": "Chinese",
+ "nativeName": "中文 (Zhōngwén), 汉语, 漢語"
+ },
+ "cv": {
+ "name": "Chuvash",
+ "nativeName": "чӑваш чӗлхи"
+ },
+ "kw": {
+ "name": "Cornish",
+ "nativeName": "Kernewek"
+ },
+ "co": {
+ "name": "Corsican",
+ "nativeName": "corsu, lingua corsa"
+ },
+ "cr": {
+ "name": "Cree",
+ "nativeName": "ᓀᐦᐃᔭᐍᐏᐣ"
+ },
+ "hr": {
+ "name": "Croatian",
+ "nativeName": "hrvatski"
+ },
+ "cs": {
+ "name": "Czech",
+ "nativeName": "česky, čeština"
+ },
+ "da": {
+ "name": "Danish",
+ "nativeName": "dansk"
+ },
+ "dv": {
+ "name": "Divehi; Dhivehi; Maldivian;",
+ "nativeName": "ދިވެހި"
+ },
+ "nl": {
+ "name": "Dutch",
+ "nativeName": "Nederlands, Vlaams"
+ },
+ "en": {
+ "name": "English",
+ "nativeName": "English"
+ },
+ "eo": {
+ "name": "Esperanto",
+ "nativeName": "Esperanto"
+ },
+ "et": {
+ "name": "Estonian",
+ "nativeName": "eesti, eesti keel"
+ },
+ "ee": {
+ "name": "Ewe",
+ "nativeName": "Eʋegbe"
+ },
+ "fo": {
+ "name": "Faroese",
+ "nativeName": "føroyskt"
+ },
+ "fj": {
+ "name": "Fijian",
+ "nativeName": "vosa Vakaviti"
+ },
+ "fi": {
+ "name": "Finnish",
+ "nativeName": "suomi, suomen kieli"
+ },
+ "fr": {
+ "name": "French",
+ "nativeName": "français, langue française"
+ },
+ "ff": {
+ "name": "Fula; Fulah; Pulaar; Pular",
+ "nativeName": "Fulfulde, Pulaar, Pular"
+ },
+ "gl": {
+ "name": "Galician",
+ "nativeName": "Galego"
+ },
+ "ka": {
+ "name": "Georgian",
+ "nativeName": "ქართული"
+ },
+ "de": {
+ "name": "German",
+ "nativeName": "Deutsch"
+ },
+ "el": {
+ "name": "Greek, Modern",
+ "nativeName": "Ελληνικά"
+ },
+ "gn": {
+ "name": "Guaraní",
+ "nativeName": "Avañeẽ"
+ },
+ "gu": {
+ "name": "Gujarati",
+ "nativeName": "ગુજરાતી"
+ },
+ "ht": {
+ "name": "Haitian; Haitian Creole",
+ "nativeName": "Kreyòl ayisyen"
+ },
+ "ha": {
+ "name": "Hausa",
+ "nativeName": "Hausa, هَوُسَ"
+ },
+ "he": {
+ "name": "Hebrew",
+ "nativeName": "עברית"
+ },
+ "iw": {
+ "name": "Hebrew",
+ "nativeName": "עברית"
+ },
+ "hz": {
+ "name": "Herero",
+ "nativeName": "Otjiherero"
+ },
+ "hi": {
+ "name": "Hindi",
+ "nativeName": "हिन्दी, हिंदी"
+ },
+ "ho": {
+ "name": "Hiri Motu",
+ "nativeName": "Hiri Motu"
+ },
+ "hu": {
+ "name": "Hungarian",
+ "nativeName": "Magyar"
+ },
+ "ia": {
+ "name": "Interlingua",
+ "nativeName": "Interlingua"
+ },
+ "id": {
+ "name": "Indonesian",
+ "nativeName": "Bahasa Indonesia"
+ },
+ "ie": {
+ "name": "Interlingue",
+ "nativeName": "Originally called Occidental; then Interlingue after WWII"
+ },
+ "ga": {
+ "name": "Irish",
+ "nativeName": "Gaeilge"
+ },
+ "ig": {
+ "name": "Igbo",
+ "nativeName": "Asụsụ Igbo"
+ },
+ "ik": {
+ "name": "Inupiaq",
+ "nativeName": "Iñupiaq, Iñupiatun"
+ },
+ "io": {
+ "name": "Ido",
+ "nativeName": "Ido"
+ },
+ "is": {
+ "name": "Icelandic",
+ "nativeName": "Íslenska"
+ },
+ "it": {
+ "name": "Italian",
+ "nativeName": "Italiano"
+ },
+ "iu": {
+ "name": "Inuktitut",
+ "nativeName": "ᐃᓄᒃᑎᑐᑦ"
+ },
+ "ja": {
+ "name": "Japanese",
+ "nativeName": "日本語 (にほんご/にっぽんご)"
+ },
+ "jv": {
+ "name": "Javanese",
+ "nativeName": "basa Jawa"
+ },
+ "kl": {
+ "name": "Kalaallisut, Greenlandic",
+ "nativeName": "kalaallisut, kalaallit oqaasii"
+ },
+ "kn": {
+ "name": "Kannada",
+ "nativeName": "ಕನ್ನಡ"
+ },
+ "kr": {
+ "name": "Kanuri",
+ "nativeName": "Kanuri"
+ },
+ "ks": {
+ "name": "Kashmiri",
+ "nativeName": "कश्मीरी, كشميري"
+ },
+ "kk": {
+ "name": "Kazakh",
+ "nativeName": "Қазақ тілі"
+ },
+ "km": {
+ "name": "Khmer",
+ "nativeName": "ភាសាខ្មែរ"
+ },
+ "ki": {
+ "name": "Kikuyu, Gikuyu",
+ "nativeName": "Gĩkũyũ"
+ },
+ "rw": {
+ "name": "Kinyarwanda",
+ "nativeName": "Ikinyarwanda"
+ },
+ "ky": {
+ "name": "Kirghiz, Kyrgyz",
+ "nativeName": "кыргыз тили"
+ },
+ "kv": {
+ "name": "Komi",
+ "nativeName": "коми кыв"
+ },
+ "kg": {
+ "name": "Kongo",
+ "nativeName": "KiKongo"
+ },
+ "ko": {
+ "name": "Korean",
+ "nativeName": "한국어 (韓國語), 조선말 (朝鮮語)"
+ },
+ "ku": {
+ "name": "Kurdish",
+ "nativeName": "Kurdî, كوردی"
+ },
+ "kj": {
+ "name": "Kwanyama, Kuanyama",
+ "nativeName": "Kuanyama"
+ },
+ "la": {
+ "name": "Latin",
+ "nativeName": "latine, lingua latina"
+ },
+ "lb": {
+ "name": "Luxembourgish, Letzeburgesch",
+ "nativeName": "Lëtzebuergesch"
+ },
+ "lg": {
+ "name": "Luganda",
+ "nativeName": "Luganda"
+ },
+ "li": {
+ "name": "Limburgish, Limburgan, Limburger",
+ "nativeName": "Limburgs"
+ },
+ "ln": {
+ "name": "Lingala",
+ "nativeName": "Lingála"
+ },
+ "lo": {
+ "name": "Lao",
+ "nativeName": "ພາສາລາວ"
+ },
+ "lt": {
+ "name": "Lithuanian",
+ "nativeName": "lietuvių kalba"
+ },
+ "lu": {
+ "name": "Luba-Katanga",
+ "nativeName": ""
+ },
+ "lv": {
+ "name": "Latvian",
+ "nativeName": "latviešu valoda"
+ },
+ "gv": {
+ "name": "Manx",
+ "nativeName": "Gaelg, Gailck"
+ },
+ "mk": {
+ "name": "Macedonian",
+ "nativeName": "македонски јазик"
+ },
+ "mg": {
+ "name": "Malagasy",
+ "nativeName": "Malagasy fiteny"
+ },
+ "ms": {
+ "name": "Malay",
+ "nativeName": "bahasa Melayu, بهاس ملايو"
+ },
+ "ml": {
+ "name": "Malayalam",
+ "nativeName": "മലയാളം"
+ },
+ "mt": {
+ "name": "Maltese",
+ "nativeName": "Malti"
+ },
+ "mi": {
+ "name": "Māori",
+ "nativeName": "te reo Māori"
+ },
+ "mr": {
+ "name": "Marathi (Marāṭhī)",
+ "nativeName": "मराठी"
+ },
+ "mh": {
+ "name": "Marshallese",
+ "nativeName": "Kajin M̧ajeļ"
+ },
+ "mn": {
+ "name": "Mongolian",
+ "nativeName": "монгол"
+ },
+ "na": {
+ "name": "Nauru",
+ "nativeName": "Ekakairũ Naoero"
+ },
+ "nv": {
+ "name": "Navajo, Navaho",
+ "nativeName": "Diné bizaad, Dinékʼehǰí"
+ },
+ "nb": {
+ "name": "Norwegian Bokmål",
+ "nativeName": "Norsk bokmål"
+ },
+ "nd": {
+ "name": "North Ndebele",
+ "nativeName": "isiNdebele"
+ },
+ "ne": {
+ "name": "Nepali",
+ "nativeName": "नेपाली"
+ },
+ "ng": {
+ "name": "Ndonga",
+ "nativeName": "Owambo"
+ },
+ "nn": {
+ "name": "Norwegian Nynorsk",
+ "nativeName": "Norsk nynorsk"
+ },
+ "no": {
+ "name": "Norwegian",
+ "nativeName": "Norsk"
+ },
+ "ii": {
+ "name": "Nuosu",
+ "nativeName": "ꆈꌠ꒿ Nuosuhxop"
+ },
+ "nr": {
+ "name": "South Ndebele",
+ "nativeName": "isiNdebele"
+ },
+ "oc": {
+ "name": "Occitan",
+ "nativeName": "Occitan"
+ },
+ "oj": {
+ "name": "Ojibwe, Ojibwa",
+ "nativeName": "ᐊᓂᔑᓈᐯᒧᐎᓐ"
+ },
+ "cu": {
+ "name": "Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic",
+ "nativeName": "ѩзыкъ словѣньскъ"
+ },
+ "om": {
+ "name": "Oromo",
+ "nativeName": "Afaan Oromoo"
+ },
+ "or": {
+ "name": "Oriya",
+ "nativeName": "ଓଡ଼ିଆ"
+ },
+ "os": {
+ "name": "Ossetian, Ossetic",
+ "nativeName": "ирон æвзаг"
+ },
+ "pa": {
+ "name": "Panjabi, Punjabi",
+ "nativeName": "ਪੰਜਾਬੀ, پنجابی"
+ },
+ "pi": {
+ "name": "Pāli",
+ "nativeName": "पाऴि"
+ },
+ "fa": {
+ "name": "Persian",
+ "nativeName": "فارسی"
+ },
+ "pl": {
+ "name": "Polish",
+ "nativeName": "polski"
+ },
+ "ps": {
+ "name": "Pashto, Pushto",
+ "nativeName": "پښتو"
+ },
+ "pt": {
+ "name": "Portuguese",
+ "nativeName": "Português"
+ },
+ "qu": {
+ "name": "Quechua",
+ "nativeName": "Runa Simi, Kichwa"
+ },
+ "rm": {
+ "name": "Romansh",
+ "nativeName": "rumantsch grischun"
+ },
+ "rn": {
+ "name": "Kirundi",
+ "nativeName": "kiRundi"
+ },
+ "ro": {
+ "name": "Romanian, Moldavian, Moldovan",
+ "nativeName": "română"
+ },
+ "ru": {
+ "name": "Russian",
+ "nativeName": "русский язык"
+ },
+ "sa": {
+ "name": "Sanskrit (Saṁskṛta)",
+ "nativeName": "संस्कृतम्"
+ },
+ "sc": {
+ "name": "Sardinian",
+ "nativeName": "sardu"
+ },
+ "sd": {
+ "name": "Sindhi",
+ "nativeName": "सिन्धी, سنڌي، سندھی"
+ },
+ "se": {
+ "name": "Northern Sami",
+ "nativeName": "Davvisámegiella"
+ },
+ "sm": {
+ "name": "Samoan",
+ "nativeName": "gagana faa Samoa"
+ },
+ "sg": {
+ "name": "Sango",
+ "nativeName": "yângâ tî sängö"
+ },
+ "sr": {
+ "name": "Serbian",
+ "nativeName": "српски језик"
+ },
+ "gd": {
+ "name": "Scottish Gaelic; Gaelic",
+ "nativeName": "Gàidhlig"
+ },
+ "sn": {
+ "name": "Shona",
+ "nativeName": "chiShona"
+ },
+ "si": {
+ "name": "Sinhala, Sinhalese",
+ "nativeName": "සිංහල"
+ },
+ "sk": {
+ "name": "Slovak",
+ "nativeName": "slovenčina"
+ },
+ "sl": {
+ "name": "Slovene",
+ "nativeName": "slovenščina"
+ },
+ "so": {
+ "name": "Somali",
+ "nativeName": "Soomaaliga, af Soomaali"
+ },
+ "st": {
+ "name": "Southern Sotho",
+ "nativeName": "Sesotho"
+ },
+ "es": {
+ "name": "Spanish; Castilian",
+ "nativeName": "español, castellano"
+ },
+ "su": {
+ "name": "Sundanese",
+ "nativeName": "Basa Sunda"
+ },
+ "sw": {
+ "name": "Swahili",
+ "nativeName": "Kiswahili"
+ },
+ "ss": {
+ "name": "Swati",
+ "nativeName": "SiSwati"
+ },
+ "sv": {
+ "name": "Swedish",
+ "nativeName": "svenska"
+ },
+ "ta": {
+ "name": "Tamil",
+ "nativeName": "தமிழ்"
+ },
+ "te": {
+ "name": "Telugu",
+ "nativeName": "తెలుగు"
+ },
+ "tg": {
+ "name": "Tajik",
+ "nativeName": "тоҷикӣ, toğikī, تاجیکی"
+ },
+ "th": {
+ "name": "Thai",
+ "nativeName": "ไทย"
+ },
+ "ti": {
+ "name": "Tigrinya",
+ "nativeName": "ትግርኛ"
+ },
+ "bo": {
+ "name": "Tibetan Standard, Tibetan, Central",
+ "nativeName": "བོད་ཡིག"
+ },
+ "tk": {
+ "name": "Turkmen",
+ "nativeName": "Türkmen, Түркмен"
+ },
+ "tl": {
+ "name": "Tagalog",
+ "nativeName": "Wikang Tagalog, ᜏᜒᜃᜅ᜔ ᜆᜄᜎᜓᜄ᜔"
+ },
+ "tn": {
+ "name": "Tswana",
+ "nativeName": "Setswana"
+ },
+ "to": {
+ "name": "Tonga (Tonga Islands)",
+ "nativeName": "faka Tonga"
+ },
+ "tr": {
+ "name": "Turkish",
+ "nativeName": "Türkçe"
+ },
+ "ts": {
+ "name": "Tsonga",
+ "nativeName": "Xitsonga"
+ },
+ "tt": {
+ "name": "Tatar",
+ "nativeName": "татарча, tatarça, تاتارچا"
+ },
+ "tw": {
+ "name": "Twi",
+ "nativeName": "Twi"
+ },
+ "ty": {
+ "name": "Tahitian",
+ "nativeName": "Reo Tahiti"
+ },
+ "ug": {
+ "name": "Uighur, Uyghur",
+ "nativeName": "Uyƣurqə, ئۇيغۇرچە"
+ },
+ "uk": {
+ "name": "Ukrainian",
+ "nativeName": "українська"
+ },
+ "ur": {
+ "name": "Urdu",
+ "nativeName": "اردو"
+ },
+ "uz": {
+ "name": "Uzbek",
+ "nativeName": "zbek, Ўзбек, أۇزبېك"
+ },
+ "ve": {
+ "name": "Venda",
+ "nativeName": "Tshivenḓa"
+ },
+ "vi": {
+ "name": "Vietnamese",
+ "nativeName": "Tiếng Việt"
+ },
+ "vo": {
+ "name": "Volapük",
+ "nativeName": "Volapük"
+ },
+ "wa": {
+ "name": "Walloon",
+ "nativeName": "Walon"
+ },
+ "cy": {
+ "name": "Welsh",
+ "nativeName": "Cymraeg"
+ },
+ "wo": {
+ "name": "Wolof",
+ "nativeName": "Wollof"
+ },
+ "fy": {
+ "name": "Western Frisian",
+ "nativeName": "Frysk"
+ },
+ "xh": {
+ "name": "Xhosa",
+ "nativeName": "isiXhosa"
+ },
+ "yi": {
+ "name": "Yiddish",
+ "nativeName": "ייִדיש"
+ },
+ "yo": {
+ "name": "Yoruba",
+ "nativeName": "Yorùbá"
+ },
+ "za": {
+ "name": "Zhuang, Chuang",
+ "nativeName": "Saɯ cueŋƅ, Saw cuengh"
+ }
+ }
+ }
+ }
+ }
+
+</script>
diff --git a/28/minipedia/middleware/wiki-translations.js b/28/minipedia/middleware/wiki-translations.js
new file mode 100644
index 0000000..69831be
--- /dev/null
+++ b/28/minipedia/middleware/wiki-translations.js
@@ -0,0 +1,15 @@
+export default async function ({ store, route, $axios }) {
+ const path = route.params.id;
+ try {
+ const data = await $axios.$get('/api/wiki/langlinks/page/' + path);
+
+ data.push({
+ lang: 'en',
+ title: null,
+ url: 'https://en.wikipedia.org/w/api.php',
+ })
+ store.commit('setLangLinks', data);
+ } catch (e) {
+ console.error(e);
+ }
+}
diff --git a/28/minipedia/nuxt.config.js b/28/minipedia/nuxt.config.js
index 2fbe808..cd71ecf 100644
--- a/28/minipedia/nuxt.config.js
+++ b/28/minipedia/nuxt.config.js
@@ -69,7 +69,7 @@ module.exports = {
],
lazy: true,
langDir: 'lang/',
- defaultLocale: 'en'
+ fallbackLocale: 'en',
},
basic: {
name: process.env.USERNAME,
diff --git a/28/minipedia/pages/wiki/_id.vue b/28/minipedia/pages/wiki/_id.vue
index 7cfbb56..680e8ec 100644
--- a/28/minipedia/pages/wiki/_id.vue
+++ b/28/minipedia/pages/wiki/_id.vue
@@ -4,7 +4,7 @@
{{ $route.params.id }}
</h1>
- <span class="notice">From Wikipedia, the free encyclopedia</span>
+ <span class="notice"> {{ $t('Disclaimer') }} </span>
<FullInfoBox :content="$store.state.fullInfo.general" />
diff --git a/28/minipedia/store/index.js b/28/minipedia/store/index.js
index 2d8bd21..279a5b1 100644
--- a/28/minipedia/store/index.js
+++ b/28/minipedia/store/index.js
@@ -4,6 +4,7 @@ export const state = () => ({
summary: null,
rawImages: null,
mainImage: null,
+ langlinks: null,
})
export const mutations = {
@@ -22,4 +23,7 @@ export const mutations = {
setMainImage (state, text) {
state.mainImage = text
},
+ setLangLinks (state, text) {
+ state.langlinks = text
+ }
}
\ No newline at end of file13 rozdziałów42 lekcje7h 2min
Dostęp do wszystkich kursów z bazy eduweb za 199 zł/mies.
Cześć! Nazywam się Wojtek i moja obecna rola to Full Stack Engineer - tworzeniem stron zajmuję się już od ponad dziesięciu lat. Jeśli miałbym wskazać moją pasję, to zdecydowanie byłoby to programowanie w technologiach webowych i dalsze szerzenie się wiedzą :)
Możesz kojarzyć mnie z kanału Koduje na Youtube, gdzie stworzyłem ponad 50 darmowych poradników dotyczących różnych zagadnień z Front-Endu, czy jako głównego koordynatora cyklicznych spotkań Meet.js Warszawa. Poza tym jestem też członkiem programu Mozilla TechSpeakers - technologie open-source, ich tworzenie oraz przemowy publiczne również nie są mi obce. Od czasu do czasu prowadzę również indywidualne zajęcia dla osób poszukujących swojej pierwszej pracy jako Front-End developer.
Uwielbiam tematykę dostępności sieci - o której świadomość, zwłaszcza na polskim rynku - jest dosyć znikoma. Interesuję się również IoT oraz VR (❤️) czy Game-Developmentem, również w JavaScript!
Uważam, że nauczanie jest zdecydowanie najlepszą metodą, by poszerzać swoje horyzonty i dalej się rozwijać!
https://koduje.pl