@oxy.so/core 4.5.0-oxy-one.1 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/HttpService.js +63 -19
  3. package/dist/cjs/api/accounts.js +10 -3
  4. package/dist/cjs/api/agency.js +3 -1
  5. package/dist/cjs/api/apps.js +15 -4
  6. package/dist/cjs/api/assets.js +39 -11
  7. package/dist/cjs/api/auth.js +28 -8
  8. package/dist/cjs/api/billing.js +24 -7
  9. package/dist/cjs/api/civic.js +14 -4
  10. package/dist/cjs/api/follows.js +9 -2
  11. package/dist/cjs/api/identity.js +31 -9
  12. package/dist/cjs/api/nodes.js +3 -1
  13. package/dist/cjs/api/privacy.js +8 -2
  14. package/dist/cjs/api/session.js +15 -4
  15. package/dist/cjs/api/store.js +15 -5
  16. package/dist/cjs/api/topics.js +10 -3
  17. package/dist/cjs/api/users.js +16 -4
  18. package/dist/cjs/boot/sessionColdBoot.js +40 -13
  19. package/dist/cjs/constants/version.js +6 -6
  20. package/dist/cjs/crypto/identityMarker.js +3 -1
  21. package/dist/cjs/crypto/identityProof.js +6 -1
  22. package/dist/cjs/crypto/keyManager.js +87 -32
  23. package/dist/cjs/crypto/recoveryPhrase.js +2 -2
  24. package/dist/cjs/crypto/signatureService.js +3 -4
  25. package/dist/cjs/i18n/index.js +16 -3
  26. package/dist/cjs/i18n/locales/ar-SA.js +366 -366
  27. package/dist/cjs/i18n/locales/ca-ES.js +366 -366
  28. package/dist/cjs/i18n/locales/de-DE.js +366 -366
  29. package/dist/cjs/i18n/locales/en-US.js +1994 -1994
  30. package/dist/cjs/i18n/locales/es-ES.js +1994 -1994
  31. package/dist/cjs/i18n/locales/fr-FR.js +366 -366
  32. package/dist/cjs/i18n/locales/it-IT.js +366 -366
  33. package/dist/cjs/i18n/locales/ja-JP.js +366 -366
  34. package/dist/cjs/i18n/locales/ko-KR.js +366 -366
  35. package/dist/cjs/i18n/locales/pt-PT.js +366 -366
  36. package/dist/cjs/i18n/locales/zh-CN.js +366 -366
  37. package/dist/cjs/inference/OxyInferenceClient.js +12 -18
  38. package/dist/cjs/models/interfaces.js +11 -11
  39. package/dist/cjs/server/OxyServer.js +86 -28
  40. package/dist/cjs/server/agentAccount.js +6 -2
  41. package/dist/cjs/server/aliaMachineCredential.js +39 -14
  42. package/dist/cjs/server/auth.js +5 -4
  43. package/dist/cjs/server/capabilityTicket.js +5 -5
  44. package/dist/cjs/server/index.js +2 -1
  45. package/dist/cjs/server/liveCapabilityTicket.js +4 -1
  46. package/dist/cjs/server/middleware.js +61 -42
  47. package/dist/cjs/server/namespaces.js +28 -7
  48. package/dist/cjs/server/requesterAssertion.js +36 -30
  49. package/dist/cjs/server/serviceTokenLifetime.js +7 -4
  50. package/dist/cjs/server/traffic.js +53 -14
  51. package/dist/cjs/server/trafficNodeHttp.js +33 -8
  52. package/dist/cjs/server/workloadIdentity.client.js +4 -0
  53. package/dist/cjs/server/workloadIdentity.js +28 -1
  54. package/dist/cjs/session/SessionClient.js +54 -17
  55. package/dist/cjs/session/accountDelegationAccess.js +4 -6
  56. package/dist/cjs/session/accountDialogController.js +1 -1
  57. package/dist/cjs/session/authStateStore.js +18 -9
  58. package/dist/cjs/session/identityPin.js +6 -2
  59. package/dist/cjs/session/refresh.js +81 -23
  60. package/dist/cjs/session/sharedDeviceCredential.js +28 -15
  61. package/dist/cjs/shared/utils/errorUtils.js +1 -1
  62. package/dist/cjs/shared/utils/networkUtils.js +1 -1
  63. package/dist/cjs/shared/utils/themeUtils.js +1 -1
  64. package/dist/cjs/utils/accountCacheSweep.js +3 -1
  65. package/dist/cjs/utils/accountUtils.js +1 -3
  66. package/dist/cjs/utils/asyncUtils.js +1 -1
  67. package/dist/cjs/utils/authHelpers.js +2 -1
  68. package/dist/cjs/utils/avatarUtils.js +4 -2
  69. package/dist/cjs/utils/cache.js +1 -1
  70. package/dist/cjs/utils/cacheKey.js +3 -1
  71. package/dist/cjs/utils/deviceManager.js +4 -4
  72. package/dist/cjs/utils/errorUtils.js +6 -4
  73. package/dist/cjs/utils/languageUtils.js +404 -57
  74. package/dist/cjs/utils/profileLinks.js +1 -3
  75. package/dist/cjs/utils/requestUtils.js +7 -1
  76. package/dist/cjs/utils/userIdentity.js +1 -1
  77. package/dist/cjs/utils/validationUtils.js +5 -6
  78. package/dist/esm/HttpService.js +64 -20
  79. package/dist/esm/api/accounts.js +11 -4
  80. package/dist/esm/api/agency.js +3 -1
  81. package/dist/esm/api/apps.js +15 -4
  82. package/dist/esm/api/assets.js +39 -11
  83. package/dist/esm/api/auth.js +28 -8
  84. package/dist/esm/api/billing.js +25 -8
  85. package/dist/esm/api/civic.js +14 -4
  86. package/dist/esm/api/follows.js +9 -2
  87. package/dist/esm/api/identity.js +31 -9
  88. package/dist/esm/api/nodes.js +3 -1
  89. package/dist/esm/api/privacy.js +8 -2
  90. package/dist/esm/api/session.js +15 -4
  91. package/dist/esm/api/store.js +15 -5
  92. package/dist/esm/api/topics.js +10 -3
  93. package/dist/esm/api/users.js +16 -4
  94. package/dist/esm/boot/sessionColdBoot.js +41 -14
  95. package/dist/esm/constants/version.js +6 -6
  96. package/dist/esm/crypto/identityMarker.js +3 -1
  97. package/dist/esm/crypto/identityProof.js +6 -1
  98. package/dist/esm/crypto/internal.js +1 -1
  99. package/dist/esm/crypto/keyManager.js +87 -32
  100. package/dist/esm/crypto/recoveryPhrase.js +2 -2
  101. package/dist/esm/crypto/signatureService.js +3 -4
  102. package/dist/esm/i18n/index.js +16 -3
  103. package/dist/esm/i18n/locales/ar-SA.js +366 -366
  104. package/dist/esm/i18n/locales/ca-ES.js +366 -366
  105. package/dist/esm/i18n/locales/de-DE.js +366 -366
  106. package/dist/esm/i18n/locales/en-US.js +1994 -1994
  107. package/dist/esm/i18n/locales/es-ES.js +1994 -1994
  108. package/dist/esm/i18n/locales/fr-FR.js +366 -366
  109. package/dist/esm/i18n/locales/it-IT.js +366 -366
  110. package/dist/esm/i18n/locales/ja-JP.js +366 -366
  111. package/dist/esm/i18n/locales/ko-KR.js +366 -366
  112. package/dist/esm/i18n/locales/pt-PT.js +366 -366
  113. package/dist/esm/i18n/locales/zh-CN.js +366 -366
  114. package/dist/esm/index.js +1 -1
  115. package/dist/esm/inference/OxyInferenceClient.js +13 -19
  116. package/dist/esm/models/interfaces.js +11 -11
  117. package/dist/esm/server/OxyServer.js +87 -29
  118. package/dist/esm/server/agentAccount.js +6 -2
  119. package/dist/esm/server/aliaMachineCredential.js +39 -14
  120. package/dist/esm/server/auth.js +6 -5
  121. package/dist/esm/server/capabilityTicket.js +6 -6
  122. package/dist/esm/server/index.js +5 -5
  123. package/dist/esm/server/liveCapabilityTicket.js +6 -3
  124. package/dist/esm/server/middleware.js +62 -43
  125. package/dist/esm/server/namespaces.js +31 -10
  126. package/dist/esm/server/requesterAssertion.js +36 -30
  127. package/dist/esm/server/serviceTokenLifetime.js +7 -4
  128. package/dist/esm/server/traffic.js +55 -16
  129. package/dist/esm/server/trafficNodeHttp.js +34 -9
  130. package/dist/esm/server/userInvalidation.js +1 -1
  131. package/dist/esm/server/workloadIdentity.client.js +3 -0
  132. package/dist/esm/server/workloadIdentity.js +27 -1
  133. package/dist/esm/session/SessionClient.js +54 -17
  134. package/dist/esm/session/accountDelegationAccess.js +5 -7
  135. package/dist/esm/session/accountDialogController.js +1 -1
  136. package/dist/esm/session/authStateStore.js +18 -9
  137. package/dist/esm/session/identityPin.js +6 -2
  138. package/dist/esm/session/refresh.js +82 -24
  139. package/dist/esm/session/sharedDeviceCredential.js +28 -15
  140. package/dist/esm/shared/utils/errorUtils.js +1 -1
  141. package/dist/esm/shared/utils/networkUtils.js +1 -1
  142. package/dist/esm/shared/utils/themeUtils.js +1 -1
  143. package/dist/esm/utils/accountCacheSweep.js +3 -1
  144. package/dist/esm/utils/accountUtils.js +1 -3
  145. package/dist/esm/utils/asyncUtils.js +1 -1
  146. package/dist/esm/utils/authHelpers.js +2 -1
  147. package/dist/esm/utils/avatarUtils.js +4 -2
  148. package/dist/esm/utils/cache.js +1 -1
  149. package/dist/esm/utils/cacheKey.js +3 -1
  150. package/dist/esm/utils/deviceManager.js +4 -4
  151. package/dist/esm/utils/errorUtils.js +6 -4
  152. package/dist/esm/utils/languageUtils.js +404 -57
  153. package/dist/esm/utils/profileLinks.js +1 -3
  154. package/dist/esm/utils/requestUtils.js +7 -1
  155. package/dist/esm/utils/userIdentity.js +1 -1
  156. package/dist/esm/utils/validationUtils.js +5 -6
  157. package/dist/types/HttpService.d.ts +1 -1
  158. package/dist/types/api/accounts.d.ts +16 -3
  159. package/dist/types/api/apps.d.ts +4 -4
  160. package/dist/types/crypto/internal.d.ts +1 -1
  161. package/dist/types/index.d.ts +4 -4
  162. package/dist/types/models/interfaces.d.ts +9 -1
  163. package/dist/types/server/index.d.ts +6 -6
  164. package/dist/types/server/workloadIdentity.client.d.ts +5 -1
  165. package/dist/types/server/workloadIdentity.d.ts +26 -0
  166. package/dist/types/session/accountDelegationAccess.d.ts +1 -1
  167. package/dist/types/session/index.d.ts +1 -1
  168. package/dist/types/utils/userIdentity.d.ts +1 -1
  169. package/dist/types/utils/validationUtils.d.ts +4 -5
  170. package/package.json +3 -4
  171. package/src/HttpService.ts +183 -53
  172. package/src/OxyServices.errors.ts +7 -3
  173. package/src/OxyServices.ts +6 -2
  174. package/src/api/accounts.ts +96 -28
  175. package/src/api/agency.ts +24 -9
  176. package/src/api/appData.ts +12 -2
  177. package/src/api/apps.ts +81 -31
  178. package/src/api/assets.ts +113 -43
  179. package/src/api/auth.ts +145 -77
  180. package/src/api/billing.ts +112 -65
  181. package/src/api/civic.ts +61 -19
  182. package/src/api/contacts.ts +4 -1
  183. package/src/api/devices.ts +54 -21
  184. package/src/api/follows.ts +88 -31
  185. package/src/api/identity.ts +101 -33
  186. package/src/api/linkedAccounts.ts +26 -8
  187. package/src/api/nodes.ts +18 -6
  188. package/src/api/notifications.ts +26 -6
  189. package/src/api/privacy.ts +42 -8
  190. package/src/api/reputation.ts +18 -7
  191. package/src/api/session.ts +23 -5
  192. package/src/api/store.ts +81 -31
  193. package/src/api/topics.ts +18 -6
  194. package/src/api/users.ts +98 -35
  195. package/src/boot/sessionColdBoot.ts +60 -19
  196. package/src/civic/payloads.ts +1 -4
  197. package/src/client/context.ts +6 -1
  198. package/src/constants/version.ts +7 -6
  199. package/src/crypto/aead.ts +1 -5
  200. package/src/crypto/ecdh.ts +1 -4
  201. package/src/crypto/identityDerivations.ts +5 -1
  202. package/src/crypto/identityMarker.ts +3 -1
  203. package/src/crypto/identityProof.ts +6 -1
  204. package/src/crypto/index.ts +11 -11
  205. package/src/crypto/internal.ts +6 -1
  206. package/src/crypto/keyManager.ts +348 -98
  207. package/src/crypto/recoveryPhrase.ts +14 -9
  208. package/src/crypto/registrationPow.ts +1 -1
  209. package/src/crypto/signatureService.ts +14 -6
  210. package/src/i18n/accountCategoryLabels.ts +1 -4
  211. package/src/i18n/accountRoleLabels.ts +1 -4
  212. package/src/i18n/index.ts +25 -7
  213. package/src/i18n/locales/ar-SA.ts +375 -366
  214. package/src/i18n/locales/ca-ES.ts +382 -366
  215. package/src/i18n/locales/de-DE.ts +387 -366
  216. package/src/i18n/locales/en-US.ts +2034 -1994
  217. package/src/i18n/locales/es-ES.ts +2043 -1994
  218. package/src/i18n/locales/fr-FR.ts +387 -366
  219. package/src/i18n/locales/it-IT.ts +380 -366
  220. package/src/i18n/locales/ja-JP.ts +380 -366
  221. package/src/i18n/locales/ko-KR.ts +377 -366
  222. package/src/i18n/locales/pt-PT.ts +383 -366
  223. package/src/i18n/locales/zh-CN.ts +373 -366
  224. package/src/i18n/trustTierLabels.ts +1 -4
  225. package/src/index.ts +371 -349
  226. package/src/inference/OxyInferenceClient.ts +784 -780
  227. package/src/models/interfaces.ts +39 -27
  228. package/src/server/OxyServer.ts +227 -68
  229. package/src/server/agentAccount.ts +8 -2
  230. package/src/server/aliaMachineCredential.ts +57 -16
  231. package/src/server/auth.ts +9 -5
  232. package/src/server/capabilityTicket.ts +30 -21
  233. package/src/server/index.ts +29 -6
  234. package/src/server/liveCapabilityTicket.ts +31 -9
  235. package/src/server/middleware.ts +212 -121
  236. package/src/server/namespaces.ts +247 -94
  237. package/src/server/rateLimit.ts +2 -4
  238. package/src/server/requesterAssertion.ts +93 -54
  239. package/src/server/serviceTokenLifetime.ts +9 -4
  240. package/src/server/traffic.ts +117 -23
  241. package/src/server/trafficNodeHttp.ts +61 -14
  242. package/src/server/userInvalidation.ts +1 -4
  243. package/src/server/workloadIdentity.client.ts +12 -1
  244. package/src/server/workloadIdentity.ts +52 -5
  245. package/src/session/SessionClient.ts +170 -49
  246. package/src/session/accountDelegationAccess.ts +24 -31
  247. package/src/session/accountDialogController.ts +59 -14
  248. package/src/session/accountSwitchTargets.ts +10 -15
  249. package/src/session/authStateStore.ts +121 -81
  250. package/src/session/deviceDirectory.ts +1 -3
  251. package/src/session/identityPin.ts +10 -11
  252. package/src/session/identitySession.ts +3 -1
  253. package/src/session/index.ts +87 -82
  254. package/src/session/refresh.ts +138 -44
  255. package/src/session/sessionClientHost.ts +1 -3
  256. package/src/session/sharedDeviceCredential.ts +35 -14
  257. package/src/session/socketLoader.ts +9 -2
  258. package/src/shared/utils/errorUtils.ts +5 -2
  259. package/src/shared/utils/networkUtils.ts +5 -8
  260. package/src/shared/utils/themeUtils.ts +2 -6
  261. package/src/types/buffer.d.ts +66 -21
  262. package/src/types/expo-secure-store.d.ts +5 -1
  263. package/src/utils/accountCacheSweep.ts +4 -5
  264. package/src/utils/accountUtils.ts +107 -108
  265. package/src/utils/apiUtils.ts +3 -3
  266. package/src/utils/asyncUtils.ts +2 -2
  267. package/src/utils/authHelpers.ts +10 -5
  268. package/src/utils/avatarUtils.ts +11 -6
  269. package/src/utils/cache.ts +9 -10
  270. package/src/utils/cacheKey.ts +5 -1
  271. package/src/utils/coldBoot.ts +1 -3
  272. package/src/utils/commonsDelivery.ts +1 -4
  273. package/src/utils/deviceManager.ts +15 -14
  274. package/src/utils/errorUtils.ts +68 -86
  275. package/src/utils/languageUtils.ts +407 -58
  276. package/src/utils/oauthPkce.ts +1 -4
  277. package/src/utils/platform.ts +0 -1
  278. package/src/utils/profileLinks.ts +2 -5
  279. package/src/utils/requestUtils.ts +18 -14
  280. package/src/utils/sessionUtils.ts +34 -33
  281. package/src/utils/userHandle.ts +3 -1
  282. package/src/utils/userIdentity.ts +1 -1
  283. package/src/utils/validationUtils.ts +11 -9
@@ -1,2045 +1,2085 @@
1
1
  const dict = {
2
- "signin": {
3
- "title": "Sign in",
4
- "subtitle": "Use your Oxy account",
5
- "chooser": {
6
- "title": "Choose an account",
7
- "subtitle": "Continue as an account below, or use another.",
8
- "useAnother": "Use another account",
9
- "continueAs": "Continue as {{name}}",
10
- "subtitleToApp": "to continue to {{app}}"
11
- },
12
- "addAccountTitle": "Add another account",
13
- "addAccountSubtitle": "Sign in with another account",
14
- "actions": {
15
- "continue": "Continue",
16
- "back": "Back"
17
- },
18
- "createAccountLink": "New to Oxy? Create one",
19
- "status": {
20
- "signingIn": "Signing in…"
21
- },
22
- "errors": {
23
- "notConfigured": "Sign-in isn't available",
24
- "notConfiguredDescription": "{{app}} isn't set up for sign-in yet. Contact the app's developer.",
25
- "failed": "Couldn't start sign-in",
26
- "failedDescription": "Something went wrong. Please try again.",
27
- "rateLimited": "Too many attempts. Try again in {{seconds}}s.",
28
- "invalidCredentials": "That username, email or password isn't right.",
29
- "codeInvalid": "That code isn't right, or it has expired.",
30
- "requestExpired": "This sign-in expired. Send a new email.",
31
- "secondFactorInvalid": "That code isn't right. Try the current one.",
32
- "originNotAllowed": "Sign-in isn't available here.",
33
- "generic": "Something went wrong. Please try again."
34
- },
35
- "subtitleToApp": "to continue to {{app}}",
36
- "orContinueWith": "or continue with",
37
- "qr": {
38
- "caption": "Scan with Commons to sign in",
39
- "renew": "Show a new code"
40
- },
41
- "terms": {
42
- "before": "By continuing, you agree to our",
43
- "termsLink": "Terms of Service",
44
- "and": "and",
45
- "privacyLink": "Privacy Policy"
46
- },
47
- "noAccount": "Don't have an account?",
48
- "createAccount": "Create account",
49
- "identifier": {
50
- "label": "Email or username",
51
- "placeholder": "you@example.com",
52
- "required": "Enter your email or username."
53
- },
54
- "checkEmail": {
55
- "title": "Check your email",
56
- "description": "If an account matches {{identifier}}, we sent it a code and a sign-in link.",
57
- "codeLabel": "Code",
58
- "codeHint": "Type the code from the email, or open its link in this browser.",
59
- "codeHasLetters": "Does your code have letters?",
60
- "codeDigitsOnly": "Is your code only numbers?",
61
- "resend": "Send a new email",
62
- "resendIn": "Send a new email in {{seconds}}s",
63
- "resent": "We sent a new email.",
64
- "retryLater": "We sent several emails already. Wait a few minutes and try again.",
65
- "usePassword": "Use your password instead",
66
- "differentAccount": "Use a different account"
67
- },
68
- "password": {
69
- "title": "Enter your password",
70
- "label": "Password",
71
- "required": "Enter your password.",
72
- "forgot": "Forgot it? Get a code by email"
73
- },
74
- "secondFactor": {
75
- "title": "Two-step verification",
76
- "description": "Enter the code from your authenticator app.",
77
- "backupDescription": "Enter one of your backup codes. Each one works once.",
78
- "label": "Authenticator code",
79
- "backupLabel": "Backup code",
80
- "useBackup": "Use a backup code",
81
- "useAuthenticator": "Use your authenticator app"
82
- },
83
- "link": {
84
- "approvedTitle": "You're signed in",
85
- "approvedDescription": "Go back to the app where you asked to sign in: it continues by itself. You can close this tab.",
86
- "otherDeviceTitle": "Open the link in the same browser",
87
- "otherDeviceDescription": "This link only works in the browser where you asked to sign in. Open it there, or type the code from the email in the app.",
88
- "invalidTitle": "This link can't be used",
89
- "invalidDescription": "It expired or was already used. Ask for a new email in the app, or type the code from the latest one."
90
- }
2
+ signin: {
3
+ title: 'Sign in',
4
+ subtitle: 'Use your Oxy account',
5
+ chooser: {
6
+ title: 'Choose an account',
7
+ subtitle: 'Continue as an account below, or use another.',
8
+ useAnother: 'Use another account',
9
+ continueAs: 'Continue as {{name}}',
10
+ subtitleToApp: 'to continue to {{app}}',
11
+ },
12
+ addAccountTitle: 'Add another account',
13
+ addAccountSubtitle: 'Sign in with another account',
14
+ actions: {
15
+ continue: 'Continue',
16
+ back: 'Back',
17
+ },
18
+ createAccountLink: 'New to Oxy? Create one',
19
+ status: {
20
+ signingIn: 'Signing in…',
21
+ },
22
+ errors: {
23
+ notConfigured: "Sign-in isn't available",
24
+ notConfiguredDescription:
25
+ "{{app}} isn't set up for sign-in yet. Contact the app's developer.",
26
+ failed: "Couldn't start sign-in",
27
+ failedDescription: 'Something went wrong. Please try again.',
28
+ rateLimited: 'Too many attempts. Try again in {{seconds}}s.',
29
+ invalidCredentials: "That username, email or password isn't right.",
30
+ codeInvalid: "That code isn't right, or it has expired.",
31
+ requestExpired: 'This sign-in expired. Send a new email.',
32
+ secondFactorInvalid: "That code isn't right. Try the current one.",
33
+ originNotAllowed: "Sign-in isn't available here.",
34
+ generic: 'Something went wrong. Please try again.',
35
+ },
36
+ subtitleToApp: 'to continue to {{app}}',
37
+ orContinueWith: 'or continue with',
38
+ qr: {
39
+ caption: 'Scan with Commons to sign in',
40
+ renew: 'Show a new code',
41
+ },
42
+ terms: {
43
+ before: 'By continuing, you agree to our',
44
+ termsLink: 'Terms of Service',
45
+ and: 'and',
46
+ privacyLink: 'Privacy Policy',
47
+ },
48
+ noAccount: "Don't have an account?",
49
+ createAccount: 'Create account',
50
+ identifier: {
51
+ label: 'Email or username',
52
+ placeholder: 'you@example.com',
53
+ required: 'Enter your email or username.',
54
+ },
55
+ checkEmail: {
56
+ title: 'Check your email',
57
+ description: 'If an account matches {{identifier}}, we sent it a code and a sign-in link.',
58
+ codeLabel: 'Code',
59
+ codeHint: 'Type the code from the email, or open its link in this browser.',
60
+ codeHasLetters: 'Does your code have letters?',
61
+ codeDigitsOnly: 'Is your code only numbers?',
62
+ resend: 'Send a new email',
63
+ resendIn: 'Send a new email in {{seconds}}s',
64
+ resent: 'We sent a new email.',
65
+ retryLater: 'We sent several emails already. Wait a few minutes and try again.',
66
+ usePassword: 'Use your password instead',
67
+ differentAccount: 'Use a different account',
68
+ },
69
+ password: {
70
+ title: 'Enter your password',
71
+ label: 'Password',
72
+ required: 'Enter your password.',
73
+ forgot: 'Forgot it? Get a code by email',
74
+ },
75
+ secondFactor: {
76
+ title: 'Two-step verification',
77
+ description: 'Enter the code from your authenticator app.',
78
+ backupDescription: 'Enter one of your backup codes. Each one works once.',
79
+ label: 'Authenticator code',
80
+ backupLabel: 'Backup code',
81
+ useBackup: 'Use a backup code',
82
+ useAuthenticator: 'Use your authenticator app',
83
+ },
84
+ link: {
85
+ approvedTitle: "You're signed in",
86
+ approvedDescription:
87
+ 'Go back to the app where you asked to sign in: it continues by itself. You can close this tab.',
88
+ otherDeviceTitle: 'Open the link in the same browser',
89
+ otherDeviceDescription:
90
+ 'This link only works in the browser where you asked to sign in. Open it there, or type the code from the email in the app.',
91
+ invalidTitle: "This link can't be used",
92
+ invalidDescription:
93
+ 'It expired or was already used. Ask for a new email in the app, or type the code from the latest one.',
94
+ },
91
95
  },
92
- "signup": {
93
- "title": "Create your account",
94
- "subtitle": "Choose your username. Then we confirm your email.",
95
- "createInCommons": "Create it in Commons instead",
96
- "backToSignInLink": "Already have an account? Sign in",
97
- "username": {
98
- "label": "Username",
99
- "placeholder": "yourname",
100
- "required": "Choose a username.",
101
- "taken": "That username is taken."
102
- },
103
- "email": {
104
- "title": "What's your email?",
105
- "subtitle": "You sign in with it: we send you a code each time. Nobody else sees it.",
106
- "label": "Email",
107
- "placeholder": "you@example.com",
108
- "invalid": "Enter a valid email address."
109
- },
110
- "commonsSubtitle": "Or create your identity in Commons, and hold your own key.",
111
- "laterNote": "You can add a password or an authenticator app later, in your account's security settings."
96
+ signup: {
97
+ title: 'Create your account',
98
+ subtitle: 'Choose your username. Then we confirm your email.',
99
+ createInCommons: 'Create it in Commons instead',
100
+ backToSignInLink: 'Already have an account? Sign in',
101
+ username: {
102
+ label: 'Username',
103
+ placeholder: 'yourname',
104
+ required: 'Choose a username.',
105
+ taken: 'That username is taken.',
106
+ },
107
+ email: {
108
+ title: "What's your email?",
109
+ subtitle: 'You sign in with it: we send you a code each time. Nobody else sees it.',
110
+ label: 'Email',
111
+ placeholder: 'you@example.com',
112
+ invalid: 'Enter a valid email address.',
113
+ },
114
+ commonsSubtitle: 'Or create your identity in Commons, and hold your own key.',
115
+ laterNote:
116
+ "You can add a password or an authenticator app later, in your account's security settings.",
112
117
  },
113
- "welcomeNew": {
114
- "navTitle": "Welcome",
115
- "welcome": {
116
- "titleWithName": "Welcome, {{username}} 👋",
117
- "title": "Welcome 👋",
118
- "body": "You just created an account in a calm, ethical space. A few quick things — then you're in."
119
- },
120
- "account": {
121
- "title": "One Account. Simple.",
122
- "bullets": [
123
- "One identity across everything",
124
- "No re-signing in all the time",
125
- "Your preferences stay with you"
126
- ]
127
- },
128
- "principles": {
129
- "title": "What We Stand For",
130
- "bullets": [
131
- "Privacy by default",
132
- "No manipulative feeds",
133
- "You decide what to share",
134
- "No selling your data"
135
- ]
136
- },
137
- "reputation": {
138
- "title": "Reputation = Trust & Growth",
139
- "body": "Oxy Trust is a reputation system that reacts to what you do. Helpful, respectful, constructive actions earn it. Harmful or low‑effort stuff chips it away. More reputation can unlock benefits; low reputation can limit features. It keeps things fair and rewards real contribution."
140
- },
141
- "name": {
142
- "title": "What's your name?",
143
- "body": "Add your name so people know who you are.",
144
- "firstLabel": "First name",
145
- "firstPlaceholder": "Your first name",
146
- "lastLabel": "Last name",
147
- "lastPlaceholder": "Your last name",
148
- "saveFailed": "Could not save your name"
149
- },
150
- "avatar": {
151
- "title": "Make It Yours",
152
- "body": "Add an avatar so people recognize you. It will show anywhere you show up here. Skip if you want — you can add it later.",
153
- "add": "Add Avatar",
154
- "change": "Change Avatar"
155
- },
156
- "ready": {
157
- "title": "You're Ready",
158
- "body": "Explore. Contribute. Earn reputation. Stay in control."
159
- },
160
- "actions": {
161
- "back": "Back",
162
- "next": "Next",
163
- "skip": "Skip",
164
- "enter": "Enter",
165
- "continue": "Continue"
166
- },
167
- "trust": {
168
- "title": "Oxy Trust = Trust & Growth",
169
- "body": "Oxy Trust is a reputation system that reacts to what you do. Helpful, respectful, constructive actions earn reputation. Harmful or low‑effort stuff chips it away. More reputation raises your trust tier and can unlock benefits; low reputation can limit features. It keeps things fair and rewards real contribution."
170
- }
118
+ welcomeNew: {
119
+ navTitle: 'Welcome',
120
+ welcome: {
121
+ titleWithName: 'Welcome, {{username}} 👋',
122
+ title: 'Welcome 👋',
123
+ body: "You just created an account in a calm, ethical space. A few quick things — then you're in.",
124
+ },
125
+ account: {
126
+ title: 'One Account. Simple.',
127
+ bullets: [
128
+ 'One identity across everything',
129
+ 'No re-signing in all the time',
130
+ 'Your preferences stay with you',
131
+ ],
132
+ },
133
+ principles: {
134
+ title: 'What We Stand For',
135
+ bullets: [
136
+ 'Privacy by default',
137
+ 'No manipulative feeds',
138
+ 'You decide what to share',
139
+ 'No selling your data',
140
+ ],
141
+ },
142
+ reputation: {
143
+ title: 'Reputation = Trust & Growth',
144
+ body: 'Oxy Trust is a reputation system that reacts to what you do. Helpful, respectful, constructive actions earn it. Harmful or low‑effort stuff chips it away. More reputation can unlock benefits; low reputation can limit features. It keeps things fair and rewards real contribution.',
145
+ },
146
+ name: {
147
+ title: "What's your name?",
148
+ body: 'Add your name so people know who you are.',
149
+ firstLabel: 'First name',
150
+ firstPlaceholder: 'Your first name',
151
+ lastLabel: 'Last name',
152
+ lastPlaceholder: 'Your last name',
153
+ saveFailed: 'Could not save your name',
154
+ },
155
+ avatar: {
156
+ title: 'Make It Yours',
157
+ body: 'Add an avatar so people recognize you. It will show anywhere you show up here. Skip if you want — you can add it later.',
158
+ add: 'Add Avatar',
159
+ change: 'Change Avatar',
160
+ },
161
+ ready: {
162
+ title: "You're Ready",
163
+ body: 'Explore. Contribute. Earn reputation. Stay in control.',
164
+ },
165
+ actions: {
166
+ back: 'Back',
167
+ next: 'Next',
168
+ skip: 'Skip',
169
+ enter: 'Enter',
170
+ continue: 'Continue',
171
+ },
172
+ trust: {
173
+ title: 'Oxy Trust = Trust & Growth',
174
+ body: 'Oxy Trust is a reputation system that reacts to what you do. Helpful, respectful, constructive actions earn reputation. Harmful or low‑effort stuff chips it away. More reputation raises your trust tier and can unlock benefits; low reputation can limit features. It keeps things fair and rewards real contribution.',
175
+ },
171
176
  },
172
- "language": {
173
- "title": "Language",
174
- "subtitle": "Choose the languages you use. The first is your primary interface language.",
175
- "current": "Current Language",
176
- "selected": "Your languages",
177
- "available": "Available Languages",
178
- "primary": "Primary",
179
- "remove": "Remove",
180
- "changed": "Language changed to {{lang}}",
181
- "saveFailed": "Failed to save language preference",
182
- "search": "Search languages"
177
+ language: {
178
+ title: 'Language',
179
+ subtitle: 'Choose the languages you use. The first is your primary interface language.',
180
+ current: 'Current Language',
181
+ selected: 'Your languages',
182
+ available: 'Available Languages',
183
+ primary: 'Primary',
184
+ remove: 'Remove',
185
+ changed: 'Language changed to {{lang}}',
186
+ saveFailed: 'Failed to save language preference',
187
+ search: 'Search languages',
183
188
  },
184
- "profile": {
185
- "title": "Profile",
186
- "edit": "Edit Profile",
187
- "noBio": "This user has no bio yet.",
188
- "joinedOn": "Joined {{date}}",
189
- "bornOn": "Born {{date}}",
190
- "reputation": "Reputation",
191
- "followers": "Followers",
192
- "following": "Following",
193
- "more": "+ {{count}} more",
194
- "errorTitle": "Profile Error",
195
- "errorSubtext": "This could happen if the user doesn't exist or the profile service is unavailable."
189
+ profile: {
190
+ title: 'Profile',
191
+ edit: 'Edit Profile',
192
+ noBio: 'This user has no bio yet.',
193
+ joinedOn: 'Joined {{date}}',
194
+ bornOn: 'Born {{date}}',
195
+ reputation: 'Reputation',
196
+ followers: 'Followers',
197
+ following: 'Following',
198
+ more: '+ {{count}} more',
199
+ errorTitle: 'Profile Error',
200
+ errorSubtext:
201
+ "This could happen if the user doesn't exist or the profile service is unavailable.",
196
202
  },
197
- "accountCenter": {
198
- "sections": {
199
- "quickActions": "Quick Actions",
200
- "accountManagement": "Account Management",
201
- "multiAccount": "Multi-Account",
202
- "addAccount": "Add Account",
203
- "moreOptions": "More Options",
204
- "accounts": "Accounts"
205
- },
206
- "quickActions": {
207
- "overview": "Overview",
208
- "editProfile": "Edit Profile",
209
- "sessions": "Sessions",
210
- "premium": "Premium",
211
- "billing": "Billing",
212
- "switch": "Switch"
213
- },
214
- "items": {
215
- "accountOverview": {
216
- "title": "Account Overview",
217
- "subtitle": "Complete account information"
218
- },
219
- "editProfile": {
220
- "title": "Edit Profile",
221
- "subtitle": "Manage your profile and preferences"
222
- },
223
- "manageSessions": {
224
- "title": "Manage Sessions",
225
- "subtitle": "Security and active devices"
226
- },
227
- "fileManagement": {
228
- "title": "File Management",
229
- "subtitle": "Upload, download, and manage your files"
230
- },
231
- "premium": {
232
- "title": "Oxy+ Subscriptions",
233
- "manage": "Manage your premium plan",
234
- "upgrade": "Upgrade to premium features"
235
- },
236
- "billing": {
237
- "title": "Billing Management",
238
- "subtitle": "Payment methods and invoices"
239
- },
240
- "switchAccount": {
241
- "title": "Switch Account",
242
- "subtitle": "{{count}} accounts available"
243
- },
244
- "addAccount": {
245
- "title": "Add Another Account",
246
- "subtitle": "Sign in with a different account"
247
- },
248
- "notifications": {
249
- "title": "Notifications",
250
- "subtitle": "Manage notification settings",
251
- "coming": "Notifications feature coming soon!"
252
- },
253
- "appInfo": {
254
- "title": "App Information",
255
- "subtitle": "Version and system details"
256
- }
257
- },
258
- "signingOut": "Signing out...",
259
- "version": "Version {{version}}"
203
+ accountCenter: {
204
+ sections: {
205
+ quickActions: 'Quick Actions',
206
+ accountManagement: 'Account Management',
207
+ multiAccount: 'Multi-Account',
208
+ addAccount: 'Add Account',
209
+ moreOptions: 'More Options',
210
+ accounts: 'Accounts',
211
+ },
212
+ quickActions: {
213
+ overview: 'Overview',
214
+ editProfile: 'Edit Profile',
215
+ sessions: 'Sessions',
216
+ premium: 'Premium',
217
+ billing: 'Billing',
218
+ switch: 'Switch',
219
+ },
220
+ items: {
221
+ accountOverview: {
222
+ title: 'Account Overview',
223
+ subtitle: 'Complete account information',
224
+ },
225
+ editProfile: {
226
+ title: 'Edit Profile',
227
+ subtitle: 'Manage your profile and preferences',
228
+ },
229
+ manageSessions: {
230
+ title: 'Manage Sessions',
231
+ subtitle: 'Security and active devices',
232
+ },
233
+ fileManagement: {
234
+ title: 'File Management',
235
+ subtitle: 'Upload, download, and manage your files',
236
+ },
237
+ premium: {
238
+ title: 'Oxy+ Subscriptions',
239
+ manage: 'Manage your premium plan',
240
+ upgrade: 'Upgrade to premium features',
241
+ },
242
+ billing: {
243
+ title: 'Billing Management',
244
+ subtitle: 'Payment methods and invoices',
245
+ },
246
+ switchAccount: {
247
+ title: 'Switch Account',
248
+ subtitle: '{{count}} accounts available',
249
+ },
250
+ addAccount: {
251
+ title: 'Add Another Account',
252
+ subtitle: 'Sign in with a different account',
253
+ },
254
+ notifications: {
255
+ title: 'Notifications',
256
+ subtitle: 'Manage notification settings',
257
+ coming: 'Notifications feature coming soon!',
258
+ },
259
+ appInfo: {
260
+ title: 'App Information',
261
+ subtitle: 'Version and system details',
262
+ },
263
+ },
264
+ signingOut: 'Signing out...',
265
+ version: 'Version {{version}}',
260
266
  },
261
- "accountSwitcher": {
262
- "loading": "Loading accounts...",
263
- "toasts": {
264
- "contextRemoved": "Removed {{account}}",
265
- "contextRemoveFailed": "There was a problem removing that account. Please try again.",
266
- "principalRemoved": "Signed {{name}} out of this device",
267
- "principalRemoveFailed": "There was a problem signing that person out. Please try again.",
268
- "activateFailed": "There was a problem switching accounts. Please try again."
269
- },
270
- "confirms": {
271
- "removeContextTitle": "Remove this account?",
272
- "removeContext": "Stop {{person}} acting as {{account}} on this device? Anyone else who reaches {{account}} here keeps their access.",
273
- "removePrincipalTitle": "Sign out of this device?",
274
- "removePrincipal": "Sign {{name}} out of this device? Every account they reach here is removed. Nobody else is affected."
275
- },
276
- "scanQr": "Scan QR code",
277
- "qrHeadline": "Sign in with your Oxy identity",
278
- "signInWithOxy": "Sign in with Oxy",
279
- "signUpWithOxy": "Sign up with Oxy",
280
- "getCommons": "Get Commons",
281
- "commonsNotInstalled": "Don't have Commons? Get the app to sign in with your Oxy ID.",
282
- "showQrAnyway": "I have Commons on another device",
283
- "switchWhileSignedInAs": "Switch account, signed in as {{name}}",
284
- "manageOnDevice": "Manage accounts on this device",
285
- "continueWithOxy": "Continue with Oxy",
286
- "havingTrouble": "Having trouble?",
287
- "progress": {
288
- "preparing": "Preparing request",
289
- "awaitingApproval": "Waiting for approval",
290
- "scanWithCommons": "Scan with Commons on your phone",
291
- "continueInCommons": "Continue in Commons",
292
- "checkCommons": "Check Commons on your phone",
293
- "openedInCommons": "Opened in Commons",
294
- "confirming": "Confirming identity",
295
- "confirmed": "Identity confirmed"
296
- },
297
- "context": {
298
- "unavailable": "Unavailable right now",
299
- "operatedBy": "Operated by {{name}}",
300
- "remove": "Remove {{account}} from {{person}}"
301
- },
302
- "principal": {
303
- "signOut": "Sign {{name}} out of this device"
304
- },
305
- "signInFailures": {
306
- "denied": "Sign-in was declined in Commons.",
307
- "expired": "This sign-in request expired. Please try again.",
308
- "network": "Couldn't reach Oxy. Check your connection and try again.",
309
- "notConfigured": "This app isn't set up for sign-in yet.",
310
- "unsupportedFlow": "This sign-in can't be completed here.",
311
- "claimFailed": "Sign-in was approved, but we couldn't finish it. Please try again.",
312
- "generic": "Sign-in failed. Please try again."
313
- },
314
- "linkOpenFailed": "Couldn't open that link. Please try again."
267
+ accountSwitcher: {
268
+ loading: 'Loading accounts...',
269
+ toasts: {
270
+ contextRemoved: 'Removed {{account}}',
271
+ contextRemoveFailed: 'There was a problem removing that account. Please try again.',
272
+ principalRemoved: 'Signed {{name}} out of this device',
273
+ principalRemoveFailed: 'There was a problem signing that person out. Please try again.',
274
+ activateFailed: 'There was a problem switching accounts. Please try again.',
275
+ },
276
+ confirms: {
277
+ removeContextTitle: 'Remove this account?',
278
+ removeContext:
279
+ 'Stop {{person}} acting as {{account}} on this device? Anyone else who reaches {{account}} here keeps their access.',
280
+ removePrincipalTitle: 'Sign out of this device?',
281
+ removePrincipal:
282
+ 'Sign {{name}} out of this device? Every account they reach here is removed. Nobody else is affected.',
283
+ },
284
+ scanQr: 'Scan QR code',
285
+ qrHeadline: 'Sign in with your Oxy identity',
286
+ signInWithOxy: 'Sign in with Oxy',
287
+ signUpWithOxy: 'Sign up with Oxy',
288
+ getCommons: 'Get Commons',
289
+ commonsNotInstalled: "Don't have Commons? Get the app to sign in with your Oxy ID.",
290
+ showQrAnyway: 'I have Commons on another device',
291
+ switchWhileSignedInAs: 'Switch account, signed in as {{name}}',
292
+ manageOnDevice: 'Manage accounts on this device',
293
+ continueWithOxy: 'Continue with Oxy',
294
+ havingTrouble: 'Having trouble?',
295
+ progress: {
296
+ preparing: 'Preparing request',
297
+ awaitingApproval: 'Waiting for approval',
298
+ scanWithCommons: 'Scan with Commons on your phone',
299
+ continueInCommons: 'Continue in Commons',
300
+ checkCommons: 'Check Commons on your phone',
301
+ openedInCommons: 'Opened in Commons',
302
+ confirming: 'Confirming identity',
303
+ confirmed: 'Identity confirmed',
304
+ },
305
+ context: {
306
+ unavailable: 'Unavailable right now',
307
+ operatedBy: 'Operated by {{name}}',
308
+ remove: 'Remove {{account}} from {{person}}',
309
+ },
310
+ principal: {
311
+ signOut: 'Sign {{name}} out of this device',
312
+ },
313
+ signInFailures: {
314
+ denied: 'Sign-in was declined in Commons.',
315
+ expired: 'This sign-in request expired. Please try again.',
316
+ network: "Couldn't reach Oxy. Check your connection and try again.",
317
+ notConfigured: "This app isn't set up for sign-in yet.",
318
+ unsupportedFlow: "This sign-in can't be completed here.",
319
+ claimFailed: "Sign-in was approved, but we couldn't finish it. Please try again.",
320
+ generic: 'Sign-in failed. Please try again.',
321
+ },
322
+ linkOpenFailed: "Couldn't open that link. Please try again.",
315
323
  },
316
- "reputation": {
317
- "faq": {
318
- "title": "Reputation FAQ",
319
- "subtitle": "Frequently asked questions about reputation",
320
- "search": "Search FAQ...",
321
- "noResults": "No FAQ items found matching \"{{query}}\"",
322
- "items": {
323
- "what": {
324
- "q": "What is reputation?",
325
- "a": "Reputation is a recognition of your positive actions in the Oxy Ecosystem. It cannot be sent or received directly."
324
+ reputation: {
325
+ faq: {
326
+ title: 'Reputation FAQ',
327
+ subtitle: 'Frequently asked questions about reputation',
328
+ search: 'Search FAQ...',
329
+ noResults: 'No FAQ items found matching "{{query}}"',
330
+ items: {
331
+ what: {
332
+ q: 'What is reputation?',
333
+ a: 'Reputation is a recognition of your positive actions in the Oxy Ecosystem. It cannot be sent or received directly.',
334
+ },
335
+ earn: {
336
+ q: 'How do I earn reputation?',
337
+ a: 'By helping others, reporting bugs, contributing content, and participating in community events.',
326
338
  },
327
- "earn": {
328
- "q": "How do I earn reputation?",
329
- "a": "By helping others, reporting bugs, contributing content, and participating in community events."
339
+ lose: {
340
+ q: 'Can I lose reputation?',
341
+ a: 'Reputation may be reduced for negative actions or breaking community rules.',
330
342
  },
331
- "lose": {
332
- "q": "Can I lose reputation?",
333
- "a": "Reputation may be reduced for negative actions or breaking community rules."
343
+ use: {
344
+ q: 'What can I do with reputation?',
345
+ a: 'Unlock rewards, badges, and special features as you earn more reputation.',
334
346
  },
335
- "use": {
336
- "q": "What can I do with reputation?",
337
- "a": "Unlock rewards, badges, and special features as you earn more reputation."
347
+ transfer: {
348
+ q: 'Can I transfer reputation to others?',
349
+ a: 'No, reputation cannot be sent or received. It is only earned by your actions.',
338
350
  },
339
- "transfer": {
340
- "q": "Can I transfer reputation to others?",
341
- "a": "No, reputation cannot be sent or received. It is only earned by your actions."
351
+ support: {
352
+ q: 'How do I get support?',
353
+ a: 'Contact Oxy support via the app or website for any reputation-related questions.',
342
354
  },
343
- "support": {
344
- "q": "How do I get support?",
345
- "a": "Contact Oxy support via the app or website for any reputation-related questions."
346
- }
347
- }
348
- },
349
- "rules": {
350
- "title": "Reputation Rules",
351
- "subtitle": "How to earn reputation points",
352
- "empty": "No rules found."
353
- },
354
- "leaderboard": {
355
- "title": "Reputation Leaderboard",
356
- "subtitle": "Top contributors in the community",
357
- "empty": "No leaderboard data."
358
- },
359
- "rewards": {
360
- "title": "Reputation Rewards",
361
- "subtitle": "Unlock special features and recognition",
362
- "intro": "Unlock special features and recognition by earning reputation!",
363
- "earlyAccess": {
364
- "title": "🎉 Early Access",
365
- "desc": "Get early access to new features with 100+ reputation."
366
- },
367
- "badge": {
368
- "title": "🏅 Community Badge",
369
- "desc": "Earn a special badge for 500+ reputation."
370
- },
371
- "featured": {
372
- "title": "🌟 Featured Member",
373
- "desc": "Be featured in the community for 1000+ reputation."
374
- },
375
- "moreComing": "More rewards coming soon!"
376
- },
377
- "center": {
378
- "balance": "Reputation Balance",
379
- "actions": {
380
- "leaderboard": "Leaderboard",
381
- "rules": "Rules",
382
- "about": "About",
383
- "rewards": "Rewards",
384
- "faq": "FAQ"
385
- },
386
- "info": "Reputation can only be earned by positive actions in the Oxy Ecosystem. It cannot be sent or received directly.",
387
- "history": "Reputation History",
388
- "noHistory": "No reputation history yet.",
389
- "noDescription": "No description"
390
- },
391
- "about": {
392
- "title": "About Reputation",
393
- "subtitle": "Learn about the reputation system (Oxy Trust)",
394
- "intro": "Reputation is a recognition of your positive actions in the Oxy Ecosystem. It cannot be sent or received directly, only earned by contributing to the community.",
395
- "how": {
396
- "title": "How to Earn Reputation",
397
- "help": "Helping other users",
398
- "report": "Reporting bugs",
399
- "contribute": "Contributing content",
400
- "participate": "Participating in events",
401
- "other": "Other positive actions"
402
- },
403
- "why": {
404
- "title": "Why Reputation?",
405
- "text": "Reputation unlocks special features and recognition in the Oxy Ecosystem. The more you contribute, the more you earn!"
406
- }
407
- },
408
- "achievements": {
409
- "unlocked": "Unlocked Achievements",
410
- "locked": "Locked Achievements",
411
- "firstStep": "First Step",
412
- "firstStepDesc": "Earned your first reputation point",
413
- "novice": "Novice",
414
- "noviceDesc": "Reached 10 reputation points",
415
- "contributor": "Contributor",
416
- "contributorDesc": "Reached 50 reputation points",
417
- "risingStar": "Rising Star",
418
- "risingStarDesc": "Reached 100 reputation points",
419
- "earlyAdopter": "Early Adopter",
420
- "earlyAdopterDesc": "Been part of the community from the start",
421
- "communityHero": "Community Hero",
422
- "communityHeroDesc": "Reached 500 reputation points",
423
- "legend": "Legend",
424
- "legendDesc": "Reached 1000 reputation points",
425
- "phoenix": "Phoenix",
426
- "phoenixDesc": "Reached 2500 reputation points",
427
- "unstoppable": "Unstoppable",
428
- "unstoppableDesc": "Reached 5000 reputation points",
429
- "bugHunter": "Bug Hunter",
430
- "bugHunterDesc": "Reported helpful bugs",
431
- "helper": "Helper",
432
- "helperDesc": "Helped 10 users",
433
- "streakMaster": "Streak Master",
434
- "streakMasterDesc": "7 day activity streak"
435
- }
355
+ },
356
+ },
357
+ rules: {
358
+ title: 'Reputation Rules',
359
+ subtitle: 'How to earn reputation points',
360
+ empty: 'No rules found.',
361
+ },
362
+ leaderboard: {
363
+ title: 'Reputation Leaderboard',
364
+ subtitle: 'Top contributors in the community',
365
+ empty: 'No leaderboard data.',
366
+ },
367
+ rewards: {
368
+ title: 'Reputation Rewards',
369
+ subtitle: 'Unlock special features and recognition',
370
+ intro: 'Unlock special features and recognition by earning reputation!',
371
+ earlyAccess: {
372
+ title: '🎉 Early Access',
373
+ desc: 'Get early access to new features with 100+ reputation.',
374
+ },
375
+ badge: {
376
+ title: '🏅 Community Badge',
377
+ desc: 'Earn a special badge for 500+ reputation.',
378
+ },
379
+ featured: {
380
+ title: '🌟 Featured Member',
381
+ desc: 'Be featured in the community for 1000+ reputation.',
382
+ },
383
+ moreComing: 'More rewards coming soon!',
384
+ },
385
+ center: {
386
+ balance: 'Reputation Balance',
387
+ actions: {
388
+ leaderboard: 'Leaderboard',
389
+ rules: 'Rules',
390
+ about: 'About',
391
+ rewards: 'Rewards',
392
+ faq: 'FAQ',
393
+ },
394
+ info: 'Reputation can only be earned by positive actions in the Oxy Ecosystem. It cannot be sent or received directly.',
395
+ history: 'Reputation History',
396
+ noHistory: 'No reputation history yet.',
397
+ noDescription: 'No description',
398
+ },
399
+ about: {
400
+ title: 'About Reputation',
401
+ subtitle: 'Learn about the reputation system (Oxy Trust)',
402
+ intro:
403
+ 'Reputation is a recognition of your positive actions in the Oxy Ecosystem. It cannot be sent or received directly, only earned by contributing to the community.',
404
+ how: {
405
+ title: 'How to Earn Reputation',
406
+ help: 'Helping other users',
407
+ report: 'Reporting bugs',
408
+ contribute: 'Contributing content',
409
+ participate: 'Participating in events',
410
+ other: 'Other positive actions',
411
+ },
412
+ why: {
413
+ title: 'Why Reputation?',
414
+ text: 'Reputation unlocks special features and recognition in the Oxy Ecosystem. The more you contribute, the more you earn!',
415
+ },
416
+ },
417
+ achievements: {
418
+ unlocked: 'Unlocked Achievements',
419
+ locked: 'Locked Achievements',
420
+ firstStep: 'First Step',
421
+ firstStepDesc: 'Earned your first reputation point',
422
+ novice: 'Novice',
423
+ noviceDesc: 'Reached 10 reputation points',
424
+ contributor: 'Contributor',
425
+ contributorDesc: 'Reached 50 reputation points',
426
+ risingStar: 'Rising Star',
427
+ risingStarDesc: 'Reached 100 reputation points',
428
+ earlyAdopter: 'Early Adopter',
429
+ earlyAdopterDesc: 'Been part of the community from the start',
430
+ communityHero: 'Community Hero',
431
+ communityHeroDesc: 'Reached 500 reputation points',
432
+ legend: 'Legend',
433
+ legendDesc: 'Reached 1000 reputation points',
434
+ phoenix: 'Phoenix',
435
+ phoenixDesc: 'Reached 2500 reputation points',
436
+ unstoppable: 'Unstoppable',
437
+ unstoppableDesc: 'Reached 5000 reputation points',
438
+ bugHunter: 'Bug Hunter',
439
+ bugHunterDesc: 'Reported helpful bugs',
440
+ helper: 'Helper',
441
+ helperDesc: 'Helped 10 users',
442
+ streakMaster: 'Streak Master',
443
+ streakMasterDesc: '7 day activity streak',
444
+ },
436
445
  },
437
- "editProfile": {
438
- "title": "Edit Profile",
439
- "subtitle": "Manage your profile and preferences",
440
- "notSet": "Not set",
441
- "sections": {
442
- "profilePicture": "Profile Picture",
443
- "basicInfo": "Basic Information",
444
- "about": "About You",
445
- "quickActions": "Quick Actions",
446
- "security": "Security"
447
- },
448
- "items": {
449
- "avatar": {
450
- "subtitle": "Update your profile photo"
451
- },
452
- "displayName": {
453
- "title": "Display Name",
454
- "subtitle": "This is how your name will appear to others",
455
- "add": "Add your display name",
456
- "firstName": "First Name",
457
- "firstNamePlaceholder": "Enter first name",
458
- "lastName": "Last Name",
459
- "lastNamePlaceholder": "Enter last name (optional)",
460
- "invalidChars": "Use letters, spaces, apostrophes, and name separators only"
461
- },
462
- "username": {
463
- "title": "Username",
464
- "subtitle": "Your unique identifier on the platform",
465
- "label": "Username",
466
- "placeholder": "Choose a username",
467
- "choose": "Choose a username",
468
- "required": "Username is required",
469
- "tooShort": "Username must be at least 3 characters"
470
- },
471
- "email": {
472
- "title": "Email",
473
- "subtitle": "Your primary email address",
474
- "label": "Email Address",
475
- "placeholder": "Enter your email address",
476
- "add": "Add your email address",
477
- "invalid": "Please enter a valid email address"
478
- },
479
- "bio": {
480
- "title": "Bio",
481
- "subtitle": "Tell people a bit about yourself",
482
- "label": "Bio",
483
- "placeholder": "Tell people about yourself"
484
- },
485
- "phone": {
486
- "title": "Phone Number",
487
- "subtitle": "Your contact phone number",
488
- "label": "Phone Number",
489
- "placeholder": "Enter your phone number"
490
- },
491
- "address": {
492
- "title": "Address",
493
- "subtitle": "Your physical address",
494
- "label": "Address",
495
- "placeholder": "Enter your address"
496
- },
497
- "birthday": {
498
- "title": "Birthday",
499
- "subtitle": "Your date of birth",
500
- "label": "Birthday",
501
- "placeholder": "YYYY-MM-DD",
502
- "day": "Day",
503
- "month": "Month",
504
- "year": "Year"
505
- },
506
- "locations": {
507
- "title": "Locations",
508
- "subtitle": "Places you've been or live",
509
- "add": "Add your locations",
510
- "placeholder": "Enter location name",
511
- "yourLocations": "Your Locations",
512
- "count": "{{count}} location added",
513
- "count_plural": "{{count}} locations added"
514
- },
515
- "links": {
516
- "title": "Links",
517
- "subtitle": "Share your website, social profiles, etc.",
518
- "add": "Add your links",
519
- "placeholder": "Enter URL",
520
- "yourLinks": "Your Links",
521
- "count": "{{count}} link added",
522
- "count_plural": "{{count}} links added"
523
- },
524
- "previewProfile": {
525
- "title": "Preview Profile",
526
- "subtitle": "See how your profile looks to others"
527
- },
528
- "privacySettings": {
529
- "title": "Privacy Settings",
530
- "subtitle": "Control who can see your profile"
531
- },
532
- "verifyAccount": {
533
- "title": "Verify Account",
534
- "subtitle": "Get a verified badge"
535
- }
536
- },
537
- "confirms": {
538
- "removeAvatar": "Remove your profile picture?"
539
- },
540
- "crop": {
541
- "title": "Crop avatar",
542
- "subtitle": "Pinch to zoom, drag to position",
543
- "noImage": "No image to crop",
544
- "reset": "Reset",
545
- "resetToCenter": "Reset to center",
546
- "confirm": "Use photo",
547
- "cancel": "Cancel",
548
- "saving": "Saving…",
549
- "helper": "The cropped circle is what will appear on your profile. Pinch to zoom, drag to position.",
550
- "zoom": "{{value}}×",
551
- "zoomIn": "Zoom in",
552
- "zoomOut": "Zoom out",
553
- "a11yImage": "Crop preview. Pinch to zoom and drag to reposition the image.",
554
- "a11yReset": "Reset crop to default position",
555
- "a11yResetAnnouncement": "Crop reset"
556
- },
557
- "toasts": {
558
- "profileUpdated": "Profile updated successfully",
559
- "updateFailed": "Failed to update profile",
560
- "avatarRemoved": "Avatar removed",
561
- "selectImage": "Please select an image file",
562
- "avatarUnchanged": "Avatar unchanged",
563
- "avatarSelected": "Avatar selected",
564
- "avatarUpdated": "Avatar updated",
565
- "updateAvatarFailed": "Failed to update avatar",
566
- "noActiveSession": "No active session",
567
- "cropMeasureFailed": "Could not measure the image",
568
- "cropNotReady": "Image not ready yet",
569
- "cropFailed": "Failed to crop image"
570
- },
571
- "changeAvatar": "Change avatar"
446
+ editProfile: {
447
+ title: 'Edit Profile',
448
+ subtitle: 'Manage your profile and preferences',
449
+ notSet: 'Not set',
450
+ sections: {
451
+ profilePicture: 'Profile Picture',
452
+ basicInfo: 'Basic Information',
453
+ about: 'About You',
454
+ quickActions: 'Quick Actions',
455
+ security: 'Security',
456
+ },
457
+ items: {
458
+ avatar: {
459
+ subtitle: 'Update your profile photo',
460
+ },
461
+ displayName: {
462
+ title: 'Display Name',
463
+ subtitle: 'This is how your name will appear to others',
464
+ add: 'Add your display name',
465
+ firstName: 'First Name',
466
+ firstNamePlaceholder: 'Enter first name',
467
+ lastName: 'Last Name',
468
+ lastNamePlaceholder: 'Enter last name (optional)',
469
+ invalidChars: 'Use letters, spaces, apostrophes, and name separators only',
470
+ },
471
+ username: {
472
+ title: 'Username',
473
+ subtitle: 'Your unique identifier on the platform',
474
+ label: 'Username',
475
+ placeholder: 'Choose a username',
476
+ choose: 'Choose a username',
477
+ required: 'Username is required',
478
+ tooShort: 'Username must be at least 3 characters',
479
+ },
480
+ email: {
481
+ title: 'Email',
482
+ subtitle: 'Your primary email address',
483
+ label: 'Email Address',
484
+ placeholder: 'Enter your email address',
485
+ add: 'Add your email address',
486
+ invalid: 'Please enter a valid email address',
487
+ },
488
+ bio: {
489
+ title: 'Bio',
490
+ subtitle: 'Tell people a bit about yourself',
491
+ label: 'Bio',
492
+ placeholder: 'Tell people about yourself',
493
+ },
494
+ phone: {
495
+ title: 'Phone Number',
496
+ subtitle: 'Your contact phone number',
497
+ label: 'Phone Number',
498
+ placeholder: 'Enter your phone number',
499
+ },
500
+ address: {
501
+ title: 'Address',
502
+ subtitle: 'Your physical address',
503
+ label: 'Address',
504
+ placeholder: 'Enter your address',
505
+ },
506
+ birthday: {
507
+ title: 'Birthday',
508
+ subtitle: 'Your date of birth',
509
+ label: 'Birthday',
510
+ placeholder: 'YYYY-MM-DD',
511
+ day: 'Day',
512
+ month: 'Month',
513
+ year: 'Year',
514
+ },
515
+ locations: {
516
+ title: 'Locations',
517
+ subtitle: "Places you've been or live",
518
+ add: 'Add your locations',
519
+ placeholder: 'Enter location name',
520
+ yourLocations: 'Your Locations',
521
+ count: '{{count}} location added',
522
+ count_plural: '{{count}} locations added',
523
+ },
524
+ links: {
525
+ title: 'Links',
526
+ subtitle: 'Share your website, social profiles, etc.',
527
+ add: 'Add your links',
528
+ placeholder: 'Enter URL',
529
+ yourLinks: 'Your Links',
530
+ count: '{{count}} link added',
531
+ count_plural: '{{count}} links added',
532
+ },
533
+ previewProfile: {
534
+ title: 'Preview Profile',
535
+ subtitle: 'See how your profile looks to others',
536
+ },
537
+ privacySettings: {
538
+ title: 'Privacy Settings',
539
+ subtitle: 'Control who can see your profile',
540
+ },
541
+ verifyAccount: {
542
+ title: 'Verify Account',
543
+ subtitle: 'Get a verified badge',
544
+ },
545
+ },
546
+ confirms: {
547
+ removeAvatar: 'Remove your profile picture?',
548
+ },
549
+ crop: {
550
+ title: 'Crop avatar',
551
+ subtitle: 'Pinch to zoom, drag to position',
552
+ noImage: 'No image to crop',
553
+ reset: 'Reset',
554
+ resetToCenter: 'Reset to center',
555
+ confirm: 'Use photo',
556
+ cancel: 'Cancel',
557
+ saving: 'Saving…',
558
+ helper:
559
+ 'The cropped circle is what will appear on your profile. Pinch to zoom, drag to position.',
560
+ zoom: '{{value}}×',
561
+ zoomIn: 'Zoom in',
562
+ zoomOut: 'Zoom out',
563
+ a11yImage: 'Crop preview. Pinch to zoom and drag to reposition the image.',
564
+ a11yReset: 'Reset crop to default position',
565
+ a11yResetAnnouncement: 'Crop reset',
566
+ },
567
+ toasts: {
568
+ profileUpdated: 'Profile updated successfully',
569
+ updateFailed: 'Failed to update profile',
570
+ avatarRemoved: 'Avatar removed',
571
+ selectImage: 'Please select an image file',
572
+ avatarUnchanged: 'Avatar unchanged',
573
+ avatarSelected: 'Avatar selected',
574
+ avatarUpdated: 'Avatar updated',
575
+ updateAvatarFailed: 'Failed to update avatar',
576
+ noActiveSession: 'No active session',
577
+ cropMeasureFailed: 'Could not measure the image',
578
+ cropNotReady: 'Image not ready yet',
579
+ cropFailed: 'Failed to crop image',
580
+ },
581
+ changeAvatar: 'Change avatar',
572
582
  },
573
- "changeAvatar": {
574
- "title": "Change profile picture",
575
- "sources": {
576
- "upload": {
577
- "title": "Upload from device",
578
- "description": "Choose a photo from your gallery"
579
- },
580
- "camera": {
581
- "title": "Take a picture",
582
- "description": "Use your camera"
583
- },
584
- "files": {
585
- "title": "My Oxy files",
586
- "description": "Pick an image you already uploaded"
587
- },
588
- "remove": {
589
- "title": "Remove current photo",
590
- "description": "Go back to your initials"
591
- }
592
- },
593
- "remove": {
594
- "confirmTitle": "Remove profile picture?",
595
- "confirmMessage": "Your profile will show your initials instead. You can add a new photo at any time.",
596
- "confirmLabel": "Remove"
597
- },
598
- "permission": {
599
- "libraryDenied": "Oxy needs access to your photos to upload a picture.",
600
- "cameraDenied": "Oxy needs access to your camera to take a picture.",
601
- "openSettings": "Open settings"
602
- },
603
- "errors": {
604
- "pickerUnavailable": "Photo picking is not available on this device.",
605
- "cameraUnavailable": "The camera is not available on this device.",
606
- "pickFailed": "Could not open the photo picker.",
607
- "cameraFailed": "Could not open the camera.",
608
- "loadImageFailed": "Could not load the selected image."
609
- },
610
- "a11y": {
611
- "currentPhoto": "Your current profile picture"
612
- }
583
+ changeAvatar: {
584
+ title: 'Change profile picture',
585
+ sources: {
586
+ upload: {
587
+ title: 'Upload from device',
588
+ description: 'Choose a photo from your gallery',
589
+ },
590
+ camera: {
591
+ title: 'Take a picture',
592
+ description: 'Use your camera',
593
+ },
594
+ files: {
595
+ title: 'My Oxy files',
596
+ description: 'Pick an image you already uploaded',
597
+ },
598
+ remove: {
599
+ title: 'Remove current photo',
600
+ description: 'Go back to your initials',
601
+ },
602
+ },
603
+ remove: {
604
+ confirmTitle: 'Remove profile picture?',
605
+ confirmMessage:
606
+ 'Your profile will show your initials instead. You can add a new photo at any time.',
607
+ confirmLabel: 'Remove',
608
+ },
609
+ permission: {
610
+ libraryDenied: 'Oxy needs access to your photos to upload a picture.',
611
+ cameraDenied: 'Oxy needs access to your camera to take a picture.',
612
+ openSettings: 'Open settings',
613
+ },
614
+ errors: {
615
+ pickerUnavailable: 'Photo picking is not available on this device.',
616
+ cameraUnavailable: 'The camera is not available on this device.',
617
+ pickFailed: 'Could not open the photo picker.',
618
+ cameraFailed: 'Could not open the camera.',
619
+ loadImageFailed: 'Could not load the selected image.',
620
+ },
621
+ a11y: {
622
+ currentPhoto: 'Your current profile picture',
623
+ },
613
624
  },
614
- "accountOverview": {
615
- "title": "Account",
616
- "sections": {
617
- "profile": "Profile",
618
- "accountSettings": "Account Settings",
619
- "accountManagement": "Account Management",
620
- "additionalAccounts": "Additional Accounts",
621
- "quickActions": "Quick Actions",
622
- "support": "Support & Settings",
623
- "actions": "Account Actions"
624
- },
625
- "actions": {
626
- "manage": "Manage"
627
- },
628
- "loadingAdditional": {
629
- "title": "Loading accounts...",
630
- "subtitle": "Please wait while we load your additional accounts"
631
- },
632
- "additional": {
633
- "noAccounts": {
634
- "title": "No other accounts",
635
- "subtitle": "Add another account to switch between them"
636
- }
637
- },
638
- "items": {
639
- "addAccount": {
640
- "title": "Add Another Account",
641
- "subtitle": "Sign in with a different account"
642
- },
643
- "signOutAll": {
644
- "title": "Sign out of all accounts",
645
- "subtitle": "Remove all accounts from this device"
646
- },
647
- "accountSwitcher": {
648
- "switchPrompt": "Switch to {{username}}?",
649
- "titleShow": "Show Account Switcher",
650
- "titleHide": "Hide Account Switcher",
651
- "subtitleHide": "Hide account switcher",
652
- "subtitleSwitchBetween": "Switch between {{count}} accounts",
653
- "subtitleLoading": "Loading additional accounts...",
654
- "subtitleManageMultiple": "Manage multiple accounts"
655
- },
656
- "editProfile": {
657
- "title": "Edit Profile",
658
- "subtitle": "Update your personal information"
659
- },
660
- "security": {
661
- "title": "Security & Privacy",
662
- "subtitle": "Security and privacy settings"
663
- },
664
- "notifications": {
665
- "title": "Notifications",
666
- "subtitle": "Manage your notification preferences"
667
- },
668
- "billing": {
669
- "title": "Billing Management",
670
- "subtitle": "Payment methods and invoices",
671
- "coming": "Billing management feature coming soon!"
672
- },
673
- "downloadData": {
674
- "title": "Download My Data",
675
- "subtitle": "Export your account information",
676
- "confirmTitle": "Download Account Data",
677
- "confirmMessage": "Choose the format for your account data export:",
678
- "downloading": "Preparing download...",
679
- "success": "Data downloaded successfully",
680
- "error": "Failed to download data"
681
- },
682
- "deleteAccount": {
683
- "title": "Delete Account",
684
- "subtitle": "Permanently delete your account",
685
- "confirmTitle": "Delete Account",
686
- "confirmMessage": "This action cannot be undone. This will permanently delete your account and all associated data.\n\nAre you sure you want to delete your account?",
687
- "finalConfirm": "This is your final warning. Your account will be permanently deleted and cannot be recovered. Type \"{{username}}\" to confirm.",
688
- "confirm": "Delete Forever",
689
- "passwordRequired": "Password confirmation required. Please use a modal with password input to complete account deletion.",
690
- "missingFields": "Password and confirmation required",
691
- "confirmMismatch": "Confirmation text does not match username",
692
- "success": "Account deleted successfully",
693
- "error": "Failed to delete account"
694
- },
695
- "preferences": {
696
- "title": "Account Preferences",
697
- "subtitle": "Customize your account experience",
698
- "coming": "Account preferences coming soon!"
699
- },
700
- "help": {
701
- "title": "Help & Support",
702
- "subtitle": "Get help with your account",
703
- "coming": "Help & support feature coming soon!"
704
- },
705
- "connectedApps": {
706
- "title": "Connected Apps",
707
- "subtitle": "Manage third-party app access",
708
- "coming": "Connected apps feature coming soon!"
709
- },
710
- "about": {
711
- "title": "About",
712
- "subtitle": "App version and information"
713
- },
714
- "signOut": {
715
- "title": "Sign Out",
716
- "subtitle": "Sign out of your current account"
717
- },
718
- "history": {
719
- "title": "History",
720
- "subtitle": "View and manage your search history"
721
- },
722
- "searchSettings": {
723
- "title": "Search Settings",
724
- "subtitle": "SafeSearch and personalization"
725
- },
726
- "language": {
727
- "title": "Language",
728
- "subtitle": "Choose your preferred language"
729
- },
730
- "privacyPolicy": {
731
- "title": "Privacy Policy",
732
- "subtitle": "How we handle your data"
733
- },
734
- "termsOfService": {
735
- "title": "Terms of Service",
736
- "subtitle": "Terms and conditions of use"
737
- }
738
- },
739
- "manageComing": "Manage your Oxy Account feature coming soon!",
740
- "addAccountComing": "Add another account feature coming soon!"
625
+ accountOverview: {
626
+ title: 'Account',
627
+ sections: {
628
+ profile: 'Profile',
629
+ accountSettings: 'Account Settings',
630
+ accountManagement: 'Account Management',
631
+ additionalAccounts: 'Additional Accounts',
632
+ quickActions: 'Quick Actions',
633
+ support: 'Support & Settings',
634
+ actions: 'Account Actions',
635
+ },
636
+ actions: {
637
+ manage: 'Manage',
638
+ },
639
+ loadingAdditional: {
640
+ title: 'Loading accounts...',
641
+ subtitle: 'Please wait while we load your additional accounts',
642
+ },
643
+ additional: {
644
+ noAccounts: {
645
+ title: 'No other accounts',
646
+ subtitle: 'Add another account to switch between them',
647
+ },
648
+ },
649
+ items: {
650
+ addAccount: {
651
+ title: 'Add Another Account',
652
+ subtitle: 'Sign in with a different account',
653
+ },
654
+ signOutAll: {
655
+ title: 'Sign out of all accounts',
656
+ subtitle: 'Remove all accounts from this device',
657
+ },
658
+ accountSwitcher: {
659
+ switchPrompt: 'Switch to {{username}}?',
660
+ titleShow: 'Show Account Switcher',
661
+ titleHide: 'Hide Account Switcher',
662
+ subtitleHide: 'Hide account switcher',
663
+ subtitleSwitchBetween: 'Switch between {{count}} accounts',
664
+ subtitleLoading: 'Loading additional accounts...',
665
+ subtitleManageMultiple: 'Manage multiple accounts',
666
+ },
667
+ editProfile: {
668
+ title: 'Edit Profile',
669
+ subtitle: 'Update your personal information',
670
+ },
671
+ security: {
672
+ title: 'Security & Privacy',
673
+ subtitle: 'Security and privacy settings',
674
+ },
675
+ notifications: {
676
+ title: 'Notifications',
677
+ subtitle: 'Manage your notification preferences',
678
+ },
679
+ billing: {
680
+ title: 'Billing Management',
681
+ subtitle: 'Payment methods and invoices',
682
+ coming: 'Billing management feature coming soon!',
683
+ },
684
+ downloadData: {
685
+ title: 'Download My Data',
686
+ subtitle: 'Export your account information',
687
+ confirmTitle: 'Download Account Data',
688
+ confirmMessage: 'Choose the format for your account data export:',
689
+ downloading: 'Preparing download...',
690
+ success: 'Data downloaded successfully',
691
+ error: 'Failed to download data',
692
+ },
693
+ deleteAccount: {
694
+ title: 'Delete Account',
695
+ subtitle: 'Permanently delete your account',
696
+ confirmTitle: 'Delete Account',
697
+ confirmMessage:
698
+ 'This action cannot be undone. This will permanently delete your account and all associated data.\n\nAre you sure you want to delete your account?',
699
+ finalConfirm:
700
+ 'This is your final warning. Your account will be permanently deleted and cannot be recovered. Type "{{username}}" to confirm.',
701
+ confirm: 'Delete Forever',
702
+ passwordRequired:
703
+ 'Password confirmation required. Please use a modal with password input to complete account deletion.',
704
+ missingFields: 'Password and confirmation required',
705
+ confirmMismatch: 'Confirmation text does not match username',
706
+ success: 'Account deleted successfully',
707
+ error: 'Failed to delete account',
708
+ },
709
+ preferences: {
710
+ title: 'Account Preferences',
711
+ subtitle: 'Customize your account experience',
712
+ coming: 'Account preferences coming soon!',
713
+ },
714
+ help: {
715
+ title: 'Help & Support',
716
+ subtitle: 'Get help with your account',
717
+ coming: 'Help & support feature coming soon!',
718
+ },
719
+ connectedApps: {
720
+ title: 'Connected Apps',
721
+ subtitle: 'Manage third-party app access',
722
+ coming: 'Connected apps feature coming soon!',
723
+ },
724
+ about: {
725
+ title: 'About',
726
+ subtitle: 'App version and information',
727
+ },
728
+ signOut: {
729
+ title: 'Sign Out',
730
+ subtitle: 'Sign out of your current account',
731
+ },
732
+ history: {
733
+ title: 'History',
734
+ subtitle: 'View and manage your search history',
735
+ },
736
+ searchSettings: {
737
+ title: 'Search Settings',
738
+ subtitle: 'SafeSearch and personalization',
739
+ },
740
+ language: {
741
+ title: 'Language',
742
+ subtitle: 'Choose your preferred language',
743
+ },
744
+ privacyPolicy: {
745
+ title: 'Privacy Policy',
746
+ subtitle: 'How we handle your data',
747
+ },
748
+ termsOfService: {
749
+ title: 'Terms of Service',
750
+ subtitle: 'Terms and conditions of use',
751
+ },
752
+ },
753
+ manageComing: 'Manage your Oxy Account feature coming soon!',
754
+ addAccountComing: 'Add another account feature coming soon!',
741
755
  },
742
- "history": {
743
- "title": "History",
744
- "actions": "Actions",
745
- "recent": "Recent History",
746
- "loading": "Loading history...",
747
- "empty": "No history yet",
748
- "justNow": "Just now",
749
- "minutesAgo": "minutes ago",
750
- "hoursAgo": "hours ago",
751
- "daysAgo": "days ago",
752
- "deleteLast15Minutes": {
753
- "title": "Delete Last 15 Minutes",
754
- "subtitle": "Remove recent history entries",
755
- "confirm": "Delete last 15 minutes of history?",
756
- "success": "Last 15 minutes deleted",
757
- "error": "Failed to delete history"
758
- },
759
- "clearAll": {
760
- "title": "Clear All History",
761
- "subtitle": "Remove all history entries",
762
- "confirm": "Clear all history? This cannot be undone.",
763
- "success": "History cleared",
764
- "error": "Failed to clear history"
765
- }
756
+ history: {
757
+ title: 'History',
758
+ actions: 'Actions',
759
+ recent: 'Recent History',
760
+ loading: 'Loading history...',
761
+ empty: 'No history yet',
762
+ justNow: 'Just now',
763
+ minutesAgo: 'minutes ago',
764
+ hoursAgo: 'hours ago',
765
+ daysAgo: 'days ago',
766
+ deleteLast15Minutes: {
767
+ title: 'Delete Last 15 Minutes',
768
+ subtitle: 'Remove recent history entries',
769
+ confirm: 'Delete last 15 minutes of history?',
770
+ success: 'Last 15 minutes deleted',
771
+ error: 'Failed to delete history',
772
+ },
773
+ clearAll: {
774
+ title: 'Clear All History',
775
+ subtitle: 'Remove all history entries',
776
+ confirm: 'Clear all history? This cannot be undone.',
777
+ success: 'History cleared',
778
+ error: 'Failed to clear history',
779
+ },
766
780
  },
767
- "searchSettings": {
768
- "title": "Search Settings",
769
- "safeSearch": {
770
- "title": "SafeSearch",
771
- "label": "Enable SafeSearch",
772
- "description": "Filter out explicit content from search results",
773
- "updated": "SafeSearch setting updated",
774
- "error": "Failed to update SafeSearch"
775
- },
776
- "personalization": {
777
- "title": "Search Personalization",
778
- "label": "Personalized Search",
779
- "description": "Use your activity to improve search results",
780
- "updated": "Search personalization updated",
781
- "error": "Failed to update personalization"
782
- },
783
- "searchPersonalization": {
784
- "error": "Failed to update personalization"
785
- }
781
+ searchSettings: {
782
+ title: 'Search Settings',
783
+ safeSearch: {
784
+ title: 'SafeSearch',
785
+ label: 'Enable SafeSearch',
786
+ description: 'Filter out explicit content from search results',
787
+ updated: 'SafeSearch setting updated',
788
+ error: 'Failed to update SafeSearch',
789
+ },
790
+ personalization: {
791
+ title: 'Search Personalization',
792
+ label: 'Personalized Search',
793
+ description: 'Use your activity to improve search results',
794
+ updated: 'Search personalization updated',
795
+ error: 'Failed to update personalization',
796
+ },
797
+ searchPersonalization: {
798
+ error: 'Failed to update personalization',
799
+ },
786
800
  },
787
- "privacySettings": {
788
- "title": "Privacy Settings",
789
- "loadError": "Failed to load privacy settings",
790
- "updated": "Privacy settings updated",
791
- "updateError": "Failed to update privacy setting",
792
- "sections": {
793
- "account": "ACCOUNT PRIVACY",
794
- "interactions": "INTERACTIONS",
795
- "activity": "ACTIVITY & DATA",
796
- "content": "CONTENT & SAFETY",
797
- "blockedUsers": "BLOCKED USERS",
798
- "restrictedUsers": "RESTRICTED USERS"
799
- },
800
- "noBlockedUsers": "No blocked users",
801
- "noRestrictedUsers": "No restricted users",
802
- "unblock": "Unblock",
803
- "unblockError": "Failed to unblock user",
804
- "unrestrict": "Unrestrict",
805
- "unrestrictError": "Failed to unrestrict user",
806
- "restrictedDescription": "Limited interactions",
807
- "userUnblocked": "User unblocked",
808
- "userUnrestricted": "User unrestricted",
809
- "isPrivateAccount": "Private Account",
810
- "isPrivateAccountDesc": "Only approved followers can see your posts",
811
- "profileVisibility": "Profile Visibility",
812
- "profileVisibilityDesc": "Control who can view your profile",
813
- "hideOnlineStatus": "Hide Online Status",
814
- "hideOnlineStatusDesc": "Don't show when you're online",
815
- "hideLastSeen": "Hide Last Seen",
816
- "hideLastSeenDesc": "Don't show when you were last active",
817
- "allowTagging": "Allow Tagging",
818
- "allowTaggingDesc": "Let others tag you in posts",
819
- "allowMentions": "Allow Mentions",
820
- "allowMentionsDesc": "Let others mention you",
821
- "allowDirectMessages": "Allow Direct Messages",
822
- "allowDirectMessagesDesc": "Let others send you direct messages",
823
- "hideReadReceipts": "Hide Read Receipts",
824
- "hideReadReceiptsDesc": "Don't show read receipts in messages",
825
- "showActivity": "Show Activity Status",
826
- "showActivityDesc": "Display your activity on your profile",
827
- "dataSharing": "Data Sharing",
828
- "dataSharingDesc": "Allow sharing data for personalization",
829
- "locationSharing": "Location Sharing",
830
- "locationSharingDesc": "Share your location",
831
- "analyticsSharing": "Analytics Sharing",
832
- "analyticsSharingDesc": "Allow analytics data collection",
833
- "sensitiveContent": "Show Sensitive Content",
834
- "sensitiveContentDesc": "Allow sensitive or explicit content",
835
- "autoFilter": "Auto Filter",
836
- "autoFilterDesc": "Automatically filter inappropriate content",
837
- "muteKeywords": "Mute Keywords",
838
- "muteKeywordsDesc": "Hide posts containing muted keywords",
839
- "blockScreenshots": "Block Screenshots",
840
- "blockScreenshotsDesc": "Prevent screenshots of your content"
801
+ privacySettings: {
802
+ title: 'Privacy Settings',
803
+ loadError: 'Failed to load privacy settings',
804
+ updated: 'Privacy settings updated',
805
+ updateError: 'Failed to update privacy setting',
806
+ sections: {
807
+ account: 'ACCOUNT PRIVACY',
808
+ interactions: 'INTERACTIONS',
809
+ activity: 'ACTIVITY & DATA',
810
+ content: 'CONTENT & SAFETY',
811
+ blockedUsers: 'BLOCKED USERS',
812
+ restrictedUsers: 'RESTRICTED USERS',
813
+ },
814
+ noBlockedUsers: 'No blocked users',
815
+ noRestrictedUsers: 'No restricted users',
816
+ unblock: 'Unblock',
817
+ unblockError: 'Failed to unblock user',
818
+ unrestrict: 'Unrestrict',
819
+ unrestrictError: 'Failed to unrestrict user',
820
+ restrictedDescription: 'Limited interactions',
821
+ userUnblocked: 'User unblocked',
822
+ userUnrestricted: 'User unrestricted',
823
+ isPrivateAccount: 'Private Account',
824
+ isPrivateAccountDesc: 'Only approved followers can see your posts',
825
+ profileVisibility: 'Profile Visibility',
826
+ profileVisibilityDesc: 'Control who can view your profile',
827
+ hideOnlineStatus: 'Hide Online Status',
828
+ hideOnlineStatusDesc: "Don't show when you're online",
829
+ hideLastSeen: 'Hide Last Seen',
830
+ hideLastSeenDesc: "Don't show when you were last active",
831
+ allowTagging: 'Allow Tagging',
832
+ allowTaggingDesc: 'Let others tag you in posts',
833
+ allowMentions: 'Allow Mentions',
834
+ allowMentionsDesc: 'Let others mention you',
835
+ allowDirectMessages: 'Allow Direct Messages',
836
+ allowDirectMessagesDesc: 'Let others send you direct messages',
837
+ hideReadReceipts: 'Hide Read Receipts',
838
+ hideReadReceiptsDesc: "Don't show read receipts in messages",
839
+ showActivity: 'Show Activity Status',
840
+ showActivityDesc: 'Display your activity on your profile',
841
+ dataSharing: 'Data Sharing',
842
+ dataSharingDesc: 'Allow sharing data for personalization',
843
+ locationSharing: 'Location Sharing',
844
+ locationSharingDesc: 'Share your location',
845
+ analyticsSharing: 'Analytics Sharing',
846
+ analyticsSharingDesc: 'Allow analytics data collection',
847
+ sensitiveContent: 'Show Sensitive Content',
848
+ sensitiveContentDesc: 'Allow sensitive or explicit content',
849
+ autoFilter: 'Auto Filter',
850
+ autoFilterDesc: 'Automatically filter inappropriate content',
851
+ muteKeywords: 'Mute Keywords',
852
+ muteKeywordsDesc: 'Hide posts containing muted keywords',
853
+ blockScreenshots: 'Block Screenshots',
854
+ blockScreenshotsDesc: 'Prevent screenshots of your content',
841
855
  },
842
- "accountVerification": {
843
- "title": "Account Verification",
844
- "description": "Request a verified badge for your account. Verified accounts help establish authenticity and credibility.",
845
- "sections": {
846
- "request": "VERIFICATION REQUEST",
847
- "benefits": "What verification gives you"
848
- },
849
- "reasonLabel": "Reason for Verification *",
850
- "reasonPlaceholder": "Explain why you need a verified badge (e.g., public figure, brand, organization)",
851
- "reasonRequired": "Please provide a reason for verification",
852
- "evidenceLabel": "Evidence (Optional)",
853
- "evidencePlaceholder": "Provide any supporting documentation or links (e.g., official website, social media profiles)",
854
- "submit": "Submit Request",
855
- "submitError": "Failed to submit verification request",
856
- "successTitle": "Request Submitted",
857
- "successMessage": "Your verification request has been submitted. Request ID: {{requestId}}",
858
- "ok": "OK",
859
- "error": "Service not available",
860
- "note": "Note: Verification requests are reviewed manually and may take several days. We will notify you once your request has been reviewed.",
861
- "heroTitle": "Get a verified badge",
862
- "benefits": {
863
- "authenticity": "Confirms your identity is authentic and trusted",
864
- "badge": "Displays a verified badge across the platform",
865
- "credibility": "Builds credibility with people who follow you"
866
- }
856
+ accountVerification: {
857
+ title: 'Account Verification',
858
+ description:
859
+ 'Request a verified badge for your account. Verified accounts help establish authenticity and credibility.',
860
+ sections: {
861
+ request: 'VERIFICATION REQUEST',
862
+ benefits: 'What verification gives you',
863
+ },
864
+ reasonLabel: 'Reason for Verification *',
865
+ reasonPlaceholder:
866
+ 'Explain why you need a verified badge (e.g., public figure, brand, organization)',
867
+ reasonRequired: 'Please provide a reason for verification',
868
+ evidenceLabel: 'Evidence (Optional)',
869
+ evidencePlaceholder:
870
+ 'Provide any supporting documentation or links (e.g., official website, social media profiles)',
871
+ submit: 'Submit Request',
872
+ submitError: 'Failed to submit verification request',
873
+ successTitle: 'Request Submitted',
874
+ successMessage: 'Your verification request has been submitted. Request ID: {{requestId}}',
875
+ ok: 'OK',
876
+ error: 'Service not available',
877
+ note: 'Note: Verification requests are reviewed manually and may take several days. We will notify you once your request has been reviewed.',
878
+ heroTitle: 'Get a verified badge',
879
+ benefits: {
880
+ authenticity: 'Confirms your identity is authentic and trusted',
881
+ badge: 'Displays a verified badge across the platform',
882
+ credibility: 'Builds credibility with people who follow you',
883
+ },
867
884
  },
868
- "help": {
869
- "title": "Help & Support",
870
- "options": "Get Help",
871
- "resources": "Resources",
872
- "contactError": "Failed to open email client",
873
- "reportError": "Failed to open email client",
874
- "linkError": "Failed to open link",
875
- "faqComing": "FAQ coming soon",
876
- "faq": {
877
- "title": "Frequently Asked Questions",
878
- "subtitle": "Find answers to common questions"
879
- },
880
- "contact": {
881
- "title": "Contact Support",
882
- "subtitle": "Get help from our support team"
883
- },
884
- "reportBug": {
885
- "title": "Report a Bug",
886
- "subtitle": "Help us improve by reporting issues"
887
- },
888
- "documentation": {
889
- "title": "Documentation",
890
- "subtitle": "User guides and tutorials"
891
- },
892
- "community": {
893
- "title": "Community",
894
- "subtitle": "Join our community"
895
- },
896
- "developersPortal": {
897
- "title": "Developers Portal",
898
- "subtitle": "API documentation and developer resources"
899
- }
885
+ help: {
886
+ title: 'Help & Support',
887
+ options: 'Get Help',
888
+ resources: 'Resources',
889
+ contactError: 'Failed to open email client',
890
+ reportError: 'Failed to open email client',
891
+ linkError: 'Failed to open link',
892
+ faqComing: 'FAQ coming soon',
893
+ faq: {
894
+ title: 'Frequently Asked Questions',
895
+ subtitle: 'Find answers to common questions',
896
+ },
897
+ contact: {
898
+ title: 'Contact Support',
899
+ subtitle: 'Get help from our support team',
900
+ },
901
+ reportBug: {
902
+ title: 'Report a Bug',
903
+ subtitle: 'Help us improve by reporting issues',
904
+ },
905
+ documentation: {
906
+ title: 'Documentation',
907
+ subtitle: 'User guides and tutorials',
908
+ },
909
+ community: {
910
+ title: 'Community',
911
+ subtitle: 'Join our community',
912
+ },
913
+ developersPortal: {
914
+ title: 'Developers Portal',
915
+ subtitle: 'API documentation and developer resources',
916
+ },
900
917
  },
901
- "legal": {
902
- "title": "Legal Documents",
903
- "documents": "Documents",
904
- "policies": "Policies & Guidelines",
905
- "opening": "Opening document...",
906
- "openError": "Failed to open document",
907
- "privacyPolicy": {
908
- "title": "Privacy Policy",
909
- "subtitle": "How we handle your data"
910
- },
911
- "termsOfService": {
912
- "title": "Terms of Service",
913
- "subtitle": "Terms and conditions of use"
914
- },
915
- "communityGuidelines": {
916
- "title": "Community Guidelines",
917
- "subtitle": "Rules and expectations for our community"
918
- },
919
- "dataRetention": {
920
- "title": "Data Retention Policy",
921
- "subtitle": "How long we keep your data"
922
- },
923
- "contentModeration": {
924
- "title": "Content Moderation Policy",
925
- "subtitle": "How we moderate content"
926
- },
927
- "childSafety": {
928
- "title": "Child Safety Policy",
929
- "subtitle": "Protecting minors on our platform"
930
- },
931
- "cookiePolicy": {
932
- "title": "Cookie Policy",
933
- "subtitle": "How we use cookies and similar technologies"
934
- }
918
+ legal: {
919
+ title: 'Legal Documents',
920
+ documents: 'Documents',
921
+ policies: 'Policies & Guidelines',
922
+ opening: 'Opening document...',
923
+ openError: 'Failed to open document',
924
+ privacyPolicy: {
925
+ title: 'Privacy Policy',
926
+ subtitle: 'How we handle your data',
927
+ },
928
+ termsOfService: {
929
+ title: 'Terms of Service',
930
+ subtitle: 'Terms and conditions of use',
931
+ },
932
+ communityGuidelines: {
933
+ title: 'Community Guidelines',
934
+ subtitle: 'Rules and expectations for our community',
935
+ },
936
+ dataRetention: {
937
+ title: 'Data Retention Policy',
938
+ subtitle: 'How long we keep your data',
939
+ },
940
+ contentModeration: {
941
+ title: 'Content Moderation Policy',
942
+ subtitle: 'How we moderate content',
943
+ },
944
+ childSafety: {
945
+ title: 'Child Safety Policy',
946
+ subtitle: 'Protecting minors on our platform',
947
+ },
948
+ cookiePolicy: {
949
+ title: 'Cookie Policy',
950
+ subtitle: 'How we use cookies and similar technologies',
951
+ },
935
952
  },
936
- "userList": {
937
- "followers": "Followers",
938
- "following": "Following",
939
- "noFollowers": "No followers yet",
940
- "noFollowersDesc": "When people follow this user, they will appear here.",
941
- "noFollowing": "Not following anyone",
942
- "noFollowingDesc": "When this user follows people, they will appear here."
953
+ userList: {
954
+ followers: 'Followers',
955
+ following: 'Following',
956
+ noFollowers: 'No followers yet',
957
+ noFollowersDesc: 'When people follow this user, they will appear here.',
958
+ noFollowing: 'Not following anyone',
959
+ noFollowingDesc: 'When this user follows people, they will appear here.',
943
960
  },
944
- "common": {
945
- "stepOf": "Step {{step}} of {{total}}",
946
- "errors": {
947
- "signOutFailed": "There was a problem signing you out. Please try again.",
948
- "signOutAllFailed": "There was a problem signing out of all accounts. Please try again."
949
- },
950
- "confirms": {
951
- "signOut": "Are you sure you want to sign out?",
952
- "signOutAll": "Are you sure you want to sign out of all accounts?"
953
- },
954
- "status": {
955
- "notSignedIn": "Not signed in",
956
- "loading": "Loading..."
957
- },
958
- "actions": {
959
- "back": "Back",
960
- "continue": "Continue",
961
- "next": "Next",
962
- "getStarted": "Get Started",
963
- "createAccount": "Create Account",
964
- "signIn": "Sign In",
965
- "signOut": "Sign Out",
966
- "verify": "Verify",
967
- "resetPassword": "Reset Password",
968
- "signedOut": "Signed out",
969
- "close": "Close",
970
- "delete": "Delete",
971
- "tryAgain": "Try again"
972
- },
973
- "cancel": "Cancel",
974
- "revoke": "Revoke",
975
- "retry": "Retry",
976
- "save": "Save",
977
- "saved": "Saved successfully",
978
- "saving": "Saving...",
979
- "unnamed": "Unnamed",
980
- "accountFallback": "Account {{handle}}",
981
- "links": {
982
- "recoverAccount": "Recover your account",
983
- "signUp": "Sign Up"
984
- },
985
- "labels": {
986
- "username": "Username",
987
- "email": "Email",
988
- "password": "Password",
989
- "confirmPassword": "Confirm Password"
990
- },
991
- "back": "Back",
992
- "remove": "Remove"
961
+ common: {
962
+ stepOf: 'Step {{step}} of {{total}}',
963
+ errors: {
964
+ signOutFailed: 'There was a problem signing you out. Please try again.',
965
+ signOutAllFailed: 'There was a problem signing out of all accounts. Please try again.',
966
+ },
967
+ confirms: {
968
+ signOut: 'Are you sure you want to sign out?',
969
+ signOutAll: 'Are you sure you want to sign out of all accounts?',
970
+ },
971
+ status: {
972
+ notSignedIn: 'Not signed in',
973
+ loading: 'Loading...',
974
+ },
975
+ actions: {
976
+ back: 'Back',
977
+ continue: 'Continue',
978
+ next: 'Next',
979
+ getStarted: 'Get Started',
980
+ createAccount: 'Create Account',
981
+ signIn: 'Sign In',
982
+ signOut: 'Sign Out',
983
+ verify: 'Verify',
984
+ resetPassword: 'Reset Password',
985
+ signedOut: 'Signed out',
986
+ close: 'Close',
987
+ delete: 'Delete',
988
+ tryAgain: 'Try again',
989
+ },
990
+ cancel: 'Cancel',
991
+ revoke: 'Revoke',
992
+ retry: 'Retry',
993
+ save: 'Save',
994
+ saved: 'Saved successfully',
995
+ saving: 'Saving...',
996
+ unnamed: 'Unnamed',
997
+ accountFallback: 'Account {{handle}}',
998
+ links: {
999
+ recoverAccount: 'Recover your account',
1000
+ signUp: 'Sign Up',
1001
+ },
1002
+ labels: {
1003
+ username: 'Username',
1004
+ email: 'Email',
1005
+ password: 'Password',
1006
+ confirmPassword: 'Confirm Password',
1007
+ },
1008
+ back: 'Back',
1009
+ remove: 'Remove',
993
1010
  },
994
- "sessionManagement": {
995
- "title": "Active Sessions",
996
- "subtitle": "Manage your active sessions across all devices",
997
- "loading": "Loading sessions...",
998
- "lastRefreshed": "Last refreshed {{time}}",
999
- "currentSession": "Current Session",
1000
- "sessionLabel": "Session {{id}}...",
1001
- "switch": "Switch",
1002
- "logout": "Logout",
1003
- "active": "Active",
1004
- "logoutOthers": {
1005
- "title": "Logout Other Sessions",
1006
- "noOtherSessions": "No other sessions",
1007
- "subtitle": "End all sessions except this one"
1008
- },
1009
- "logoutAll": {
1010
- "title": "Logout All Sessions",
1011
- "subtitle": "End all sessions including this one"
1012
- },
1013
- "empty": "No active sessions found",
1014
- "close": "Close",
1015
- "toasts": {
1016
- "loadFailed": "Failed to load sessions. Please try again.",
1017
- "logoutSuccess": "Session logged out successfully",
1018
- "logoutFailed": "Failed to logout session. Please try again.",
1019
- "noOtherSessions": "No other sessions to logout.",
1020
- "logoutOthersSuccess": "Other sessions logged out successfully",
1021
- "logoutOthersFailed": "Failed to logout other sessions. Please try again.",
1022
- "logoutAllFailed": "Failed to logout all sessions. Please try again.",
1023
- "switchSuccess": "Switched session",
1024
- "switchFailed": "Failed to switch session"
1025
- },
1026
- "confirms": {
1027
- "logoutSession": "Are you sure you want to logout this session?",
1028
- "logoutOthers": "This will logout {{count}} other session(s). Continue?",
1029
- "logoutAll": "This will logout all sessions including this one and you will need to sign in again. Continue?"
1030
- }
1011
+ sessionManagement: {
1012
+ title: 'Active Sessions',
1013
+ subtitle: 'Manage your active sessions across all devices',
1014
+ loading: 'Loading sessions...',
1015
+ lastRefreshed: 'Last refreshed {{time}}',
1016
+ currentSession: 'Current Session',
1017
+ sessionLabel: 'Session {{id}}...',
1018
+ switch: 'Switch',
1019
+ logout: 'Logout',
1020
+ active: 'Active',
1021
+ logoutOthers: {
1022
+ title: 'Logout Other Sessions',
1023
+ noOtherSessions: 'No other sessions',
1024
+ subtitle: 'End all sessions except this one',
1025
+ },
1026
+ logoutAll: {
1027
+ title: 'Logout All Sessions',
1028
+ subtitle: 'End all sessions including this one',
1029
+ },
1030
+ empty: 'No active sessions found',
1031
+ close: 'Close',
1032
+ toasts: {
1033
+ loadFailed: 'Failed to load sessions. Please try again.',
1034
+ logoutSuccess: 'Session logged out successfully',
1035
+ logoutFailed: 'Failed to logout session. Please try again.',
1036
+ noOtherSessions: 'No other sessions to logout.',
1037
+ logoutOthersSuccess: 'Other sessions logged out successfully',
1038
+ logoutOthersFailed: 'Failed to logout other sessions. Please try again.',
1039
+ logoutAllFailed: 'Failed to logout all sessions. Please try again.',
1040
+ switchSuccess: 'Switched session',
1041
+ switchFailed: 'Failed to switch session',
1042
+ },
1043
+ confirms: {
1044
+ logoutSession: 'Are you sure you want to logout this session?',
1045
+ logoutOthers: 'This will logout {{count}} other session(s). Continue?',
1046
+ logoutAll:
1047
+ 'This will logout all sessions including this one and you will need to sign in again. Continue?',
1048
+ },
1031
1049
  },
1032
- "appInfo": {
1033
- "title": "App Information",
1034
- "sections": {
1035
- "package": "Package Information",
1036
- "system": "System Information",
1037
- "user": "User Information",
1038
- "api": "API Configuration",
1039
- "build": "Build Information",
1040
- "quickActions": "Quick Actions"
1041
- },
1042
- "items": {
1043
- "name": "Name",
1044
- "version": "Version",
1045
- "description": "Description",
1046
- "noDescription": "No description",
1047
- "mainEntry": "Main Entry",
1048
- "moduleEntry": "Module Entry",
1049
- "typesEntry": "Types Entry",
1050
- "platform": "Platform",
1051
- "platformVersion": "Platform Version",
1052
- "screenWidth": "Screen Width",
1053
- "screenHeight": "Screen Height",
1054
- "environment": "Environment",
1055
- "development": "Development",
1056
- "production": "Production",
1057
- "authStatus": "Authentication Status",
1058
- "authenticated": "Authenticated",
1059
- "notAuthenticated": "Not Authenticated",
1060
- "userId": "User ID",
1061
- "username": "Username",
1062
- "email": "Email",
1063
- "premiumStatus": "Premium Status",
1064
- "premium": "Premium",
1065
- "standard": "Standard",
1066
- "totalActiveSessions": "Total Active Sessions",
1067
- "apiBaseUrl": "API Base URL",
1068
- "notConfigured": "Not configured",
1069
- "connectionStatus": "Connection Status",
1070
- "checking": "Checking...",
1071
- "connected": "Connected",
1072
- "disconnected": "Disconnected",
1073
- "unknown": "Unknown",
1074
- "buildTimestamp": "Build Timestamp",
1075
- "reactNative": "React Native",
1076
- "reactNativeValue": "Expo/React Native",
1077
- "jsEngine": "JavaScript Engine",
1078
- "jsEngineValue": "Hermes",
1079
- "copyFullReport": "Copy Full Report",
1080
- "copyFullReportSubtitle": "Copy complete application information to clipboard",
1081
- "runSystemCheck": "Run System Check",
1082
- "runningSystemCheck": "Running System Check...",
1083
- "systemCheckSubtitle": "Verify application health and status",
1084
- "systemCheckRunning": "Checking API, authentication, and platform status..."
1085
- },
1086
- "toasts": {
1087
- "copiedToClipboard": "{{label}} copied to clipboard",
1088
- "copyFailed": "Failed to copy to clipboard",
1089
- "systemCheckSuccess": "System check completed successfully",
1090
- "systemCheckFailed": "System check failed",
1091
- "apiConnectionSuccess": "API connection successful",
1092
- "apiConnectionFailed": "Failed to connect to API server",
1093
- "oxyServicesNotInitialized": "OxyServices not initialized",
1094
- "noUsernameOrNav": "No username available or navigation not supported"
1095
- }
1050
+ appInfo: {
1051
+ title: 'App Information',
1052
+ sections: {
1053
+ package: 'Package Information',
1054
+ system: 'System Information',
1055
+ user: 'User Information',
1056
+ api: 'API Configuration',
1057
+ build: 'Build Information',
1058
+ quickActions: 'Quick Actions',
1059
+ },
1060
+ items: {
1061
+ name: 'Name',
1062
+ version: 'Version',
1063
+ description: 'Description',
1064
+ noDescription: 'No description',
1065
+ mainEntry: 'Main Entry',
1066
+ moduleEntry: 'Module Entry',
1067
+ typesEntry: 'Types Entry',
1068
+ platform: 'Platform',
1069
+ platformVersion: 'Platform Version',
1070
+ screenWidth: 'Screen Width',
1071
+ screenHeight: 'Screen Height',
1072
+ environment: 'Environment',
1073
+ development: 'Development',
1074
+ production: 'Production',
1075
+ authStatus: 'Authentication Status',
1076
+ authenticated: 'Authenticated',
1077
+ notAuthenticated: 'Not Authenticated',
1078
+ userId: 'User ID',
1079
+ username: 'Username',
1080
+ email: 'Email',
1081
+ premiumStatus: 'Premium Status',
1082
+ premium: 'Premium',
1083
+ standard: 'Standard',
1084
+ totalActiveSessions: 'Total Active Sessions',
1085
+ apiBaseUrl: 'API Base URL',
1086
+ notConfigured: 'Not configured',
1087
+ connectionStatus: 'Connection Status',
1088
+ checking: 'Checking...',
1089
+ connected: 'Connected',
1090
+ disconnected: 'Disconnected',
1091
+ unknown: 'Unknown',
1092
+ buildTimestamp: 'Build Timestamp',
1093
+ reactNative: 'React Native',
1094
+ reactNativeValue: 'Expo/React Native',
1095
+ jsEngine: 'JavaScript Engine',
1096
+ jsEngineValue: 'Hermes',
1097
+ copyFullReport: 'Copy Full Report',
1098
+ copyFullReportSubtitle: 'Copy complete application information to clipboard',
1099
+ runSystemCheck: 'Run System Check',
1100
+ runningSystemCheck: 'Running System Check...',
1101
+ systemCheckSubtitle: 'Verify application health and status',
1102
+ systemCheckRunning: 'Checking API, authentication, and platform status...',
1103
+ },
1104
+ toasts: {
1105
+ copiedToClipboard: '{{label}} copied to clipboard',
1106
+ copyFailed: 'Failed to copy to clipboard',
1107
+ systemCheckSuccess: 'System check completed successfully',
1108
+ systemCheckFailed: 'System check failed',
1109
+ apiConnectionSuccess: 'API connection successful',
1110
+ apiConnectionFailed: 'Failed to connect to API server',
1111
+ oxyServicesNotInitialized: 'OxyServices not initialized',
1112
+ noUsernameOrNav: 'No username available or navigation not supported',
1113
+ },
1096
1114
  },
1097
- "learnMoreUsernames": {
1098
- "introTitle": "Your unique identity",
1099
- "introText": "Your username is how people find and recognize you across all Oxy apps.",
1100
- "sections": {
1101
- "what": {
1102
- "title": "What is a username?",
1103
- "content": "Your username is your unique identifier on Oxy. It's how other people find and mention you. Think of it like your handle on social media - it's public and represents your identity across all Oxy apps."
1104
- },
1105
- "rules": {
1106
- "title": "Username rules",
1107
- "content": "Usernames can only contain lowercase letters (a-z) and numbers (0-9). They must be at least 4 characters long. Special characters, spaces, and uppercase letters are not allowed to keep usernames simple and easy to remember."
1108
- },
1109
- "unique": {
1110
- "title": "Why must it be unique?",
1111
- "content": "Each username can only belong to one person. This ensures that when someone searches for you or mentions you, they find the right person. It also prevents confusion and impersonation."
1112
- },
1113
- "change": {
1114
- "title": "Can I change it later?",
1115
- "content": "Yes! You can change your username anytime in your account settings. Keep in mind that your old username will become available for others to use, and people who knew your old username will need to find you with the new one."
1116
- },
1117
- "tips": {
1118
- "title": "Tips for choosing a username",
1119
- "content": "Choose something memorable and easy to spell. Avoid using personal information like your birth year or phone number. Consider using a name that represents you across all contexts - professional and personal."
1120
- }
1121
- },
1122
- "collapseHint": "Collapse section",
1123
- "expandHint": "Expand section",
1124
- "footer": "Need more help? Visit our Help Center for additional information."
1115
+ learnMoreUsernames: {
1116
+ introTitle: 'Your unique identity',
1117
+ introText: 'Your username is how people find and recognize you across all Oxy apps.',
1118
+ sections: {
1119
+ what: {
1120
+ title: 'What is a username?',
1121
+ content:
1122
+ "Your username is your unique identifier on Oxy. It's how other people find and mention you. Think of it like your handle on social media - it's public and represents your identity across all Oxy apps.",
1123
+ },
1124
+ rules: {
1125
+ title: 'Username rules',
1126
+ content:
1127
+ 'Usernames can only contain lowercase letters (a-z) and numbers (0-9). They must be at least 4 characters long. Special characters, spaces, and uppercase letters are not allowed to keep usernames simple and easy to remember.',
1128
+ },
1129
+ unique: {
1130
+ title: 'Why must it be unique?',
1131
+ content:
1132
+ 'Each username can only belong to one person. This ensures that when someone searches for you or mentions you, they find the right person. It also prevents confusion and impersonation.',
1133
+ },
1134
+ change: {
1135
+ title: 'Can I change it later?',
1136
+ content:
1137
+ 'Yes! You can change your username anytime in your account settings. Keep in mind that your old username will become available for others to use, and people who knew your old username will need to find you with the new one.',
1138
+ },
1139
+ tips: {
1140
+ title: 'Tips for choosing a username',
1141
+ content:
1142
+ 'Choose something memorable and easy to spell. Avoid using personal information like your birth year or phone number. Consider using a name that represents you across all contexts - professional and personal.',
1143
+ },
1144
+ },
1145
+ collapseHint: 'Collapse section',
1146
+ expandHint: 'Expand section',
1147
+ footer: 'Need more help? Visit our Help Center for additional information.',
1125
1148
  },
1126
- "payment": {
1127
- "title": "Payment",
1128
- "summary": {
1129
- "title": "Payment Summary",
1130
- "orderSummary": "Order Summary",
1131
- "payment": "Payment",
1132
- "reviewDetails": "Review your payment details",
1133
- "completePayment": "Complete your payment",
1134
- "subtotal": "Subtotal",
1135
- "tax": "Tax",
1136
- "total": "Total",
1137
- "amountToPay": "Amount to Pay"
1138
- },
1139
- "method": {
1140
- "title": "Choose Payment Method"
1141
- },
1142
- "details": {
1143
- "cardDetails": "Card Details",
1144
- "peable": "Peable",
1145
- "faircoinPayment": "FairCoin Payment",
1146
- "paymentDetails": "Payment Details",
1147
- "creditCard": "Credit Card",
1148
- "enterCardSecurely": "Enter your card details securely",
1149
- "acceptedCards": "We accept Visa, Mastercard, and more",
1150
- "cardNumber": "Card number",
1151
- "expiry": "Expiry",
1152
- "readyToProcess": "Ready to process payment...",
1153
- "payWithWallet": "Pay with your in-app wallet",
1154
- "balance": "Balance: {{balance}}",
1155
- "payWithFairCoin": "Pay with FairCoin",
1156
- "scanToPay": "Scan to Pay",
1157
- "fairWalletInstructions": "Use the options below to pay with FAIRWallet",
1158
- "openInFairWallet": "Open in FAIRWallet",
1159
- "copyAddress": "Copy Address",
1160
- "addressCopied": "Address copied to clipboard!",
1161
- "waitingForPayment": "Waiting for payment..."
1162
- },
1163
- "review": {
1164
- "title": "Review Payment",
1165
- "securePayment": "Secure payment",
1166
- "securePaymentDesc": "Your payment is protected by industry-standard encryption",
1167
- "amount": "Amount",
1168
- "paymentMethod": "Payment Method",
1169
- "card": "Card",
1170
- "peableAccount": "Peable Account",
1171
- "faircoinWallet": "FairCoin Wallet",
1172
- "paidViaQR": "Paid via QR",
1173
- "processing": "Processing...",
1174
- "payNow": "Pay Now"
1175
- },
1176
- "success": {
1177
- "title": "Payment Complete",
1178
- "heading": "Payment Successful!",
1179
- "thanks": "Thank you for your payment.",
1180
- "processed": "Your transaction has been processed successfully."
1181
- },
1182
- "actions": {
1183
- "close": "Close",
1184
- "continue": "Continue",
1185
- "back": "Back",
1186
- "done": "Done"
1187
- },
1188
- "errors": {
1189
- "invalidAmount": "Invalid or missing payment amount."
1190
- },
1191
- "methods": {
1192
- "card": {
1193
- "label": "Credit/Debit Card",
1194
- "description": "Pay securely with your credit or debit card."
1195
- },
1196
- "oxy": {
1197
- "label": "Peable",
1198
- "description": "Use your Peable in-app balance."
1199
- },
1200
- "faircoin": {
1201
- "label": "FAIRWallet",
1202
- "description": "Pay with FairCoin by scanning a QR code."
1203
- }
1204
- }
1149
+ payment: {
1150
+ title: 'Payment',
1151
+ summary: {
1152
+ title: 'Payment Summary',
1153
+ orderSummary: 'Order Summary',
1154
+ payment: 'Payment',
1155
+ reviewDetails: 'Review your payment details',
1156
+ completePayment: 'Complete your payment',
1157
+ subtotal: 'Subtotal',
1158
+ tax: 'Tax',
1159
+ total: 'Total',
1160
+ amountToPay: 'Amount to Pay',
1161
+ },
1162
+ method: {
1163
+ title: 'Choose Payment Method',
1164
+ },
1165
+ details: {
1166
+ cardDetails: 'Card Details',
1167
+ peable: 'Peable',
1168
+ faircoinPayment: 'FairCoin Payment',
1169
+ paymentDetails: 'Payment Details',
1170
+ creditCard: 'Credit Card',
1171
+ enterCardSecurely: 'Enter your card details securely',
1172
+ acceptedCards: 'We accept Visa, Mastercard, and more',
1173
+ cardNumber: 'Card number',
1174
+ expiry: 'Expiry',
1175
+ readyToProcess: 'Ready to process payment...',
1176
+ payWithWallet: 'Pay with your in-app wallet',
1177
+ balance: 'Balance: {{balance}}',
1178
+ payWithFairCoin: 'Pay with FairCoin',
1179
+ scanToPay: 'Scan to Pay',
1180
+ fairWalletInstructions: 'Use the options below to pay with FAIRWallet',
1181
+ openInFairWallet: 'Open in FAIRWallet',
1182
+ copyAddress: 'Copy Address',
1183
+ addressCopied: 'Address copied to clipboard!',
1184
+ waitingForPayment: 'Waiting for payment...',
1185
+ },
1186
+ review: {
1187
+ title: 'Review Payment',
1188
+ securePayment: 'Secure payment',
1189
+ securePaymentDesc: 'Your payment is protected by industry-standard encryption',
1190
+ amount: 'Amount',
1191
+ paymentMethod: 'Payment Method',
1192
+ card: 'Card',
1193
+ peableAccount: 'Peable Account',
1194
+ faircoinWallet: 'FairCoin Wallet',
1195
+ paidViaQR: 'Paid via QR',
1196
+ processing: 'Processing...',
1197
+ payNow: 'Pay Now',
1198
+ },
1199
+ success: {
1200
+ title: 'Payment Complete',
1201
+ heading: 'Payment Successful!',
1202
+ thanks: 'Thank you for your payment.',
1203
+ processed: 'Your transaction has been processed successfully.',
1204
+ },
1205
+ actions: {
1206
+ close: 'Close',
1207
+ continue: 'Continue',
1208
+ back: 'Back',
1209
+ done: 'Done',
1210
+ },
1211
+ errors: {
1212
+ invalidAmount: 'Invalid or missing payment amount.',
1213
+ },
1214
+ methods: {
1215
+ card: {
1216
+ label: 'Credit/Debit Card',
1217
+ description: 'Pay securely with your credit or debit card.',
1218
+ },
1219
+ oxy: {
1220
+ label: 'Peable',
1221
+ description: 'Use your Peable in-app balance.',
1222
+ },
1223
+ faircoin: {
1224
+ label: 'FAIRWallet',
1225
+ description: 'Pay with FairCoin by scanning a QR code.',
1226
+ },
1227
+ },
1205
1228
  },
1206
- "userLinks": {
1207
- "title": "Links",
1208
- "linkCount": "{{count}} link",
1209
- "linkCount_plural": "{{count}} links"
1229
+ userLinks: {
1230
+ title: 'Links',
1231
+ linkCount: '{{count}} link',
1232
+ linkCount_plural: '{{count}} links',
1210
1233
  },
1211
- "fileManagement": {
1212
- "title": "File Management",
1213
- "photos": "Photos",
1214
- "selectFile": "Select a File",
1215
- "selected": "{{count}} Selected",
1216
- "selectedWithMax": "{{count}}/{{max}} Selected",
1217
- "available": "{{count}} available",
1218
- "tapToSelect": "Tap to select",
1219
- "itemCount": "{{count}} item",
1220
- "itemCount_plural": "{{count}} items",
1221
- "reviewFiles": "Review Files",
1222
- "readyToUpload": "{{count}} file(s) ready to upload",
1223
- "clear": "Clear",
1224
- "confirm": "Confirm",
1225
- "delete": "Delete ({{count}})",
1226
- "visibility": "Visibility",
1227
- "changeVisibility": "Change Visibility",
1228
- "changeVisibilityConfirm": "Change visibility for {{count}} file(s)?",
1229
- "private": "Private",
1230
- "public": "Public",
1231
- "unlisted": "Unlisted",
1232
- "cancel": "Cancel",
1233
- "deleteFile": "Delete File",
1234
- "deleteFiles": "Delete Files",
1235
- "searchPhotos": "Search photos...",
1236
- "searchFiles": "Search files...",
1237
- "found": "Found",
1238
- "photo": "Photo",
1239
- "photos_stat": "Photos",
1240
- "file": "File",
1241
- "files": "Files",
1242
- "size": "Size",
1243
- "totalSize": "Total Size",
1244
- "total": "Total",
1245
- "loadingMore": "Loading more...",
1246
- "loadingPhotoLayout": "Loading photo layout...",
1247
- "uploading": "Uploading",
1248
- "upload": "Upload",
1249
- "uploadPhoto": "Upload Photo",
1250
- "uploadPhotos": "Upload Photos",
1251
- "uploadFiles": "Upload Files",
1252
- "clearSearch": "Clear Search",
1253
- "retry": "Try again",
1254
- "loadError": {
1255
- "title": "Couldn't load your files",
1256
- "description": "Something went wrong. Check your connection and try again."
1257
- },
1258
- "choosePhoto": "Choose Photo",
1259
- "done": "Done",
1260
- "doneWithCount": "Done ({{count}})",
1261
- "photoPicker": {
1262
- "emptyTitle": "No photos yet",
1263
- "emptySubtitle": "Upload from your device to get started"
1264
- },
1265
- "details": {
1266
- "title": "File Details",
1267
- "download": "Download",
1268
- "type": "Type",
1269
- "uploaded": "Uploaded",
1270
- "description": "Description"
1271
- },
1272
- "a11y": {
1273
- "viewAll": "Show all files",
1274
- "viewPhotos": "Show photos only",
1275
- "viewVideos": "Show videos only",
1276
- "viewDocuments": "Show documents only",
1277
- "viewAudio": "Show audio only",
1278
- "sortBy": "Sort by {{field}}, {{order}}",
1279
- "uploadFile": "Upload file from device",
1280
- "uploadFromDevice": "Upload photo from device",
1281
- "photoCellSelected": "Photo {{name}}, selected",
1282
- "photoCellUnselected": "Photo {{name}}, not selected",
1283
- "selectionCount": "{{count}} photo selected",
1284
- "selectionCount_plural": "{{count}} photos selected",
1285
- "cancelPicker": "Cancel photo selection",
1286
- "confirmSelection": "Confirm selection"
1287
- },
1288
- "emptyPhotos": {
1289
- "title": "No Photos Yet",
1290
- "ownDescription": "Upload photos to get started. You can select multiple photos at once.",
1291
- "otherDescription": "This user hasn't uploaded any photos yet"
1292
- },
1293
- "emptyFiles": {
1294
- "title": "No Files Yet",
1295
- "ownDescription": "Upload files to get started. You can select multiple files at once.",
1296
- "otherDescription": "This user hasn't uploaded any files yet"
1297
- },
1298
- "noResults": {
1299
- "title": "No Results Found",
1300
- "description": "No files match your search for \"{{query}}\""
1301
- },
1302
- "toasts": {
1303
- "fileTypeBlocked": "This file type cannot be selected",
1304
- "maxSelection": "You can select up to {{max}}",
1305
- "loadFailed": "Failed to load files",
1306
- "filesTooLarge": "The following files are too large (max 50MB): {{files}}",
1307
- "uploadSuccess": "{{count}} file(s) uploaded successfully",
1308
- "uploadFailed": "{{count}} file(s) failed to upload",
1309
- "uploadError": "Failed to upload files",
1310
- "invalidFileMissing": "Invalid file: file is missing",
1311
- "invalidFileName": "Invalid file: missing file name",
1312
- "invalidFileSize": "Invalid file \"{{name}}\": missing file size",
1313
- "fileEmpty": "File \"{{name}}\" is empty",
1314
- "fileTooLarge": "\"{{name}}\" is too large. Maximum file size is {{maxSize}}",
1315
- "noValidFiles": "No valid files to upload",
1316
- "imagesOnlyRequired": "Only image files can be selected",
1317
- "waitForSelection": "Please wait for the current file selection to complete",
1318
- "noFilesSelected": "No files were selected",
1319
- "loadSomeFailed": "Failed to load some files:\n{{errors}}",
1320
- "noFilesProcessed": "No files could be processed. Please try selecting files again.",
1321
- "filePickerNotAvailable": "File picker not available. Please install expo-document-picker",
1322
- "selectFilesFailed": "Failed to select files",
1323
- "deleteSuccess": "File deleted successfully",
1324
- "fileNotFound": "File not found. It may have already been deleted.",
1325
- "noPermission": "You do not have permission to delete this file.",
1326
- "deleteFailed": "Failed to delete file",
1327
- "bulkDeleteSuccess": "{{count}} file(s) deleted successfully",
1328
- "bulkDeleteFailed": "{{count}} file(s) failed to delete",
1329
- "bulkDeleteError": "Failed to delete files",
1330
- "visibilitySuccess": "{{count}} file(s) visibility updated to {{visibility}}",
1331
- "visibilityFailed": "{{count}} file(s) failed to update visibility",
1332
- "visibilityError": "Failed to update visibility",
1333
- "downloadStarted": "File download started",
1334
- "downloadSuccess": "File downloaded successfully",
1335
- "downloadMobile": "Please use your browser to download the file",
1336
- "downloadFailed": "Failed to download file",
1337
- "fileNotFoundContent": "File not found. It may have been deleted.",
1338
- "loadContentFailed": "Failed to load file content",
1339
- "openFailed": "Failed to open file"
1340
- },
1341
- "confirms": {
1342
- "deleteFile": "Are you sure you want to delete \"{{filename}}\"? This action cannot be undone.",
1343
- "deleteFiles": "Are you sure you want to delete {{count}} file(s)? This action cannot be undone."
1344
- },
1345
- "viewMode": "File type"
1234
+ fileManagement: {
1235
+ title: 'File Management',
1236
+ photos: 'Photos',
1237
+ selectFile: 'Select a File',
1238
+ selected: '{{count}} Selected',
1239
+ selectedWithMax: '{{count}}/{{max}} Selected',
1240
+ available: '{{count}} available',
1241
+ tapToSelect: 'Tap to select',
1242
+ itemCount: '{{count}} item',
1243
+ itemCount_plural: '{{count}} items',
1244
+ reviewFiles: 'Review Files',
1245
+ readyToUpload: '{{count}} file(s) ready to upload',
1246
+ clear: 'Clear',
1247
+ confirm: 'Confirm',
1248
+ delete: 'Delete ({{count}})',
1249
+ visibility: 'Visibility',
1250
+ changeVisibility: 'Change Visibility',
1251
+ changeVisibilityConfirm: 'Change visibility for {{count}} file(s)?',
1252
+ private: 'Private',
1253
+ public: 'Public',
1254
+ unlisted: 'Unlisted',
1255
+ cancel: 'Cancel',
1256
+ deleteFile: 'Delete File',
1257
+ deleteFiles: 'Delete Files',
1258
+ searchPhotos: 'Search photos...',
1259
+ searchFiles: 'Search files...',
1260
+ found: 'Found',
1261
+ photo: 'Photo',
1262
+ photos_stat: 'Photos',
1263
+ file: 'File',
1264
+ files: 'Files',
1265
+ size: 'Size',
1266
+ totalSize: 'Total Size',
1267
+ total: 'Total',
1268
+ loadingMore: 'Loading more...',
1269
+ loadingPhotoLayout: 'Loading photo layout...',
1270
+ uploading: 'Uploading',
1271
+ upload: 'Upload',
1272
+ uploadPhoto: 'Upload Photo',
1273
+ uploadPhotos: 'Upload Photos',
1274
+ uploadFiles: 'Upload Files',
1275
+ clearSearch: 'Clear Search',
1276
+ retry: 'Try again',
1277
+ loadError: {
1278
+ title: "Couldn't load your files",
1279
+ description: 'Something went wrong. Check your connection and try again.',
1280
+ },
1281
+ choosePhoto: 'Choose Photo',
1282
+ done: 'Done',
1283
+ doneWithCount: 'Done ({{count}})',
1284
+ photoPicker: {
1285
+ emptyTitle: 'No photos yet',
1286
+ emptySubtitle: 'Upload from your device to get started',
1287
+ },
1288
+ details: {
1289
+ title: 'File Details',
1290
+ download: 'Download',
1291
+ type: 'Type',
1292
+ uploaded: 'Uploaded',
1293
+ description: 'Description',
1294
+ },
1295
+ a11y: {
1296
+ viewAll: 'Show all files',
1297
+ viewPhotos: 'Show photos only',
1298
+ viewVideos: 'Show videos only',
1299
+ viewDocuments: 'Show documents only',
1300
+ viewAudio: 'Show audio only',
1301
+ sortBy: 'Sort by {{field}}, {{order}}',
1302
+ uploadFile: 'Upload file from device',
1303
+ uploadFromDevice: 'Upload photo from device',
1304
+ photoCellSelected: 'Photo {{name}}, selected',
1305
+ photoCellUnselected: 'Photo {{name}}, not selected',
1306
+ selectionCount: '{{count}} photo selected',
1307
+ selectionCount_plural: '{{count}} photos selected',
1308
+ cancelPicker: 'Cancel photo selection',
1309
+ confirmSelection: 'Confirm selection',
1310
+ },
1311
+ emptyPhotos: {
1312
+ title: 'No Photos Yet',
1313
+ ownDescription: 'Upload photos to get started. You can select multiple photos at once.',
1314
+ otherDescription: "This user hasn't uploaded any photos yet",
1315
+ },
1316
+ emptyFiles: {
1317
+ title: 'No Files Yet',
1318
+ ownDescription: 'Upload files to get started. You can select multiple files at once.',
1319
+ otherDescription: "This user hasn't uploaded any files yet",
1320
+ },
1321
+ noResults: {
1322
+ title: 'No Results Found',
1323
+ description: 'No files match your search for "{{query}}"',
1324
+ },
1325
+ toasts: {
1326
+ fileTypeBlocked: 'This file type cannot be selected',
1327
+ maxSelection: 'You can select up to {{max}}',
1328
+ loadFailed: 'Failed to load files',
1329
+ filesTooLarge: 'The following files are too large (max 50MB): {{files}}',
1330
+ uploadSuccess: '{{count}} file(s) uploaded successfully',
1331
+ uploadFailed: '{{count}} file(s) failed to upload',
1332
+ uploadError: 'Failed to upload files',
1333
+ invalidFileMissing: 'Invalid file: file is missing',
1334
+ invalidFileName: 'Invalid file: missing file name',
1335
+ invalidFileSize: 'Invalid file "{{name}}": missing file size',
1336
+ fileEmpty: 'File "{{name}}" is empty',
1337
+ fileTooLarge: '"{{name}}" is too large. Maximum file size is {{maxSize}}',
1338
+ noValidFiles: 'No valid files to upload',
1339
+ imagesOnlyRequired: 'Only image files can be selected',
1340
+ waitForSelection: 'Please wait for the current file selection to complete',
1341
+ noFilesSelected: 'No files were selected',
1342
+ loadSomeFailed: 'Failed to load some files:\n{{errors}}',
1343
+ noFilesProcessed: 'No files could be processed. Please try selecting files again.',
1344
+ filePickerNotAvailable: 'File picker not available. Please install expo-document-picker',
1345
+ selectFilesFailed: 'Failed to select files',
1346
+ deleteSuccess: 'File deleted successfully',
1347
+ fileNotFound: 'File not found. It may have already been deleted.',
1348
+ noPermission: 'You do not have permission to delete this file.',
1349
+ deleteFailed: 'Failed to delete file',
1350
+ bulkDeleteSuccess: '{{count}} file(s) deleted successfully',
1351
+ bulkDeleteFailed: '{{count}} file(s) failed to delete',
1352
+ bulkDeleteError: 'Failed to delete files',
1353
+ visibilitySuccess: '{{count}} file(s) visibility updated to {{visibility}}',
1354
+ visibilityFailed: '{{count}} file(s) failed to update visibility',
1355
+ visibilityError: 'Failed to update visibility',
1356
+ downloadStarted: 'File download started',
1357
+ downloadSuccess: 'File downloaded successfully',
1358
+ downloadMobile: 'Please use your browser to download the file',
1359
+ downloadFailed: 'Failed to download file',
1360
+ fileNotFoundContent: 'File not found. It may have been deleted.',
1361
+ loadContentFailed: 'Failed to load file content',
1362
+ openFailed: 'Failed to open file',
1363
+ },
1364
+ confirms: {
1365
+ deleteFile: 'Are you sure you want to delete "{{filename}}"? This action cannot be undone.',
1366
+ deleteFiles:
1367
+ 'Are you sure you want to delete {{count}} file(s)? This action cannot be undone.',
1368
+ },
1369
+ viewMode: 'File type',
1346
1370
  },
1347
- "notifications": {
1348
- "title": "Notifications",
1349
- "subtitle": "Manage push, email, and security alerts",
1350
- "updateError": "Failed to update notification preferences",
1351
- "sections": {
1352
- "channels": "Channels",
1353
- "alerts": "Alerts",
1354
- "marketing": "Marketing"
1355
- },
1356
- "items": {
1357
- "push": {
1358
- "title": "Push notifications",
1359
- "subtitle": "Real-time alerts on your devices"
1360
- },
1361
- "emailDigest": {
1362
- "title": "Email digest",
1363
- "subtitle": "Periodic summary of your account activity"
1364
- },
1365
- "securityAlerts": {
1366
- "title": "Security alerts",
1367
- "subtitle": "Sign-ins, recovery codes, and key changes"
1368
- },
1369
- "marketingEmails": {
1370
- "title": "Marketing emails",
1371
- "subtitle": "Product news and occasional offers"
1372
- }
1373
- }
1371
+ notifications: {
1372
+ title: 'Notifications',
1373
+ subtitle: 'Manage push, email, and security alerts',
1374
+ updateError: 'Failed to update notification preferences',
1375
+ sections: {
1376
+ channels: 'Channels',
1377
+ alerts: 'Alerts',
1378
+ marketing: 'Marketing',
1379
+ },
1380
+ items: {
1381
+ push: {
1382
+ title: 'Push notifications',
1383
+ subtitle: 'Real-time alerts on your devices',
1384
+ },
1385
+ emailDigest: {
1386
+ title: 'Email digest',
1387
+ subtitle: 'Periodic summary of your account activity',
1388
+ },
1389
+ securityAlerts: {
1390
+ title: 'Security alerts',
1391
+ subtitle: 'Sign-ins, recovery codes, and key changes',
1392
+ },
1393
+ marketingEmails: {
1394
+ title: 'Marketing emails',
1395
+ subtitle: 'Product news and occasional offers',
1396
+ },
1397
+ },
1374
1398
  },
1375
- "preferences": {
1376
- "title": "Preferences",
1377
- "subtitle": "Theme, motion, and regional settings",
1378
- "sections": {
1379
- "appearance": "Appearance",
1380
- "language": "Language",
1381
- "region": "Region"
1382
- },
1383
- "theme": {
1384
- "light": "Light",
1385
- "dark": "Dark",
1386
- "system": "System default"
1387
- },
1388
- "items": {
1389
- "theme": {
1390
- "title": "Theme"
1391
- },
1392
- "reduceMotion": {
1393
- "title": "Reduce motion",
1394
- "subtitle": "Minimise animations across Oxy apps",
1395
- "systemOn": "Following system: reduce motion is on"
1396
- },
1397
- "language": {
1398
- "title": "Language"
1399
- },
1400
- "timezone": {
1401
- "title": "Timezone",
1402
- "unknown": "Unable to detect timezone"
1403
- },
1404
- "about": {
1405
- "title": "About preferences",
1406
- "subtitle": "Preferences sync across every Oxy app you sign into"
1407
- }
1408
- }
1399
+ preferences: {
1400
+ title: 'Preferences',
1401
+ subtitle: 'Theme, motion, and regional settings',
1402
+ sections: {
1403
+ appearance: 'Appearance',
1404
+ language: 'Language',
1405
+ region: 'Region',
1406
+ },
1407
+ theme: {
1408
+ light: 'Light',
1409
+ dark: 'Dark',
1410
+ system: 'System default',
1411
+ },
1412
+ items: {
1413
+ theme: {
1414
+ title: 'Theme',
1415
+ },
1416
+ reduceMotion: {
1417
+ title: 'Reduce motion',
1418
+ subtitle: 'Minimise animations across Oxy apps',
1419
+ systemOn: 'Following system: reduce motion is on',
1420
+ },
1421
+ language: {
1422
+ title: 'Language',
1423
+ },
1424
+ timezone: {
1425
+ title: 'Timezone',
1426
+ unknown: 'Unable to detect timezone',
1427
+ },
1428
+ about: {
1429
+ title: 'About preferences',
1430
+ subtitle: 'Preferences sync across every Oxy app you sign into',
1431
+ },
1432
+ },
1409
1433
  },
1410
- "connectedApps": {
1411
- "title": "Connected apps",
1412
- "subtitle": "Manage third-party app access",
1413
- "empty": {
1414
- "title": "No connected apps",
1415
- "subtitle": "Apps you authorize to sign in with your Oxy account will appear here"
1416
- },
1417
- "item": {
1418
- "granted": "Granted {{relative}}",
1419
- "lastUsed": "Last used {{relative}}"
1420
- },
1421
- "confirm": {
1422
- "title": "Revoke access",
1423
- "message": "Revoke {{name}}'s access to your Oxy account?"
1424
- },
1425
- "toasts": {
1426
- "revoked": "Revoked access for {{name}}",
1427
- "revokeFailed": "Failed to revoke access"
1428
- }
1434
+ connectedApps: {
1435
+ title: 'Connected apps',
1436
+ subtitle: 'Manage third-party app access',
1437
+ empty: {
1438
+ title: 'No connected apps',
1439
+ subtitle: 'Apps you authorize to sign in with your Oxy account will appear here',
1440
+ },
1441
+ item: {
1442
+ granted: 'Granted {{relative}}',
1443
+ lastUsed: 'Last used {{relative}}',
1444
+ },
1445
+ confirm: {
1446
+ title: 'Revoke access',
1447
+ message: "Revoke {{name}}'s access to your Oxy account?",
1448
+ },
1449
+ toasts: {
1450
+ revoked: 'Revoked access for {{name}}',
1451
+ revokeFailed: 'Failed to revoke access',
1452
+ },
1429
1453
  },
1430
- "accountMenu": {
1431
- "label": "Account menu",
1432
- "manage": "Manage your Oxy account",
1433
- "greeting": "Hi, {{name}}!",
1434
- "switchAccount": "Switch account",
1435
- "viewProfile": "View profile",
1436
- "addAnother": "Add another account",
1437
- "signOutAll": "Sign out of all accounts",
1438
- "open": "Account menu",
1439
- "openHint": "Opens the account menu",
1440
- "openWithUser": "Account menu for {{name}}",
1441
- "switching": "Switching account…",
1442
- "signOutAccount": "Sign out {{name}}",
1443
- "storage": {
1444
- "title": "Oxy storage",
1445
- "usage": "{{used}} of {{total}} used",
1446
- "used": "Used",
1447
- "free": "Free",
1448
- "unavailable": "Usage details unavailable",
1449
- "upgrade": "Upgrade plan",
1450
- "manage": "Manage storage"
1451
- },
1452
- "data": "Your data in Oxy",
1453
- "settings": "Oxy settings",
1454
- "help": "Help & feedback",
1455
- "signOut": "Sign out",
1456
- "privacy": "Privacy Policy",
1457
- "terms": "Terms of Service"
1454
+ accountMenu: {
1455
+ label: 'Account menu',
1456
+ manage: 'Manage your Oxy account',
1457
+ greeting: 'Hi, {{name}}!',
1458
+ switchAccount: 'Switch account',
1459
+ viewProfile: 'View profile',
1460
+ addAnother: 'Add another account',
1461
+ signOutAll: 'Sign out of all accounts',
1462
+ open: 'Account menu',
1463
+ openHint: 'Opens the account menu',
1464
+ openWithUser: 'Account menu for {{name}}',
1465
+ switching: 'Switching account…',
1466
+ signOutAccount: 'Sign out {{name}}',
1467
+ storage: {
1468
+ title: 'Oxy storage',
1469
+ usage: '{{used}} of {{total}} used',
1470
+ used: 'Used',
1471
+ free: 'Free',
1472
+ unavailable: 'Usage details unavailable',
1473
+ upgrade: 'Upgrade plan',
1474
+ manage: 'Manage storage',
1475
+ },
1476
+ data: 'Your data in Oxy',
1477
+ settings: 'Oxy settings',
1478
+ help: 'Help & feedback',
1479
+ signOut: 'Sign out',
1480
+ privacy: 'Privacy Policy',
1481
+ terms: 'Terms of Service',
1458
1482
  },
1459
- "accounts": {
1460
- "activeAccount": {
1461
- "a11y": "Active account: {{name}}. Tap to switch accounts.",
1462
- "label": "Active account"
1463
- },
1464
- "roles": {
1465
- "owner": {
1466
- "label": "Owner"
1467
- },
1468
- "admin": {
1469
- "label": "Admin"
1470
- },
1471
- "editor": {
1472
- "label": "Editor"
1473
- },
1474
- "developer": {
1475
- "label": "Developer"
1476
- },
1477
- "billing": {
1478
- "label": "Billing"
1479
- },
1480
- "viewer": {
1481
- "label": "Viewer"
1482
- }
1483
- },
1484
- "kinds": {
1485
- "organization": {
1486
- "label": "Organization",
1487
- "description": "A shared team account with members"
1488
- },
1489
- "project": {
1490
- "label": "Project",
1491
- "description": "A separate account you control"
1492
- },
1493
- "bot": {
1494
- "label": "Bot",
1495
- "description": "A programmatic account with service credentials"
1496
- }
1497
- },
1498
- "accountCategory": {
1499
- "news": "News",
1500
- "politics": "Politics & policy",
1501
- "business": "Business",
1502
- "startup": "Startups & entrepreneurship",
1503
- "finance": "Finance & investing",
1504
- "crypto": "Crypto & web3",
1505
- "marketplace": "Marketplace & classifieds",
1506
- "retail": "Retail & ecommerce",
1507
- "real_estate": "Real estate",
1508
- "agency": "Real estate agency",
1509
- "landlord": "Landlord & property management",
1510
- "cooperative": "Housing cooperative",
1511
- "architecture": "Architecture & construction",
1512
- "technology": "Technology",
1513
- "software": "Software & development",
1514
- "ai": "AI & machine learning",
1515
- "security": "Security & privacy",
1516
- "automation": "Automation & tools",
1517
- "science": "Science & research",
1518
- "education": "Education & training",
1519
- "books": "Books & writing",
1520
- "health": "Health & medicine",
1521
- "fitness": "Fitness & wellbeing",
1522
- "sports": "Sports",
1523
- "gaming": "Gaming & esports",
1524
- "music": "Music",
1525
- "film": "Film & TV",
1526
- "podcast": "Podcasts & audio",
1527
- "art": "Art & design",
1528
- "photography": "Photography",
1529
- "comedy": "Comedy",
1530
- "food": "Food & drink",
1531
- "travel": "Travel & places",
1532
- "fashion": "Fashion & beauty",
1533
- "home_garden": "Home & garden",
1534
- "diy": "DIY & making",
1535
- "automotive": "Cars & motoring",
1536
- "animals": "Animals & pets",
1537
- "family": "Family & parenting",
1538
- "nonprofit": "Non-profit & charity",
1539
- "government": "Government & public sector",
1540
- "community": "Local community",
1541
- "activism": "Activism & advocacy",
1542
- "environment": "Environment & sustainability",
1543
- "religion": "Religion & spirituality",
1544
- "other": "Other"
1545
- },
1546
- "create": {
1547
- "title": "Create account",
1548
- "subtitle": "Create an account you control. It will have its own profile, members, and apps.",
1549
- "displayName": {
1550
- "label": "Display name",
1551
- "invalidChars": "Use letters, spaces, apostrophes, and name separators only"
1552
- },
1553
- "bio": {
1554
- "label": "Bio (optional)"
1555
- },
1556
- "username": {
1557
- "label": "Username",
1558
- "available": "Username is available",
1559
- "taken": "Username is taken",
1560
- "tooShort": "Username must be at least 3 characters",
1561
- "invalidChars": "Only letters, numbers, hyphens, and underscores",
1562
- "mustEndInBot": "A bot account’s username must end in “bot”",
1563
- "checkFailed": "Could not check availability"
1564
- },
1565
- "accountCategory": {
1566
- "label": "Categories",
1567
- "hint": "Pick up to {{max}}. The first one is your main category."
1568
- },
1569
- "toasts": {
1570
- "success": "Account created",
1571
- "failed": "Failed to create account"
1572
- },
1573
- "typeSection": "Account type",
1574
- "detailsSection": "Details"
1575
- },
1576
- "manage": {
1577
- "create": {
1578
- "subtitle": "Add an organization, project, or bot"
1579
- },
1580
- "switch": {
1581
- "title": "Switch account",
1582
- "count": "{{count}} accounts",
1583
- "countOne": "{{count}} account",
1584
- "empty": "Accounts you own or share"
1585
- }
1586
- },
1587
- "members": {
1588
- "title": "Members",
1589
- "subtitle": "People with access to this account.",
1590
- "empty": "No members yet.",
1591
- "inherited": "Inherited",
1592
- "actions": {
1593
- "remove": "Remove member",
1594
- "transfer": "Transfer ownership"
1595
- },
1596
- "errors": {
1597
- "identifierRequired": "Enter a username or email to invite",
1598
- "missingAccount": "No account selected.",
1599
- "noPermission": "You do not have permission to view members.",
1600
- "userNotFound": "User not found"
1601
- },
1602
- "invite": {
1603
- "title": "Add a member",
1604
- "identifierLabel": "Username or email",
1605
- "roleLabel": "Role",
1606
- "submit": "Add member"
1607
- },
1608
- "removeConfirm": {
1609
- "title": "Remove member",
1610
- "description": "Remove this member from the account? They will lose all access."
1611
- },
1612
- "transferConfirm": {
1613
- "title": "Transfer ownership",
1614
- "description": "Transfer ownership of this account to this member? You will be demoted to admin. This cannot be undone."
1615
- },
1616
- "toasts": {
1617
- "added": "Member added",
1618
- "addFailed": "Failed to add member",
1619
- "removed": "Member removed",
1620
- "removeFailed": "Failed to remove member",
1621
- "roleUpdated": "Role updated",
1622
- "roleFailed": "Failed to update role",
1623
- "transferred": "Ownership transferred",
1624
- "transferFailed": "Failed to transfer ownership"
1625
- }
1626
- },
1627
- "settings": {
1628
- "title": "Account settings",
1629
- "subtitle": "Manage this account’s profile, members, and access.",
1630
- "save": "Save changes",
1631
- "displayName": {
1632
- "label": "Display name",
1633
- "invalidChars": "Use letters, spaces, apostrophes, and name separators only"
1634
- },
1635
- "bio": {
1636
- "label": "Bio (optional)"
1637
- },
1638
- "sections": {
1639
- "access": "Access",
1640
- "dangerZone": "Danger zone"
1641
- },
1642
- "members": {
1643
- "subtitle": "Invite people and manage roles"
1644
- },
1645
- "archive": {
1646
- "title": "Archive account",
1647
- "subtitle": "Deactivate this account",
1648
- "confirmTitle": "Archive account",
1649
- "confirmDescription": "Archive this account? It will be deactivated and its members will lose access."
1650
- },
1651
- "errors": {
1652
- "missingAccount": "No account selected."
1653
- },
1654
- "toasts": {
1655
- "saved": "Account updated",
1656
- "saveFailed": "Failed to update account",
1657
- "archived": "Account archived",
1658
- "archiveFailed": "Failed to archive account"
1659
- }
1660
- }
1483
+ accounts: {
1484
+ activeAccount: {
1485
+ a11y: 'Active account: {{name}}. Tap to switch accounts.',
1486
+ label: 'Active account',
1487
+ },
1488
+ roles: {
1489
+ owner: {
1490
+ label: 'Owner',
1491
+ },
1492
+ admin: {
1493
+ label: 'Admin',
1494
+ },
1495
+ editor: {
1496
+ label: 'Editor',
1497
+ },
1498
+ developer: {
1499
+ label: 'Developer',
1500
+ },
1501
+ billing: {
1502
+ label: 'Billing',
1503
+ },
1504
+ viewer: {
1505
+ label: 'Viewer',
1506
+ },
1507
+ },
1508
+ kinds: {
1509
+ organization: {
1510
+ label: 'Organization',
1511
+ description: 'A shared team account with members',
1512
+ },
1513
+ project: {
1514
+ label: 'Project',
1515
+ description: 'A separate account you control',
1516
+ },
1517
+ bot: {
1518
+ label: 'Bot',
1519
+ description: 'A programmatic account with service credentials',
1520
+ },
1521
+ },
1522
+ accountCategory: {
1523
+ news: 'News',
1524
+ politics: 'Politics & policy',
1525
+ business: 'Business',
1526
+ startup: 'Startups & entrepreneurship',
1527
+ finance: 'Finance & investing',
1528
+ crypto: 'Crypto & web3',
1529
+ marketplace: 'Marketplace & classifieds',
1530
+ retail: 'Retail & ecommerce',
1531
+ real_estate: 'Real estate',
1532
+ agency: 'Real estate agency',
1533
+ landlord: 'Landlord & property management',
1534
+ cooperative: 'Housing cooperative',
1535
+ architecture: 'Architecture & construction',
1536
+ technology: 'Technology',
1537
+ software: 'Software & development',
1538
+ ai: 'AI & machine learning',
1539
+ security: 'Security & privacy',
1540
+ automation: 'Automation & tools',
1541
+ science: 'Science & research',
1542
+ education: 'Education & training',
1543
+ books: 'Books & writing',
1544
+ health: 'Health & medicine',
1545
+ fitness: 'Fitness & wellbeing',
1546
+ sports: 'Sports',
1547
+ gaming: 'Gaming & esports',
1548
+ music: 'Music',
1549
+ film: 'Film & TV',
1550
+ podcast: 'Podcasts & audio',
1551
+ art: 'Art & design',
1552
+ photography: 'Photography',
1553
+ comedy: 'Comedy',
1554
+ food: 'Food & drink',
1555
+ travel: 'Travel & places',
1556
+ fashion: 'Fashion & beauty',
1557
+ home_garden: 'Home & garden',
1558
+ diy: 'DIY & making',
1559
+ automotive: 'Cars & motoring',
1560
+ animals: 'Animals & pets',
1561
+ family: 'Family & parenting',
1562
+ nonprofit: 'Non-profit & charity',
1563
+ government: 'Government & public sector',
1564
+ community: 'Local community',
1565
+ activism: 'Activism & advocacy',
1566
+ environment: 'Environment & sustainability',
1567
+ religion: 'Religion & spirituality',
1568
+ other: 'Other',
1569
+ },
1570
+ create: {
1571
+ title: 'Create account',
1572
+ subtitle: 'Create an account you control. It will have its own profile, members, and apps.',
1573
+ displayName: {
1574
+ label: 'Display name',
1575
+ invalidChars: 'Use letters, spaces, apostrophes, and name separators only',
1576
+ },
1577
+ bio: {
1578
+ label: 'Bio (optional)',
1579
+ },
1580
+ username: {
1581
+ label: 'Username',
1582
+ available: 'Username is available',
1583
+ taken: 'Username is taken',
1584
+ tooShort: 'Username must be at least 3 characters',
1585
+ invalidChars: 'Only letters, numbers, hyphens, and underscores',
1586
+ mustEndInBot: 'A bot account’s username must end in “bot”',
1587
+ checkFailed: 'Could not check availability',
1588
+ },
1589
+ accountCategory: {
1590
+ label: 'Categories',
1591
+ hint: 'Pick up to {{max}}. The first one is your main category.',
1592
+ },
1593
+ toasts: {
1594
+ success: 'Account created',
1595
+ failed: 'Failed to create account',
1596
+ },
1597
+ typeSection: 'Account type',
1598
+ detailsSection: 'Details',
1599
+ },
1600
+ manage: {
1601
+ create: {
1602
+ subtitle: 'Add an organization, project, or bot',
1603
+ },
1604
+ switch: {
1605
+ title: 'Switch account',
1606
+ count: '{{count}} accounts',
1607
+ countOne: '{{count}} account',
1608
+ empty: 'Accounts you own or share',
1609
+ },
1610
+ },
1611
+ members: {
1612
+ title: 'Members',
1613
+ subtitle: 'People with access to this account.',
1614
+ empty: 'No members yet.',
1615
+ inherited: 'Inherited',
1616
+ actions: {
1617
+ remove: 'Remove member',
1618
+ transfer: 'Transfer ownership',
1619
+ },
1620
+ errors: {
1621
+ identifierRequired: 'Enter a username or email to invite',
1622
+ missingAccount: 'No account selected.',
1623
+ noPermission: 'You do not have permission to view members.',
1624
+ userNotFound: 'User not found',
1625
+ },
1626
+ invite: {
1627
+ title: 'Add a member',
1628
+ identifierLabel: 'Username or email',
1629
+ roleLabel: 'Role',
1630
+ submit: 'Add member',
1631
+ },
1632
+ removeConfirm: {
1633
+ title: 'Remove member',
1634
+ description: 'Remove this member from the account? They will lose all access.',
1635
+ },
1636
+ transferConfirm: {
1637
+ title: 'Transfer ownership',
1638
+ description:
1639
+ 'Transfer ownership of this account to this member? You will be demoted to admin. This cannot be undone.',
1640
+ },
1641
+ toasts: {
1642
+ added: 'Member added',
1643
+ addFailed: 'Failed to add member',
1644
+ removed: 'Member removed',
1645
+ removeFailed: 'Failed to remove member',
1646
+ roleUpdated: 'Role updated',
1647
+ roleFailed: 'Failed to update role',
1648
+ transferred: 'Ownership transferred',
1649
+ transferFailed: 'Failed to transfer ownership',
1650
+ },
1651
+ },
1652
+ settings: {
1653
+ title: 'Account settings',
1654
+ subtitle: 'Manage this account’s profile, members, and access.',
1655
+ save: 'Save changes',
1656
+ displayName: {
1657
+ label: 'Display name',
1658
+ invalidChars: 'Use letters, spaces, apostrophes, and name separators only',
1659
+ },
1660
+ bio: {
1661
+ label: 'Bio (optional)',
1662
+ },
1663
+ sections: {
1664
+ access: 'Access',
1665
+ dangerZone: 'Danger zone',
1666
+ },
1667
+ members: {
1668
+ subtitle: 'Invite people and manage roles',
1669
+ },
1670
+ archive: {
1671
+ title: 'Archive account',
1672
+ subtitle: 'Deactivate this account',
1673
+ confirmTitle: 'Archive account',
1674
+ confirmDescription:
1675
+ 'Archive this account? It will be deactivated and its members will lose access.',
1676
+ },
1677
+ errors: {
1678
+ missingAccount: 'No account selected.',
1679
+ },
1680
+ toasts: {
1681
+ saved: 'Account updated',
1682
+ saveFailed: 'Failed to update account',
1683
+ archived: 'Account archived',
1684
+ archiveFailed: 'Failed to archive account',
1685
+ },
1686
+ },
1661
1687
  },
1662
- "deleteAccount": {
1663
- "title": "Delete Account",
1664
- "warning": "This action cannot be undone. Your account and all associated data will be permanently deleted.",
1665
- "confirmLabel": "Type \"{{username}}\" to confirm",
1666
- "confirm": "Delete Forever",
1667
- "error": "Failed to delete account",
1668
- "handoff": {
1669
- "commonsTitle": "Delete your account in Oxy Commons",
1670
- "commonsMessage": "Your identity key is kept by Oxy Commons on this device, and deleting your account needs it. Commons will open on Settings > Delete account to finish.",
1671
- "openCommons": "Open Oxy Commons",
1672
- "commonsOpenFailed": "Couldn't open Oxy Commons. Open it yourself and go to Settings > Delete account.",
1673
- "elsewhereTitle": "Delete your account where your identity is",
1674
- "elsewhereMessage": "Deleting your account needs your identity key, and it isn't on this device. Open Oxy Commons on the device that holds it and go to Settings > Delete account.",
1675
- "gotIt": "Got it",
1676
- "identityUnreadable": "Couldn't read this device's identity storage. Unlock your device and try again."
1677
- },
1678
- "keyless": {
1679
- "subtitle": "@{{username}} and everything in it are deleted for good. Type your username, then confirm with a code we email you.",
1680
- "action": "Delete account",
1681
- "done": "Your account is deleted.",
1682
- "doneDescription": "You've been signed out.",
1683
- "keyed": "This account uses Commons: delete it in Oxy Commons, Settings > Delete account, with its key."
1684
- }
1688
+ deleteAccount: {
1689
+ title: 'Delete Account',
1690
+ warning:
1691
+ 'This action cannot be undone. Your account and all associated data will be permanently deleted.',
1692
+ confirmLabel: 'Type "{{username}}" to confirm',
1693
+ confirm: 'Delete Forever',
1694
+ error: 'Failed to delete account',
1695
+ handoff: {
1696
+ commonsTitle: 'Delete your account in Oxy Commons',
1697
+ commonsMessage:
1698
+ 'Your identity key is kept by Oxy Commons on this device, and deleting your account needs it. Commons will open on Settings > Delete account to finish.',
1699
+ openCommons: 'Open Oxy Commons',
1700
+ commonsOpenFailed:
1701
+ "Couldn't open Oxy Commons. Open it yourself and go to Settings > Delete account.",
1702
+ elsewhereTitle: 'Delete your account where your identity is',
1703
+ elsewhereMessage:
1704
+ "Deleting your account needs your identity key, and it isn't on this device. Open Oxy Commons on the device that holds it and go to Settings > Delete account.",
1705
+ gotIt: 'Got it',
1706
+ identityUnreadable:
1707
+ "Couldn't read this device's identity storage. Unlock your device and try again.",
1708
+ },
1709
+ keyless: {
1710
+ subtitle:
1711
+ '@{{username}} and everything in it are deleted for good. Type your username, then confirm with a code we email you.',
1712
+ action: 'Delete account',
1713
+ done: 'Your account is deleted.',
1714
+ doneDescription: "You've been signed out.",
1715
+ keyed:
1716
+ 'This account uses Commons: delete it in Oxy Commons, Settings > Delete account, with its key.',
1717
+ },
1685
1718
  },
1686
- "manageAccount": {
1687
- "title": "Manage your Oxy Account",
1688
- "signOutOfThisAccount": "Sign out of this account",
1689
- "sections": {
1690
- "profile": "Profile",
1691
- "preferences": "Preferences",
1692
- "security": "Security",
1693
- "sessions": "Sessions & devices",
1694
- "legal": "Legal",
1695
- "dangerZone": "Danger zone"
1696
- },
1697
- "items": {
1698
- "editProfile": {
1699
- "title": "Edit profile",
1700
- "subtitle": "Name, username, bio, links"
1701
- },
1702
- "theme": {
1703
- "title": "Theme color",
1704
- "subtitle": "Personalize your Bloom color"
1705
- },
1706
- "security": {
1707
- "title": "Security settings",
1708
- "subtitle": "Password, 2FA, recovery"
1709
- },
1710
- "billing": {
1711
- "title": "Billing",
1712
- "subtitle": "Manage subscription and payment methods"
1713
- }
1714
- },
1715
- "sessions": {
1716
- "thisDevice": "This device",
1717
- "lastActive": "Last active {{relative}}",
1718
- "loading": "Loading sessions…",
1719
- "empty": "No active sessions",
1720
- "signOutAllOnThisDevice": "Sign out of all other devices",
1721
- "signOutAllSubtitle": "End {{count}} other device session(s)",
1722
- "otherSession": "Another session"
1723
- },
1724
- "confirms": {
1725
- "removeDeviceTitle": "Remove device",
1726
- "removeDevice": "Sign out from \"{{name}}\"?",
1727
- "signOutAllDevicesTitle": "Sign out of all other devices",
1728
- "signOutAllDevices": "End {{count}} other device session(s)? This won't sign you out here."
1729
- },
1730
- "toasts": {
1731
- "deviceRemoved": "Signed out from {{name}}",
1732
- "deviceRemoveFailed": "Failed to remove device",
1733
- "allDevicesSignedOut": "Signed out from all other devices",
1734
- "allDevicesFailed": "Failed to sign out from other devices"
1735
- }
1719
+ manageAccount: {
1720
+ title: 'Manage your Oxy Account',
1721
+ signOutOfThisAccount: 'Sign out of this account',
1722
+ sections: {
1723
+ profile: 'Profile',
1724
+ preferences: 'Preferences',
1725
+ security: 'Security',
1726
+ sessions: 'Sessions & devices',
1727
+ legal: 'Legal',
1728
+ dangerZone: 'Danger zone',
1729
+ },
1730
+ items: {
1731
+ editProfile: {
1732
+ title: 'Edit profile',
1733
+ subtitle: 'Name, username, bio, links',
1734
+ },
1735
+ theme: {
1736
+ title: 'Theme color',
1737
+ subtitle: 'Personalize your Bloom color',
1738
+ },
1739
+ security: {
1740
+ title: 'Security settings',
1741
+ subtitle: 'Password, 2FA, recovery',
1742
+ },
1743
+ billing: {
1744
+ title: 'Billing',
1745
+ subtitle: 'Manage subscription and payment methods',
1746
+ },
1747
+ },
1748
+ sessions: {
1749
+ thisDevice: 'This device',
1750
+ lastActive: 'Last active {{relative}}',
1751
+ loading: 'Loading sessions…',
1752
+ empty: 'No active sessions',
1753
+ signOutAllOnThisDevice: 'Sign out of all other devices',
1754
+ signOutAllSubtitle: 'End {{count}} other device session(s)',
1755
+ otherSession: 'Another session',
1756
+ },
1757
+ confirms: {
1758
+ removeDeviceTitle: 'Remove device',
1759
+ removeDevice: 'Sign out from "{{name}}"?',
1760
+ signOutAllDevicesTitle: 'Sign out of all other devices',
1761
+ signOutAllDevices: "End {{count}} other device session(s)? This won't sign you out here.",
1762
+ },
1763
+ toasts: {
1764
+ deviceRemoved: 'Signed out from {{name}}',
1765
+ deviceRemoveFailed: 'Failed to remove device',
1766
+ allDevicesSignedOut: 'Signed out from all other devices',
1767
+ allDevicesFailed: 'Failed to sign out from other devices',
1768
+ },
1736
1769
  },
1737
- "trust": {
1738
- "tiers": {
1739
- "new": "New",
1740
- "trusted": "Trusted",
1741
- "high_trust": "High Trust",
1742
- "verified": "Verified",
1743
- "restricted": "Restricted"
1744
- },
1745
- "center": {
1746
- "title": "Trust Center",
1747
- "balance": "reputation points",
1748
- "history": "Reputation History",
1749
- "noHistory": "No reputation history yet.",
1750
- "noDescription": "No description",
1751
- "info": "Reputation can only be earned by positive actions in the Oxy Ecosystem. It cannot be sent or received directly.",
1752
- "loadError": "Failed to load reputation data",
1753
- "actions": {
1754
- "title": "Explore",
1755
- "about": "About",
1756
- "faq": "FAQ",
1757
- "leaderboard": "Leaderboard",
1758
- "rewards": "Rewards",
1759
- "rules": "Rules"
1760
- }
1761
- },
1762
- "about": {
1763
- "title": "About Oxy Trust",
1764
- "subtitle": "Learn about the reputation system",
1765
- "intro": "Oxy Trust is a recognition of your positive actions in the Oxy Ecosystem. Reputation cannot be sent or received directly, only earned by contributing to the community.",
1766
- "how": {
1767
- "title": "How to Earn Reputation",
1768
- "contribute": "Contributing content",
1769
- "help": "Helping other users",
1770
- "participate": "Participating in events",
1771
- "report": "Reporting bugs",
1772
- "other": "Other positive actions"
1773
- },
1774
- "why": {
1775
- "title": "Why Oxy Trust?",
1776
- "text": "Your reputation and trust tier unlock special features and recognition in the Oxy Ecosystem. The more you contribute, the more you earn!"
1777
- }
1778
- },
1779
- "faq": {
1780
- "title": "Trust FAQ",
1781
- "subtitle": "Frequently asked questions about Oxy Trust",
1782
- "search": "Search FAQ...",
1783
- "noResults": "No FAQ items found matching \"{{query}}\"",
1784
- "items": {
1785
- "what": {
1786
- "q": "What is Oxy Trust?",
1787
- "a": "Oxy Trust is a reputation system that recognizes your positive contributions across the Oxy Ecosystem. Your reputation reflects how helpful, respectful, and constructive your actions are."
1770
+ trust: {
1771
+ tiers: {
1772
+ 'new': 'New',
1773
+ trusted: 'Trusted',
1774
+ high_trust: 'High Trust',
1775
+ verified: 'Verified',
1776
+ restricted: 'Restricted',
1777
+ },
1778
+ center: {
1779
+ title: 'Trust Center',
1780
+ balance: 'reputation points',
1781
+ history: 'Reputation History',
1782
+ noHistory: 'No reputation history yet.',
1783
+ noDescription: 'No description',
1784
+ info: 'Reputation can only be earned by positive actions in the Oxy Ecosystem. It cannot be sent or received directly.',
1785
+ loadError: 'Failed to load reputation data',
1786
+ actions: {
1787
+ title: 'Explore',
1788
+ about: 'About',
1789
+ faq: 'FAQ',
1790
+ leaderboard: 'Leaderboard',
1791
+ rewards: 'Rewards',
1792
+ rules: 'Rules',
1793
+ },
1794
+ },
1795
+ about: {
1796
+ title: 'About Oxy Trust',
1797
+ subtitle: 'Learn about the reputation system',
1798
+ intro:
1799
+ 'Oxy Trust is a recognition of your positive actions in the Oxy Ecosystem. Reputation cannot be sent or received directly, only earned by contributing to the community.',
1800
+ how: {
1801
+ title: 'How to Earn Reputation',
1802
+ contribute: 'Contributing content',
1803
+ help: 'Helping other users',
1804
+ participate: 'Participating in events',
1805
+ report: 'Reporting bugs',
1806
+ other: 'Other positive actions',
1807
+ },
1808
+ why: {
1809
+ title: 'Why Oxy Trust?',
1810
+ text: 'Your reputation and trust tier unlock special features and recognition in the Oxy Ecosystem. The more you contribute, the more you earn!',
1811
+ },
1812
+ },
1813
+ faq: {
1814
+ title: 'Trust FAQ',
1815
+ subtitle: 'Frequently asked questions about Oxy Trust',
1816
+ search: 'Search FAQ...',
1817
+ noResults: 'No FAQ items found matching "{{query}}"',
1818
+ items: {
1819
+ what: {
1820
+ q: 'What is Oxy Trust?',
1821
+ a: 'Oxy Trust is a reputation system that recognizes your positive contributions across the Oxy Ecosystem. Your reputation reflects how helpful, respectful, and constructive your actions are.',
1822
+ },
1823
+ earn: {
1824
+ q: 'How do I earn reputation?',
1825
+ a: 'You earn reputation by contributing content, helping other users, participating in events, and reporting bugs. Constructive, positive actions raise your reputation over time.',
1788
1826
  },
1789
- "earn": {
1790
- "q": "How do I earn reputation?",
1791
- "a": "You earn reputation by contributing content, helping other users, participating in events, and reporting bugs. Constructive, positive actions raise your reputation over time."
1827
+ lose: {
1828
+ q: 'Can I lose reputation?',
1829
+ a: 'Yes. Harmful, abusive, or low-effort actions can reduce your reputation and lower your trust tier.',
1792
1830
  },
1793
- "lose": {
1794
- "q": "Can I lose reputation?",
1795
- "a": "Yes. Harmful, abusive, or low-effort actions can reduce your reputation and lower your trust tier."
1831
+ use: {
1832
+ q: 'What is reputation used for?',
1833
+ a: 'Your reputation and trust tier unlock special features, recognition, and privileges across the Oxy Ecosystem.',
1796
1834
  },
1797
- "use": {
1798
- "q": "What is reputation used for?",
1799
- "a": "Your reputation and trust tier unlock special features, recognition, and privileges across the Oxy Ecosystem."
1835
+ transfer: {
1836
+ q: 'Can I send or receive reputation?',
1837
+ a: 'No. Reputation cannot be transferred between accounts. It can only be earned through your own actions.',
1800
1838
  },
1801
- "transfer": {
1802
- "q": "Can I send or receive reputation?",
1803
- "a": "No. Reputation cannot be transferred between accounts. It can only be earned through your own actions."
1839
+ support: {
1840
+ q: 'Where can I get help?',
1841
+ a: 'If you have questions about Oxy Trust, read the About section or contact support from the Help screen.',
1804
1842
  },
1805
- "support": {
1806
- "q": "Where can I get help?",
1807
- "a": "If you have questions about Oxy Trust, read the About section or contact support from the Help screen."
1808
- }
1809
- }
1810
- },
1811
- "leaderboard": {
1812
- "title": "Trust Leaderboard",
1813
- "subtitle": "Top contributors in the community",
1814
- "rankLabel": "rank {{rank}}",
1815
- "empty": "No leaderboard data",
1816
- "emptyDesc": "Top contributors will appear here as the community grows.",
1817
- "error": "Failed to load leaderboard"
1818
- },
1819
- "rewards": {
1820
- "title": "Trust Rewards",
1821
- "subtitle": "Unlock special features and recognition"
1822
- },
1823
- "rules": {
1824
- "title": "Trust Rules",
1825
- "subtitle": "How to earn reputation",
1826
- "empty": "No rules found.",
1827
- "categories": {
1828
- "content": "Content",
1829
- "social": "Social",
1830
- "trust": "Trust",
1831
- "moderation": "Moderation",
1832
- "physical": "Real Life",
1833
- "penalty": "Penalties",
1834
- "other": "Other"
1835
- }
1836
- },
1837
- "achievements": {
1838
- "unlocked": "Achievements",
1839
- "locked": "Locked Achievements",
1840
- "firstStep": "First Step",
1841
- "firstStepDesc": "Earned your first reputation point",
1842
- "novice": "Novice",
1843
- "noviceDesc": "Reached 10 reputation points",
1844
- "contributor": "Contributor",
1845
- "contributorDesc": "Reached 50 reputation points",
1846
- "risingStar": "Rising Star",
1847
- "risingStarDesc": "Reached 100 reputation points",
1848
- "communityHero": "Community Hero",
1849
- "communityHeroDesc": "Reached 500 reputation points",
1850
- "legend": "Legend",
1851
- "legendDesc": "Reached 1000 reputation points",
1852
- "phoenix": "Phoenix",
1853
- "phoenixDesc": "Reached 2500 reputation points",
1854
- "unstoppable": "Unstoppable",
1855
- "unstoppableDesc": "Reached 5000 reputation points",
1856
- "helper": "Helper",
1857
- "helperDesc": "Helped 10 users",
1858
- "bugHunter": "Bug Hunter",
1859
- "bugHunterDesc": "Reported helpful bugs",
1860
- "streakMaster": "Streak Master",
1861
- "streakMasterDesc": "7 day activity streak",
1862
- "earlyAdopter": "Early Adopter",
1863
- "earlyAdopterDesc": "Been part of the community from the start"
1864
- }
1843
+ },
1844
+ },
1845
+ leaderboard: {
1846
+ title: 'Trust Leaderboard',
1847
+ subtitle: 'Top contributors in the community',
1848
+ rankLabel: 'rank {{rank}}',
1849
+ empty: 'No leaderboard data',
1850
+ emptyDesc: 'Top contributors will appear here as the community grows.',
1851
+ error: 'Failed to load leaderboard',
1852
+ },
1853
+ rewards: {
1854
+ title: 'Trust Rewards',
1855
+ subtitle: 'Unlock special features and recognition',
1856
+ },
1857
+ rules: {
1858
+ title: 'Trust Rules',
1859
+ subtitle: 'How to earn reputation',
1860
+ empty: 'No rules found.',
1861
+ categories: {
1862
+ content: 'Content',
1863
+ social: 'Social',
1864
+ trust: 'Trust',
1865
+ moderation: 'Moderation',
1866
+ physical: 'Real Life',
1867
+ penalty: 'Penalties',
1868
+ other: 'Other',
1869
+ },
1870
+ },
1871
+ achievements: {
1872
+ unlocked: 'Achievements',
1873
+ locked: 'Locked Achievements',
1874
+ firstStep: 'First Step',
1875
+ firstStepDesc: 'Earned your first reputation point',
1876
+ novice: 'Novice',
1877
+ noviceDesc: 'Reached 10 reputation points',
1878
+ contributor: 'Contributor',
1879
+ contributorDesc: 'Reached 50 reputation points',
1880
+ risingStar: 'Rising Star',
1881
+ risingStarDesc: 'Reached 100 reputation points',
1882
+ communityHero: 'Community Hero',
1883
+ communityHeroDesc: 'Reached 500 reputation points',
1884
+ legend: 'Legend',
1885
+ legendDesc: 'Reached 1000 reputation points',
1886
+ phoenix: 'Phoenix',
1887
+ phoenixDesc: 'Reached 2500 reputation points',
1888
+ unstoppable: 'Unstoppable',
1889
+ unstoppableDesc: 'Reached 5000 reputation points',
1890
+ helper: 'Helper',
1891
+ helperDesc: 'Helped 10 users',
1892
+ bugHunter: 'Bug Hunter',
1893
+ bugHunterDesc: 'Reported helpful bugs',
1894
+ streakMaster: 'Streak Master',
1895
+ streakMasterDesc: '7 day activity streak',
1896
+ earlyAdopter: 'Early Adopter',
1897
+ earlyAdopterDesc: 'Been part of the community from the start',
1898
+ },
1865
1899
  },
1866
- "consent": {
1867
- "title": "Continue to {{app}}",
1868
- "subtitle": "Use your Oxy account to sign in to {{app}}. Review what this connection means before you continue.",
1869
- "provenance": {
1870
- "title": "Who is requesting access",
1871
- "official": "Official Oxy application",
1872
- "developer": "Published by {{developer}}",
1873
- "thirdParty": "Third-party application"
1874
- },
1875
- "permissions": {
1876
- "title": "Permissions requested",
1877
- "basic": "Sign you in and read your basic profile"
1878
- },
1879
- "resource": {
1880
- "title": "Oxy app and protected resource"
1881
- },
1882
- "writeActions": {
1883
- "title": "Actions this connection can perform"
1884
- },
1885
- "effects": {
1886
- "write": "Write",
1887
- "external": "External",
1888
- "financial": "Financial",
1889
- "security": "Security"
1890
- },
1891
- "scopes": {
1892
- "openid": "Confirm your identity",
1893
- "profile": "Read your basic profile",
1894
- "email": "Read your email address",
1895
- "offlineAccess": "Keep you signed in when you're away",
1896
- "userRead": "Read your basic profile",
1897
- "filesRead": "Read your files",
1898
- "filesWrite": "Upload and modify your files",
1899
- "filesDelete": "Delete your files",
1900
- "webhooksReceive": "Receive webhooks",
1901
- "inferenceInvoke": "Run AI requests on your behalf",
1902
- "inferenceModelsRead": "List available AI models",
1903
- "inferenceUsageRead": "Read its AI usage and costs",
1904
- "inferenceRoutingRead": "Read how AI requests are routed",
1905
- "inferenceRoutingWrite": "Change how AI requests are routed",
1906
- "inferenceProvidersRead": "Read its connected AI providers",
1907
- "inferenceProvidersWrite": "Manage its connected AI providers",
1908
- "federationWrite": "Act across federated services"
1909
- },
1910
- "account": {
1911
- "title": "Signing in as",
1912
- "id": "Account ID: {{id}}"
1913
- },
1914
- "links": {
1915
- "website": "Website",
1916
- "privacy": "Privacy Policy",
1917
- "terms": "Terms of Service"
1918
- },
1919
- "allow": "Continue to {{app}}",
1920
- "deny": "Cancel",
1921
- "disclaimer": "By continuing, {{app}} will be able to sign in with your Oxy account. You can manage connected apps anytime in your Oxy account settings."
1900
+ consent: {
1901
+ title: 'Continue to {{app}}',
1902
+ subtitle:
1903
+ 'Use your Oxy account to sign in to {{app}}. Review what this connection means before you continue.',
1904
+ provenance: {
1905
+ title: 'Who is requesting access',
1906
+ official: 'Official Oxy application',
1907
+ developer: 'Published by {{developer}}',
1908
+ thirdParty: 'Third-party application',
1909
+ },
1910
+ permissions: {
1911
+ title: 'Permissions requested',
1912
+ basic: 'Sign you in and read your basic profile',
1913
+ },
1914
+ resource: {
1915
+ title: 'Oxy app and protected resource',
1916
+ },
1917
+ writeActions: {
1918
+ title: 'Actions this connection can perform',
1919
+ },
1920
+ effects: {
1921
+ write: 'Write',
1922
+ external: 'External',
1923
+ financial: 'Financial',
1924
+ security: 'Security',
1925
+ },
1926
+ scopes: {
1927
+ openid: 'Confirm your identity',
1928
+ profile: 'Read your basic profile',
1929
+ email: 'Read your email address',
1930
+ offlineAccess: "Keep you signed in when you're away",
1931
+ userRead: 'Read your basic profile',
1932
+ filesRead: 'Read your files',
1933
+ filesWrite: 'Upload and modify your files',
1934
+ filesDelete: 'Delete your files',
1935
+ webhooksReceive: 'Receive webhooks',
1936
+ inferenceInvoke: 'Run AI requests on your behalf',
1937
+ inferenceModelsRead: 'List available AI models',
1938
+ inferenceUsageRead: 'Read its AI usage and costs',
1939
+ inferenceRoutingRead: 'Read how AI requests are routed',
1940
+ inferenceRoutingWrite: 'Change how AI requests are routed',
1941
+ inferenceProvidersRead: 'Read its connected AI providers',
1942
+ inferenceProvidersWrite: 'Manage its connected AI providers',
1943
+ federationWrite: 'Act across federated services',
1944
+ },
1945
+ account: {
1946
+ title: 'Signing in as',
1947
+ id: 'Account ID: {{id}}',
1948
+ },
1949
+ links: {
1950
+ website: 'Website',
1951
+ privacy: 'Privacy Policy',
1952
+ terms: 'Terms of Service',
1953
+ },
1954
+ allow: 'Continue to {{app}}',
1955
+ deny: 'Cancel',
1956
+ disclaimer:
1957
+ 'By continuing, {{app}} will be able to sign in with your Oxy account. You can manage connected apps anytime in your Oxy account settings.',
1922
1958
  },
1923
- "emailCode": {
1924
- "title": "Check your email",
1925
- "sentTo": "We sent a 6-digit code to {{email}}.",
1926
- "label": "Code",
1927
- "resend": "Send a new code",
1928
- "resent": "We sent a new code.",
1929
- "changeEmail": "Use another email",
1930
- "errors": {
1931
- "codeInvalid": "That code isn't right, or it has expired.",
1932
- "tooManyAttempts": "Too many wrong codes. Ask for a new one.",
1933
- "expired": "This took too long. Start again.",
1934
- "unavailable": "Oxy can't send email right now. Try again later.",
1935
- "rateLimited": "Too many codes. Try again later."
1936
- }
1959
+ emailCode: {
1960
+ title: 'Check your email',
1961
+ sentTo: 'We sent a 6-digit code to {{email}}.',
1962
+ label: 'Code',
1963
+ resend: 'Send a new code',
1964
+ resent: 'We sent a new code.',
1965
+ changeEmail: 'Use another email',
1966
+ errors: {
1967
+ codeInvalid: "That code isn't right, or it has expired.",
1968
+ tooManyAttempts: 'Too many wrong codes. Ask for a new one.',
1969
+ expired: 'This took too long. Start again.',
1970
+ unavailable: "Oxy can't send email right now. Try again later.",
1971
+ rateLimited: 'Too many codes. Try again later.',
1972
+ },
1937
1973
  },
1938
- "linkCommons": {
1939
- "title": "Link Commons",
1940
- "subtitle": "Keep your own key: link Commons and this account becomes yours alone. Its email is deleted, and your recovery phrase in Commons is how you get back in.",
1941
- "scan": "On your phone, open Commons, choose “I have an Oxy account on the web” and scan this code.",
1942
- "waiting": "Waiting for Commons…",
1943
- "compareTitle": "Check the code",
1944
- "compare": "Commons shows the same code. If it doesn’t, cancel.",
1945
- "confirm": "Yes, link Commons",
1946
- "cancel": "Cancel",
1947
- "doneTitle": "Commons is linked",
1948
- "done": "This account is self-custodied now. Its email was deleted: your recovery phrase in Commons is how you get back in.",
1949
- "already": "This account already uses Commons.",
1950
- "expired": "This code expired.",
1951
- "renew": "Show a new code",
1952
- "failed": "Commons couldn’t be linked. Try again.",
1953
- "confirmTitle": "Confirm the link",
1954
- "confirmDescription": "To finish, confirm it's you with a code we email you.",
1955
- "row": "Hold your own key with Commons"
1974
+ linkCommons: {
1975
+ title: 'Link Commons',
1976
+ subtitle:
1977
+ 'Keep your own key: link Commons and this account becomes yours alone. Its email is deleted, and your recovery phrase in Commons is how you get back in.',
1978
+ scan: 'On your phone, open Commons, choose “I have an Oxy account on the web” and scan this code.',
1979
+ waiting: 'Waiting for Commons…',
1980
+ compareTitle: 'Check the code',
1981
+ compare: 'Commons shows the same code. If it doesn’t, cancel.',
1982
+ confirm: 'Yes, link Commons',
1983
+ cancel: 'Cancel',
1984
+ doneTitle: 'Commons is linked',
1985
+ done: 'This account is self-custodied now. Its email was deleted: your recovery phrase in Commons is how you get back in.',
1986
+ already: 'This account already uses Commons.',
1987
+ expired: 'This code expired.',
1988
+ renew: 'Show a new code',
1989
+ failed: 'Commons couldn’t be linked. Try again.',
1990
+ confirmTitle: 'Confirm the link',
1991
+ confirmDescription: "To finish, confirm it's you with a code we email you.",
1992
+ row: 'Hold your own key with Commons',
1956
1993
  },
1957
- "reauth": {
1958
- "title": "Confirm it's you",
1959
- "emailDescription": "We'll send a code to your email to confirm this change.",
1960
- "sendCode": "Send code",
1961
- "codeSent": "We sent a 6-digit code to your email.",
1962
- "codeLabel": "Code from the email",
1963
- "passwordLabel": "Current password",
1964
- "usePassword": "Use your password instead",
1965
- "useEmail": "Get a code by email instead",
1966
- "errors": {
1967
- "invalid": "That didn't work. Check what you typed and try again.",
1968
- "totpRequired": "Enter the code from your authenticator app too."
1969
- }
1994
+ reauth: {
1995
+ title: "Confirm it's you",
1996
+ emailDescription: "We'll send a code to your email to confirm this change.",
1997
+ sendCode: 'Send code',
1998
+ codeSent: 'We sent a 6-digit code to your email.',
1999
+ codeLabel: 'Code from the email',
2000
+ passwordLabel: 'Current password',
2001
+ usePassword: 'Use your password instead',
2002
+ useEmail: 'Get a code by email instead',
2003
+ errors: {
2004
+ invalid: "That didn't work. Check what you typed and try again.",
2005
+ totpRequired: 'Enter the code from your authenticator app too.',
2006
+ },
1970
2007
  },
1971
- "signInSecurity": {
1972
- "password": {
1973
- "title": "Password",
1974
- "setTitle": "Set a password",
1975
- "changeTitle": "Change your password",
1976
- "description": "Sign in with your password instead of a code by email. Use at least {{min}} characters.",
1977
- "newLabel": "New password",
1978
- "repeatLabel": "Repeat the password",
1979
- "tooShort": "Use at least {{min}} characters.",
1980
- "mismatch": "The passwords don't match.",
1981
- "signOutOthers": "Sign out everywhere else",
1982
- "save": "Save password",
1983
- "saved": "Your password is saved.",
1984
- "row": "Optional: sign in with a password"
1985
- },
1986
- "totp": {
1987
- "title": "Authenticator app",
1988
- "description": "After your email code or password, Oxy also asks for a code from an app like Google Authenticator or 1Password.",
1989
- "setUp": "Set up",
1990
- "scan": "Scan this QR code with your authenticator app, or enter the setup key.",
1991
- "secretLabel": "Setup key",
1992
- "codeLabel": "Code from the app",
1993
- "enable": "Turn on",
1994
- "enabled": "The authenticator app is on.",
1995
- "disable": "Turn off the authenticator app",
1996
- "disabled": "The authenticator app is off.",
1997
- "on": "On",
1998
- "off": "Off",
1999
- "backupTitle": "Save your backup codes",
2000
- "backupDescription": "If you lose your phone, each code signs you in once. Keep them somewhere safe: they won't be shown again.",
2001
- "copy": "Copy codes",
2002
- "copied": "Backup codes copied.",
2003
- "savedThem": "I saved them",
2004
- "regenerate": "Get new backup codes",
2005
- "regenerateDescription": "Your old backup codes stop working.",
2006
- "remaining": "{{count}} backup codes left",
2007
- "row": "A second step when you sign in"
2008
- }
2008
+ signInSecurity: {
2009
+ password: {
2010
+ title: 'Password',
2011
+ setTitle: 'Set a password',
2012
+ changeTitle: 'Change your password',
2013
+ description:
2014
+ 'Sign in with your password instead of a code by email. Use at least {{min}} characters.',
2015
+ newLabel: 'New password',
2016
+ repeatLabel: 'Repeat the password',
2017
+ tooShort: 'Use at least {{min}} characters.',
2018
+ mismatch: "The passwords don't match.",
2019
+ signOutOthers: 'Sign out everywhere else',
2020
+ save: 'Save password',
2021
+ saved: 'Your password is saved.',
2022
+ row: 'Optional: sign in with a password',
2023
+ },
2024
+ totp: {
2025
+ title: 'Authenticator app',
2026
+ description:
2027
+ 'After your email code or password, Oxy also asks for a code from an app like Google Authenticator or 1Password.',
2028
+ setUp: 'Set up',
2029
+ scan: 'Scan this QR code with your authenticator app, or enter the setup key.',
2030
+ secretLabel: 'Setup key',
2031
+ codeLabel: 'Code from the app',
2032
+ enable: 'Turn on',
2033
+ enabled: 'The authenticator app is on.',
2034
+ disable: 'Turn off the authenticator app',
2035
+ disabled: 'The authenticator app is off.',
2036
+ on: 'On',
2037
+ off: 'Off',
2038
+ backupTitle: 'Save your backup codes',
2039
+ backupDescription:
2040
+ "If you lose your phone, each code signs you in once. Keep them somewhere safe: they won't be shown again.",
2041
+ copy: 'Copy codes',
2042
+ copied: 'Backup codes copied.',
2043
+ savedThem: 'I saved them',
2044
+ regenerate: 'Get new backup codes',
2045
+ regenerateDescription: 'Your old backup codes stop working.',
2046
+ remaining: '{{count}} backup codes left',
2047
+ row: 'A second step when you sign in',
2048
+ },
2049
+ },
2050
+ domains: {
2051
+ title: 'Domains',
2052
+ subtitle: 'Prove you own a domain and show it on your profile',
2053
+ add: {
2054
+ title: 'Add a domain',
2055
+ label: 'Domain',
2056
+ action: 'Get verification code',
2057
+ },
2058
+ instructions: {
2059
+ title: 'Verify {{domain}}',
2060
+ dns: "Add this TXT record to the domain's DNS:",
2061
+ wellKnown: 'Or serve this text at the .well-known URL below:',
2062
+ verify: 'Verify',
2063
+ },
2064
+ list: {
2065
+ title: 'Your domains',
2066
+ empty: 'No domains yet',
2067
+ },
2068
+ method: {
2069
+ dns: 'DNS record',
2070
+ wellKnown: '.well-known file',
2071
+ },
2072
+ verified: '{{domain}} is verified',
2073
+ errors: {
2074
+ request: "Couldn't start the verification. Check the domain and try again.",
2075
+ notYet: 'Not verified yet. Changes to DNS can take a while to show up.',
2076
+ remove: "Couldn't remove the domain",
2077
+ },
2078
+ remove: {
2079
+ title: 'Remove domain',
2080
+ message: 'Remove {{domain}} from your account?',
2081
+ confirm: 'Remove',
2082
+ },
2009
2083
  },
2010
- "domains": {
2011
- "title": "Domains",
2012
- "subtitle": "Prove you own a domain and show it on your profile",
2013
- "add": {
2014
- "title": "Add a domain",
2015
- "label": "Domain",
2016
- "action": "Get verification code"
2017
- },
2018
- "instructions": {
2019
- "title": "Verify {{domain}}",
2020
- "dns": "Add this TXT record to the domain's DNS:",
2021
- "wellKnown": "Or serve this text at the .well-known URL below:",
2022
- "verify": "Verify"
2023
- },
2024
- "list": {
2025
- "title": "Your domains",
2026
- "empty": "No domains yet"
2027
- },
2028
- "method": {
2029
- "dns": "DNS record",
2030
- "wellKnown": ".well-known file"
2031
- },
2032
- "verified": "{{domain}} is verified",
2033
- "errors": {
2034
- "request": "Couldn't start the verification. Check the domain and try again.",
2035
- "notYet": "Not verified yet. Changes to DNS can take a while to show up.",
2036
- "remove": "Couldn't remove the domain"
2037
- },
2038
- "remove": {
2039
- "title": "Remove domain",
2040
- "message": "Remove {{domain}} from your account?",
2041
- "confirm": "Remove"
2042
- }
2043
- }
2044
2084
  };
2045
2085
  export default dict;