Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Default language dropdowns to user's interface language #1463

Merged
merged 12 commits into from
Jun 24, 2023
Merged
9 changes: 9 additions & 0 deletions src/shared/components/comment/comment-form.tsx
Original file line number Diff line number Diff line change
@@ -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";
Expand Down Expand Up @@ -40,6 +41,13 @@ export class CommentForm extends Component<CommentFormProps, any> {
: undefined
: undefined;

const userInterfaceLangId = !UserService.Instance.myUserInfo
? 0
: getUserInterfaceLangId({
myUserInfo: UserService.Instance.myUserInfo,
allLanguages: this.props.allLanguages,
});

return (
<div
className={["comment-form", "mb-3", this.props.containerClass].join(
Expand All @@ -49,6 +57,7 @@ export class CommentForm extends Component<CommentFormProps, any> {
{UserService.Instance.myUserInfo ? (
<MarkdownTextArea
initialContent={initialContent}
initialLanguageId={userInterfaceLangId}
showLanguage
buttonTitle={this.buttonTitle}
finished={this.props.finished}
Expand Down
6 changes: 5 additions & 1 deletion src/shared/components/common/markdown-textarea.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down
13 changes: 9 additions & 4 deletions src/shared/components/post/post-form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
myAuth,
myAuthRequired,
} from "@utils/app";
import getUserInterfaceLangId from "@utils/app/user-interface-language";
import {
capitalizeFirstLetter,
debounce,
Expand Down Expand Up @@ -323,11 +324,15 @@ 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 = !UserService.Instance.myUserInfo
? 0
: getUserInterfaceLangId({
myUserInfo: UserService.Instance.myUserInfo,
allLanguages: this.props.allLanguages,
});

return (
<form className="post-form" onSubmit={linkEvent(this, handlePostSubmit)}>
<NavigationPrompt
Expand Down Expand Up @@ -494,8 +499,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}
/>
Expand Down
2 changes: 2 additions & 0 deletions src/shared/utils/app/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -87,6 +88,7 @@ export {
getIdFromProps,
getRecipientIdFromProps,
getUpdatedSearchId,
getUserInterfaceLangId,
initializeSite,
insertCommentIntoTree,
isAuthPath,
Expand Down
22 changes: 22 additions & 0 deletions src/shared/utils/app/user-interface-language.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { Language, MyUserInfo } from "lemmy-js-client";
import { I18NextService } from "../../services/I18NextService";

export default function getUserInterfaceLanguageId({
myUserInfo,
allLanguages,
}: {
myUserInfo: MyUserInfo;
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;
}