Giter VIP home page Giter VIP logo

translo's Introduction

Translo is a localization management platform, open-source, for building better products

  • It manages all the translations you need
  • Import JSON files and translate them
  • Translate via ChatGPT
  • Export to JSON or via URL (if you need other types of export, please open an issue)
  • If the project works, we plan to manage teams (leave a like and we'll understand that you like it)

Running Locally

  1. Install dependencies using pnpm:
pnpm install
  1. Copy .env.example to .env.local and update the variables.
cp .env.example .env.local
  1. Launch local db with docker daemon
docker-compose up -d
  1. Run migrations
pnpm prisma:migrate:dev
  1. Start the development server:
pnpm dev
  1. Commit:
git add .
pnpm run commit

Test stripe

  1. Install stripe cli:
brew install stripe/stripe-cli/stripe
  1. Login stripe:
stripe login
  1. Webhook listener:
pnpm run stripe:webhook

Update i18n

Set the base URL of Translo in the TRANSLO_I18N_BASE_URL environment

pnpm run i18n

translo's People

Contributors

matergi avatar renovate[bot] avatar davidecarpini avatar dependabot[bot] avatar

Stargazers

 avatar Alessandro Diez avatar  avatar

Watchers

 avatar

translo's Issues

Subscription Bug: Unexpected Charge Behavior

Scenario
When the user creates a subscription, a "charge.succeeded" event is triggered, and their token account is recharged

The current behavior:
upon subscription, the user is automatically charged the entered amount again

Expected behavior:
is that upon subscription, it should not be recognized as "charge.succeeded," and the user should be assigned the predefined tokens instead

Use ChatGPT as a copywriter

I need a catchy text.
The text is placed: [text position].

The text should represent: [text description].

Can you give me 5 different versions?
Create short and impactful sentences.

when there are 3 languages, it doesn't translate one the first time

Background

  1. The user creates the project
  2. The user imports a list of English keywords
  3. The user adds 2 languages (e.g. Italian and Spanish)

Actual wrong behavior

  1. The user opens a keyword
  2. The user translates it into all languages
  3. It gets translated and inserted only in the last language and not in both

Note: The API returns it correctly, so it might be a client-side error.

Correct behavior

  1. The user opens a keyword
  2. The user translates it into all languages
  3. It gets translated into all languages

Registration Bug: Email Confirmation Restriction

Scenario:
When the user attempts to register but does not confirm the email, it does not allow re-registration with the same email

The current behavior:

  • The user tries to register but doesn't confirm the email
  • The user tries to register again and returns an error

Expected behavior:

  • The user tries to register but doesn't confirm the email
  • The user tries to register again and confirms the email
  • The user tries to register again and returns an error

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Other Branches

These updates are pending. To force PRs open, click the checkbox below.

  • chore(deps): update dependency @types/node to v22.5.5
  • chore(deps): update dependency postcss to v8.4.47
  • chore(deps): update nextjs monorepo to v14.2.11 (eslint-config-next, next)
  • fix(deps): update dependency @tanstack/react-query to v5.56.2
  • fix(deps): update dependency openai to v4.61.0
  • fix(deps): update dependency stripe to v16.11.0

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

docker-compose
docker-compose.yml
  • postgres 16.4
github-actions
.github/workflows/commitlint.yml
  • actions/checkout v4
  • wagoid/commitlint-github-action v6
.github/workflows/open-pr.yml
  • actions/checkout v4
  • actions/setup-node v4
  • pnpm/action-setup v3
  • ubuntu 22.04
npm
package.json
  • @ariakit/react 0.4.11
  • @hookform/resolvers 3.9.0
  • @next-auth/prisma-adapter 1.0.7
  • @prisma/client 5.19.1
  • @radix-ui/react-accordion 1.2.0
  • @radix-ui/react-alert-dialog 1.1.1
  • @radix-ui/react-aspect-ratio 1.1.0
  • @radix-ui/react-avatar 1.1.0
  • @radix-ui/react-checkbox 1.1.1
  • @radix-ui/react-collapsible 1.1.0
  • @radix-ui/react-context-menu 2.2.1
  • @radix-ui/react-dialog 1.1.1
  • @radix-ui/react-dropdown-menu 2.1.1
  • @radix-ui/react-hover-card 1.1.1
  • @radix-ui/react-label 2.1.0
  • @radix-ui/react-menubar 1.1.1
  • @radix-ui/react-navigation-menu 1.2.0
  • @radix-ui/react-popover 1.1.1
  • @radix-ui/react-progress 1.1.0
  • @radix-ui/react-radio-group 1.2.0
  • @radix-ui/react-scroll-area 1.1.0
  • @radix-ui/react-select 2.1.1
  • @radix-ui/react-separator 1.1.0
  • @radix-ui/react-slider 1.2.0
  • @radix-ui/react-switch 1.1.0
  • @radix-ui/react-tabs 1.1.0
  • @radix-ui/react-toast 1.2.1
  • @radix-ui/react-toggle 1.1.0
  • @radix-ui/react-tooltip 1.1.2
  • @sentry/nextjs 8.30.0
  • @t3-oss/env-nextjs 0.11.1
  • @tanstack/react-query 5.55.4
  • @vercel/analytics 1.3.1
  • axios 1.7.7
  • class-variance-authority 0.7.0
  • clsx 2.1.1
  • cmdk 1.0.0
  • commit-and-tag-version 12.4.3
  • concurrently 8.2.2
  • crypto-js 4.2.0
  • dotenv-cli 7.4.2
  • file-saver 2.0.5
  • i18next 23.15.1
  • jszip 3.10.1
  • lodash 4.17.21
  • lucide-react 0.439.0
  • match-sorter 6.3.4
  • next 14.2.10
  • next-auth 4.24.7
  • next-nprogress-bar 2.3.13
  • next-themes 0.3.0
  • nodemailer 6.9.15
  • openai 4.59.0
  • posthog-js 1.161.3
  • posthog-node 4.2.0
  • preline 2.4.1
  • react 18.3.1
  • react-dom 18.3.1
  • react-hook-form 7.53.0
  • stripe 16.10.0
  • tailwind-merge 2.5.2
  • tailwindcss-animate 1.0.7
  • zod 3.23.8
  • @commitlint/cli 19.5.0
  • @commitlint/config-conventional 19.5.0
  • @eslint/compat 1.1.1
  • @eslint/eslintrc 3.1.0
  • @eslint/js 9.10.0
  • @ianvs/prettier-plugin-sort-imports 4.3.1
  • @tailwindcss/line-clamp 0.4.4
  • @tailwindcss/typography 0.5.15
  • @types/crypto-js 4.2.2
  • @types/lodash 4.17.7
  • @types/node 22.5.4
  • @types/nodemailer 6.4.15
  • @types/react 18.3.5
  • @types/react-dom 18.3.0
  • autoprefixer 10.4.20
  • commitizen 4.3.0
  • commitlint 19.5.0
  • cz-customizable 7.2.1
  • eslint 9.10.0
  • eslint-config-next 14.2.10
  • eslint-config-prettier 9.1.0
  • eslint-plugin-react 7.35.2
  • eslint-plugin-tailwindcss 3.17.4
  • fs 0.0.1-security
  • git-precommit-checks 3.1.0
  • husky 9.1.6
  • mdast-util-toc 7.1.0
  • postcss 8.4.45
  • prettier 3.3.3
  • prettier-plugin-tailwindcss 0.6.6
  • pretty-quick 4.0.0
  • prisma 5.19.1
  • rehype 13.0.1
  • rehype-autolink-headings 7.1.0
  • rehype-slug 6.0.0
  • remark 15.0.1
  • remark-gfm 4.0.0
  • tailwindcss 3.4.11
  • ts-node 10.9.2
  • typescript 5.6.2
  • typescript-eslint 8.5.0
  • unist-util-visit 5.0.0
nvm
.nvmrc
  • node 20.17.0

  • Check this box to trigger a request for Renovate to run again on this repository

Subscription recharge test

To test when the user cancels the subscription and recreates it the following month, to see if it recharges them with additional tokens

show the untranslated keywords

It might be convenient to enable the display of only untranslated keywords (as a filter) to immediately see those that still need to be translated in a particular language

Translation management with ChatGPT using single keyword

prompt example:

Sto lavorando alla internazionalizzazione della mia applicazione. Vorrei tradurre il testo alla fine di questo messaggio, utilizzato in questo contesto: "{{keyword.context}}".
Potresti scrivermi le traduzioni in {{i18n.languages}}? 
[[La traduzione deve essere informale]] <-- {{settings.audience}}
[[nel tono di un sito web tecnologico]] <-- {{settings.description}}
[[Il pubblico di riferimento è sia maschile che femminile]] <-- {{setting.gender}}
con un'età compresa tra i {{settings.ageFrom}} e i {{settings.ageTo}} anni. 

ricorda che “Fotogramma” si traduce così:
"it": "Fotogramma",
"en": "Frame",
"es": "Fotograma",

Genera un JSON unico in questo modo:
{
    "en": "",
    "it": "",
    "es": ""
}

dove:
language-id per inglese = en
language-id per italiano = it
language-id per spagnolo = es
...

add project settings

To achieve a well-done translation, we need to provide context to the AI, and we do this through project variables

  • Brief project description
  • Formality
    • Formal
    • Informal
    • Neutral
  • Target audience
    • Male
    • Female
    • Other
  • Target audience age
  • Words designated as constant translations
    • example: "Subscription" -> "Abbonamenti", no "iscrizione"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.