Jewelry AI - language and devices
The language you choose is kept by the device that made the choice
The picker is reachable with an account and without one. The selection is written to the phone in your hand, and the language recorded on your account is applied only to a device that has never chosen one for itself.
Where the language row is, before and after signing in
There are two entry points, and they belong to different parts of the app. On the welcome and sign-in screens a globe button sits in the corner and opens the language picker without an account (apps/jewelry-mobile/src/app/(auth)/welcome.tsx, <LanguageButton />). The same button reaches the other sign-in screens through the shared scaffold those screens are built from, so the language can be set before an account exists.
The tabbed screens you reach after signing in do not carry that button. There, the entry point is the language row under Profile, Preferences, which opens the same picker (apps/jewelry-mobile/src/app/(tabs)/profile.tsx, onPress={() => setLangOpen(true)}).
The row is written in the language it points at: the selected language appears under its own name, with its flag. When the app is in automatic mode, the line beneath the name states that it is following the phone, which is the difference between a language you chose and a language you were given.
What the choice is written to
A language change writes to two places, and the two are independent of one another.
- The choice is written to the device you made it on.
- The selection is stored on the phone and is expected to still be in force when the app is opened again (apps/jewelry-mobile/src/i18n/locale-preference.ts, await AsyncStorage.setItem(LOCALE_PREFERENCE_KEY, preference)).
- Automatic occupies the same slot as a named language.
- The device stores a language code, and automatic is stored as a value in its own right. Going back to automatic is not a way of clearing the setting; it is a setting.
- The account holds a copy, and automatic is held there as empty.
- When the preference is automatic, the value sent to the account is no language at all (apps/jewelry-mobile/src/app/_layout.tsx, const desired = preference === 'system' ? null : preference). An account with no language leaves each device to its own phone.
- Nothing in this flow consults the store country.
- The storefront or country your account purchases through is not read as a language source here. Only the device choice and the account copy take part.
What a second device does with the language
The rule that runs at sign-in is asymmetric. Which half applies depends on whether the device has ever had a choice of its own.
| Situation | Choose | Why |
|---|---|---|
| You sign in on a new phone and have never opened the picker on it. | Expect the account's language, not the phone's. | A device with no stored choice is given the language recorded on the account at sign-in, so the app can open in a language the phone is not set to (apps/jewelry-mobile/src/app/_layout.tsx, if (!preferenceStored && user.preferredLocale) {). |
| You picked a language on the new phone before signing in. | Expect that choice to stay, and to become the account's. | A device that has already chosen keeps its choice, and the choice is written to the account rather than replaced by it. |
| You want each device to follow the phone it runs on. | Set the row to automatic on every one of them. | Automatic is stored on the account as no language, so there is nothing for a further device to inherit. |
| You changed the language on one device and the other did not change with it. | Treat the second device as a separate case. | The choice lives on the device that made it. The account copy is consulted only by a device that has no choice of its own. |
When one of the two writes does not complete
The device write and the account write fail in different ways, and the difference is visible in what you see afterwards.
The language reverts when you close and reopen the app.
The write to the device did not complete, so the choice held for that session only. Make the selection again and confirm it with a restart before you depend on it for a working session.
The language holds on this phone, but a device you sign in on later does not start in it.
The account copy is written separately. If that request does not complete, the local choice still applies and the sync is retried without announcing itself; until the retry succeeds the account still holds the earlier value, and a device with no choice of its own can be given that earlier value.
You take the language row back to automatic and expect the account entry to stay as it was.
Automatic is written to the account as no language. If you want a future device to start in a particular language, leave that language selected rather than returning the row to automatic.
Before you change the language on a device you share
Four checks that keep a shared or newly added device from surprising you later.
- Make the choice on the device you actually work on; a device that has already chosen is not corrected by the account.
- Close the app and open it again once, to confirm the selection was written to the device rather than held for the session.
- If a shop device should follow whoever is holding it, set its row to automatic instead of leaving your own language on it.
- Remember that a language chosen while signed in also becomes the language a future new device starts in.
Two places that keep following the phone
The choice you make inside the app governs the app's own screens. Two things a seller sees around those screens do not come from it. The name under the icon on the home screen, and the two prompts the operating system shows when the app asks for access to photos, are taken from the phone's language and are kept in separate per-language files listed in apps/jewelry-mobile/app.json.
Those files carry only the app name and those two permission strings. No screen text inside the app is drawn from them. That is why a seller who sets the interface to English can still be asked for photo access in the phone's language, and why the icon label does not change when the interface does.
Which language the terms and privacy documents themselves open in is decided by a separate rule and is not settled on this page.
Beyond the language choice itself
This page covers the choice and where it is stored. It does not cover the following.
- Which language the app opens in when no choice has ever been made on the device is decided by a separate rule and is not described here.
- The relaunch that happens when the writing direction changes is a behaviour of its own and is not explained on this page.
- Whether messages that arrive from the server follow the language you picked is not something this page can state.
- The languages a store listing is published in are a separate line of work from the interface language, and nothing here reports on them.
Questions
Can I change the language before I create an account?
Yes. The welcome and sign-in screens carry a globe button in the corner that opens the same picker used later (apps/jewelry-mobile/src/app/(auth)/welcome.tsx). Once you are signed in and on the tabbed screens, the entry point moves to the language row under Profile, Preferences.
The app went back to the previous language after I closed it. Why?
An explicit choice is written to the device so that it survives closing the app. When that write does not complete, the choice lasts only for that session. Make the selection again and confirm it by closing and reopening the app.
I signed in on a new phone and the app is not in that phone's language. Why?
A device that has never had a language chosen on it is given the language recorded on your account when you sign in, and that can differ from the phone's own language. If you choose a language on that phone, the phone's choice stays and is written to the account instead.
Does the in-app choice change the name under the app icon?
No. The icon label and the two operating-system prompts for photo access follow the phone's language and are held in files separate from the interface text, so they can differ from the language you selected in the app.