mirror of
https://github.com/qier222/YesPlayMusic.git
synced 2025-02-12 22:20:09 +08:00
feat: save lang to localStorage
This commit is contained in:
parent
91fac552e0
commit
281f9fe0bc
|
@ -9,18 +9,18 @@
|
||||||
/></button-icon>
|
/></button-icon>
|
||||||
</div>
|
</div>
|
||||||
<div class="navigation-links">
|
<div class="navigation-links">
|
||||||
<router-link to="/" :class="{ active: this.$route.name === 'home' }"
|
<router-link to="/" :class="{ active: this.$route.name === 'home' }">{{
|
||||||
>{{ $t('nav.home') }}</router-link
|
$t("nav.home")
|
||||||
>
|
}}</router-link>
|
||||||
<router-link
|
<router-link
|
||||||
to="/explore"
|
to="/explore"
|
||||||
:class="{ active: this.$route.name === 'explore' }"
|
:class="{ active: this.$route.name === 'explore' }"
|
||||||
>{{ $t('nav.explore') }}</router-link
|
>{{ $t("nav.explore") }}</router-link
|
||||||
>
|
>
|
||||||
<router-link
|
<router-link
|
||||||
to="/library"
|
to="/library"
|
||||||
:class="{ active: this.$route.name === 'library' }"
|
:class="{ active: this.$route.name === 'library' }"
|
||||||
>{{ $t('nav.library') }}</router-link
|
>{{ $t("nav.library") }}</router-link
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="right-part">
|
<div class="right-part">
|
||||||
|
@ -42,8 +42,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="locale-changer" @click="changeLang">
|
<div class="locale-changer" @click="changeLang">
|
||||||
<svg-icon icon-class="translation" class="translation"
|
<svg-icon icon-class="translation" class="translation" />
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
@ -55,13 +54,13 @@ import ButtonIcon from "@/components/ButtonIcon.vue";
|
||||||
export default {
|
export default {
|
||||||
name: "Navbar",
|
name: "Navbar",
|
||||||
components: {
|
components: {
|
||||||
ButtonIcon,
|
ButtonIcon
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
inputFocus: false,
|
inputFocus: false,
|
||||||
keywords: "",
|
keywords: "",
|
||||||
langs: ['zh-CN', 'en']
|
langs: ["zh-CN", "en"]
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -71,19 +70,27 @@ export default {
|
||||||
},
|
},
|
||||||
goToSearchPage() {
|
goToSearchPage() {
|
||||||
if (!this.keywords) return;
|
if (!this.keywords) return;
|
||||||
if (this.$route.name === 'search' && this.$route.query.keywords === this.keywords) return;
|
if (
|
||||||
|
this.$route.name === "search" &&
|
||||||
|
this.$route.query.keywords === this.keywords
|
||||||
|
)
|
||||||
|
return;
|
||||||
this.$router.push({
|
this.$router.push({
|
||||||
name: "search",
|
name: "search",
|
||||||
query: { keywords: this.keywords },
|
query: { keywords: this.keywords }
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
changeLang() {
|
changeLang() {
|
||||||
|
let lang = "";
|
||||||
if (this.$i18n.locale === "zh-CN") {
|
if (this.$i18n.locale === "zh-CN") {
|
||||||
return this.$i18n.locale = "en";
|
lang = "en";
|
||||||
|
} else {
|
||||||
|
lang = "zh-CN";
|
||||||
}
|
}
|
||||||
this.$i18n.locale = "zh-CN";
|
this.$i18n.locale = lang;
|
||||||
|
this.$store.commit("changeLang", lang);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -215,6 +222,4 @@ nav {
|
||||||
width: 48px;
|
width: 48px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import Vue from "vue";
|
import Vue from "vue";
|
||||||
import VueI18n from "vue-i18n";
|
import VueI18n from "vue-i18n";
|
||||||
|
import store from "@/store";
|
||||||
|
|
||||||
import en from "./lang/en.js";
|
import en from "./lang/en.js";
|
||||||
import zhCN from "./lang/zh-CN.js";
|
import zhCN from "./lang/zh-CN.js";
|
||||||
|
@ -7,7 +8,7 @@ import zhCN from "./lang/zh-CN.js";
|
||||||
Vue.use(VueI18n);
|
Vue.use(VueI18n);
|
||||||
|
|
||||||
const i18n = new VueI18n({
|
const i18n = new VueI18n({
|
||||||
locale: "en",
|
locale: store.state.settings.lang,
|
||||||
messages: {
|
messages: {
|
||||||
en,
|
en,
|
||||||
"zh-CN": zhCN
|
"zh-CN": zhCN
|
||||||
|
|
|
@ -13,8 +13,7 @@ if (localStorage.getItem("appVersion") === null) {
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vue.use(Vuex);
|
const saveToLocalStorage = store => {
|
||||||
const saveToLocalStorage = (store) => {
|
|
||||||
store.subscribe((mutation, state) => {
|
store.subscribe((mutation, state) => {
|
||||||
// console.log(mutation);
|
// console.log(mutation);
|
||||||
localStorage.setItem("player", JSON.stringify(state.player));
|
localStorage.setItem("player", JSON.stringify(state.player));
|
||||||
|
@ -22,20 +21,28 @@ const saveToLocalStorage = (store) => {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Vue.use(Vuex);
|
||||||
const store = new Vuex.Store({
|
const store = new Vuex.Store({
|
||||||
state: state,
|
state: state,
|
||||||
mutations,
|
mutations,
|
||||||
actions,
|
actions,
|
||||||
plugins: [saveToLocalStorage],
|
plugins: [saveToLocalStorage]
|
||||||
});
|
});
|
||||||
|
|
||||||
store.state.howler = new Howl({
|
store.state.howler = new Howl({
|
||||||
src: [
|
src: [
|
||||||
`https://music.163.com/song/media/outer/url?id=${store.state.player.currentTrack.id}`,
|
`https://music.163.com/song/media/outer/url?id=${store.state.player.currentTrack.id}`
|
||||||
],
|
],
|
||||||
html5: true,
|
html5: true,
|
||||||
format: ["mp3"],
|
format: ["mp3"]
|
||||||
});
|
});
|
||||||
Howler.volume(store.state.player.volume);
|
Howler.volume(store.state.player.volume);
|
||||||
|
|
||||||
|
if ([undefined, null].includes(store.state.settings.lang)) {
|
||||||
|
let lang = "en";
|
||||||
|
if (navigator.language.slice(0, 2) === "zh") lang = "zh-CN";
|
||||||
|
store.state.settings.lang = lang;
|
||||||
|
localStorage.setItem("settings", JSON.stringify(store.state.settings));
|
||||||
|
}
|
||||||
|
|
||||||
export default store;
|
export default store;
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
const initState = {
|
const initState = {
|
||||||
howler: null,
|
howler: null,
|
||||||
liked: {
|
liked: {
|
||||||
songs: [],
|
songs: []
|
||||||
},
|
},
|
||||||
contextMenu: {
|
contextMenu: {
|
||||||
clickObjectID: 0,
|
clickObjectID: 0,
|
||||||
showMenu: false,
|
showMenu: false
|
||||||
},
|
},
|
||||||
player: {
|
player: {
|
||||||
enable: false,
|
enable: false,
|
||||||
|
@ -26,51 +26,51 @@ const initState = {
|
||||||
"https://p1.music.126.net/kHNNN-VxufjlBtyNPIP3kg==/109951165306614548.jpg",
|
"https://p1.music.126.net/kHNNN-VxufjlBtyNPIP3kg==/109951165306614548.jpg",
|
||||||
tns: [],
|
tns: [],
|
||||||
pic_str: "109951165306614548",
|
pic_str: "109951165306614548",
|
||||||
pic: 109951165306614540,
|
pic: 109951165306614540
|
||||||
},
|
},
|
||||||
time: 196022,
|
time: 196022,
|
||||||
playable: true,
|
playable: true
|
||||||
},
|
},
|
||||||
notShuffledList: [],
|
notShuffledList: [],
|
||||||
list: [],
|
list: [],
|
||||||
listInfo: {
|
listInfo: {
|
||||||
type: "",
|
type: "",
|
||||||
id: "",
|
id: ""
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
settings: {
|
settings: {
|
||||||
playlistCategories: [
|
playlistCategories: [
|
||||||
{
|
{
|
||||||
name: "全部",
|
name: "全部",
|
||||||
enable: true,
|
enable: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "推荐歌单",
|
name: "推荐歌单",
|
||||||
enable: true,
|
enable: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "精品歌单",
|
name: "精品歌单",
|
||||||
enable: true,
|
enable: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "官方",
|
name: "官方",
|
||||||
enable: true,
|
enable: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "流行",
|
name: "流行",
|
||||||
enable: true,
|
enable: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "电子",
|
name: "电子",
|
||||||
enable: true,
|
enable: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "摇滚",
|
name: "摇滚",
|
||||||
enable: true,
|
enable: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "ACG",
|
name: "ACG",
|
||||||
enable: true,
|
enable: true
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// name: "最新专辑",
|
// name: "最新专辑",
|
||||||
|
@ -78,13 +78,14 @@ const initState = {
|
||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "排行榜",
|
name: "排行榜",
|
||||||
enable: true,
|
enable: true
|
||||||
},
|
}
|
||||||
],
|
],
|
||||||
user: {
|
user: {
|
||||||
id: 0,
|
id: 0
|
||||||
},
|
},
|
||||||
},
|
lang: null
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export default initState;
|
export default initState;
|
||||||
|
|
|
@ -13,7 +13,7 @@ export default {
|
||||||
state.howler = new Howl({
|
state.howler = new Howl({
|
||||||
src: [mp3],
|
src: [mp3],
|
||||||
autoplay: true,
|
autoplay: true,
|
||||||
html5: true,
|
html5: true
|
||||||
});
|
});
|
||||||
state.howler.play();
|
state.howler.play();
|
||||||
},
|
},
|
||||||
|
@ -28,7 +28,7 @@ export default {
|
||||||
state.player.repeat = status;
|
state.player.repeat = status;
|
||||||
},
|
},
|
||||||
appendTrackToPlayerList(state, { track, playNext = false }) {
|
appendTrackToPlayerList(state, { track, playNext = false }) {
|
||||||
let existTrack = state.player.list.find((t) => t.id === track.id);
|
let existTrack = state.player.list.find(t => t.id === track.id);
|
||||||
if (
|
if (
|
||||||
(existTrack === null || existTrack === undefined) &&
|
(existTrack === null || existTrack === undefined) &&
|
||||||
playNext === false
|
playNext === false
|
||||||
|
@ -38,7 +38,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 把track加入到正在播放歌曲的下一首位置
|
// 把track加入到正在播放歌曲的下一首位置
|
||||||
state.player.list = state.player.list.map((t) => {
|
state.player.list = state.player.list.map(t => {
|
||||||
if (t.sort > state.player.currentTrack.sort) {
|
if (t.sort > state.player.currentTrack.sort) {
|
||||||
t.sort = t.sort + 1;
|
t.sort = t.sort + 1;
|
||||||
}
|
}
|
||||||
|
@ -54,10 +54,10 @@ export default {
|
||||||
state.player.shuffle = true;
|
state.player.shuffle = true;
|
||||||
|
|
||||||
let newSorts = shuffleAList(
|
let newSorts = shuffleAList(
|
||||||
state.player.list.filter((t) => t.sort > state.player.currentTrack.sort)
|
state.player.list.filter(t => t.sort > state.player.currentTrack.sort)
|
||||||
);
|
);
|
||||||
|
|
||||||
state.player.list = state.player.list.map((track) => {
|
state.player.list = state.player.list.map(track => {
|
||||||
if (newSorts[track.id] !== undefined) track.sort = newSorts[track.id];
|
if (newSorts[track.id] !== undefined) track.sort = newSorts[track.id];
|
||||||
return track;
|
return track;
|
||||||
});
|
});
|
||||||
|
@ -68,7 +68,7 @@ export default {
|
||||||
JSON.stringify(state.player.notShuffledList)
|
JSON.stringify(state.player.notShuffledList)
|
||||||
);
|
);
|
||||||
state.player.currentTrack.sort = state.player.list.find(
|
state.player.currentTrack.sort = state.player.list.find(
|
||||||
(t) => t.id === state.player.currentTrack.id
|
t => t.id === state.player.currentTrack.id
|
||||||
).sort;
|
).sort;
|
||||||
},
|
},
|
||||||
shuffleTheListBeforePlay(state) {
|
shuffleTheListBeforePlay(state) {
|
||||||
|
@ -76,7 +76,7 @@ export default {
|
||||||
JSON.stringify(state.player.list)
|
JSON.stringify(state.player.list)
|
||||||
);
|
);
|
||||||
let newSorts = shuffleAList(state.player.list);
|
let newSorts = shuffleAList(state.player.list);
|
||||||
state.player.list = state.player.list.map((track) => {
|
state.player.list = state.player.list.map(track => {
|
||||||
track.sort = newSorts[track.id];
|
track.sort = newSorts[track.id];
|
||||||
return track;
|
return track;
|
||||||
});
|
});
|
||||||
|
@ -91,13 +91,16 @@ export default {
|
||||||
state.liked.songs = trackIDs;
|
state.liked.songs = trackIDs;
|
||||||
},
|
},
|
||||||
switchSortBetweenTwoTracks(state, { trackID1, trackID2 }) {
|
switchSortBetweenTwoTracks(state, { trackID1, trackID2 }) {
|
||||||
let t1 = state.player.list.find((t) => t.id === trackID1);
|
let t1 = state.player.list.find(t => t.id === trackID1);
|
||||||
let t2 = state.player.list.find((t) => t.id === trackID2);
|
let t2 = state.player.list.find(t => t.id === trackID2);
|
||||||
let sorts = [t1.sort, t2.sort];
|
let sorts = [t1.sort, t2.sort];
|
||||||
state.player.list = state.player.list.map((t) => {
|
state.player.list = state.player.list.map(t => {
|
||||||
if (t.id === t1.id) t.sort = sorts[1];
|
if (t.id === t1.id) t.sort = sorts[1];
|
||||||
if (t.id === t2.id) t.sort = sorts[0];
|
if (t.id === t2.id) t.sort = sorts[0];
|
||||||
return t;
|
return t;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
changeLang(state, lang) {
|
||||||
|
state.settings.lang = lang;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user