diff --git a/src/css/main.scss b/src/css/main.scss
index 67bbdd3..b91cc84 100644
--- a/src/css/main.scss
+++ b/src/css/main.scss
@@ -673,3 +673,8 @@ body.has-modal #main {
}
}
}
+
+.hero-foot .dropdown-trigger .icon {
+ margin-left: -5px;
+ line-height: 0.45rem;
+}
diff --git a/src/js/components/App.vue b/src/js/components/App.vue
index e58e401..96a039e 100644
--- a/src/js/components/App.vue
+++ b/src/js/components/App.vue
@@ -28,7 +28,7 @@
-
+
@@ -138,9 +138,12 @@
This website is not affiliated with Nintendo.
All product names, logos, and brands are property of their respective owners.
+ –
About
–
Twitter
+ –
+
@@ -181,6 +184,7 @@ export default {
data() {
return {
actualSelectedRegionKey: null,
+ actualSelectedLanguageKey: null,
now: null,
splatnet: {
schedules: null,
@@ -194,6 +198,13 @@ export default {
language: null,
};
},
+ watch: {
+ language(value) {
+ if (value)
+ this.loadLocale(value);
+ this.$i18n.set(value || 'en');
+ },
+ },
computed: {
loading() { return !this.splatnet.schedules; },
@@ -209,6 +220,22 @@ export default {
set(value) { this.setRegion(value); },
},
+ // Selected langauge
+ languages() {
+ return regions.languages
+ .reduce((languages, languageInfo) => {
+ // Remove duplicates
+ if (!languages.find(li => li.language == languageInfo.language))
+ languages.push(languageInfo)
+ return languages;
+ }, [])
+ .map(({ language, name }) => ({ key: language, name }));
+ },
+ selectedLanguageKey: {
+ get() { return this.language; },
+ set(value) { this.setLanguage(value); },
+ },
+
// Normal battles
regular() { return !this.loading && this.splatnet.schedules.regular.filter(this.filterEndTime) },
ranked() { return !this.loading && this.splatnet.schedules.gachi.filter(this.filterEndTime) },
@@ -279,6 +306,7 @@ export default {
created() {
this.loadLanguage();
this.loadRegion(true);
+ window.addEventListener('storage', this.loadLanguage);
window.addEventListener('storage', this.loadRegion);
this.updateNow();
@@ -293,14 +321,21 @@ export default {
beforeDestroy() {
clearInterval(this.updateNowTimer);
clearInterval(this.updateDataTimer);
+ window.removeEventListener('storage', this.loadLanguage);
window.removeEventListener('storage', this.loadRegion);
},
methods: {
...mapActions(['loadLocale']),
loadLanguage() {
- this.language = regions.detectSplatoonLanguage();
- this.loadLocale(this.language);
- this.$i18n.set(this.language || 'en');
+ let language = localStorage.getItem('selected-language');
+ let languageInfo = regions.languages.find(li => li.language === language);
+ if (!languageInfo)
+ language = regions.detectSplatoonLanguage();
+ this.language = language;
+ },
+ setLanguage(key) {
+ this.language = key;
+ localStorage.setItem('selected-language', key);
},
loadRegion(autoDetect = false) {
// Get the previously-selected region from local storage
diff --git a/src/js/components/Dropdown.vue b/src/js/components/Dropdown.vue
index 9538599..bfe3119 100644
--- a/src/js/components/Dropdown.vue
+++ b/src/js/components/Dropdown.vue
@@ -1,15 +1,21 @@
-