]> Untitled Git - lemmy-ui.git/commitdiff
Merge branch 'main' into feat/default-to-user-primary-lang
authorSleeplessOne1917 <abias1122@gmail.com>
Sat, 24 Jun 2023 00:53:03 +0000 (00:53 +0000)
committerGitHub <noreply@github.com>
Sat, 24 Jun 2023 00:53:03 +0000 (00:53 +0000)
src/shared/components/comment/comment-form.tsx
src/shared/components/common/markdown-textarea.tsx
src/shared/components/post/post-form.tsx
src/shared/utils/app/index.ts
src/shared/utils/app/user-interface-language.ts [new file with mode: 0644]

index 294960a812d35711983c4e33728189ae74fb7e36..5cce2b5322694fc025ea9a695a2ef37b96ba6937 100644 (file)
@@ -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,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(
@@ -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}
index 97d1d1424d626f87327ea3c2f28beea78fe5fa10..119913d36d0ba62f5f56b6b69b31feb5368d58c0 100644 (file)
@@ -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)
+                    ? Array.of(languageId)
+                    : [0]
                 }
                 siteLanguages={this.props.siteLanguages}
                 onChange={this.handleLanguageChange}
index d2793fa2810e529f2c78e0be0dd8f9c058cec1de..780ea797af2bc8527bb01740706387177138bf16 100644 (file)
@@ -4,6 +4,7 @@ import {
   myAuth,
   myAuthRequired,
 } from "@utils/app";
+import getUserInterfaceLangId from "@utils/app/user-interface-language";
 import {
   capitalizeFirstLetter,
   debounce,
@@ -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
@@ -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}
         />
index 9993ac7230dc18c0c4f6034d1df43df74960d151..f98357d7a9150d6259d617018d894d64bd827142 100644 (file)
@@ -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,
diff --git a/src/shared/utils/app/user-interface-language.ts b/src/shared/utils/app/user-interface-language.ts
new file mode 100644 (file)
index 0000000..707526d
--- /dev/null
@@ -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;
+}