diff --git a/package-lock.json b/package-lock.json index 1f87bbd55..d6618f1b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "filter-invalid-dom-props": "3.0.1", "hat": "^0.0.3", "i18next": "^24.0.5", - "langs": "^2.0.0", + "langs": "github:Stremio/nodejs-langs", "lodash.debounce": "4.0.8", "lodash.intersection": "4.4.0", "lodash.isequal": "4.5.0", @@ -10263,6 +10263,7 @@ }, "node_modules/langs": { "version": "2.0.0", + "resolved": "git+ssh://git@github.com/Stremio/nodejs-langs.git#584beab4032469f6b76be1d119a0ab25f31f4ab6", "license": "MIT" }, "node_modules/launch-editor": { diff --git a/package.json b/package.json index 8a4665615..f79244edd 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "filter-invalid-dom-props": "3.0.1", "hat": "^0.0.3", "i18next": "^24.0.5", - "langs": "^2.0.0", + "langs": "github:Stremio/nodejs-langs", "lodash.debounce": "4.0.8", "lodash.intersection": "4.4.0", "lodash.isequal": "4.5.0", diff --git a/src/common/index.js b/src/common/index.js index 3690cfae5..da5462f0e 100644 --- a/src/common/index.js +++ b/src/common/index.js @@ -37,6 +37,7 @@ const { withCoreSuspender, useCoreSuspender } = require('./CoreSuspender'); const getVisibleChildrenRange = require('./getVisibleChildrenRange'); const interfaceLanguages = require('./interfaceLanguages.json'); const languageNames = require('./languageNames.json'); +const languages = require('./languages'); const routesRegexp = require('./routesRegexp'); const useAnimationFrame = require('./useAnimationFrame'); const useBinaryState = require('./useBinaryState'); @@ -94,6 +95,7 @@ module.exports = { getVisibleChildrenRange, interfaceLanguages, languageNames, + languages, routesRegexp, useAnimationFrame, useBinaryState, diff --git a/src/common/languages.ts b/src/common/languages.ts new file mode 100644 index 000000000..eea073bc7 --- /dev/null +++ b/src/common/languages.ts @@ -0,0 +1,25 @@ +import langs from 'langs'; + +const all = langs.all().map((lang) => ({ + ...lang, + code: lang['2'], + label: lang.local, + alpha2: lang['1'], + alpha3: [lang['2'], lang['2B'], lang['2T'], lang['3']], + locale: lang['locale'], +})); + +const find = (code: string) => { + return all.find(({ alpha2, alpha3, locale }) => [alpha2, ...alpha3, locale].includes(code)); +}; + +const label = (code: string) => { + const language = find(code); + return language?.label ?? code; +}; + +export { + all, + find, + label, +}; diff --git a/src/routes/Player/AudioMenu/AudioMenu.tsx b/src/routes/Player/AudioMenu/AudioMenu.tsx index 71bdb68ed..93ffa57b1 100644 --- a/src/routes/Player/AudioMenu/AudioMenu.tsx +++ b/src/routes/Player/AudioMenu/AudioMenu.tsx @@ -1,7 +1,7 @@ import React, { MouseEvent, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import classNames from 'classnames'; -import { Button, languageNames } from 'stremio/common'; +import { Button, languages } from 'stremio/common'; import styles from './AudioMenu.less'; type Props = { @@ -41,12 +41,7 @@ const AudioMenu = ({ className, selectedAudioTrackId, audioTracks, onAudioTrackS onClick={onAudioTrackClick} >
- { - typeof languageNames[lang] === 'string' ? - languageNames[lang] - : - lang - } + { languages.label(lang) }
{ selectedAudioTrackId === id ? diff --git a/src/routes/Player/SubtitlesMenu/SubtitlesMenu.js b/src/routes/Player/SubtitlesMenu/SubtitlesMenu.js index 515dc4758..e97cd5bbf 100644 --- a/src/routes/Player/SubtitlesMenu/SubtitlesMenu.js +++ b/src/routes/Player/SubtitlesMenu/SubtitlesMenu.js @@ -3,7 +3,7 @@ const React = require('react'); const PropTypes = require('prop-types'); const classnames = require('classnames'); -const { Button, CONSTANTS, comparatorWithPriorities, languageNames } = require('stremio/common'); +const { Button, CONSTANTS, comparatorWithPriorities, languages } = require('stremio/common'); const DiscreteSelectInput = require('./DiscreteSelectInput'); const styles = require('./styles'); const { t } = require('i18next'); @@ -159,8 +159,8 @@ const SubtitlesMenu = React.memo((props) => { } {subtitlesLanguages.map((lang, index) => ( -