mirror of
https://github.com/LemmyNet/lemmy-ui.git
synced 2024-12-23 11:21:26 +00:00
Merge pull request #1463 from jsit/feat/default-to-user-primary-lang
feat: Default language dropdowns to user's interface language
This commit is contained in:
commit
dd43827d67
6 changed files with 34 additions and 6 deletions
|
@ -1,4 +1,5 @@
|
|||
import { myAuthRequired } from "@utils/app";
|
||||
import getUserInterfaceLangId from "@utils/app/user-interface-language";
|
||||
import { capitalizeFirstLetter } from "@utils/helpers";
|
||||
import { Component } from "inferno";
|
||||
import { T } from "inferno-i18next-dess";
|
||||
|
@ -40,6 +41,8 @@ export class CommentForm extends Component<CommentFormProps, any> {
|
|||
: undefined
|
||||
: undefined;
|
||||
|
||||
const userInterfaceLangId = getUserInterfaceLangId(this.props.allLanguages);
|
||||
|
||||
return (
|
||||
<div
|
||||
className={["comment-form", "mb-3", this.props.containerClass].join(
|
||||
|
@ -49,6 +52,7 @@ export class CommentForm extends Component<CommentFormProps, any> {
|
|||
{UserService.Instance.myUserInfo ? (
|
||||
<MarkdownTextArea
|
||||
initialContent={initialContent}
|
||||
initialLanguageId={userInterfaceLangId}
|
||||
showLanguage
|
||||
buttonTitle={this.buttonTitle}
|
||||
finished={this.props.finished}
|
||||
|
|
|
@ -49,7 +49,7 @@ export class LanguageSelect extends Component<LanguageSelectProps, any> {
|
|||
return this.props.iconVersion ? (
|
||||
this.selectBtn
|
||||
) : (
|
||||
<div className="language-select mb-3">
|
||||
<div className="language-select row mb-3">
|
||||
<label
|
||||
className={classNames(
|
||||
"col-form-label",
|
||||
|
|
|
@ -260,8 +260,12 @@ export class MarkdownTextArea extends Component<
|
|||
<LanguageSelect
|
||||
iconVersion
|
||||
allLanguages={this.props.allLanguages}
|
||||
// Only set the selected language ID if it exists as an option
|
||||
// in the dropdown; otherwise, set it to 0 (Undetermined)
|
||||
selectedLanguageIds={
|
||||
languageId ? Array.of(languageId) : undefined
|
||||
languageId && this.props.siteLanguages.includes(languageId)
|
||||
? [languageId]
|
||||
: [0]
|
||||
}
|
||||
siteLanguages={this.props.siteLanguages}
|
||||
onChange={this.handleLanguageChange}
|
||||
|
|
|
@ -4,6 +4,7 @@ import {
|
|||
myAuth,
|
||||
myAuthRequired,
|
||||
} from "@utils/app";
|
||||
import getUserInterfaceLangId from "@utils/app/user-interface-language";
|
||||
import {
|
||||
capitalizeFirstLetter,
|
||||
debounce,
|
||||
|
@ -323,11 +324,10 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
|||
}
|
||||
|
||||
render() {
|
||||
const firstLang = this.state.form.language_id;
|
||||
const selectedLangs = firstLang ? Array.of(firstLang) : undefined;
|
||||
|
||||
const url = this.state.form.url;
|
||||
|
||||
const userInterfaceLangId = getUserInterfaceLangId(this.props.allLanguages);
|
||||
|
||||
return (
|
||||
<form className="post-form" onSubmit={linkEvent(this, handlePostSubmit)}>
|
||||
<NavigationPrompt
|
||||
|
@ -494,8 +494,8 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
|||
</div>
|
||||
<LanguageSelect
|
||||
allLanguages={this.props.allLanguages}
|
||||
selectedLanguageIds={[userInterfaceLangId]}
|
||||
siteLanguages={this.props.siteLanguages}
|
||||
selectedLanguageIds={selectedLangs}
|
||||
multiple={false}
|
||||
onChange={this.handleLanguageChange}
|
||||
/>
|
||||
|
|
|
@ -53,6 +53,7 @@ import showScores from "./show-scores";
|
|||
import siteBannerCss from "./site-banner-css";
|
||||
import updateCommunityBlock from "./update-community-block";
|
||||
import updatePersonBlock from "./update-person-block";
|
||||
import getUserInterfaceLangId from "./user-interface-language";
|
||||
|
||||
export {
|
||||
buildCommentsTree,
|
||||
|
@ -87,6 +88,7 @@ export {
|
|||
getIdFromProps,
|
||||
getRecipientIdFromProps,
|
||||
getUpdatedSearchId,
|
||||
getUserInterfaceLangId,
|
||||
initializeSite,
|
||||
insertCommentIntoTree,
|
||||
isAuthPath,
|
||||
|
|
18
src/shared/utils/app/user-interface-language.ts
Normal file
18
src/shared/utils/app/user-interface-language.ts
Normal file
|
@ -0,0 +1,18 @@
|
|||
import { Language } from "lemmy-js-client";
|
||||
import { I18NextService } from "../../services/I18NextService";
|
||||
|
||||
export default function getUserInterfaceLangId(
|
||||
allLanguages: Language[]
|
||||
): number {
|
||||
// Get the string of the browser- or user-defined language, like en-US
|
||||
const i18nLang = I18NextService.i18n.language;
|
||||
|
||||
// Find the Language object with a code that matches the initial characters of
|
||||
// this string
|
||||
const userLang = allLanguages.find(lang => {
|
||||
return i18nLang.indexOf(lang.code) === 0;
|
||||
});
|
||||
|
||||
// Return the ID of that language object, or "0" for Undetermined
|
||||
return userLang?.id || 0;
|
||||
}
|
Loading…
Reference in a new issue