diff --git a/docs/internationalization.md b/docs/internationalization.md
index 3f5b414287..3bfbdecfd4 100644
--- a/docs/internationalization.md
+++ b/docs/internationalization.md
@@ -10,6 +10,7 @@ When adding a new string, do it as follows:
```jsx
// Before
import { Text } from "react-native";
+
Hello World
```
@@ -17,10 +18,94 @@ import { Text } from "react-native";
// After
import { Text } from "react-native";
import { Trans } from "@lingui/macro";
+
Hello World
```
+The `` macro will extract the string and add it to the catalog. It is not really a component, but a macro. Further reading [here](https://lingui.dev/ref/macro.html)
+
+However sometimes you will run into this case:
+```jsx
+// Before
+import { Text } from "react-native";
+
+const text = "Hello World";
+ {text}
+```
+In this case, you cannot use the `useLingui()` hook:
+```jsx
+import { msg } from "@lingui/macro";
+import { useLingui } from "@lingui/react";
+
+const { _ } = useLingui();
+return {text}
+```
+
+If you want to do this outside of a React component, you can use the `t` macro instead (note: this won't react to changes if the locale is switched dynamically within the app):
+```jsx
+import { t } from "@lingui/macro";
+
+const text = t`Hello World`;
+```
+
We can then run `yarn intl:extract` to update the catalog in `src/locale/locales/{locale}/messages.po`. This will add the new string to the catalog.
We can then run `yarn intl:compile` to update the translation files in `src/locale/locales/{locale}/messages.js`. This will add the new string to the translation files.
The configuration for translations is defined in `lingui.config.js`
+So the workflow is as follows:
+1. Wrap messages in Trans macro
+2. Run `yarn intl:extract` command to generate message catalogs
+3. Translate message catalogs (send them to translators usually)
+4. Run `yarn intl:compile` to create runtime catalogs
+5. Load runtime catalog
+6. Enjoy translated app!
+
+### Common pitfalls
+```jsx
+import { msg } from "@lingui/macro";
+import { i18n } from "@lingui/core";
+
+const welcomeMessage = msg`Welcome!`;
+
+// ❌ Bad! This code won't work
+export function Welcome() {
+ const buggyWelcome = useMemo(() => {
+ return i18n._(welcomeMessage);
+ }, []);
+
+ return {buggyWelcome}
;
+}
+
+// ❌ Bad! This code won't work either because the reference to i18n does not change
+export function Welcome() {
+ const { i18n } = useLingui();
+
+ const buggyWelcome = useMemo(() => {
+ return i18n._(welcomeMessage);
+ }, [i18n]);
+
+ return {buggyWelcome}
;
+}
+
+// ✅ Good! `useMemo` has i18n context in the dependency
+export function Welcome() {
+ const linguiCtx = useLingui();
+
+ const welcome = useMemo(() => {
+ return linguiCtx.i18n._(welcomeMessage);
+ }, [linguiCtx]);
+
+ return {welcome}
;
+}
+
+// 🤩 Better! `useMemo` consumes the `_` function from the Lingui context
+export function Welcome() {
+ const { _ } = useLingui();
+
+ const welcome = useMemo(() => {
+ return _(welcomeMessage);
+ }, [_]);
+
+ return {welcome}
;
+}
+```
\ No newline at end of file
diff --git a/src/locale/locales/cs/messages.js b/src/locale/locales/cs/messages.js
index 3975ff70fd..bacef00281 100644
--- a/src/locale/locales/cs/messages.js
+++ b/src/locale/locales/cs/messages.js
@@ -1 +1 @@
-/*eslint-disable*/module.exports={messages:JSON.parse("{}")};
\ No newline at end of file
+/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- end of feed -\",\"m16xKo\":\"Add\",\"AoXl11\":\"Add details to report\",\"HZFm5R\":\"and\",\"iH8pgl\":\"Back\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky is flexible.\",\"odLrdl\":\"Bluesky is open.\",\"/LsWK4\":\"Bluesky is public.\",\"klVoaP\":\"Bluesky.Social\",\"dEgA5A\":\"Cancel\",\"/L45sc\":\"Choose the algorithms that power your experience with custom feeds.\",\"m8j6up\":\"Content Filtering\",\"/PlAsF\":\"Content Languages\",\"6V3Ea3\":\"Copied\",\"Nu4oKW\":\"Description\",\"0gS7M5\":\"Display Name\",\"DPfwMq\":\"Done\",\"XQFMOm\":\"Edit image\",\"bRZ5XW\":\"Edit my profile\",\"Qzj1WT\":\"Finding similar accounts...\",\"5bDfuq\":\"Forgot\",\"6iVTdm\":\"Join the waitlist.\",\"kq2ga7\":\"Leave them all unchecked to see any language.\",\"FuZWua\":\"List Avatar\",\"jl0AFf\":\"Local dev server\",\"8yolS6\":\"Never lose access to your followers and data.\",\"n+HLOP\":\"Other service\",\"y28hnO\":\"Post\",\"AzCucI\":\"Post Languages\",\"lQWbAr\":[\"Report \",[\"collectionName\"]],\"tfDRzk\":\"Save\",\"IUwGEM\":\"Save Changes\",\"4cijjm\":\"Send Report\",\"n1ekoW\":\"Sign In\",\"6Uau97\":\"Skip\",\"aKEHLj\":\"Staging\",\"EDl9kS\":\"Subscribe\",\"WKrUVy\":\"This post has been deleted.\",\"pi8x/S\":\"Translate\",\"Sxm8rQ\":\"Users\",\"3qn29J\":\"Which languages are used in this post?\",\"uawiGa\":\"Which languages would you like to see in your algorithmic feeds?\",\"tCLJ9E\":\"You have no lists.\",\"Oqt/PG\":\"Your posts, likes, and blocks are public. Mutes are private.\"}")};
\ No newline at end of file
diff --git a/src/locale/locales/cs/messages.po b/src/locale/locales/cs/messages.po
index a2e10bc14e..3ac4068253 100644
--- a/src/locale/locales/cs/messages.po
+++ b/src/locale/locales/cs/messages.po
@@ -6,3 +6,200 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: cs\n"
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Plural-Forms: \n"
+
+#: src/view/screens/Profile.tsx:210
+msgid "- end of feed -"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:706
+msgid "Add"
+msgstr ""
+
+#: src/view/com/modals/report/Modal.tsx:191
+msgid "Add details to report"
+msgstr ""
+
+#: src/view/com/notifications/FeedItem.tsx:237
+msgid "and"
+msgstr ""
+
+#: src/view/com/modals/report/InputIssueDetails.tsx:43
+msgid "Back"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:52
+#: src/view/com/auth/SplashScreen.tsx:24
+msgid "Bluesky"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:84
+msgid "Bluesky is flexible."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:73
+msgid "Bluesky is open."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:60
+msgid "Bluesky is public."
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:76
+msgid "Bluesky.Social"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:272
+#: src/view/com/modals/CreateOrEditList.tsx:259
+#: src/view/com/modals/EditProfile.tsx:248
+#: src/view/com/modals/Repost.tsx:71
+#: src/view/com/search/HeaderWithInput.tsx:125
+msgid "Cancel"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:87
+msgid "Choose the algorithms that power your experience with custom feeds."
+msgstr ""
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:40
+msgid "Content Filtering"
+msgstr ""
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:68
+msgid "Content Languages"
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:129
+msgid "Copied"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:197
+msgid "Description"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:179
+msgid "Display Name"
+msgstr ""
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:83
+#: src/view/com/modals/SelfLabel.tsx:154
+#: src/view/screens/PreferencesHomeFeed.tsx:211
+#: src/view/screens/PreferencesThreads.tsx:125
+msgid "Done"
+msgstr ""
+
+#: src/view/com/modals/EditImage.tsx:205
+msgid "Edit image"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:156
+msgid "Edit my profile"
+msgstr ""
+
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:119
+msgid "Finding similar accounts..."
+msgstr ""
+
+#: src/view/com/auth/login/Login.tsx:474
+msgid "Forgot"
+msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:69
+msgid "Join the waitlist."
+msgstr ""
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:76
+msgid "Leave them all unchecked to see any language."
+msgstr ""
+
+#: src/view/com/modals/CreateOrEditList.tsx:173
+msgid "List Avatar"
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:48
+msgid "Local dev server"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:76
+msgid "Never lose access to your followers and data."
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:86
+msgid "Other service"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:315
+msgid "Post"
+msgstr ""
+
+#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:69
+msgid "Post Languages"
+msgstr ""
+
+#: src/view/com/modals/report/Modal.tsx:163
+msgid "Report {collectionName}"
+msgstr ""
+
+#: src/view/com/modals/BirthDateSettings.tsx:91
+#: src/view/com/modals/CreateOrEditList.tsx:244
+msgid "Save"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:231
+msgid "Save Changes"
+msgstr ""
+
+#: src/view/com/modals/report/SendReportButton.tsx:43
+msgid "Send Report"
+msgstr ""
+
+#: src/view/com/auth/SplashScreen.tsx:50
+#: src/view/com/auth/SplashScreen.web.tsx:59
+msgid "Sign In"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:37
+msgid "Skip"
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:60
+msgid "Staging"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:530
+msgid "Subscribe"
+msgstr ""
+
+#: src/view/com/post-thread/PostThreadItem.tsx:176
+msgid "This post has been deleted."
+msgstr ""
+
+#: src/view/com/post-thread/PostThreadItem.tsx:654
+msgid "Translate"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:690
+msgid "Users"
+msgstr ""
+
+#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:72
+msgid "Which languages are used in this post?"
+msgstr ""
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:71
+msgid "Which languages would you like to see in your algorithmic feeds?"
+msgstr ""
+
+#: src/view/com/lists/ListsList.tsx:112
+msgid "You have no lists."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:63
+msgid "Your posts, likes, and blocks are public. Mutes are private."
+msgstr ""
diff --git a/src/locale/locales/en/messages.js b/src/locale/locales/en/messages.js
index 3975ff70fd..bacef00281 100644
--- a/src/locale/locales/en/messages.js
+++ b/src/locale/locales/en/messages.js
@@ -1 +1 @@
-/*eslint-disable*/module.exports={messages:JSON.parse("{}")};
\ No newline at end of file
+/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- end of feed -\",\"m16xKo\":\"Add\",\"AoXl11\":\"Add details to report\",\"HZFm5R\":\"and\",\"iH8pgl\":\"Back\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky is flexible.\",\"odLrdl\":\"Bluesky is open.\",\"/LsWK4\":\"Bluesky is public.\",\"klVoaP\":\"Bluesky.Social\",\"dEgA5A\":\"Cancel\",\"/L45sc\":\"Choose the algorithms that power your experience with custom feeds.\",\"m8j6up\":\"Content Filtering\",\"/PlAsF\":\"Content Languages\",\"6V3Ea3\":\"Copied\",\"Nu4oKW\":\"Description\",\"0gS7M5\":\"Display Name\",\"DPfwMq\":\"Done\",\"XQFMOm\":\"Edit image\",\"bRZ5XW\":\"Edit my profile\",\"Qzj1WT\":\"Finding similar accounts...\",\"5bDfuq\":\"Forgot\",\"6iVTdm\":\"Join the waitlist.\",\"kq2ga7\":\"Leave them all unchecked to see any language.\",\"FuZWua\":\"List Avatar\",\"jl0AFf\":\"Local dev server\",\"8yolS6\":\"Never lose access to your followers and data.\",\"n+HLOP\":\"Other service\",\"y28hnO\":\"Post\",\"AzCucI\":\"Post Languages\",\"lQWbAr\":[\"Report \",[\"collectionName\"]],\"tfDRzk\":\"Save\",\"IUwGEM\":\"Save Changes\",\"4cijjm\":\"Send Report\",\"n1ekoW\":\"Sign In\",\"6Uau97\":\"Skip\",\"aKEHLj\":\"Staging\",\"EDl9kS\":\"Subscribe\",\"WKrUVy\":\"This post has been deleted.\",\"pi8x/S\":\"Translate\",\"Sxm8rQ\":\"Users\",\"3qn29J\":\"Which languages are used in this post?\",\"uawiGa\":\"Which languages would you like to see in your algorithmic feeds?\",\"tCLJ9E\":\"You have no lists.\",\"Oqt/PG\":\"Your posts, likes, and blocks are public. Mutes are private.\"}")};
\ No newline at end of file
diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po
index 7b2a4a23d3..f52c0f0b3c 100644
--- a/src/locale/locales/en/messages.po
+++ b/src/locale/locales/en/messages.po
@@ -6,3 +6,200 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: en\n"
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Plural-Forms: \n"
+
+#: src/view/screens/Profile.tsx:210
+msgid "- end of feed -"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:706
+msgid "Add"
+msgstr ""
+
+#: src/view/com/modals/report/Modal.tsx:191
+msgid "Add details to report"
+msgstr ""
+
+#: src/view/com/notifications/FeedItem.tsx:237
+msgid "and"
+msgstr ""
+
+#: src/view/com/modals/report/InputIssueDetails.tsx:43
+msgid "Back"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:52
+#: src/view/com/auth/SplashScreen.tsx:24
+msgid "Bluesky"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:84
+msgid "Bluesky is flexible."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:73
+msgid "Bluesky is open."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:60
+msgid "Bluesky is public."
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:76
+msgid "Bluesky.Social"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:272
+#: src/view/com/modals/CreateOrEditList.tsx:259
+#: src/view/com/modals/EditProfile.tsx:248
+#: src/view/com/modals/Repost.tsx:71
+#: src/view/com/search/HeaderWithInput.tsx:125
+msgid "Cancel"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:87
+msgid "Choose the algorithms that power your experience with custom feeds."
+msgstr ""
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:40
+msgid "Content Filtering"
+msgstr ""
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:68
+msgid "Content Languages"
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:129
+msgid "Copied"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:197
+msgid "Description"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:179
+msgid "Display Name"
+msgstr ""
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:83
+#: src/view/com/modals/SelfLabel.tsx:154
+#: src/view/screens/PreferencesHomeFeed.tsx:211
+#: src/view/screens/PreferencesThreads.tsx:125
+msgid "Done"
+msgstr ""
+
+#: src/view/com/modals/EditImage.tsx:205
+msgid "Edit image"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:156
+msgid "Edit my profile"
+msgstr ""
+
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:119
+msgid "Finding similar accounts..."
+msgstr ""
+
+#: src/view/com/auth/login/Login.tsx:474
+msgid "Forgot"
+msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:69
+msgid "Join the waitlist."
+msgstr ""
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:76
+msgid "Leave them all unchecked to see any language."
+msgstr ""
+
+#: src/view/com/modals/CreateOrEditList.tsx:173
+msgid "List Avatar"
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:48
+msgid "Local dev server"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:76
+msgid "Never lose access to your followers and data."
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:86
+msgid "Other service"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:315
+msgid "Post"
+msgstr ""
+
+#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:69
+msgid "Post Languages"
+msgstr ""
+
+#: src/view/com/modals/report/Modal.tsx:163
+msgid "Report {collectionName}"
+msgstr ""
+
+#: src/view/com/modals/BirthDateSettings.tsx:91
+#: src/view/com/modals/CreateOrEditList.tsx:244
+msgid "Save"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:231
+msgid "Save Changes"
+msgstr ""
+
+#: src/view/com/modals/report/SendReportButton.tsx:43
+msgid "Send Report"
+msgstr ""
+
+#: src/view/com/auth/SplashScreen.tsx:50
+#: src/view/com/auth/SplashScreen.web.tsx:59
+msgid "Sign In"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:37
+msgid "Skip"
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:60
+msgid "Staging"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:530
+msgid "Subscribe"
+msgstr ""
+
+#: src/view/com/post-thread/PostThreadItem.tsx:176
+msgid "This post has been deleted."
+msgstr ""
+
+#: src/view/com/post-thread/PostThreadItem.tsx:654
+msgid "Translate"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:690
+msgid "Users"
+msgstr ""
+
+#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:72
+msgid "Which languages are used in this post?"
+msgstr ""
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:71
+msgid "Which languages would you like to see in your algorithmic feeds?"
+msgstr ""
+
+#: src/view/com/lists/ListsList.tsx:112
+msgid "You have no lists."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:63
+msgid "Your posts, likes, and blocks are public. Mutes are private."
+msgstr ""
diff --git a/src/locale/locales/fr/messages.js b/src/locale/locales/fr/messages.js
index 3975ff70fd..bacef00281 100644
--- a/src/locale/locales/fr/messages.js
+++ b/src/locale/locales/fr/messages.js
@@ -1 +1 @@
-/*eslint-disable*/module.exports={messages:JSON.parse("{}")};
\ No newline at end of file
+/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- end of feed -\",\"m16xKo\":\"Add\",\"AoXl11\":\"Add details to report\",\"HZFm5R\":\"and\",\"iH8pgl\":\"Back\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky is flexible.\",\"odLrdl\":\"Bluesky is open.\",\"/LsWK4\":\"Bluesky is public.\",\"klVoaP\":\"Bluesky.Social\",\"dEgA5A\":\"Cancel\",\"/L45sc\":\"Choose the algorithms that power your experience with custom feeds.\",\"m8j6up\":\"Content Filtering\",\"/PlAsF\":\"Content Languages\",\"6V3Ea3\":\"Copied\",\"Nu4oKW\":\"Description\",\"0gS7M5\":\"Display Name\",\"DPfwMq\":\"Done\",\"XQFMOm\":\"Edit image\",\"bRZ5XW\":\"Edit my profile\",\"Qzj1WT\":\"Finding similar accounts...\",\"5bDfuq\":\"Forgot\",\"6iVTdm\":\"Join the waitlist.\",\"kq2ga7\":\"Leave them all unchecked to see any language.\",\"FuZWua\":\"List Avatar\",\"jl0AFf\":\"Local dev server\",\"8yolS6\":\"Never lose access to your followers and data.\",\"n+HLOP\":\"Other service\",\"y28hnO\":\"Post\",\"AzCucI\":\"Post Languages\",\"lQWbAr\":[\"Report \",[\"collectionName\"]],\"tfDRzk\":\"Save\",\"IUwGEM\":\"Save Changes\",\"4cijjm\":\"Send Report\",\"n1ekoW\":\"Sign In\",\"6Uau97\":\"Skip\",\"aKEHLj\":\"Staging\",\"EDl9kS\":\"Subscribe\",\"WKrUVy\":\"This post has been deleted.\",\"pi8x/S\":\"Translate\",\"Sxm8rQ\":\"Users\",\"3qn29J\":\"Which languages are used in this post?\",\"uawiGa\":\"Which languages would you like to see in your algorithmic feeds?\",\"tCLJ9E\":\"You have no lists.\",\"Oqt/PG\":\"Your posts, likes, and blocks are public. Mutes are private.\"}")};
\ No newline at end of file
diff --git a/src/locale/locales/fr/messages.po b/src/locale/locales/fr/messages.po
index a78a393031..60dcaaef60 100644
--- a/src/locale/locales/fr/messages.po
+++ b/src/locale/locales/fr/messages.po
@@ -6,3 +6,200 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: fr\n"
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Plural-Forms: \n"
+
+#: src/view/screens/Profile.tsx:210
+msgid "- end of feed -"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:706
+msgid "Add"
+msgstr ""
+
+#: src/view/com/modals/report/Modal.tsx:191
+msgid "Add details to report"
+msgstr ""
+
+#: src/view/com/notifications/FeedItem.tsx:237
+msgid "and"
+msgstr ""
+
+#: src/view/com/modals/report/InputIssueDetails.tsx:43
+msgid "Back"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:52
+#: src/view/com/auth/SplashScreen.tsx:24
+msgid "Bluesky"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:84
+msgid "Bluesky is flexible."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:73
+msgid "Bluesky is open."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:60
+msgid "Bluesky is public."
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:76
+msgid "Bluesky.Social"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:272
+#: src/view/com/modals/CreateOrEditList.tsx:259
+#: src/view/com/modals/EditProfile.tsx:248
+#: src/view/com/modals/Repost.tsx:71
+#: src/view/com/search/HeaderWithInput.tsx:125
+msgid "Cancel"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:87
+msgid "Choose the algorithms that power your experience with custom feeds."
+msgstr ""
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:40
+msgid "Content Filtering"
+msgstr ""
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:68
+msgid "Content Languages"
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:129
+msgid "Copied"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:197
+msgid "Description"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:179
+msgid "Display Name"
+msgstr ""
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:83
+#: src/view/com/modals/SelfLabel.tsx:154
+#: src/view/screens/PreferencesHomeFeed.tsx:211
+#: src/view/screens/PreferencesThreads.tsx:125
+msgid "Done"
+msgstr ""
+
+#: src/view/com/modals/EditImage.tsx:205
+msgid "Edit image"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:156
+msgid "Edit my profile"
+msgstr ""
+
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:119
+msgid "Finding similar accounts..."
+msgstr ""
+
+#: src/view/com/auth/login/Login.tsx:474
+msgid "Forgot"
+msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:69
+msgid "Join the waitlist."
+msgstr ""
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:76
+msgid "Leave them all unchecked to see any language."
+msgstr ""
+
+#: src/view/com/modals/CreateOrEditList.tsx:173
+msgid "List Avatar"
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:48
+msgid "Local dev server"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:76
+msgid "Never lose access to your followers and data."
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:86
+msgid "Other service"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:315
+msgid "Post"
+msgstr ""
+
+#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:69
+msgid "Post Languages"
+msgstr ""
+
+#: src/view/com/modals/report/Modal.tsx:163
+msgid "Report {collectionName}"
+msgstr ""
+
+#: src/view/com/modals/BirthDateSettings.tsx:91
+#: src/view/com/modals/CreateOrEditList.tsx:244
+msgid "Save"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:231
+msgid "Save Changes"
+msgstr ""
+
+#: src/view/com/modals/report/SendReportButton.tsx:43
+msgid "Send Report"
+msgstr ""
+
+#: src/view/com/auth/SplashScreen.tsx:50
+#: src/view/com/auth/SplashScreen.web.tsx:59
+msgid "Sign In"
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:37
+msgid "Skip"
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:60
+msgid "Staging"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:530
+msgid "Subscribe"
+msgstr ""
+
+#: src/view/com/post-thread/PostThreadItem.tsx:176
+msgid "This post has been deleted."
+msgstr ""
+
+#: src/view/com/post-thread/PostThreadItem.tsx:654
+msgid "Translate"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:690
+msgid "Users"
+msgstr ""
+
+#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:72
+msgid "Which languages are used in this post?"
+msgstr ""
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:71
+msgid "Which languages would you like to see in your algorithmic feeds?"
+msgstr ""
+
+#: src/view/com/lists/ListsList.tsx:112
+msgid "You have no lists."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:63
+msgid "Your posts, likes, and blocks are public. Mutes are private."
+msgstr ""