ignite-parse-auth-kit 1.0.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 (241) hide show
  1. package/CONTRIBUTING.md +0 -0
  2. package/LICENSE +21 -0
  3. package/README.md +492 -0
  4. package/app/app.tsx +116 -0
  5. package/app/components/AlertTongle.tsx +105 -0
  6. package/app/components/AutoImage.tsx +89 -0
  7. package/app/components/Button.tsx +248 -0
  8. package/app/components/Card.tsx +314 -0
  9. package/app/components/EmptyState.tsx +248 -0
  10. package/app/components/Header.tsx +332 -0
  11. package/app/components/Icon.tsx +140 -0
  12. package/app/components/ListItem.tsx +243 -0
  13. package/app/components/ListView.tsx +42 -0
  14. package/app/components/Screen.tsx +305 -0
  15. package/app/components/Text.test.tsx +23 -0
  16. package/app/components/Text.tsx +116 -0
  17. package/app/components/TextField.tsx +292 -0
  18. package/app/components/Toggle/Checkbox.tsx +123 -0
  19. package/app/components/Toggle/Radio.tsx +106 -0
  20. package/app/components/Toggle/Switch.tsx +264 -0
  21. package/app/components/Toggle/Toggle.tsx +285 -0
  22. package/app/components/index copy.ts +15 -0
  23. package/app/components/index.ts +18 -0
  24. package/app/config/config.base.ts +26 -0
  25. package/app/config/config.dev.ts +10 -0
  26. package/app/config/config.prod.ts +10 -0
  27. package/app/config/index.ts +28 -0
  28. package/app/context/AuthContext.tsx +14 -0
  29. package/app/context/EpisodeContext.tsx +136 -0
  30. package/app/context/auth/AuthProvider.tsx +340 -0
  31. package/app/context/auth/hooks.ts +29 -0
  32. package/app/context/auth/index.ts +38 -0
  33. package/app/context/auth/reducer.ts +68 -0
  34. package/app/context/auth/services.ts +394 -0
  35. package/app/context/auth/types.ts +99 -0
  36. package/app/context/auth/validation.ts +45 -0
  37. package/app/devtools/ReactotronClient.ts +9 -0
  38. package/app/devtools/ReactotronClient.web.ts +12 -0
  39. package/app/devtools/ReactotronConfig.ts +139 -0
  40. package/app/i18n/ar.ts +126 -0
  41. package/app/i18n/demo-ar.ts +464 -0
  42. package/app/i18n/demo-en.ts +462 -0
  43. package/app/i18n/demo-es.ts +469 -0
  44. package/app/i18n/demo-fr.ts +471 -0
  45. package/app/i18n/demo-hi.ts +468 -0
  46. package/app/i18n/demo-ja.ts +464 -0
  47. package/app/i18n/demo-ko.ts +457 -0
  48. package/app/i18n/en.ts +146 -0
  49. package/app/i18n/es.ts +132 -0
  50. package/app/i18n/fr.ts +132 -0
  51. package/app/i18n/hi.ts +131 -0
  52. package/app/i18n/index.ts +86 -0
  53. package/app/i18n/ja.ts +130 -0
  54. package/app/i18n/ko.ts +129 -0
  55. package/app/i18n/translate.ts +33 -0
  56. package/app/lib/Parse/index.ts +2 -0
  57. package/app/lib/Parse/parse.ts +62 -0
  58. package/app/navigators/AppNavigator.tsx +145 -0
  59. package/app/navigators/DemoNavigator.tsx +137 -0
  60. package/app/navigators/navigationUtilities.ts +208 -0
  61. package/app/screens/ChooseAuthScreen.tsx +224 -0
  62. package/app/screens/DemoCommunityScreen.tsx +141 -0
  63. package/app/screens/DemoDebugScreen.tsx +192 -0
  64. package/app/screens/DemoPodcastListScreen.tsx +387 -0
  65. package/app/screens/DemoShowroomScreen/DemoDivider.tsx +66 -0
  66. package/app/screens/DemoShowroomScreen/DemoShowroomScreen.tsx +313 -0
  67. package/app/screens/DemoShowroomScreen/DemoUseCase.tsx +52 -0
  68. package/app/screens/DemoShowroomScreen/DrawerIconButton.tsx +120 -0
  69. package/app/screens/DemoShowroomScreen/SectionListWithKeyboardAwareScrollView.tsx +59 -0
  70. package/app/screens/DemoShowroomScreen/demos/DemoAutoImage.tsx +230 -0
  71. package/app/screens/DemoShowroomScreen/demos/DemoButton.tsx +234 -0
  72. package/app/screens/DemoShowroomScreen/demos/DemoCard.tsx +181 -0
  73. package/app/screens/DemoShowroomScreen/demos/DemoEmptyState.tsx +78 -0
  74. package/app/screens/DemoShowroomScreen/demos/DemoHeader.tsx +151 -0
  75. package/app/screens/DemoShowroomScreen/demos/DemoIcon.tsx +115 -0
  76. package/app/screens/DemoShowroomScreen/demos/DemoListItem.tsx +218 -0
  77. package/app/screens/DemoShowroomScreen/demos/DemoText.tsx +144 -0
  78. package/app/screens/DemoShowroomScreen/demos/DemoTextField.tsx +233 -0
  79. package/app/screens/DemoShowroomScreen/demos/DemoToggle.tsx +354 -0
  80. package/app/screens/DemoShowroomScreen/demos/index.ts +12 -0
  81. package/app/screens/ErrorScreen/ErrorBoundary.tsx +76 -0
  82. package/app/screens/ErrorScreen/ErrorDetails.tsx +98 -0
  83. package/app/screens/ForgetPasswordScreen.tsx +180 -0
  84. package/app/screens/LoginScreen.tsx +260 -0
  85. package/app/screens/RegisterScreen.tsx +395 -0
  86. package/app/screens/WelcomeScreen.tsx +114 -0
  87. package/app/services/api/apiProblem.test.ts +73 -0
  88. package/app/services/api/apiProblem.ts +74 -0
  89. package/app/services/api/index.ts +91 -0
  90. package/app/services/api/types.ts +50 -0
  91. package/app/theme/colors.ts +85 -0
  92. package/app/theme/colorsDark.ts +50 -0
  93. package/app/theme/context.tsx +145 -0
  94. package/app/theme/context.utils.ts +25 -0
  95. package/app/theme/spacing.ts +14 -0
  96. package/app/theme/spacingDark.ts +14 -0
  97. package/app/theme/styles.ts +24 -0
  98. package/app/theme/theme.ts +23 -0
  99. package/app/theme/timing.ts +6 -0
  100. package/app/theme/types.ts +64 -0
  101. package/app/theme/typography.ts +71 -0
  102. package/app/utils/crashReporting.ts +62 -0
  103. package/app/utils/delay.ts +6 -0
  104. package/app/utils/formatDate.ts +49 -0
  105. package/app/utils/gestureHandler.native.ts +3 -0
  106. package/app/utils/gestureHandler.ts +6 -0
  107. package/app/utils/hasValidStringProp.ts +11 -0
  108. package/app/utils/openLinkInBrowser.ts +8 -0
  109. package/app/utils/storage/index.ts +82 -0
  110. package/app/utils/storage/storage.test.ts +61 -0
  111. package/app/utils/useHeader.tsx +37 -0
  112. package/app/utils/useIsMounted.ts +18 -0
  113. package/app/utils/useSafeAreaInsetsStyle.ts +46 -0
  114. package/app.config.ts +39 -0
  115. package/app.json +67 -0
  116. package/assets/icons/back.png +0 -0
  117. package/assets/icons/back@2x.png +0 -0
  118. package/assets/icons/back@3x.png +0 -0
  119. package/assets/icons/bell.png +0 -0
  120. package/assets/icons/bell@2x.png +0 -0
  121. package/assets/icons/bell@3x.png +0 -0
  122. package/assets/icons/caretLeft.png +0 -0
  123. package/assets/icons/caretLeft@2x.png +0 -0
  124. package/assets/icons/caretLeft@3x.png +0 -0
  125. package/assets/icons/caretRight.png +0 -0
  126. package/assets/icons/caretRight@2x.png +0 -0
  127. package/assets/icons/caretRight@3x.png +0 -0
  128. package/assets/icons/check.png +0 -0
  129. package/assets/icons/check@2x.png +0 -0
  130. package/assets/icons/check@3x.png +0 -0
  131. package/assets/icons/demo/clap.png +0 -0
  132. package/assets/icons/demo/clap@2x.png +0 -0
  133. package/assets/icons/demo/clap@3x.png +0 -0
  134. package/assets/icons/demo/community.png +0 -0
  135. package/assets/icons/demo/community@2x.png +0 -0
  136. package/assets/icons/demo/community@3x.png +0 -0
  137. package/assets/icons/demo/components.png +0 -0
  138. package/assets/icons/demo/components@2x.png +0 -0
  139. package/assets/icons/demo/components@3x.png +0 -0
  140. package/assets/icons/demo/debug.png +0 -0
  141. package/assets/icons/demo/debug@2x.png +0 -0
  142. package/assets/icons/demo/debug@3x.png +0 -0
  143. package/assets/icons/demo/github.png +0 -0
  144. package/assets/icons/demo/github@2x.png +0 -0
  145. package/assets/icons/demo/github@3x.png +0 -0
  146. package/assets/icons/demo/heart.png +0 -0
  147. package/assets/icons/demo/heart@2x.png +0 -0
  148. package/assets/icons/demo/heart@3x.png +0 -0
  149. package/assets/icons/demo/pin.png +0 -0
  150. package/assets/icons/demo/pin@2x.png +0 -0
  151. package/assets/icons/demo/pin@3x.png +0 -0
  152. package/assets/icons/demo/podcast.png +0 -0
  153. package/assets/icons/demo/podcast@2x.png +0 -0
  154. package/assets/icons/demo/podcast@3x.png +0 -0
  155. package/assets/icons/demo/slack.png +0 -0
  156. package/assets/icons/demo/slack@2x.png +0 -0
  157. package/assets/icons/demo/slack@3x.png +0 -0
  158. package/assets/icons/google.png +0 -0
  159. package/assets/icons/hidden.png +0 -0
  160. package/assets/icons/hidden@2x.png +0 -0
  161. package/assets/icons/hidden@3x.png +0 -0
  162. package/assets/icons/ladybug.png +0 -0
  163. package/assets/icons/ladybug@2x.png +0 -0
  164. package/assets/icons/ladybug@3x.png +0 -0
  165. package/assets/icons/lock.png +0 -0
  166. package/assets/icons/lock@2x.png +0 -0
  167. package/assets/icons/lock@3x.png +0 -0
  168. package/assets/icons/menu.png +0 -0
  169. package/assets/icons/menu@2x.png +0 -0
  170. package/assets/icons/menu@3x.png +0 -0
  171. package/assets/icons/more.png +0 -0
  172. package/assets/icons/more@2x.png +0 -0
  173. package/assets/icons/more@3x.png +0 -0
  174. package/assets/icons/settings.png +0 -0
  175. package/assets/icons/settings@2x.png +0 -0
  176. package/assets/icons/settings@3x.png +0 -0
  177. package/assets/icons/view.png +0 -0
  178. package/assets/icons/view@2x.png +0 -0
  179. package/assets/icons/view@3x.png +0 -0
  180. package/assets/icons/x.png +0 -0
  181. package/assets/icons/x@2x.png +0 -0
  182. package/assets/icons/x@3x.png +0 -0
  183. package/assets/images/app-icon-all.png +0 -0
  184. package/assets/images/app-icon-android-adaptive-background.png +0 -0
  185. package/assets/images/app-icon-android-adaptive-foreground.png +0 -0
  186. package/assets/images/app-icon-android-legacy.png +0 -0
  187. package/assets/images/app-icon-ios.png +0 -0
  188. package/assets/images/app-icon-web-favicon.png +0 -0
  189. package/assets/images/demo/cr-logo.png +0 -0
  190. package/assets/images/demo/cr-logo@2x.png +0 -0
  191. package/assets/images/demo/cr-logo@3x.png +0 -0
  192. package/assets/images/demo/rnl-logo.png +0 -0
  193. package/assets/images/demo/rnl-logo@2x.png +0 -0
  194. package/assets/images/demo/rnl-logo@3x.png +0 -0
  195. package/assets/images/demo/rnn-logo.png +0 -0
  196. package/assets/images/demo/rnn-logo@2x.png +0 -0
  197. package/assets/images/demo/rnn-logo@3x.png +0 -0
  198. package/assets/images/demo/rnr-image-1.png +0 -0
  199. package/assets/images/demo/rnr-image-1@2x.png +0 -0
  200. package/assets/images/demo/rnr-image-1@3x.png +0 -0
  201. package/assets/images/demo/rnr-image-2.png +0 -0
  202. package/assets/images/demo/rnr-image-2@2x.png +0 -0
  203. package/assets/images/demo/rnr-image-2@3x.png +0 -0
  204. package/assets/images/demo/rnr-image-3.png +0 -0
  205. package/assets/images/demo/rnr-image-3@2x.png +0 -0
  206. package/assets/images/demo/rnr-image-3@3x.png +0 -0
  207. package/assets/images/demo/rnr-logo.png +0 -0
  208. package/assets/images/demo/rnr-logo@2x.png +0 -0
  209. package/assets/images/demo/rnr-logo@3x.png +0 -0
  210. package/assets/images/logo.png +0 -0
  211. package/assets/images/logo@2x.png +0 -0
  212. package/assets/images/logo@3x.png +0 -0
  213. package/assets/images/sad-face.png +0 -0
  214. package/assets/images/sad-face@2x.png +0 -0
  215. package/assets/images/sad-face@3x.png +0 -0
  216. package/assets/images/welcome-face.png +0 -0
  217. package/assets/images/welcome-face@2x.png +0 -0
  218. package/assets/images/welcome-face@3x.png +0 -0
  219. package/babel.config.js +7 -0
  220. package/bin/cli.js +196 -0
  221. package/ignite/templates/app-icon/android-adaptive-background.png +0 -0
  222. package/ignite/templates/app-icon/android-adaptive-foreground.png +0 -0
  223. package/ignite/templates/app-icon/android-legacy.png +0 -0
  224. package/ignite/templates/app-icon/ios-universal.png +0 -0
  225. package/ignite/templates/component/NAME.tsx.ejs +39 -0
  226. package/ignite/templates/navigator/NAMENavigator.tsx.ejs +18 -0
  227. package/ignite/templates/screen/NAMEScreen.tsx.ejs +29 -0
  228. package/ignite/templates/splash-screen/logo.png +0 -0
  229. package/index.tsx +9 -0
  230. package/jest.config.js +5 -0
  231. package/metro.config.js +31 -0
  232. package/package.json +166 -0
  233. package/plugins/withSplashScreen.ts +69 -0
  234. package/src/app/_layout.tsx +58 -0
  235. package/src/app/index.tsx +5 -0
  236. package/test/i18n.test.ts +75 -0
  237. package/test/mockFile.ts +6 -0
  238. package/test/setup.ts +58 -0
  239. package/test/test-tsconfig.json +8 -0
  240. package/tsconfig.json +52 -0
  241. package/types/lib.es5.d.ts +25 -0
package/app/i18n/es.ts ADDED
@@ -0,0 +1,132 @@
1
+ import demoEs from "./demo-es" // @demo remove-current-line
2
+ import { Translations } from "./en"
3
+
4
+ const es: Translations = {
5
+ common: {
6
+ ok: "OK",
7
+ cancel: "Cancelar",
8
+ back: "Volver",
9
+ logOut: "Cerrar sesión", // @demo remove-current-line
10
+ },
11
+ welcomeScreen: {
12
+ postscript:
13
+ "psst — Esto probablemente no es cómo se va a ver tu app. (A menos que tu diseñador te haya enviado estas pantallas, y en ese caso, ¡lánzalas en producción!)",
14
+ readyForLaunch: "Tu app, casi lista para su lanzamiento",
15
+ exciting: "(¡ohh, esto es emocionante!)",
16
+ letsGo: "¡Vamos!", // @demo remove-current-line
17
+ },
18
+ errorScreen: {
19
+ title: "¡Algo salió mal!",
20
+ friendlySubtitle:
21
+ "Esta es la pantalla que verán tus usuarios en producción cuando haya un error. Vas a querer personalizar este mensaje (que está ubicado en `app/i18n/es.ts`) y probablemente también su diseño (`app/screens/ErrorScreen`). Si quieres eliminarlo completamente, revisa `app/app.tsx` y el componente <ErrorBoundary>.",
22
+ reset: "REINICIA LA APP",
23
+ traceTitle: "Error desde %{name}", // @demo remove-current-line
24
+ },
25
+ emptyStateComponent: {
26
+ generic: {
27
+ heading: "Muy vacío... muy triste",
28
+ content:
29
+ "No se han encontrado datos por el momento. Intenta darle clic en el botón para refrescar o recargar la app.",
30
+ button: "Intentemos de nuevo",
31
+ },
32
+ },
33
+ // @demo remove-block-start
34
+ errors: {
35
+ invalidEmail: "Email inválido.",
36
+ },
37
+ loginScreen: {
38
+ logIn: "Iniciar sesión",
39
+ enterDetails:
40
+ "Ingresa tus datos a continuación para desbloquear información ultra secreta. Nunca vas a adivinar lo que te espera al otro lado. O quizás si lo harás; la verdad no hay mucha ciencia alrededor.",
41
+ emailFieldLabel: "Email",
42
+ passwordFieldLabel: "Contraseña",
43
+ emailFieldPlaceholder: "Ingresa tu email",
44
+ passwordFieldPlaceholder: "Contraseña super secreta aquí",
45
+ tapToLogIn: "¡Presiona acá para iniciar sesión!",
46
+ hint: "Consejo: puedes usar cualquier email y tu contraseña preferida :)",
47
+ },
48
+ demoNavigator: {
49
+ componentsTab: "Componentes",
50
+ debugTab: "Debug",
51
+ communityTab: "Comunidad",
52
+ podcastListTab: "Podcasts",
53
+ },
54
+ demoCommunityScreen: {
55
+ title: "Conecta con la comunidad",
56
+ tagLine:
57
+ "Únete a la comunidad React Native con los ingenieros de Infinite Red y mejora con nosotros tus habilidades para el desarrollo de apps.",
58
+ joinUsOnSlackTitle: "Únete a nosotros en Slack",
59
+ joinUsOnSlack:
60
+ "¿Quieres conectar con desarrolladores de React Native de todo el mundo? Únete a la conversación en nuestra comunidad de Slack. Nuestra comunidad, que crece día a día, es un espacio seguro para hacer preguntas, aprender de los demás y ampliar tu red.",
61
+ joinSlackLink: "Únete a la comunidad de Slack",
62
+ makeIgniteEvenBetterTitle: "Haz que Ignite sea aún mejor",
63
+ makeIgniteEvenBetter:
64
+ "¿Tienes una idea para hacer que Ignite sea aún mejor? ¡Nos encantaría escucharla! Estamos siempre buscando personas que quieran ayudarnos a construir las mejores herramientas para React Native. Únete a nosotros en GitHub para ayudarnos a construir el futuro de Ignite.",
65
+ contributeToIgniteLink: "Contribuir a Ignite",
66
+ theLatestInReactNativeTitle: "Lo último en el mundo de React Native",
67
+ theLatestInReactNative:
68
+ "Estamos aquí para mantenerte al día con todo lo que React Native tiene para ofrecer.",
69
+ reactNativeRadioLink: "React Native Radio",
70
+ reactNativeNewsletterLink: "Newsletter de React Native",
71
+ reactNativeLiveLink: "React Native Live",
72
+ chainReactConferenceLink: "Conferencia Chain React",
73
+ hireUsTitle: "Trabaja con Infinite Red en tu próximo proyecto",
74
+ hireUs:
75
+ "Ya sea para gestionar un proyecto de inicio a fin o educación a equipos a través de nuestros cursos y capacitación práctica, Infinite Red puede ayudarte en casi cualquier proyecto de React Native.",
76
+ hireUsLink: "Envíanos un mensaje",
77
+ },
78
+ demoShowroomScreen: {
79
+ jumpStart: "Componentes para comenzar tu proyecto",
80
+ lorem2Sentences:
81
+ "Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.",
82
+ demoHeaderTxExample: "Yay",
83
+ demoViaTxProp: "A través de el atributo `tx`",
84
+ demoViaSpecifiedTxProp: "A través de el atributo específico `{{prop}}Tx`",
85
+ },
86
+ demoDebugScreen: {
87
+ howTo: "CÓMO HACERLO",
88
+ title: "Debug",
89
+ tagLine:
90
+ "Felicidades, aquí tienes una propuesta de arquitectura y base de código avanzada para una app en React Native. ¡Disfrutalos!",
91
+ reactotron: "Enviar a Reactotron",
92
+ reportBugs: "Reportar errores",
93
+ demoList: "Lista demo",
94
+ demoPodcastList: "Lista demo de podcasts",
95
+ androidReactotronHint:
96
+ "Si esto no funciona, asegúrate de que la app de escritorio de Reactotron se esté ejecutando, corre adb reverse tcp:9090 tcp:9090 desde tu terminal, y luego recarga la app.",
97
+ iosReactotronHint:
98
+ "Si esto no funciona, asegúrate de que la app de escritorio de Reactotron se esté ejecutando, y luego recarga la app.",
99
+ macosReactotronHint:
100
+ "Si esto no funciona, asegúrate de que la app de escritorio de Reactotron se esté ejecutando, y luego recarga la app.",
101
+ webReactotronHint:
102
+ "Si esto no funciona, asegúrate de que la app de escritorio de Reactotron se esté ejecutando, y luego recarga la app.",
103
+ windowsReactotronHint:
104
+ "Si esto no funciona, asegúrate de que la app de escritorio de Reactotron se esté ejecutando, y luego recarga la app.",
105
+ },
106
+ demoPodcastListScreen: {
107
+ title: "Episodios de React Native Radio",
108
+ onlyFavorites: "Mostrar solo favoritos",
109
+ favoriteButton: "Favorito",
110
+ unfavoriteButton: "No favorito",
111
+ accessibility: {
112
+ cardHint:
113
+ "Haz doble clic para escuchar el episodio. Haz doble clic y mantén presionado para {{action}} este episodio.",
114
+ switch: "Activa para mostrar solo favoritos",
115
+ favoriteAction: "Cambiar a favorito",
116
+ favoriteIcon: "Episodio no favorito",
117
+ unfavoriteIcon: "Episodio favorito",
118
+ publishLabel: "Publicado el {{date}}",
119
+ durationLabel: "Duración: {{hours}} horas {{minutes}} minutos {{seconds}} segundos",
120
+ },
121
+ noFavoritesEmptyState: {
122
+ heading: "Esto está un poco vacío",
123
+ content:
124
+ "No se han agregado episodios favoritos todavía. ¡Presiona el corazón dentro de un episodio para agregarlo a tus favoritos!",
125
+ },
126
+ },
127
+ // @demo remove-block-start
128
+ ...demoEs,
129
+ // @demo remove-block-end
130
+ }
131
+
132
+ export default es
package/app/i18n/fr.ts ADDED
@@ -0,0 +1,132 @@
1
+ import demoFr from "./demo-fr" // @demo remove-current-line
2
+ import { Translations } from "./en"
3
+
4
+ const fr: Translations = {
5
+ common: {
6
+ ok: "OK !",
7
+ cancel: "Annuler",
8
+ back: "Retour",
9
+ logOut: "Déconnexion", // @demo remove-current-line
10
+ },
11
+ welcomeScreen: {
12
+ postscript:
13
+ "psst — Ce n'est probablement pas à quoi ressemble votre application. (À moins que votre designer ne vous ait donné ces écrans, dans ce cas, mettez la en prod !)",
14
+ readyForLaunch: "Votre application, presque prête pour le lancement !",
15
+ exciting: "(ohh, c'est excitant !)",
16
+ letsGo: "Allons-y !", // @demo remove-current-line
17
+ },
18
+ errorScreen: {
19
+ title: "Quelque chose s'est mal passé !",
20
+ friendlySubtitle:
21
+ "C'est l'écran que vos utilisateurs verront en production lorsqu'une erreur sera lancée. Vous voudrez personnaliser ce message (situé dans `app/i18n/fr.ts`) et probablement aussi la mise en page (`app/screens/ErrorScreen`). Si vous voulez le supprimer complètement, vérifiez `app/app.tsx` pour le composant <ErrorBoundary>.",
22
+ reset: "RÉINITIALISER L'APPLICATION",
23
+ traceTitle: "Erreur depuis %{name}", // @demo remove-current-line
24
+ },
25
+ emptyStateComponent: {
26
+ generic: {
27
+ heading: "Si vide... si triste",
28
+ content:
29
+ "Aucune donnée trouvée pour le moment. Essayez de cliquer sur le bouton pour rafraîchir ou recharger l'application.",
30
+ button: "Essayons à nouveau",
31
+ },
32
+ },
33
+ // @demo remove-block-start
34
+ errors: {
35
+ invalidEmail: "Adresse e-mail invalide.",
36
+ },
37
+ loginScreen: {
38
+ logIn: "Se connecter",
39
+ enterDetails:
40
+ "Entrez vos informations ci-dessous pour débloquer des informations top secrètes. Vous ne devinerez jamais ce que nous avons en attente. Ou peut-être que vous le ferez ; ce n'est pas de la science spatiale ici.",
41
+ emailFieldLabel: "E-mail",
42
+ passwordFieldLabel: "Mot de passe",
43
+ emailFieldPlaceholder: "Entrez votre adresse e-mail",
44
+ passwordFieldPlaceholder: "Mot de passe super secret ici",
45
+ tapToLogIn: "Appuyez pour vous connecter!",
46
+ hint: "Astuce : vous pouvez utiliser n'importe quelle adresse e-mail et votre mot de passe préféré :)",
47
+ },
48
+ demoNavigator: {
49
+ componentsTab: "Composants",
50
+ debugTab: "Débogage",
51
+ communityTab: "Communauté",
52
+ podcastListTab: "Podcasts",
53
+ },
54
+ demoCommunityScreen: {
55
+ title: "Connectez-vous avec la communauté",
56
+ tagLine:
57
+ "Rejoignez la communauté d'ingénieurs React Native d'Infinite Red et améliorez votre développement d'applications avec nous !",
58
+ joinUsOnSlackTitle: "Rejoignez-nous sur Slack",
59
+ joinUsOnSlack:
60
+ "Vous souhaitez vous connecter avec des ingénieurs React Native du monde entier ? Rejoignez la conversation dans la communauté Slack d'Infinite Red ! Notre communauté en pleine croissance est un espace sûr pour poser des questions, apprendre des autres et développer votre réseau.",
61
+ joinSlackLink: "Rejoindre la communauté Slack",
62
+ makeIgniteEvenBetterTitle: "Rendre Ignite encore meilleur",
63
+ makeIgniteEvenBetter:
64
+ "Vous avez une idée pour rendre Ignite encore meilleur ? Nous sommes heureux de l'entendre ! Nous cherchons toujours des personnes qui veulent nous aider à construire les meilleurs outils React Native. Rejoignez-nous sur GitHub pour nous aider à construire l'avenir d'Ignite.",
65
+ contributeToIgniteLink: "Contribuer à Ignite",
66
+ theLatestInReactNativeTitle: "Les dernières nouvelles de React Native",
67
+ theLatestInReactNative:
68
+ "Nous sommes là pour vous tenir au courant de tout ce que React Native a à offrir.",
69
+ reactNativeRadioLink: "React Native Radio",
70
+ reactNativeNewsletterLink: "React Native Newsletter",
71
+ reactNativeLiveLink: "React Native Live",
72
+ chainReactConferenceLink: "Conférence Chain React",
73
+ hireUsTitle: "Engagez Infinite Red pour votre prochain projet",
74
+ hireUs:
75
+ "Que ce soit pour gérer un projet complet ou pour former des équipes à notre formation pratique, Infinite Red peut vous aider pour presque tous les projets React Native.",
76
+ hireUsLink: "Envoyez-nous un message",
77
+ },
78
+ demoShowroomScreen: {
79
+ jumpStart: "Composants pour démarrer votre projet !",
80
+ lorem2Sentences:
81
+ "Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.",
82
+ demoHeaderTxExample: "Yay",
83
+ demoViaTxProp: "Via la propriété `tx`",
84
+ demoViaSpecifiedTxProp: "Via la propriété `{{prop}}Tx` spécifiée",
85
+ },
86
+ demoDebugScreen: {
87
+ howTo: "COMMENT FAIRE",
88
+ title: "Débugage",
89
+ tagLine:
90
+ "Félicitations, vous avez un modèle d'application React Native très avancé ici. Profitez de cette base de code !",
91
+ reactotron: "Envoyer à Reactotron",
92
+ reportBugs: "Signaler des bugs",
93
+ demoList: "Liste de démonstration",
94
+ demoPodcastList: "Liste de podcasts de démonstration",
95
+ androidReactotronHint:
96
+ "Si cela ne fonctionne pas, assurez-vous que l'application de bureau Reactotron est en cours d'exécution, exécutez adb reverse tcp:9090 tcp:9090 à partir de votre terminal, puis rechargez l'application.",
97
+ iosReactotronHint:
98
+ "Si cela ne fonctionne pas, assurez-vous que l'application de bureau Reactotron est en cours d'exécution, puis rechargez l'application.",
99
+ macosReactotronHint:
100
+ "Si cela ne fonctionne pas, assurez-vous que l'application de bureau Reactotron est en cours d'exécution, puis rechargez l'application.",
101
+ webReactotronHint:
102
+ "Si cela ne fonctionne pas, assurez-vous que l'application de bureau Reactotron est en cours d'exécution, puis rechargez l'application.",
103
+ windowsReactotronHint:
104
+ "Si cela ne fonctionne pas, assurez-vous que l'application de bureau Reactotron est en cours d'exécution, puis rechargez l'application.",
105
+ },
106
+ demoPodcastListScreen: {
107
+ title: "Épisodes de Radio React Native",
108
+ onlyFavorites: "Afficher uniquement les favoris",
109
+ favoriteButton: "Favori",
110
+ unfavoriteButton: "Non favori",
111
+ accessibility: {
112
+ cardHint:
113
+ "Double-cliquez pour écouter l'épisode. Double-cliquez et maintenez pour {{action}} cet épisode.",
114
+ switch: "Activez pour afficher uniquement les favoris",
115
+ favoriteAction: "Basculer en favori",
116
+ favoriteIcon: "Épisode non favori",
117
+ unfavoriteIcon: "Épisode favori",
118
+ publishLabel: "Publié le {{date}}",
119
+ durationLabel: "Durée : {{hours}} heures {{minutes}} minutes {{seconds}} secondes",
120
+ },
121
+ noFavoritesEmptyState: {
122
+ heading: "C'est un peu vide ici",
123
+ content:
124
+ "Aucun favori n'a été ajouté pour le moment. Appuyez sur le cœur d'un épisode pour l'ajouter à vos favoris !",
125
+ },
126
+ },
127
+ // @demo remove-block-start
128
+ ...demoFr,
129
+ // @demo remove-block-end
130
+ }
131
+
132
+ export default fr
package/app/i18n/hi.ts ADDED
@@ -0,0 +1,131 @@
1
+ import demoHi from "./demo-hi" // @demo remove-current-line
2
+ import { Translations } from "./en"
3
+
4
+ const hi: Translations = {
5
+ common: {
6
+ ok: "ठीक है!",
7
+ cancel: "रद्द करें",
8
+ back: "वापस",
9
+ logOut: "लॉग आउट", // @demo remove-current-line
10
+ },
11
+ welcomeScreen: {
12
+ postscript:
13
+ "psst - शायद आपका ऐप ऐसा नहीं दिखता है। (जब तक कि आपके डिजाइनर ने आपको ये स्क्रीन नहीं दी हों, और उस स्थिति में, इसे लॉन्च करें!)",
14
+ readyForLaunch: "आपका ऐप, लगभग लॉन्च के लिए तैयार है!",
15
+ exciting: "(ओह, यह रोमांचक है!)",
16
+ letsGo: "चलो चलते हैं!", // @demo remove-current-line
17
+ },
18
+ errorScreen: {
19
+ title: "कुछ गलत हो गया!",
20
+ friendlySubtitle:
21
+ "यह वह स्क्रीन है जो आपके उपयोगकर्ता संचालन में देखेंगे जब कोई त्रुटि होगी। आप इस संदेश को बदलना चाहेंगे (जो `app/i18n/hi.ts` में स्थित है) और शायद लेआउट भी (`app/screens/ErrorScreen`)। यदि आप इसे पूरी तरह से हटाना चाहते हैं, तो `app/app.tsx` में <ErrorBoundary> कंपोनेंट की जांच करें।",
22
+ reset: "ऐप रीसेट करें",
23
+ traceTitle: "%{name} स्टैक से त्रुटि", // @demo remove-current-line
24
+ },
25
+ emptyStateComponent: {
26
+ generic: {
27
+ heading: "इतना खाली... इतना उदास",
28
+ content: "अभी तक कोई डेटा नहीं मिला। रीफ्रेश करने या ऐप को पुनः लोड करने के लिए बटन दबाएं।",
29
+ button: "चलो फिर से कोशिश करते हैं",
30
+ },
31
+ },
32
+ // @demo remove-block-start
33
+ errors: {
34
+ invalidEmail: "अमान्य ईमेल पता।",
35
+ },
36
+ loginScreen: {
37
+ logIn: "लॉग इन करें",
38
+ enterDetails:
39
+ "सर्वश्रेष्ठ रहस्य पता करने के लिए नीचे अपना विवरण दर्ज करें। आप कभी अनुमान नहीं लगा पाएंगे कि हमारे पास क्या इंतजार कर रहा है। या शायद आप कर सकते हैं; यह रॉकेट साइंस नहीं है।",
40
+ emailFieldLabel: "ईमेल",
41
+ passwordFieldLabel: "पासवर्ड",
42
+ emailFieldPlaceholder: "अपना ईमेल पता दर्ज करें",
43
+ passwordFieldPlaceholder: "सुपर सीक्रेट पासवर्ड यहाँ",
44
+ tapToLogIn: "लॉग इन करने के लिए टैप करें!",
45
+ hint: "संकेत: आप किसी भी ईमेल पते और अपने पसंदीदा पासवर्ड का उपयोग कर सकते हैं :)",
46
+ },
47
+ demoNavigator: {
48
+ componentsTab: "कंपोनेंट्स",
49
+ debugTab: "डीबग",
50
+ communityTab: "समुदाय",
51
+ podcastListTab: "पॉडकास्ट",
52
+ },
53
+ demoCommunityScreen: {
54
+ title: "समुदाय से जुड़ें",
55
+ tagLine:
56
+ "Infinite Red के React Native इंजीनियरों के समुदाय से जुड़ें और हमारे साथ अपने ऐप विकास को बेहतर बनाएं!",
57
+ joinUsOnSlackTitle: "Slack पर हमसे जुड़ें",
58
+ joinUsOnSlack:
59
+ "क्या आप चाहते हैं कि दुनिया भर के React Native इंजीनियरों से जुड़ने के लिए कोई जगह हो? Infinite Red Community Slack में बातचीत में शामिल हों! हमारा बढ़ता हुआ समुदाय प्रश्न पूछने, दूसरों से सीखने और अपने नेटवर्क को बढ़ाने के लिए एक सुरक्षित स्थान है।",
60
+ joinSlackLink: "Slack समुदाय में शामिल हों",
61
+ makeIgniteEvenBetterTitle: "Ignite को और बेहतर बनाएं",
62
+ makeIgniteEvenBetter:
63
+ "Ignite को और बेहतर बनाने का कोई विचार है? हमें यह सुनकर खुशी होगी! हम हमेशा ऐसे लोगों की तलाश में रहते हैं जो हमें सर्वश्रेष्ठ React Native टूलिंग बनाने में मदद करना चाहते हैं। Ignite के भविष्य को बनाने में हमारे साथ शामिल होने के लिए GitHub पर हमसे जुड़ें।",
64
+ contributeToIgniteLink: "Ignite में योगदान दें",
65
+ theLatestInReactNativeTitle: "React Native में नवीनतम",
66
+ theLatestInReactNative: "हम आपको React Native के सभी प्रस्तावों पर अपडेट रखने के लिए यहां हैं।",
67
+ reactNativeRadioLink: "React Native रेडियो",
68
+ reactNativeNewsletterLink: "React Native न्यूजलेटर",
69
+ reactNativeLiveLink: "React Native लाइव",
70
+ chainReactConferenceLink: "Chain React कॉन्फ्रेंस",
71
+ hireUsTitle: "अपने अगले प्रोजेक्ट के लिए Infinite Red को काम पर रखें",
72
+ hireUs:
73
+ "चाहे वह एक पूरा प्रोजेक्ट चलाना हो या हमारे हैंड्स-ऑन प्रशिक्षण के साथ टीमों को गति देना हो, Infinite Red लगभग किसी भी React Native प्रोजेक्ट में मदद कर सकता है।",
74
+ hireUsLink: "हमें एक संदेश भेजें",
75
+ },
76
+ demoShowroomScreen: {
77
+ jumpStart: "अपने प्रोजेक्ट को जंप स्टार्ट करने के लिए कंपोनेंट्स!",
78
+ lorem2Sentences:
79
+ "कोई भी काम जो आप नहीं करना चाहते, उसे करने के लिए किसी और को ढूंढना चाहिए। जो लोग दूसरों की मदद करते हैं, वे खुद की भी मदद करते हैं।",
80
+ demoHeaderTxExample: "हाँ",
81
+ demoViaTxProp: "`tx` प्रॉप के माध्यम से",
82
+ demoViaSpecifiedTxProp: "`{{prop}}Tx` प्रॉप के माध्यम से",
83
+ },
84
+ demoDebugScreen: {
85
+ howTo: "कैसे करें",
86
+ title: "डीबग",
87
+ tagLine:
88
+ "बधाई हो, आपके पास यहां एक बहुत उन्नत React Native ऐप टेम्पलेट है। इस बॉयलरप्लेट का लाभ उठाएं!",
89
+ reactotron: "Reactotron को भेजें",
90
+ reportBugs: "बग्स की रिपोर्ट करें",
91
+ demoList: "डेमो सूची",
92
+ demoPodcastList: "डेमो पॉडकास्ट सूची",
93
+ androidReactotronHint:
94
+ "यदि यह काम नहीं करता है, तो सुनिश्चित करें कि Reactotron डेस्कटॉप ऐप चल रहा है, अपने टर्मिनल से adb reverse tcp:9090 tcp:9090 चलाएं, और ऐप को पुनः लोड करें।",
95
+ iosReactotronHint:
96
+ "यदि यह काम नहीं करता है, तो सुनिश्चित करें कि Reactotron डेस्कटॉप ऐप चल रहा है और ऐप को पुनः लोड करें।",
97
+ macosReactotronHint:
98
+ "यदि यह काम नहीं करता है, तो सुनिश्चित करें कि Reactotron डेस्कटॉप ऐप चल रहा है और ऐप को पुनः लोड करें।",
99
+ webReactotronHint:
100
+ "यदि यह काम नहीं करता है, तो सुनिश्चित करें कि Reactotron डेस्कटॉप ऐप चल रहा है और ऐप को पुनः लोड करें।",
101
+ windowsReactotronHint:
102
+ "यदि यह काम नहीं करता है, तो सुनिश्चित करें कि Reactotron डेस्कटॉप ऐप चल रहा है और ऐप को पुनः लोड करें।",
103
+ },
104
+ demoPodcastListScreen: {
105
+ title: "React Native रेडियो एपिसोड",
106
+ onlyFavorites: "केवल पसंदीदा दिखाएं",
107
+ favoriteButton: "पसंदीदा",
108
+ unfavoriteButton: "नापसंद",
109
+ accessibility: {
110
+ cardHint:
111
+ "एपिसोड सुनने के लिए डबल टैप करें। इस एपिसोड को {{action}} करने के लिए डबल टैप करें और होल्ड करें।",
112
+ switch: "केवल पसंदीदा दिखाने के लिए स्विच करें",
113
+ favoriteAction: "पसंदीदा टॉगल करें",
114
+ favoriteIcon: "एपिसोड पसंदीदा नहीं है",
115
+ unfavoriteIcon: "एपिसोड पसंदीदा है",
116
+ publishLabel: "{{date}} को प्रकाशित",
117
+ durationLabel: "अवधि: {{hours}} घंटे {{minutes}} मिनट {{seconds}} सेकंड",
118
+ },
119
+ noFavoritesEmptyState: {
120
+ heading: "यह थोड़ा खाली लगता है",
121
+ content:
122
+ "अभी तक कोई पसंदीदा नहीं जोड़ा गया है। इसे अपने पसंदीदा में जोड़ने के लिए किसी एपिसोड पर दिल पर टैप करें!",
123
+ },
124
+ },
125
+ // @demo remove-block-end
126
+ // @demo remove-block-start
127
+ ...demoHi,
128
+ // @demo remove-block-end
129
+ }
130
+
131
+ export default hi
@@ -0,0 +1,86 @@
1
+ import { I18nManager } from "react-native"
2
+ import * as Localization from "expo-localization"
3
+ import i18n from "i18next"
4
+ import { initReactI18next } from "react-i18next"
5
+ import "intl-pluralrules"
6
+
7
+ // if English isn't your default language, move Translations to the appropriate language file.
8
+ import ar from "./ar"
9
+ import en, { Translations } from "./en"
10
+ import es from "./es"
11
+ import fr from "./fr"
12
+ import hi from "./hi"
13
+ import ja from "./ja"
14
+ import ko from "./ko"
15
+
16
+ const fallbackLocale = "en-US"
17
+
18
+ const systemLocales = Localization.getLocales()
19
+
20
+ const resources = { ar, en, ko, es, fr, ja, hi }
21
+ const supportedTags = Object.keys(resources)
22
+
23
+ // Checks to see if the device locale matches any of the supported locales
24
+ // Device locale may be more specific and still match (e.g., en-US matches en)
25
+ const systemTagMatchesSupportedTags = (deviceTag: string) => {
26
+ const primaryTag = deviceTag.split("-")[0]
27
+ return supportedTags.includes(primaryTag)
28
+ }
29
+
30
+ const pickSupportedLocale: () => Localization.Locale | undefined = () => {
31
+ return systemLocales.find((locale) => systemTagMatchesSupportedTags(locale.languageTag))
32
+ }
33
+
34
+ const locale = pickSupportedLocale()
35
+
36
+ export let isRTL = false
37
+
38
+ // Need to set RTL ASAP to ensure the app is rendered correctly. Waiting for i18n to init is too late.
39
+ if (locale?.languageTag && locale?.textDirection === "rtl") {
40
+ I18nManager.allowRTL(true)
41
+ isRTL = true
42
+ } else {
43
+ I18nManager.allowRTL(false)
44
+ }
45
+
46
+ export const initI18n = async () => {
47
+ i18n.use(initReactI18next)
48
+
49
+ await i18n.init({
50
+ resources,
51
+ lng: locale?.languageTag ?? fallbackLocale,
52
+ fallbackLng: fallbackLocale,
53
+ interpolation: {
54
+ escapeValue: false,
55
+ },
56
+ })
57
+
58
+ return i18n
59
+ }
60
+
61
+ /**
62
+ * Builds up valid keypaths for translations.
63
+ */
64
+
65
+ export type TxKeyPath = RecursiveKeyOf<Translations>
66
+
67
+ // via: https://stackoverflow.com/a/65333050
68
+ type RecursiveKeyOf<TObj extends object> = {
69
+ [TKey in keyof TObj & (string | number)]: RecursiveKeyOfHandleValue<TObj[TKey], `${TKey}`, true>
70
+ }[keyof TObj & (string | number)]
71
+
72
+ type RecursiveKeyOfInner<TObj extends object> = {
73
+ [TKey in keyof TObj & (string | number)]: RecursiveKeyOfHandleValue<TObj[TKey], `${TKey}`, false>
74
+ }[keyof TObj & (string | number)]
75
+
76
+ type RecursiveKeyOfHandleValue<
77
+ TValue,
78
+ Text extends string,
79
+ IsFirstLevel extends boolean,
80
+ > = TValue extends any[]
81
+ ? Text
82
+ : TValue extends object
83
+ ? IsFirstLevel extends true
84
+ ? Text | `${Text}:${RecursiveKeyOfInner<TValue>}`
85
+ : Text | `${Text}.${RecursiveKeyOfInner<TValue>}`
86
+ : Text
package/app/i18n/ja.ts ADDED
@@ -0,0 +1,130 @@
1
+ import demoJa from "./demo-ja" // @demo remove-current-line
2
+ import { Translations } from "./en"
3
+
4
+ const ja: Translations = {
5
+ common: {
6
+ ok: "OK",
7
+ cancel: "キャンセル",
8
+ back: "戻る",
9
+ logOut: "ログアウト", // @demo remove-current-line
10
+ },
11
+ welcomeScreen: {
12
+ postscript:
13
+ "注目! — このアプリはお好みの見た目では無いかもしれません(デザイナーがこのスクリーンを送ってこない限りは。もしそうなら公開しちゃいましょう!)",
14
+ readyForLaunch: "このアプリはもう少しで公開できます!",
15
+ exciting: "(楽しみですね!)",
16
+ letsGo: "レッツゴー!", // @demo remove-current-line
17
+ },
18
+ errorScreen: {
19
+ title: "問題が発生しました",
20
+ friendlySubtitle:
21
+ "本番では、エラーが投げられた時にこのページが表示されます。もし使うならこのメッセージに変更を加えてください(`app/i18n/jp.ts`)レイアウトはこちらで変更できます(`app/screens/ErrorScreen`)。もしこのスクリーンを取り除きたい場合は、`app/app.tsx`にある<ErrorBoundary>コンポーネントをチェックしてください",
22
+ reset: "リセット",
23
+ traceTitle: "エラーのスタック: %{name}", // @demo remove-current-line
24
+ },
25
+ emptyStateComponent: {
26
+ generic: {
27
+ heading: "静かだ...悲しい。",
28
+ content:
29
+ "データが見つかりません。ボタンを押してアプリをリロード、またはリフレッシュしてください。",
30
+ button: "もう一度やってみよう",
31
+ },
32
+ },
33
+ // @demo remove-block-start
34
+ errors: {
35
+ invalidEmail: "有効なメールアドレスを入力してください.",
36
+ },
37
+ loginScreen: {
38
+ logIn: "ログイン",
39
+ enterDetails:
40
+ "ここにあなたの情報を入力してトップシークレットをアンロックしましょう。何が待ち構えているか予想もつかないはずです。はたまたそうでも無いかも - ロケットサイエンスほど複雑なものではありません。",
41
+ emailFieldLabel: "メールアドレス",
42
+ passwordFieldLabel: "パスワード",
43
+ emailFieldPlaceholder: "メールアドレスを入力してください",
44
+ passwordFieldPlaceholder: "パスワードを入力してください",
45
+ tapToLogIn: "タップしてログインしよう!",
46
+ hint: "ヒント: お好みのメールアドレスとパスワードを使ってください :)",
47
+ },
48
+ demoNavigator: {
49
+ componentsTab: "コンポーネント",
50
+ debugTab: "デバッグ",
51
+ communityTab: "コミュニティ",
52
+ podcastListTab: "ポッドキャスト",
53
+ },
54
+ demoCommunityScreen: {
55
+ title: "コミュニティと繋がろう",
56
+ tagLine:
57
+ "Infinite RedのReact Nativeエンジニアコミュニティに接続して、一緒にあなたのアプリ開発をレベルアップしましょう!",
58
+ joinUsOnSlackTitle: "私たちのSlackに参加しましょう",
59
+ joinUsOnSlack:
60
+ "世界中のReact Nativeエンジニアと繋がりたいを思いませんか?Infinite RedのコミュニティSlackに参加しましょう!私達のコミュニティは安全に質問ができ、お互いから学び、あなたのネットワークを広げることができます。",
61
+ joinSlackLink: "Slackコミュニティに参加する",
62
+ makeIgniteEvenBetterTitle: "Igniteをより良くする",
63
+ makeIgniteEvenBetter:
64
+ "Igniteをより良くする為のアイデアはありますか? そうであれば聞きたいです! 私たちはいつでも最良のReact Nativeのツールを開発する為に助けを求めています。GitHubで私たちと一緒にIgniteの未来を作りましょう。",
65
+ contributeToIgniteLink: "Igniteにコントリビュートする",
66
+ theLatestInReactNativeTitle: "React Nativeの今",
67
+ theLatestInReactNative: "React Nativeの現在をあなたにお届けします。",
68
+ reactNativeRadioLink: "React Native Radio",
69
+ reactNativeNewsletterLink: "React Native Newsletter",
70
+ reactNativeLiveLink: "React Native Live",
71
+ chainReactConferenceLink: "Chain React Conference",
72
+ hireUsTitle: "あなたの次のプロジェクトでInfinite Redと契約する",
73
+ hireUs:
74
+ "それがプロジェクト全体でも、チームにトレーニングをしてあげたい時でも、Infinite RedはReact Nativeのことであればなんでもお手伝いができます。",
75
+ hireUsLink: "メッセージを送る",
76
+ },
77
+ demoShowroomScreen: {
78
+ jumpStart: "あなたのプロジェクトをスタートさせるコンポーネントです!",
79
+ lorem2Sentences:
80
+ "Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.",
81
+ demoHeaderTxExample: "Yay",
82
+ demoViaTxProp: "`tx`から",
83
+ demoViaSpecifiedTxProp: "`{{prop}}Tx`から",
84
+ },
85
+ demoDebugScreen: {
86
+ howTo: "ハウツー",
87
+ title: "デバッグ",
88
+ tagLine:
89
+ "おめでとうございます、あなたはとてもハイレベルなReact Nativeのテンプレートを使ってます。このボイラープレートを活用してください!",
90
+ reactotron: "Reactotronに送る",
91
+ reportBugs: "バグをレポートする",
92
+ demoList: "デモリスト",
93
+ demoPodcastList: "デモのポッドキャストリスト",
94
+ androidReactotronHint:
95
+ "もし動かなければ、Reactotronのデスクトップアプリが実行されていることを確認して, このコマンドをターミナルで実行した後、アプリをアプリをリロードしてください。 adb reverse tcp:9090 tcp:9090",
96
+ iosReactotronHint:
97
+ "もし動かなければ、Reactotronのデスクトップアプリが実行されていることを確認して、アプリをリロードしてください。",
98
+ macosReactotronHint:
99
+ "もし動かなければ、Reactotronのデスクトップアプリが実行されていることを確認して、アプリをリロードしてください。",
100
+ webReactotronHint:
101
+ "もし動かなければ、Reactotronのデスクトップアプリが実行されていることを確認して、アプリをリロードしてください。",
102
+ windowsReactotronHint:
103
+ "もし動かなければ、Reactotronのデスクトップアプリが実行されていることを確認して、アプリをリロードしてください。",
104
+ },
105
+ demoPodcastListScreen: {
106
+ title: "React Native Radioのエピソード",
107
+ onlyFavorites: "お気に入り表示",
108
+ favoriteButton: "お気に入り",
109
+ unfavoriteButton: "お気に入りを外す",
110
+ accessibility: {
111
+ cardHint: "ダブルタップで再生します。 ダブルタップと長押しで {{action}}",
112
+ switch: "スイッチオンでお気に入りを表示する",
113
+ favoriteAction: "お気に入りの切り替え",
114
+ favoriteIcon: "お気に入りのエピソードではありません",
115
+ unfavoriteIcon: "お気に入りのエピソードです",
116
+ publishLabel: "公開日 {{date}}",
117
+ durationLabel: "再生時間: {{hours}} 時間 {{minutes}} 分 {{seconds}} 秒",
118
+ },
119
+ noFavoritesEmptyState: {
120
+ heading: "どうやら空っぽのようですね",
121
+ content:
122
+ "お気に入りのエピソードがまだありません。エピソードにあるハートマークにタップして、お気に入りに追加しましょう!",
123
+ },
124
+ },
125
+ // @demo remove-block-start
126
+ ...demoJa,
127
+ // @demo remove-block-end
128
+ }
129
+
130
+ export default ja