Skip to content

Commit bb6da71

Browse files
committed
feat: возможность переключения языка интерфейса
1 parent 08226eb commit bb6da71

File tree

6 files changed

+20
-2
lines changed

6 files changed

+20
-2
lines changed

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ <h1 id="main-title" class="display-3 mb-0">RSS агрегатор</h1>
124124
class="form-label visually-hidden">Выбор языка</label>
125125
<select class="form-select form-select-sm" id="languageSelectFooter"
126126
aria-label="Выбор языка">
127-
<option value="ru" selected>Русский</option>
127+
<option value="ru">Русский</option>
128128
<option value="en">English</option>
129129
</select>
130130
</div>

src/js/main.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export const initApp = () => {
99
const form = document.querySelector("#rss-form");
1010
const postsContainer = document.querySelector(".posts");
1111
const closeModalBtns = document.querySelectorAll('[data-bs-dismiss="modal"]');
12+
const langSwitcher = document.querySelector("#languageSelectFooter");
1213

1314
input.addEventListener("input", (e) => {
1415
model.form.updateInputValue(e.target.value);
@@ -37,4 +38,8 @@ export const initApp = () => {
3738
model.post.setActive(null);
3839
});
3940
});
41+
42+
langSwitcher.addEventListener('change', (e) => {
43+
model.lng.handle(e.target.value);
44+
})
4045
};

src/js/model/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ import * as form from "./form.js";
33
import * as feed from "./feed.js";
44
import * as post from "./post.js";
55
import * as error from "./error.js";
6+
import * as lng from "./lng.js";
67

78
export const model = {
89
form,
910
feed,
1011
post,
1112
update,
1213
error,
14+
lng
1315
};

src/js/model/lng.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import state from "../state.js";
2+
3+
export const handle = (value) => {
4+
state.ui.lng = value;
5+
};

src/js/state.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import onChange from "on-change";
2+
import i18next from "../i18n.js";
23
import { view } from "./view/index.js";
34
import { model } from "./model/index.js";
45

@@ -13,6 +14,7 @@ const createState = () => {
1314
posts: [],
1415
activeItem: null,
1516
ui: {
17+
lng: "ru",
1618
status: null, // 'error', 'success', 'pending'
1719
error: null,
1820
},
@@ -48,6 +50,10 @@ const createState = () => {
4850
view.ui.renderUi("error", value);
4951
}
5052
break;
53+
case "ui.lng":
54+
i18next.changeLanguage(state.ui.lng);
55+
view.ui.renderUIText();
56+
break;
5157
}
5258
});
5359
};

src/locales/en.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export default {
22
translation: {
3-
title: "RSS aggregator",
3+
title: "RSS agregator",
44
subtitle: "Start reading RSS today! It's easy, it's beautiful.",
55
form_placeholder: "RSS Link",
66
add_btn: "Add",

0 commit comments

Comments
 (0)