Skip to content

Commit 702452f

Browse files
committed
refactor: improve tracks language labels
1 parent cd9fdc5 commit 702452f

File tree

6 files changed

+36
-16
lines changed

6 files changed

+36
-16
lines changed

package-lock.json

+2-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"filter-invalid-dom-props": "3.0.1",
2828
"hat": "^0.0.3",
2929
"i18next": "^24.0.5",
30-
"langs": "^2.0.0",
30+
"langs": "github:Stremio/nodejs-langs",
3131
"lodash.debounce": "4.0.8",
3232
"lodash.intersection": "4.4.0",
3333
"lodash.isequal": "4.5.0",

src/common/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const { withCoreSuspender, useCoreSuspender } = require('./CoreSuspender');
3737
const getVisibleChildrenRange = require('./getVisibleChildrenRange');
3838
const interfaceLanguages = require('./interfaceLanguages.json');
3939
const languageNames = require('./languageNames.json');
40+
const languages = require('./languages');
4041
const routesRegexp = require('./routesRegexp');
4142
const useAnimationFrame = require('./useAnimationFrame');
4243
const useBinaryState = require('./useBinaryState');
@@ -94,6 +95,7 @@ module.exports = {
9495
getVisibleChildrenRange,
9596
interfaceLanguages,
9697
languageNames,
98+
languages,
9799
routesRegexp,
98100
useAnimationFrame,
99101
useBinaryState,

src/common/languages.ts

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import langs from 'langs';
2+
3+
const all = langs.all().map((lang) => ({
4+
...lang,
5+
code: lang['2'],
6+
label: lang.local,
7+
alpha2: lang['1'],
8+
alpha3: [lang['2'], lang['2B'], lang['2T'], lang['3']],
9+
locale: lang['locale'],
10+
}));
11+
12+
const find = (code: string) => {
13+
return all.find(({ alpha2, alpha3, locale }) => [alpha2, ...alpha3, locale].includes(code));
14+
};
15+
16+
const label = (code: string) => {
17+
const language = find(code);
18+
return language?.label ?? code;
19+
};
20+
21+
export {
22+
all,
23+
find,
24+
label,
25+
};

src/routes/Player/AudioMenu/AudioMenu.tsx

+2-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { MouseEvent, useCallback } from 'react';
22
import { useTranslation } from 'react-i18next';
33
import classNames from 'classnames';
4-
import { Button, languageNames } from 'stremio/common';
4+
import { Button, languages } from 'stremio/common';
55
import styles from './AudioMenu.less';
66

77
type Props = {
@@ -41,12 +41,7 @@ const AudioMenu = ({ className, selectedAudioTrackId, audioTracks, onAudioTrackS
4141
onClick={onAudioTrackClick}
4242
>
4343
<div className={styles['label']}>
44-
{
45-
typeof languageNames[lang] === 'string' ?
46-
languageNames[lang]
47-
:
48-
lang
49-
}
44+
{ languages.label(lang) }
5045
</div>
5146
{
5247
selectedAudioTrackId === id ?

src/routes/Player/SubtitlesMenu/SubtitlesMenu.js

+4-7
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
const React = require('react');
44
const PropTypes = require('prop-types');
55
const classnames = require('classnames');
6-
const { Button, CONSTANTS, comparatorWithPriorities, languageNames } = require('stremio/common');
6+
const { Button, CONSTANTS, comparatorWithPriorities, languages } = require('stremio/common');
77
const DiscreteSelectInput = require('./DiscreteSelectInput');
88
const styles = require('./styles');
99
const { t } = require('i18next');
@@ -159,8 +159,8 @@ const SubtitlesMenu = React.memo((props) => {
159159
}
160160
</Button>
161161
{subtitlesLanguages.map((lang, index) => (
162-
<Button key={index} title={typeof languageNames[lang] === 'string' ? languageNames[lang] : lang} className={classnames(styles['language-option'], { 'selected': selectedSubtitlesLanguage === lang })} data-lang={lang} onClick={subtitlesLanguageOnClick}>
163-
<div className={styles['language-label']}>{typeof languageNames[lang] === 'string' ? languageNames[lang] : lang}</div>
162+
<Button key={index} title={languages.label(lang)} className={classnames(styles['language-option'], { 'selected': selectedSubtitlesLanguage === lang })} data-lang={lang} onClick={subtitlesLanguageOnClick}>
163+
<div className={styles['language-label']}>{languages.label(lang)}</div>
164164
{
165165
selectedSubtitlesLanguage === lang ?
166166
<div className={styles['icon']} />
@@ -180,10 +180,7 @@ const SubtitlesMenu = React.memo((props) => {
180180
<Button key={index} title={track.label} className={classnames(styles['variant-option'], { 'selected': props.selectedSubtitlesTrackId === track.id || props.selectedExtraSubtitlesTrackId === track.id })} data-id={track.id} data-origin={track.origin} data-embedded={track.embedded} onClick={subtitlesTrackOnClick}>
181181
<div className={styles['variant-label']}>
182182
{
183-
typeof track.label === 'string' && !track.label.startsWith('http') ?
184-
track.label
185-
:
186-
track.lang
183+
languages.label(!track.label.startsWith('http') ? track.label : track.lang)
187184
}
188185
<div className={styles['variant-origin']}>{t(track.origin)}</div>
189186
</div>

0 commit comments

Comments
 (0)