mirror of
https://github.com/samuelthomas2774/nxapi.git
synced 2026-04-22 06:57:14 -05:00
Fix language detection
This commit is contained in:
parent
f94bf1c221
commit
4dc85dace9
19
package-lock.json
generated
19
package-lock.json
generated
|
|
@ -58,7 +58,6 @@
|
|||
"electron": "^21.3.1",
|
||||
"electron-builder": "^23.6.0",
|
||||
"i18next": "^22.4.6",
|
||||
"i18next-browser-languagedetector": "^7.0.1",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2",
|
||||
"react-i18next": "^12.1.1",
|
||||
|
|
@ -2785,15 +2784,6 @@
|
|||
"@babel/runtime": "^7.20.6"
|
||||
}
|
||||
},
|
||||
"node_modules/i18next-browser-languagedetector": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.0.1.tgz",
|
||||
"integrity": "sha512-Pa5kFwaczXJAeHE56CHG2aWzFBMJNUNghf0Pm4SwSrEMps/PTKqW90EYWlIvhuYStf3Sn1K0vw+gH3+TLdkH1g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.19.4"
|
||||
}
|
||||
},
|
||||
"node_modules/iconv-corefoundation": {
|
||||
"version": "1.1.7",
|
||||
"resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz",
|
||||
|
|
@ -6892,15 +6882,6 @@
|
|||
"@babel/runtime": "^7.20.6"
|
||||
}
|
||||
},
|
||||
"i18next-browser-languagedetector": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.0.1.tgz",
|
||||
"integrity": "sha512-Pa5kFwaczXJAeHE56CHG2aWzFBMJNUNghf0Pm4SwSrEMps/PTKqW90EYWlIvhuYStf3Sn1K0vw+gH3+TLdkH1g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.19.4"
|
||||
}
|
||||
},
|
||||
"iconv-corefoundation": {
|
||||
"version": "1.1.7",
|
||||
"resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz",
|
||||
|
|
|
|||
|
|
@ -81,7 +81,6 @@
|
|||
"electron": "^21.3.1",
|
||||
"electron-builder": "^23.6.0",
|
||||
"i18next": "^22.4.6",
|
||||
"i18next-browser-languagedetector": "^7.0.1",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2",
|
||||
"react-i18next": "^12.1.1",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import React, { useCallback, useEffect, useLayoutEffect, useMemo, useState } fro
|
|||
import { ColorSchemeName, I18nManager, LayoutChangeEvent, Platform, StyleProp, StyleSheet, useColorScheme, View, ViewStyle } from 'react-native';
|
||||
import { i18n } from 'i18next';
|
||||
import { I18nextProvider, initReactI18next } from 'react-i18next';
|
||||
import LanguageDetector from 'i18next-browser-languagedetector';
|
||||
import type { User as DiscordUser } from 'discord-rpc';
|
||||
import { ErrorResponse } from '../../api/util.js';
|
||||
import { DiscordPresence } from '../../discord/types.js';
|
||||
|
|
@ -49,10 +48,11 @@ export function Root(props: React.PropsWithChildren<{
|
|||
// @ts-expect-error
|
||||
window.i18n = i18n;
|
||||
|
||||
await i18n
|
||||
.use(LanguageDetector as unknown as typeof import('i18next-browser-languagedetector').default)
|
||||
.use(initReactI18next)
|
||||
.init();
|
||||
i18n.use(initReactI18next);
|
||||
|
||||
await i18n.init({
|
||||
lng: ipc.getLanguage(),
|
||||
});
|
||||
|
||||
await i18n.loadNamespaces('app');
|
||||
if (props.i18nNamespace) await i18n.loadNamespaces(props.i18nNamespace);
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ import { askUserForUri } from './util.js';
|
|||
import { setAppInstance, updateMenuLanguage } from './app-menu.js';
|
||||
import { handleAuthUri } from './na-auth.js';
|
||||
import { CREDITS_NOTICE, GITLAB_URL, LICENCE_NOTICE } from '../../common/constants.js';
|
||||
import createI18n from '../i18n/index.js';
|
||||
import createI18n, { languages } from '../i18n/index.js';
|
||||
|
||||
const debug = createDebug('app:main');
|
||||
|
||||
|
|
@ -131,11 +131,13 @@ export class App {
|
|||
}
|
||||
|
||||
static detectSystemLanguage() {
|
||||
const languages = app.getPreferredSystemLanguages().map(l => l.toLowerCase());
|
||||
const preferred = app.getPreferredSystemLanguages().map(l => l.toLowerCase());
|
||||
const supported = Object.keys(languages).map(l => l.toLowerCase());
|
||||
|
||||
for (const language of languages) {
|
||||
if (supported.some(l => language.startsWith(l) || l.startsWith(language))) return language;
|
||||
debug('prefers %O, supports %O', preferred, supported);
|
||||
|
||||
for (const language of preferred) {
|
||||
if (supported.some(l => language.startsWith(l) || l.startsWith(language))) return language;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ export function setupIpc(appinstance: App, ipcMain: IpcMain) {
|
|||
const t = appinstance.i18n.getFixedT(null, 'menus');
|
||||
|
||||
ipcMain.on('nxapi:browser:getwindowdata', e => e.returnValue = getWindowConfiguration(e.sender));
|
||||
ipcMain.on('nxapi:app:language', e => e.returnValue = appinstance.i18n.resolvedLanguage ?? appinstance.i18n.language);
|
||||
|
||||
let accent_colour = systemPreferences.getAccentColor?.() || undefined;
|
||||
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ const ipc = {
|
|||
registerEventListener: (event: string, listener: (args: any[]) => void) => events.on(event, listener),
|
||||
removeEventListener: (event: string, listener: (args: any[]) => void) => events.removeListener(event, listener),
|
||||
|
||||
getLanguage: () => language,
|
||||
getAccentColour: () => accent_colour,
|
||||
|
||||
platform: process.platform,
|
||||
|
|
@ -89,15 +90,20 @@ const ipc = {
|
|||
|
||||
export type NxapiElectronIpc = typeof ipc;
|
||||
|
||||
ipcRenderer.on('nxapi:app:update-language', (e, l: string) => events.emit('update-language', l));
|
||||
ipcRenderer.on('nxapi:window:refresh', () => events.emit('window:refresh') || location.reload());
|
||||
ipcRenderer.on('nxapi:accounts:shouldrefresh', () => events.emit('update-nintendo-accounts'));
|
||||
ipcRenderer.on('nxapi:discord:shouldrefresh', () => events.emit('update-discord-presence-source'));
|
||||
ipcRenderer.on('nxapi:discord:presence', (e, p: DiscordPresence) => events.emit('update-discord-presence', p));
|
||||
ipcRenderer.on('nxapi:discord:user', (e, u: User) => events.emit('update-discord-user', u));
|
||||
|
||||
let language: string | undefined = invSync('app:language');
|
||||
ipcRenderer.on('nxapi:app:update-language', (event, l: string) => {
|
||||
language = l;
|
||||
events.emit('update-language', l);
|
||||
});
|
||||
|
||||
let accent_colour: string | undefined = invSync('systemPreferences:accent-colour');
|
||||
ipcRenderer.on('nxapi:systemPreferences:accent-colour', (event, c) => {
|
||||
ipcRenderer.on('nxapi:systemPreferences:accent-colour', (event, c: string) => {
|
||||
accent_colour = c;
|
||||
events.emit('systemPreferences:accent-colour', c);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user