@linguanahq/cli 0.1.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 (412) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +43 -0
  3. package/dist/index.js +1543 -0
  4. package/dist/templates/blog/react/.env.example +15 -0
  5. package/dist/templates/blog/react/ASSETS.md +1 -0
  6. package/dist/templates/blog/react/DEPLOY.md +23 -0
  7. package/dist/templates/blog/react/LICENSE +21 -0
  8. package/dist/templates/blog/react/README.md +36 -0
  9. package/dist/templates/blog/react/_gitignore +11 -0
  10. package/dist/templates/blog/react/index.html +2 -0
  11. package/dist/templates/blog/react/linguana.json +10 -0
  12. package/dist/templates/blog/react/package.json +34 -0
  13. package/dist/templates/blog/react/public/assets/scene-1.svg +1 -0
  14. package/dist/templates/blog/react/public/assets/scene-2.svg +1 -0
  15. package/dist/templates/blog/react/public/assets/scene-3.svg +1 -0
  16. package/dist/templates/blog/react/public/assets/scene-4.svg +1 -0
  17. package/dist/templates/blog/react/public/assets/scene-5.svg +1 -0
  18. package/dist/templates/blog/react/public/assets/scene-6.svg +1 -0
  19. package/dist/templates/blog/react/src/App.tsx +465 -0
  20. package/dist/templates/blog/react/src/Copy.tsx +322 -0
  21. package/dist/templates/blog/react/src/demo-messages.ts +221 -0
  22. package/dist/templates/blog/react/src/i18n.ts +62 -0
  23. package/dist/templates/blog/react/src/main.tsx +11 -0
  24. package/dist/templates/blog/react/src/messages.ts +71 -0
  25. package/dist/templates/blog/react/src/model.ts +128 -0
  26. package/dist/templates/blog/react/src/styles.css +1159 -0
  27. package/dist/templates/blog/react/src/vite-env.d.ts +1 -0
  28. package/dist/templates/blog/react/tsconfig.json +23 -0
  29. package/dist/templates/blog/react/vite.config.ts +36 -0
  30. package/dist/templates/blog/react/wrangler.jsonc +8 -0
  31. package/dist/templates/blog/solidjs/.env.example +15 -0
  32. package/dist/templates/blog/solidjs/ASSETS.md +1 -0
  33. package/dist/templates/blog/solidjs/DEPLOY.md +23 -0
  34. package/dist/templates/blog/solidjs/LICENSE +21 -0
  35. package/dist/templates/blog/solidjs/README.md +36 -0
  36. package/dist/templates/blog/solidjs/_gitignore +11 -0
  37. package/dist/templates/blog/solidjs/index.html +2 -0
  38. package/dist/templates/blog/solidjs/linguana.json +10 -0
  39. package/dist/templates/blog/solidjs/package.json +31 -0
  40. package/dist/templates/blog/solidjs/public/assets/scene-1.svg +1 -0
  41. package/dist/templates/blog/solidjs/public/assets/scene-2.svg +1 -0
  42. package/dist/templates/blog/solidjs/public/assets/scene-3.svg +1 -0
  43. package/dist/templates/blog/solidjs/public/assets/scene-4.svg +1 -0
  44. package/dist/templates/blog/solidjs/public/assets/scene-5.svg +1 -0
  45. package/dist/templates/blog/solidjs/public/assets/scene-6.svg +1 -0
  46. package/dist/templates/blog/solidjs/src/App.tsx +457 -0
  47. package/dist/templates/blog/solidjs/src/Copy.tsx +322 -0
  48. package/dist/templates/blog/solidjs/src/demo-messages.ts +221 -0
  49. package/dist/templates/blog/solidjs/src/i18n.ts +62 -0
  50. package/dist/templates/blog/solidjs/src/main.tsx +14 -0
  51. package/dist/templates/blog/solidjs/src/messages.ts +71 -0
  52. package/dist/templates/blog/solidjs/src/model.ts +128 -0
  53. package/dist/templates/blog/solidjs/src/styles.css +1159 -0
  54. package/dist/templates/blog/solidjs/src/vite-env.d.ts +1 -0
  55. package/dist/templates/blog/solidjs/tsconfig.json +24 -0
  56. package/dist/templates/blog/solidjs/vite.config.ts +36 -0
  57. package/dist/templates/blog/solidjs/wrangler.jsonc +8 -0
  58. package/dist/templates/blog/svelte/.env.example +15 -0
  59. package/dist/templates/blog/svelte/ASSETS.md +1 -0
  60. package/dist/templates/blog/svelte/DEPLOY.md +23 -0
  61. package/dist/templates/blog/svelte/LICENSE +21 -0
  62. package/dist/templates/blog/svelte/README.md +36 -0
  63. package/dist/templates/blog/svelte/_gitignore +11 -0
  64. package/dist/templates/blog/svelte/index.html +2 -0
  65. package/dist/templates/blog/svelte/linguana.json +10 -0
  66. package/dist/templates/blog/svelte/package.json +32 -0
  67. package/dist/templates/blog/svelte/public/assets/scene-1.svg +1 -0
  68. package/dist/templates/blog/svelte/public/assets/scene-2.svg +1 -0
  69. package/dist/templates/blog/svelte/public/assets/scene-3.svg +1 -0
  70. package/dist/templates/blog/svelte/public/assets/scene-4.svg +1 -0
  71. package/dist/templates/blog/svelte/public/assets/scene-5.svg +1 -0
  72. package/dist/templates/blog/svelte/public/assets/scene-6.svg +1 -0
  73. package/dist/templates/blog/svelte/src/App.svelte +196 -0
  74. package/dist/templates/blog/svelte/src/Copy.svelte +60 -0
  75. package/dist/templates/blog/svelte/src/Root.svelte +11 -0
  76. package/dist/templates/blog/svelte/src/demo-messages.ts +221 -0
  77. package/dist/templates/blog/svelte/src/i18n.ts +62 -0
  78. package/dist/templates/blog/svelte/src/main.ts +5 -0
  79. package/dist/templates/blog/svelte/src/messages.ts +71 -0
  80. package/dist/templates/blog/svelte/src/model.ts +128 -0
  81. package/dist/templates/blog/svelte/src/styles.css +1159 -0
  82. package/dist/templates/blog/svelte/src/vite-env.d.ts +1 -0
  83. package/dist/templates/blog/svelte/svelte.config.js +2 -0
  84. package/dist/templates/blog/svelte/tsconfig.json +23 -0
  85. package/dist/templates/blog/svelte/vite.config.ts +36 -0
  86. package/dist/templates/blog/svelte/wrangler.jsonc +8 -0
  87. package/dist/templates/blog/tanstack-start/.env.example +15 -0
  88. package/dist/templates/blog/tanstack-start/ASSETS.md +1 -0
  89. package/dist/templates/blog/tanstack-start/DEPLOY.md +23 -0
  90. package/dist/templates/blog/tanstack-start/LICENSE +21 -0
  91. package/dist/templates/blog/tanstack-start/README.md +36 -0
  92. package/dist/templates/blog/tanstack-start/_gitignore +11 -0
  93. package/dist/templates/blog/tanstack-start/linguana.json +10 -0
  94. package/dist/templates/blog/tanstack-start/nitro.config.ts +2 -0
  95. package/dist/templates/blog/tanstack-start/package.json +42 -0
  96. package/dist/templates/blog/tanstack-start/public/assets/scene-1.svg +1 -0
  97. package/dist/templates/blog/tanstack-start/public/assets/scene-2.svg +1 -0
  98. package/dist/templates/blog/tanstack-start/public/assets/scene-3.svg +1 -0
  99. package/dist/templates/blog/tanstack-start/public/assets/scene-4.svg +1 -0
  100. package/dist/templates/blog/tanstack-start/public/assets/scene-5.svg +1 -0
  101. package/dist/templates/blog/tanstack-start/public/assets/scene-6.svg +1 -0
  102. package/dist/templates/blog/tanstack-start/src/App.tsx +450 -0
  103. package/dist/templates/blog/tanstack-start/src/Copy.tsx +322 -0
  104. package/dist/templates/blog/tanstack-start/src/demo-messages.ts +221 -0
  105. package/dist/templates/blog/tanstack-start/src/i18n.ts +62 -0
  106. package/dist/templates/blog/tanstack-start/src/locale-server.ts +54 -0
  107. package/dist/templates/blog/tanstack-start/src/messages.ts +71 -0
  108. package/dist/templates/blog/tanstack-start/src/model.ts +128 -0
  109. package/dist/templates/blog/tanstack-start/src/router.tsx +10 -0
  110. package/dist/templates/blog/tanstack-start/src/routes/$.tsx +7 -0
  111. package/dist/templates/blog/tanstack-start/src/routes/__root.tsx +50 -0
  112. package/dist/templates/blog/tanstack-start/src/routes/index.tsx +5 -0
  113. package/dist/templates/blog/tanstack-start/src/styles.css +1159 -0
  114. package/dist/templates/blog/tanstack-start/src/vite-env.d.ts +1 -0
  115. package/dist/templates/blog/tanstack-start/tsconfig.json +23 -0
  116. package/dist/templates/blog/tanstack-start/vite.config.ts +50 -0
  117. package/dist/templates/blog/tanstack-start/wrangler.jsonc +12 -0
  118. package/dist/templates/blog/vue/.env.example +15 -0
  119. package/dist/templates/blog/vue/ASSETS.md +1 -0
  120. package/dist/templates/blog/vue/DEPLOY.md +23 -0
  121. package/dist/templates/blog/vue/LICENSE +21 -0
  122. package/dist/templates/blog/vue/README.md +36 -0
  123. package/dist/templates/blog/vue/_gitignore +11 -0
  124. package/dist/templates/blog/vue/index.html +2 -0
  125. package/dist/templates/blog/vue/linguana.json +10 -0
  126. package/dist/templates/blog/vue/package.json +34 -0
  127. package/dist/templates/blog/vue/public/assets/scene-1.svg +1 -0
  128. package/dist/templates/blog/vue/public/assets/scene-2.svg +1 -0
  129. package/dist/templates/blog/vue/public/assets/scene-3.svg +1 -0
  130. package/dist/templates/blog/vue/public/assets/scene-4.svg +1 -0
  131. package/dist/templates/blog/vue/public/assets/scene-5.svg +1 -0
  132. package/dist/templates/blog/vue/public/assets/scene-6.svg +1 -0
  133. package/dist/templates/blog/vue/src/App.vue +188 -0
  134. package/dist/templates/blog/vue/src/Copy.vue +59 -0
  135. package/dist/templates/blog/vue/src/demo-messages.ts +221 -0
  136. package/dist/templates/blog/vue/src/i18n.ts +62 -0
  137. package/dist/templates/blog/vue/src/main.ts +7 -0
  138. package/dist/templates/blog/vue/src/messages.ts +71 -0
  139. package/dist/templates/blog/vue/src/model.ts +128 -0
  140. package/dist/templates/blog/vue/src/styles.css +1159 -0
  141. package/dist/templates/blog/vue/src/vite-env.d.ts +1 -0
  142. package/dist/templates/blog/vue/tsconfig.json +23 -0
  143. package/dist/templates/blog/vue/vite.config.ts +36 -0
  144. package/dist/templates/blog/vue/wrangler.jsonc +8 -0
  145. package/dist/templates/saas/react/.env.example +15 -0
  146. package/dist/templates/saas/react/ASSETS.md +1 -0
  147. package/dist/templates/saas/react/DEPLOY.md +23 -0
  148. package/dist/templates/saas/react/LICENSE +21 -0
  149. package/dist/templates/saas/react/README.md +36 -0
  150. package/dist/templates/saas/react/_gitignore +11 -0
  151. package/dist/templates/saas/react/index.html +2 -0
  152. package/dist/templates/saas/react/linguana.json +10 -0
  153. package/dist/templates/saas/react/package.json +34 -0
  154. package/dist/templates/saas/react/src/App.tsx +631 -0
  155. package/dist/templates/saas/react/src/Copy.tsx +380 -0
  156. package/dist/templates/saas/react/src/demo-messages.ts +228 -0
  157. package/dist/templates/saas/react/src/i18n.ts +62 -0
  158. package/dist/templates/saas/react/src/main.tsx +11 -0
  159. package/dist/templates/saas/react/src/messages.ts +77 -0
  160. package/dist/templates/saas/react/src/model.ts +73 -0
  161. package/dist/templates/saas/react/src/styles.css +1159 -0
  162. package/dist/templates/saas/react/src/vite-env.d.ts +1 -0
  163. package/dist/templates/saas/react/tsconfig.json +23 -0
  164. package/dist/templates/saas/react/vite.config.ts +36 -0
  165. package/dist/templates/saas/react/wrangler.jsonc +8 -0
  166. package/dist/templates/saas/solidjs/.env.example +15 -0
  167. package/dist/templates/saas/solidjs/ASSETS.md +1 -0
  168. package/dist/templates/saas/solidjs/DEPLOY.md +23 -0
  169. package/dist/templates/saas/solidjs/LICENSE +21 -0
  170. package/dist/templates/saas/solidjs/README.md +36 -0
  171. package/dist/templates/saas/solidjs/_gitignore +11 -0
  172. package/dist/templates/saas/solidjs/index.html +2 -0
  173. package/dist/templates/saas/solidjs/linguana.json +10 -0
  174. package/dist/templates/saas/solidjs/package.json +31 -0
  175. package/dist/templates/saas/solidjs/src/App.tsx +629 -0
  176. package/dist/templates/saas/solidjs/src/Copy.tsx +380 -0
  177. package/dist/templates/saas/solidjs/src/demo-messages.ts +228 -0
  178. package/dist/templates/saas/solidjs/src/i18n.ts +62 -0
  179. package/dist/templates/saas/solidjs/src/main.tsx +14 -0
  180. package/dist/templates/saas/solidjs/src/messages.ts +77 -0
  181. package/dist/templates/saas/solidjs/src/model.ts +73 -0
  182. package/dist/templates/saas/solidjs/src/styles.css +1159 -0
  183. package/dist/templates/saas/solidjs/src/vite-env.d.ts +1 -0
  184. package/dist/templates/saas/solidjs/tsconfig.json +24 -0
  185. package/dist/templates/saas/solidjs/vite.config.ts +36 -0
  186. package/dist/templates/saas/solidjs/wrangler.jsonc +8 -0
  187. package/dist/templates/saas/svelte/.env.example +15 -0
  188. package/dist/templates/saas/svelte/ASSETS.md +1 -0
  189. package/dist/templates/saas/svelte/DEPLOY.md +23 -0
  190. package/dist/templates/saas/svelte/LICENSE +21 -0
  191. package/dist/templates/saas/svelte/README.md +36 -0
  192. package/dist/templates/saas/svelte/_gitignore +11 -0
  193. package/dist/templates/saas/svelte/index.html +2 -0
  194. package/dist/templates/saas/svelte/linguana.json +10 -0
  195. package/dist/templates/saas/svelte/package.json +32 -0
  196. package/dist/templates/saas/svelte/src/App.svelte +252 -0
  197. package/dist/templates/saas/svelte/src/Copy.svelte +74 -0
  198. package/dist/templates/saas/svelte/src/Root.svelte +11 -0
  199. package/dist/templates/saas/svelte/src/demo-messages.ts +228 -0
  200. package/dist/templates/saas/svelte/src/i18n.ts +62 -0
  201. package/dist/templates/saas/svelte/src/main.ts +5 -0
  202. package/dist/templates/saas/svelte/src/messages.ts +77 -0
  203. package/dist/templates/saas/svelte/src/model.ts +73 -0
  204. package/dist/templates/saas/svelte/src/styles.css +1159 -0
  205. package/dist/templates/saas/svelte/src/vite-env.d.ts +1 -0
  206. package/dist/templates/saas/svelte/svelte.config.js +2 -0
  207. package/dist/templates/saas/svelte/tsconfig.json +23 -0
  208. package/dist/templates/saas/svelte/vite.config.ts +36 -0
  209. package/dist/templates/saas/svelte/wrangler.jsonc +8 -0
  210. package/dist/templates/saas/tanstack-start/.env.example +15 -0
  211. package/dist/templates/saas/tanstack-start/ASSETS.md +1 -0
  212. package/dist/templates/saas/tanstack-start/DEPLOY.md +23 -0
  213. package/dist/templates/saas/tanstack-start/LICENSE +21 -0
  214. package/dist/templates/saas/tanstack-start/README.md +36 -0
  215. package/dist/templates/saas/tanstack-start/_gitignore +11 -0
  216. package/dist/templates/saas/tanstack-start/linguana.json +10 -0
  217. package/dist/templates/saas/tanstack-start/nitro.config.ts +2 -0
  218. package/dist/templates/saas/tanstack-start/package.json +42 -0
  219. package/dist/templates/saas/tanstack-start/src/App.tsx +616 -0
  220. package/dist/templates/saas/tanstack-start/src/Copy.tsx +380 -0
  221. package/dist/templates/saas/tanstack-start/src/demo-messages.ts +228 -0
  222. package/dist/templates/saas/tanstack-start/src/i18n.ts +62 -0
  223. package/dist/templates/saas/tanstack-start/src/locale-server.ts +54 -0
  224. package/dist/templates/saas/tanstack-start/src/messages.ts +77 -0
  225. package/dist/templates/saas/tanstack-start/src/model.ts +73 -0
  226. package/dist/templates/saas/tanstack-start/src/router.tsx +10 -0
  227. package/dist/templates/saas/tanstack-start/src/routes/$.tsx +7 -0
  228. package/dist/templates/saas/tanstack-start/src/routes/__root.tsx +50 -0
  229. package/dist/templates/saas/tanstack-start/src/routes/index.tsx +5 -0
  230. package/dist/templates/saas/tanstack-start/src/styles.css +1159 -0
  231. package/dist/templates/saas/tanstack-start/src/vite-env.d.ts +1 -0
  232. package/dist/templates/saas/tanstack-start/tsconfig.json +23 -0
  233. package/dist/templates/saas/tanstack-start/vite.config.ts +50 -0
  234. package/dist/templates/saas/tanstack-start/wrangler.jsonc +12 -0
  235. package/dist/templates/saas/vue/.env.example +15 -0
  236. package/dist/templates/saas/vue/ASSETS.md +1 -0
  237. package/dist/templates/saas/vue/DEPLOY.md +23 -0
  238. package/dist/templates/saas/vue/LICENSE +21 -0
  239. package/dist/templates/saas/vue/README.md +36 -0
  240. package/dist/templates/saas/vue/_gitignore +11 -0
  241. package/dist/templates/saas/vue/index.html +2 -0
  242. package/dist/templates/saas/vue/linguana.json +10 -0
  243. package/dist/templates/saas/vue/package.json +34 -0
  244. package/dist/templates/saas/vue/src/App.vue +244 -0
  245. package/dist/templates/saas/vue/src/Copy.vue +73 -0
  246. package/dist/templates/saas/vue/src/demo-messages.ts +228 -0
  247. package/dist/templates/saas/vue/src/i18n.ts +62 -0
  248. package/dist/templates/saas/vue/src/main.ts +7 -0
  249. package/dist/templates/saas/vue/src/messages.ts +77 -0
  250. package/dist/templates/saas/vue/src/model.ts +73 -0
  251. package/dist/templates/saas/vue/src/styles.css +1159 -0
  252. package/dist/templates/saas/vue/src/vite-env.d.ts +1 -0
  253. package/dist/templates/saas/vue/tsconfig.json +23 -0
  254. package/dist/templates/saas/vue/vite.config.ts +36 -0
  255. package/dist/templates/saas/vue/wrangler.jsonc +8 -0
  256. package/dist/templates/storefront/react/.env.example +15 -0
  257. package/dist/templates/storefront/react/ASSETS.md +1 -0
  258. package/dist/templates/storefront/react/DEPLOY.md +23 -0
  259. package/dist/templates/storefront/react/LICENSE +21 -0
  260. package/dist/templates/storefront/react/README.md +36 -0
  261. package/dist/templates/storefront/react/_gitignore +11 -0
  262. package/dist/templates/storefront/react/index.html +2 -0
  263. package/dist/templates/storefront/react/linguana.json +10 -0
  264. package/dist/templates/storefront/react/package.json +34 -0
  265. package/dist/templates/storefront/react/public/assets/collection.svg +1 -0
  266. package/dist/templates/storefront/react/public/assets/product-1.svg +1 -0
  267. package/dist/templates/storefront/react/public/assets/product-2.svg +1 -0
  268. package/dist/templates/storefront/react/public/assets/product-3.svg +1 -0
  269. package/dist/templates/storefront/react/public/assets/product-4.svg +1 -0
  270. package/dist/templates/storefront/react/public/assets/product-5.svg +1 -0
  271. package/dist/templates/storefront/react/public/assets/product-6.svg +1 -0
  272. package/dist/templates/storefront/react/public/assets/product-7.svg +1 -0
  273. package/dist/templates/storefront/react/public/assets/product-8.svg +1 -0
  274. package/dist/templates/storefront/react/src/App.tsx +616 -0
  275. package/dist/templates/storefront/react/src/Copy.tsx +304 -0
  276. package/dist/templates/storefront/react/src/demo-messages.ts +205 -0
  277. package/dist/templates/storefront/react/src/i18n.ts +64 -0
  278. package/dist/templates/storefront/react/src/main.tsx +11 -0
  279. package/dist/templates/storefront/react/src/messages.ts +71 -0
  280. package/dist/templates/storefront/react/src/model.ts +146 -0
  281. package/dist/templates/storefront/react/src/styles.css +1159 -0
  282. package/dist/templates/storefront/react/src/vite-env.d.ts +1 -0
  283. package/dist/templates/storefront/react/tsconfig.json +23 -0
  284. package/dist/templates/storefront/react/vite.config.ts +36 -0
  285. package/dist/templates/storefront/react/wrangler.jsonc +8 -0
  286. package/dist/templates/storefront/solidjs/.env.example +15 -0
  287. package/dist/templates/storefront/solidjs/ASSETS.md +1 -0
  288. package/dist/templates/storefront/solidjs/DEPLOY.md +23 -0
  289. package/dist/templates/storefront/solidjs/LICENSE +21 -0
  290. package/dist/templates/storefront/solidjs/README.md +36 -0
  291. package/dist/templates/storefront/solidjs/_gitignore +11 -0
  292. package/dist/templates/storefront/solidjs/index.html +2 -0
  293. package/dist/templates/storefront/solidjs/linguana.json +10 -0
  294. package/dist/templates/storefront/solidjs/package.json +31 -0
  295. package/dist/templates/storefront/solidjs/public/assets/collection.svg +1 -0
  296. package/dist/templates/storefront/solidjs/public/assets/product-1.svg +1 -0
  297. package/dist/templates/storefront/solidjs/public/assets/product-2.svg +1 -0
  298. package/dist/templates/storefront/solidjs/public/assets/product-3.svg +1 -0
  299. package/dist/templates/storefront/solidjs/public/assets/product-4.svg +1 -0
  300. package/dist/templates/storefront/solidjs/public/assets/product-5.svg +1 -0
  301. package/dist/templates/storefront/solidjs/public/assets/product-6.svg +1 -0
  302. package/dist/templates/storefront/solidjs/public/assets/product-7.svg +1 -0
  303. package/dist/templates/storefront/solidjs/public/assets/product-8.svg +1 -0
  304. package/dist/templates/storefront/solidjs/src/App.tsx +612 -0
  305. package/dist/templates/storefront/solidjs/src/Copy.tsx +304 -0
  306. package/dist/templates/storefront/solidjs/src/demo-messages.ts +205 -0
  307. package/dist/templates/storefront/solidjs/src/i18n.ts +64 -0
  308. package/dist/templates/storefront/solidjs/src/main.tsx +14 -0
  309. package/dist/templates/storefront/solidjs/src/messages.ts +71 -0
  310. package/dist/templates/storefront/solidjs/src/model.ts +146 -0
  311. package/dist/templates/storefront/solidjs/src/styles.css +1159 -0
  312. package/dist/templates/storefront/solidjs/src/vite-env.d.ts +1 -0
  313. package/dist/templates/storefront/solidjs/tsconfig.json +24 -0
  314. package/dist/templates/storefront/solidjs/vite.config.ts +36 -0
  315. package/dist/templates/storefront/solidjs/wrangler.jsonc +8 -0
  316. package/dist/templates/storefront/svelte/.env.example +15 -0
  317. package/dist/templates/storefront/svelte/ASSETS.md +1 -0
  318. package/dist/templates/storefront/svelte/DEPLOY.md +23 -0
  319. package/dist/templates/storefront/svelte/LICENSE +21 -0
  320. package/dist/templates/storefront/svelte/README.md +36 -0
  321. package/dist/templates/storefront/svelte/_gitignore +11 -0
  322. package/dist/templates/storefront/svelte/index.html +2 -0
  323. package/dist/templates/storefront/svelte/linguana.json +10 -0
  324. package/dist/templates/storefront/svelte/package.json +32 -0
  325. package/dist/templates/storefront/svelte/public/assets/collection.svg +1 -0
  326. package/dist/templates/storefront/svelte/public/assets/product-1.svg +1 -0
  327. package/dist/templates/storefront/svelte/public/assets/product-2.svg +1 -0
  328. package/dist/templates/storefront/svelte/public/assets/product-3.svg +1 -0
  329. package/dist/templates/storefront/svelte/public/assets/product-4.svg +1 -0
  330. package/dist/templates/storefront/svelte/public/assets/product-5.svg +1 -0
  331. package/dist/templates/storefront/svelte/public/assets/product-6.svg +1 -0
  332. package/dist/templates/storefront/svelte/public/assets/product-7.svg +1 -0
  333. package/dist/templates/storefront/svelte/public/assets/product-8.svg +1 -0
  334. package/dist/templates/storefront/svelte/src/App.svelte +218 -0
  335. package/dist/templates/storefront/svelte/src/Copy.svelte +66 -0
  336. package/dist/templates/storefront/svelte/src/Root.svelte +11 -0
  337. package/dist/templates/storefront/svelte/src/demo-messages.ts +205 -0
  338. package/dist/templates/storefront/svelte/src/i18n.ts +64 -0
  339. package/dist/templates/storefront/svelte/src/main.ts +5 -0
  340. package/dist/templates/storefront/svelte/src/messages.ts +71 -0
  341. package/dist/templates/storefront/svelte/src/model.ts +146 -0
  342. package/dist/templates/storefront/svelte/src/styles.css +1159 -0
  343. package/dist/templates/storefront/svelte/src/vite-env.d.ts +1 -0
  344. package/dist/templates/storefront/svelte/svelte.config.js +2 -0
  345. package/dist/templates/storefront/svelte/tsconfig.json +23 -0
  346. package/dist/templates/storefront/svelte/vite.config.ts +36 -0
  347. package/dist/templates/storefront/svelte/wrangler.jsonc +8 -0
  348. package/dist/templates/storefront/tanstack-start/.env.example +15 -0
  349. package/dist/templates/storefront/tanstack-start/ASSETS.md +1 -0
  350. package/dist/templates/storefront/tanstack-start/DEPLOY.md +23 -0
  351. package/dist/templates/storefront/tanstack-start/LICENSE +21 -0
  352. package/dist/templates/storefront/tanstack-start/README.md +36 -0
  353. package/dist/templates/storefront/tanstack-start/_gitignore +11 -0
  354. package/dist/templates/storefront/tanstack-start/linguana.json +10 -0
  355. package/dist/templates/storefront/tanstack-start/nitro.config.ts +2 -0
  356. package/dist/templates/storefront/tanstack-start/package.json +42 -0
  357. package/dist/templates/storefront/tanstack-start/public/assets/collection.svg +1 -0
  358. package/dist/templates/storefront/tanstack-start/public/assets/product-1.svg +1 -0
  359. package/dist/templates/storefront/tanstack-start/public/assets/product-2.svg +1 -0
  360. package/dist/templates/storefront/tanstack-start/public/assets/product-3.svg +1 -0
  361. package/dist/templates/storefront/tanstack-start/public/assets/product-4.svg +1 -0
  362. package/dist/templates/storefront/tanstack-start/public/assets/product-5.svg +1 -0
  363. package/dist/templates/storefront/tanstack-start/public/assets/product-6.svg +1 -0
  364. package/dist/templates/storefront/tanstack-start/public/assets/product-7.svg +1 -0
  365. package/dist/templates/storefront/tanstack-start/public/assets/product-8.svg +1 -0
  366. package/dist/templates/storefront/tanstack-start/src/App.tsx +601 -0
  367. package/dist/templates/storefront/tanstack-start/src/Copy.tsx +304 -0
  368. package/dist/templates/storefront/tanstack-start/src/demo-messages.ts +205 -0
  369. package/dist/templates/storefront/tanstack-start/src/i18n.ts +64 -0
  370. package/dist/templates/storefront/tanstack-start/src/locale-server.ts +54 -0
  371. package/dist/templates/storefront/tanstack-start/src/messages.ts +71 -0
  372. package/dist/templates/storefront/tanstack-start/src/model.ts +146 -0
  373. package/dist/templates/storefront/tanstack-start/src/router.tsx +10 -0
  374. package/dist/templates/storefront/tanstack-start/src/routes/$.tsx +7 -0
  375. package/dist/templates/storefront/tanstack-start/src/routes/__root.tsx +50 -0
  376. package/dist/templates/storefront/tanstack-start/src/routes/index.tsx +5 -0
  377. package/dist/templates/storefront/tanstack-start/src/styles.css +1159 -0
  378. package/dist/templates/storefront/tanstack-start/src/vite-env.d.ts +1 -0
  379. package/dist/templates/storefront/tanstack-start/tsconfig.json +23 -0
  380. package/dist/templates/storefront/tanstack-start/vite.config.ts +50 -0
  381. package/dist/templates/storefront/tanstack-start/wrangler.jsonc +12 -0
  382. package/dist/templates/storefront/vue/.env.example +15 -0
  383. package/dist/templates/storefront/vue/ASSETS.md +1 -0
  384. package/dist/templates/storefront/vue/DEPLOY.md +23 -0
  385. package/dist/templates/storefront/vue/LICENSE +21 -0
  386. package/dist/templates/storefront/vue/README.md +36 -0
  387. package/dist/templates/storefront/vue/_gitignore +11 -0
  388. package/dist/templates/storefront/vue/index.html +2 -0
  389. package/dist/templates/storefront/vue/linguana.json +10 -0
  390. package/dist/templates/storefront/vue/package.json +34 -0
  391. package/dist/templates/storefront/vue/public/assets/collection.svg +1 -0
  392. package/dist/templates/storefront/vue/public/assets/product-1.svg +1 -0
  393. package/dist/templates/storefront/vue/public/assets/product-2.svg +1 -0
  394. package/dist/templates/storefront/vue/public/assets/product-3.svg +1 -0
  395. package/dist/templates/storefront/vue/public/assets/product-4.svg +1 -0
  396. package/dist/templates/storefront/vue/public/assets/product-5.svg +1 -0
  397. package/dist/templates/storefront/vue/public/assets/product-6.svg +1 -0
  398. package/dist/templates/storefront/vue/public/assets/product-7.svg +1 -0
  399. package/dist/templates/storefront/vue/public/assets/product-8.svg +1 -0
  400. package/dist/templates/storefront/vue/src/App.vue +210 -0
  401. package/dist/templates/storefront/vue/src/Copy.vue +65 -0
  402. package/dist/templates/storefront/vue/src/demo-messages.ts +205 -0
  403. package/dist/templates/storefront/vue/src/i18n.ts +64 -0
  404. package/dist/templates/storefront/vue/src/main.ts +7 -0
  405. package/dist/templates/storefront/vue/src/messages.ts +71 -0
  406. package/dist/templates/storefront/vue/src/model.ts +146 -0
  407. package/dist/templates/storefront/vue/src/styles.css +1159 -0
  408. package/dist/templates/storefront/vue/src/vite-env.d.ts +1 -0
  409. package/dist/templates/storefront/vue/tsconfig.json +23 -0
  410. package/dist/templates/storefront/vue/vite.config.ts +36 -0
  411. package/dist/templates/storefront/vue/wrangler.jsonc +8 -0
  412. package/package.json +38 -0
@@ -0,0 +1,304 @@
1
+ import { T } from "@linguanahq/react";
2
+ export default function Copy(props: {
3
+ name: string;
4
+ values?: Record<string, string | number>;
5
+ }) {
6
+ return (
7
+ <>
8
+ {props.name === "language" && (
9
+ <T id="language" defaultMessage="Language" values={props.values} />
10
+ )}
11
+ {props.name === "skip" && (
12
+ <T id="skip" defaultMessage="Skip to content" values={props.values} />
13
+ )}
14
+ {props.name === "home" && (
15
+ <T id="home" defaultMessage="Home" values={props.values} />
16
+ )}
17
+ {props.name === "search" && (
18
+ <T id="search" defaultMessage="Search" values={props.values} />
19
+ )}
20
+ {props.name === "all" && (
21
+ <T id="all" defaultMessage="All" values={props.values} />
22
+ )}
23
+ {props.name === "empty" && (
24
+ <T
25
+ id="empty"
26
+ defaultMessage="Nothing here yet."
27
+ values={props.values}
28
+ />
29
+ )}
30
+ {props.name === "emptyHint" && (
31
+ <T
32
+ id="emptyHint"
33
+ defaultMessage="Try another search or clear your filters."
34
+ values={props.values}
35
+ />
36
+ )}
37
+ {props.name === "clear" && (
38
+ <T id="clear" defaultMessage="Clear filters" values={props.values} />
39
+ )}
40
+ {props.name === "missing" && (
41
+ <T
42
+ id="missing"
43
+ defaultMessage="This page took a different path."
44
+ values={props.values}
45
+ />
46
+ )}
47
+ {props.name === "missingHint" && (
48
+ <T
49
+ id="missingHint"
50
+ defaultMessage="We could not find that page. There is plenty to discover back home."
51
+ values={props.values}
52
+ />
53
+ )}
54
+ {props.name === "back" && (
55
+ <T id="back" defaultMessage="Back to home" values={props.values} />
56
+ )}
57
+ {props.name === "demo" && (
58
+ <T
59
+ id="demo"
60
+ defaultMessage="A multilingual demo, made with Linguana."
61
+ values={props.values}
62
+ />
63
+ )}
64
+ {props.name === "email" && (
65
+ <T id="email" defaultMessage="Email address" values={props.values} />
66
+ )}
67
+ {props.name === "name" && (
68
+ <T id="name" defaultMessage="Your name" values={props.values} />
69
+ )}
70
+ {props.name === "simulated" && (
71
+ <T
72
+ id="simulated"
73
+ defaultMessage="Demo only. Your information stays in this browser."
74
+ values={props.values}
75
+ />
76
+ )}
77
+ {props.name === "sent" && (
78
+ <T
79
+ id="sent"
80
+ defaultMessage="Thank you, {name}! This was a demo; nothing was sent."
81
+ values={props.values}
82
+ />
83
+ )}
84
+ {props.name === "formError" && (
85
+ <T
86
+ id="formError"
87
+ defaultMessage="Please enter your name and a valid email address."
88
+ values={props.values}
89
+ />
90
+ )}
91
+ {props.name === "eyebrow" && (
92
+ <T
93
+ id="eyebrow"
94
+ defaultMessage="Fewer things. Better chosen."
95
+ values={props.values}
96
+ />
97
+ )}
98
+ {props.name === "headline" && (
99
+ <T
100
+ id="headline"
101
+ defaultMessage="Good things for the everyday."
102
+ values={props.values}
103
+ />
104
+ )}
105
+ {props.name === "intro" && (
106
+ <T
107
+ id="intro"
108
+ defaultMessage="Useful objects, honest materials, and small details that make a difference. Find your new everyday favourite."
109
+ values={props.values}
110
+ />
111
+ )}
112
+ {props.name === "collection" && (
113
+ <T
114
+ id="collection"
115
+ defaultMessage="The everyday collection"
116
+ values={props.values}
117
+ />
118
+ )}
119
+ {props.name === "shop" && (
120
+ <T
121
+ id="shop"
122
+ defaultMessage="Explore the collection"
123
+ values={props.values}
124
+ />
125
+ )}
126
+ {props.name === "homeware" && (
127
+ <T id="homeware" defaultMessage="At home" values={props.values} />
128
+ )}
129
+ {props.name === "carry" && (
130
+ <T id="carry" defaultMessage="On the go" values={props.values} />
131
+ )}
132
+ {props.name === "desk" && (
133
+ <T id="desk" defaultMessage="At your desk" values={props.values} />
134
+ )}
135
+ {props.name === "sort" && (
136
+ <T id="sort" defaultMessage="Sort by" values={props.values} />
137
+ )}
138
+ {props.name === "featured" && (
139
+ <T id="featured" defaultMessage="Featured" values={props.values} />
140
+ )}
141
+ {props.name === "low" && (
142
+ <T id="low" defaultMessage="Price: low to high" values={props.values} />
143
+ )}
144
+ {props.name === "high" && (
145
+ <T
146
+ id="high"
147
+ defaultMessage="Price: high to low"
148
+ values={props.values}
149
+ />
150
+ )}
151
+ {props.name === "cart" && (
152
+ <T id="cart" defaultMessage="Your basket" values={props.values} />
153
+ )}
154
+ {props.name === "count" && (
155
+ <T
156
+ id="count"
157
+ defaultMessage="{count, plural, one {# item} other {# items}}"
158
+ values={props.values}
159
+ />
160
+ )}
161
+ {props.name === "add" && (
162
+ <T id="add" defaultMessage="Add to basket" values={props.values} />
163
+ )}
164
+ {props.name === "added" && (
165
+ <T
166
+ id="added"
167
+ defaultMessage="Added to your basket"
168
+ values={props.values}
169
+ />
170
+ )}
171
+ {props.name === "qty" && (
172
+ <T id="qty" defaultMessage="Quantity" values={props.values} />
173
+ )}
174
+ {props.name === "remove" && (
175
+ <T id="remove" defaultMessage="Remove" values={props.values} />
176
+ )}
177
+ {props.name === "total" && (
178
+ <T id="total" defaultMessage="Total" values={props.values} />
179
+ )}
180
+ {props.name === "checkout" && (
181
+ <T
182
+ id="checkout"
183
+ defaultMessage="Simulate checkout"
184
+ values={props.values}
185
+ />
186
+ )}
187
+ {props.name === "checkoutNote" && (
188
+ <T
189
+ id="checkoutNote"
190
+ defaultMessage="This is a demo shop. No payments or real orders are accepted."
191
+ values={props.values}
192
+ />
193
+ )}
194
+ {props.name === "checkoutDone" && (
195
+ <T
196
+ id="checkoutDone"
197
+ defaultMessage="Demo complete. No payment was taken and no order was placed."
198
+ values={props.values}
199
+ />
200
+ )}
201
+ {props.name === "emptyCart" && (
202
+ <T
203
+ id="emptyCart"
204
+ defaultMessage="Your basket is waiting for something good."
205
+ values={props.values}
206
+ />
207
+ )}
208
+ {props.name === "shipping" && (
209
+ <T
210
+ id="shipping"
211
+ defaultMessage="Illustrative prices in USD. No shipping or taxes are charged in this demo."
212
+ values={props.values}
213
+ />
214
+ )}
215
+ {props.name === "about" && (
216
+ <T
217
+ id="about"
218
+ defaultMessage="Considered objects. A little less ordinary."
219
+ values={props.values}
220
+ />
221
+ )}
222
+ {props.name === "p1Title" && (
223
+ <T id="p1Title" defaultMessage="Everyday tote" values={props.values} />
224
+ )}
225
+ {props.name === "p1Summary" && (
226
+ <T
227
+ id="p1Summary"
228
+ defaultMessage="Heavy cotton canvas, generous handles, and room for your daily detours."
229
+ values={props.values}
230
+ />
231
+ )}
232
+ {props.name === "p2Title" && (
233
+ <T id="p2Title" defaultMessage="Morning mug" values={props.values} />
234
+ )}
235
+ {props.name === "p2Summary" && (
236
+ <T
237
+ id="p2Summary"
238
+ defaultMessage="A warm ceramic finish and an easy grip. Made for the first quiet cup."
239
+ values={props.values}
240
+ />
241
+ )}
242
+ {props.name === "p3Title" && (
243
+ <T id="p3Title" defaultMessage="Arc desk lamp" values={props.values} />
244
+ )}
245
+ {props.name === "p3Summary" && (
246
+ <T
247
+ id="p3Summary"
248
+ defaultMessage="A gentle pool of light, a weighted base, and a shape that feels at home."
249
+ values={props.values}
250
+ />
251
+ )}
252
+ {props.name === "p4Title" && (
253
+ <T id="p4Title" defaultMessage="Field notebook" values={props.values} />
254
+ )}
255
+ {props.name === "p4Summary" && (
256
+ <T
257
+ id="p4Summary"
258
+ defaultMessage="Lay-flat binding and plain recycled pages for ideas without a deadline."
259
+ values={props.values}
260
+ />
261
+ )}
262
+ {props.name === "p5Title" && (
263
+ <T id="p5Title" defaultMessage="Day bottle" values={props.values} />
264
+ )}
265
+ {props.name === "p5Summary" && (
266
+ <T
267
+ id="p5Summary"
268
+ defaultMessage="Brushed steel with a simple screw cap. A reusable companion for the road."
269
+ values={props.values}
270
+ />
271
+ )}
272
+ {props.name === "p6Title" && (
273
+ <T id="p6Title" defaultMessage="Linen cushion" values={props.values} />
274
+ )}
275
+ {props.name === "p6Summary" && (
276
+ <T
277
+ id="p6Summary"
278
+ defaultMessage="Soft washed linen in an earthy tone. An invitation to slow down."
279
+ values={props.values}
280
+ />
281
+ )}
282
+ {props.name === "p7Title" && (
283
+ <T id="p7Title" defaultMessage="Oak catchall" values={props.values} />
284
+ )}
285
+ {props.name === "p7Summary" && (
286
+ <T
287
+ id="p7Summary"
288
+ defaultMessage="A small home for keys, coins, and the things you put down at the door."
289
+ values={props.values}
290
+ />
291
+ )}
292
+ {props.name === "p8Title" && (
293
+ <T id="p8Title" defaultMessage="Quiet clock" values={props.values} />
294
+ )}
295
+ {props.name === "p8Summary" && (
296
+ <T
297
+ id="p8Summary"
298
+ defaultMessage="A clean face and a silent movement. Keep time without the ticking."
299
+ values={props.values}
300
+ />
301
+ )}
302
+ </>
303
+ );
304
+ }
@@ -0,0 +1,205 @@
1
+ // These catalogs are only used when linguana.json selects demo mode.
2
+ export const demoMessages = {
3
+ fr: {
4
+ language: "Langue",
5
+ skip: "Aller au contenu",
6
+ home: "Accueil",
7
+ search: "Rechercher",
8
+ all: "Tout",
9
+ empty: "Aucun résultat pour le moment.",
10
+ emptyHint: "Essayez une autre recherche ou effacez les filtres.",
11
+ clear: "Effacer les filtres",
12
+ missing: "Cette page a pris un autre chemin.",
13
+ missingHint:
14
+ "Cette page est introuvable. Il reste beaucoup à découvrir à l’accueil.",
15
+ back: "Retour à l’accueil",
16
+ demo: "Une démo multilingue, créée avec Linguana.",
17
+ email: "Adresse e-mail",
18
+ name: "Votre nom",
19
+ simulated:
20
+ "Démonstration uniquement. Vos informations restent dans ce navigateur.",
21
+ sent: "Merci, {name} ! C’était une démo ; rien n’a été envoyé.",
22
+ formError: "Veuillez saisir votre nom et une adresse e-mail valide.",
23
+ eyebrow: "Moins d’objets. Mieux choisis.",
24
+ headline: "De belles choses pour le quotidien.",
25
+ intro:
26
+ "Des objets utiles, des matières sincères et des détails qui comptent. Trouvez votre prochain essentiel.",
27
+ collection: "La collection du quotidien",
28
+ shop: "Explorer la collection",
29
+ homeware: "À la maison",
30
+ carry: "En mouvement",
31
+ desk: "Au bureau",
32
+ sort: "Trier par",
33
+ featured: "Notre sélection",
34
+ low: "Prix croissant",
35
+ high: "Prix décroissant",
36
+ cart: "Votre panier",
37
+ count: "{count, plural, one {# article} other {# articles}}",
38
+ add: "Ajouter au panier",
39
+ added: "Ajouté au panier",
40
+ qty: "Quantité",
41
+ remove: "Retirer",
42
+ total: "Total",
43
+ checkout: "Simuler la commande",
44
+ checkoutNote:
45
+ "Ceci est une boutique de démonstration. Aucun paiement ni commande réelle.",
46
+ checkoutDone: "Démo terminée. Aucun paiement ni commande n’a été effectué.",
47
+ emptyCart: "Votre panier attend de belles choses.",
48
+ shipping: "Prix indicatifs en USD. Aucun frais ni taxe dans cette démo.",
49
+ about: "Des objets réfléchis. Un peu moins ordinaires.",
50
+ p1Title: "Cabas quotidien",
51
+ p1Summary:
52
+ "Une toile de coton épaisse, de grandes anses et de la place pour vos détours.",
53
+ p2Title: "Tasse du matin",
54
+ p2Summary:
55
+ "Une céramique chaleureuse, agréable en main. Pour la première tasse au calme.",
56
+ p3Title: "Lampe de bureau Arc",
57
+ p3Summary: "Une lumière douce, une base lestée et une forme accueillante.",
58
+ p4Title: "Carnet de terrain",
59
+ p4Summary:
60
+ "Reliure à plat et pages recyclées unies pour les idées sans échéance.",
61
+ p5Title: "Gourde du jour",
62
+ p5Summary:
63
+ "Acier brossé et bouchon simple. Une compagne réutilisable pour la route.",
64
+ p6Title: "Coussin en lin",
65
+ p6Summary:
66
+ "Lin lavé doux aux teintes naturelles. Une invitation à ralentir.",
67
+ p7Title: "Vide-poche en chêne",
68
+ p7Summary:
69
+ "Une petite place pour les clés, la monnaie et ce qu’on pose en rentrant.",
70
+ p8Title: "Horloge silencieuse",
71
+ p8Summary: "Un cadran épuré et silencieux. Gardez le temps sans tic-tac.",
72
+ },
73
+ es: {
74
+ language: "Idioma",
75
+ skip: "Saltar al contenido",
76
+ home: "Inicio",
77
+ search: "Buscar",
78
+ all: "Todo",
79
+ empty: "Todavía no hay resultados.",
80
+ emptyHint: "Prueba otra búsqueda o borra los filtros.",
81
+ clear: "Borrar filtros",
82
+ missing: "Esta página tomó otro camino.",
83
+ missingHint:
84
+ "No encontramos esta página. Hay mucho por descubrir en el inicio.",
85
+ back: "Volver al inicio",
86
+ demo: "Una demo multilingüe, creada con Linguana.",
87
+ email: "Correo electrónico",
88
+ name: "Tu nombre",
89
+ simulated: "Solo una demo. Tu información permanece en este navegador.",
90
+ sent: "¡Gracias, {name}! Era una demo; no se envió nada.",
91
+ formError: "Introduce tu nombre y un correo válido.",
92
+ eyebrow: "Menos cosas. Mejor elegidas.",
93
+ headline: "Buenas cosas para cada día.",
94
+ intro:
95
+ "Objetos útiles, materiales honestos y pequeños detalles que importan. Encuentra tu nuevo favorito.",
96
+ collection: "La colección cotidiana",
97
+ shop: "Explorar la colección",
98
+ homeware: "En casa",
99
+ carry: "En movimiento",
100
+ desk: "En tu escritorio",
101
+ sort: "Ordenar por",
102
+ featured: "Destacados",
103
+ low: "Precio: menor a mayor",
104
+ high: "Precio: mayor a menor",
105
+ cart: "Tu cesta",
106
+ count: "{count, plural, one {# artículo} other {# artículos}}",
107
+ add: "Añadir a la cesta",
108
+ added: "Añadido a tu cesta",
109
+ qty: "Cantidad",
110
+ remove: "Eliminar",
111
+ total: "Total",
112
+ checkout: "Simular pedido",
113
+ checkoutNote:
114
+ "Esta es una tienda de demo. No se aceptan pagos ni pedidos reales.",
115
+ checkoutDone:
116
+ "Demo completada. No se cobró nada ni se realizó ningún pedido.",
117
+ emptyCart: "Tu cesta espera algo bueno.",
118
+ shipping:
119
+ "Precios ilustrativos en USD. Sin gastos de envío ni impuestos en esta demo.",
120
+ about: "Objetos pensados. Un poco menos comunes.",
121
+ p1Title: "Bolsa cotidiana",
122
+ p1Summary:
123
+ "Lona de algodón, asas amplias y espacio para tus desvíos diarios.",
124
+ p2Title: "Taza de mañana",
125
+ p2Summary:
126
+ "Cerámica cálida y agarre cómodo. Para la primera taza tranquila.",
127
+ p3Title: "Lámpara de escritorio Arc",
128
+ p3Summary: "Luz suave, base firme y una forma que se siente en casa.",
129
+ p4Title: "Cuaderno de campo",
130
+ p4Summary:
131
+ "Encuadernación plana y papel reciclado para ideas sin fecha límite.",
132
+ p5Title: "Botella diaria",
133
+ p5Summary:
134
+ "Acero cepillado y tapón sencillo. Una compañera reutilizable de viaje.",
135
+ p6Title: "Cojín de lino",
136
+ p6Summary: "Lino suave en tono tierra. Una invitación a bajar el ritmo.",
137
+ p7Title: "Bandeja de roble",
138
+ p7Summary: "Un lugar para llaves, monedas y lo que dejas al entrar.",
139
+ p8Title: "Reloj silencioso",
140
+ p8Summary: "Esfera limpia y mecanismo silencioso. El tiempo sin tictac.",
141
+ },
142
+ ar: {
143
+ language: "اللغة",
144
+ skip: "انتقل إلى المحتوى",
145
+ home: "الرئيسية",
146
+ search: "بحث",
147
+ all: "الكل",
148
+ empty: "لا توجد نتائج بعد.",
149
+ emptyHint: "جرّب بحثًا آخر أو امسح عوامل التصفية.",
150
+ clear: "مسح عوامل التصفية",
151
+ missing: "سلكت هذه الصفحة طريقًا آخر.",
152
+ missingHint: "لم نجد هذه الصفحة. هناك الكثير لاكتشافه في الصفحة الرئيسية.",
153
+ back: "العودة إلى الرئيسية",
154
+ demo: "تجربة متعددة اللغات، صُنعت باستخدام Linguana.",
155
+ email: "البريد الإلكتروني",
156
+ name: "اسمك",
157
+ simulated: "تجربة فقط. تبقى معلوماتك في هذا المتصفح.",
158
+ sent: "شكرًا لك يا {name}! هذه تجربة؛ لم يُرسل أي شيء.",
159
+ formError: "أدخل اسمك وبريدًا إلكترونيًا صالحًا.",
160
+ eyebrow: "أشياء أقل. اختيارات أفضل.",
161
+ headline: "أشياء جميلة لكل يوم.",
162
+ intro:
163
+ "أغراض مفيدة ومواد أصيلة وتفاصيل صغيرة تصنع فرقًا. اكتشف رفيقك اليومي الجديد.",
164
+ collection: "مجموعة الحياة اليومية",
165
+ shop: "استكشف المجموعة",
166
+ homeware: "في المنزل",
167
+ carry: "أثناء التنقل",
168
+ desk: "على مكتبك",
169
+ sort: "ترتيب حسب",
170
+ featured: "المميزة",
171
+ low: "السعر: من الأقل للأعلى",
172
+ high: "السعر: من الأعلى للأقل",
173
+ cart: "سلتك",
174
+ count:
175
+ "{count, plural, zero {لا عناصر} one {عنصر واحد} two {عنصران} few {# عناصر} many {# عنصرًا} other {# عنصر}}",
176
+ add: "أضف إلى السلة",
177
+ added: "أُضيف إلى سلتك",
178
+ qty: "الكمية",
179
+ remove: "إزالة",
180
+ total: "المجموع",
181
+ checkout: "محاكاة إتمام الطلب",
182
+ checkoutNote: "هذا متجر تجريبي. لا تُقبل مدفوعات أو طلبات حقيقية.",
183
+ checkoutDone: "اكتملت التجربة. لم يتم تحصيل أي دفعة أو تقديم طلب.",
184
+ emptyCart: "سلتك تنتظر شيئًا جميلًا.",
185
+ shipping:
186
+ "أسعار توضيحية بالدولار الأمريكي. لا تُفرض رسوم شحن أو ضرائب في التجربة.",
187
+ about: "أغراض مختارة بعناية. أقل اعتيادية بقليل.",
188
+ p1Title: "حقيبة يومية",
189
+ p1Summary: "قماش قطني متين ومقابض واسعة ومساحة لتفاصيل يومك.",
190
+ p2Title: "كوب الصباح",
191
+ p2Summary: "ملمس خزفي دافئ وقبضة مريحة. لفنجانك الأول الهادئ.",
192
+ p3Title: "مصباح مكتب آرك",
193
+ p3Summary: "ضوء لطيف وقاعدة ثابتة وشكل ينسجم مع منزلك.",
194
+ p4Title: "دفتر الميدان",
195
+ p4Summary: "تجليد مسطح وصفحات معاد تدويرها لأفكار بلا موعد نهائي.",
196
+ p5Title: "قارورة اليوم",
197
+ p5Summary: "فولاذ مصقول وغطاء بسيط. رفيقة طريق قابلة لإعادة الاستخدام.",
198
+ p6Title: "وسادة كتانية",
199
+ p6Summary: "كتان ناعم بلون ترابي. دعوة للهدوء.",
200
+ p7Title: "صينية بلوط",
201
+ p7Summary: "مكان صغير للمفاتيح والعملات وما تضعه عند الباب.",
202
+ p8Title: "ساعة هادئة",
203
+ p8Summary: "وجه بسيط وحركة صامتة. تابع الوقت دون دقات.",
204
+ },
205
+ };
@@ -0,0 +1,64 @@
1
+ import { createCatalog } from "@linguanahq/catalog";
2
+ import config from "../linguana.json";
3
+ import { demoMessages } from "./demo-messages";
4
+ export const demoLocales = [
5
+ { code: "en", displayName: "English", nativeName: "English" },
6
+ { code: "fr", displayName: "French", nativeName: "Français" },
7
+ { code: "es", displayName: "Spanish", nativeName: "Español" },
8
+ { code: "ar", displayName: "Arabic", nativeName: "العربية" },
9
+ ];
10
+ export const demo = config.mode === "demo";
11
+ export function cookieLocale(
12
+ cookie = typeof document === "undefined" ? "" : document.cookie,
13
+ ) {
14
+ try {
15
+ const value = decodeURIComponent(
16
+ cookie
17
+ .split(";")
18
+ .find((item) => item.trim().startsWith("linguana_locale="))
19
+ ?.split("=")[1] ?? "en",
20
+ );
21
+ return /^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/.test(value) &&
22
+ (!demo || demoLocales.some((item) => item.code === value))
23
+ ? value
24
+ : "en";
25
+ } catch {
26
+ return "en";
27
+ }
28
+ }
29
+ export const demoCatalogs = demo
30
+ ? Object.entries(demoMessages).map(([locale, messages]) =>
31
+ createCatalog({
32
+ schemaVersion: "1.0",
33
+ projectId: "demo-storefront",
34
+ environment: "development",
35
+ sourceLocale: "en",
36
+ locale,
37
+ manifestHash: "0".repeat(64),
38
+ version: 1,
39
+ messages,
40
+ }),
41
+ )
42
+ : [];
43
+ export function optionsFor(
44
+ locale = cookieLocale(),
45
+ ): import("@linguanahq/core").LinguanaClientOptions {
46
+ return {
47
+ projectId: demo
48
+ ? "demo-storefront"
49
+ : import.meta.env.VITE_LINGUANA_PROJECT_ID,
50
+ environment: demo
51
+ ? "development"
52
+ : import.meta.env.VITE_LINGUANA_ENVIRONMENT,
53
+ initialLocale: locale,
54
+ fallbackLocale: config.sourceLocale,
55
+ catalogs: demoCatalogs,
56
+ ...(demo
57
+ ? { availableLocales: demoLocales }
58
+ : {
59
+ publishableKey: import.meta.env.VITE_LINGUANA_PUBLISHABLE_KEY,
60
+ catalogEndpoint: import.meta.env.VITE_LINGUANA_API_URL,
61
+ configEndpoint: import.meta.env.VITE_LINGUANA_API_URL,
62
+ }),
63
+ };
64
+ }
@@ -0,0 +1,54 @@
1
+ import {
2
+ createHydrationState,
3
+ loadCatalog,
4
+ loadRuntimeConfig,
5
+ } from "@linguanahq/core";
6
+ import { createServerFn } from "@tanstack/react-start";
7
+ import { getRequest } from "@tanstack/react-start/server";
8
+ import {
9
+ cookieLocale,
10
+ demo,
11
+ demoCatalogs,
12
+ demoLocales,
13
+ optionsFor,
14
+ } from "./i18n";
15
+ export const localeState = createServerFn({ method: "GET" }).handler(
16
+ async () => {
17
+ let locale = cookieLocale(getRequest().headers.get("cookie") ?? "");
18
+ const options = optionsFor(locale);
19
+ let catalogs = demoCatalogs;
20
+ let locales = demoLocales;
21
+ if (!demo) {
22
+ catalogs = [];
23
+ locales = demoLocales.filter(
24
+ (item) => item.code === options.fallbackLocale,
25
+ );
26
+ try {
27
+ const config = await loadRuntimeConfig({
28
+ endpoint: options.configEndpoint!,
29
+ projectId: options.projectId,
30
+ environment: options.environment,
31
+ publishableKey: options.publishableKey!,
32
+ signal: AbortSignal.timeout(5000),
33
+ });
34
+ locales = config.locales;
35
+ if (!locales.some((item) => item.code === locale))
36
+ locale = options.fallbackLocale;
37
+ if (locale !== options.fallbackLocale)
38
+ catalogs = [
39
+ await loadCatalog({
40
+ endpoint: options.catalogEndpoint!,
41
+ projectId: options.projectId,
42
+ environment: options.environment,
43
+ publishableKey: options.publishableKey!,
44
+ locale,
45
+ signal: AbortSignal.timeout(5000),
46
+ }),
47
+ ];
48
+ } catch {
49
+ locale = options.fallbackLocale;
50
+ }
51
+ }
52
+ return { hydrationState: createHydrationState(locale, catalogs), locales };
53
+ },
54
+ );