A generic multi-client payment gateway so FlatRender, meezi.ir and bargevasat.ir can all pay through ZarinPal's single verified callback domain (pay.flatrender.ir). New Go service services/payment (clones the notification skeleton + vendored deps): - migration 31_payment_broker.sql — `payment` schema: client_apps, transactions, webhook_deliveries. - ZarinPal v4 client ported from the proven identity PaymentService (request.json -> StartPay -> verify.json; codes 100/101). - client API: POST /v1/pay/request + /v1/pay/inquiry, authed by X-Api-Key + HMAC body signature; GET /callback/zarinpal (the single verified endpoint) verifies, then 302s the user back to the site's return_url (signed) and fires a signed, retried webhook. - per-client ZarinPal merchant override (default = shared merchant); amount stored canonically in Rial, unit to ZarinPal env-configurable. - admin API /v1/admin/* (FlatRender admin JWT): client-app CRUD + key issue/rotate + transactions list. Deploy wiring: payment-svc in docker-compose.v2.yml (host port 1607), pay.flatrender.ir server block in mirror-nginx conf, ENV_FILE + README updates (cert SAN + manual migration note). Admin UI: src/components/admin/PaymentsAdmin.tsx (client apps with one-time key reveal + rotate, transactions table) + /admin/payments page + nav link + fa/en strings; pay-admin proxy route to payment-svc. Docs/SDK: deploy/PAYMENTS.md (integration contract) + deploy/sdk/flatpay.js (zero-dep Node client + webhook verifier) for meezi/any site. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
universal-translator
Universal Translator is an i18n Translator for Go/Golang using CLDR data + pluralization rules
Why another i18n library?
Because none of the plural rules seem to be correct out there, including the previous implementation of this package, so I took it upon myself to create locales for everyone to use; this package is a thin wrapper around locales in order to store and translate text for use in your applications.
Features
- Rules generated from the CLDR data, v36.0.1
- Contains Cardinal, Ordinal and Range Plural Rules
- Contains Month, Weekday and Timezone translations built in
- Contains Date & Time formatting functions
- Contains Number, Currency, Accounting and Percent formatting functions
- Supports the "Gregorian" calendar only ( my time isn't unlimited, had to draw the line somewhere )
- Support loading translations from files
- Exporting translations to file(s), mainly for getting them professionally translated
- Code Generation for translation files -> Go code.. i.e. after it has been professionally translated
- Tests for all languages, I need help with this, please see here
Installation
Use go get
go get github.com/go-playground/universal-translator
Usage & Documentation
Please see https://godoc.org/github.com/go-playground/universal-translator for usage docs
Examples:
File formatting
All types, Plain substitution, Cardinal, Ordinal and Range translations can all be contained within the same file(s); they are only separated for easy viewing.
Examples:
Basic Makeup
NOTE: not all fields are needed for all translation types, see examples
{
"locale": "en",
"key": "days-left",
"trans": "You have {0} day left.",
"type": "Cardinal",
"rule": "One",
"override": false
}
| Field | Description |
|---|---|
| locale | The locale for which the translation is for. |
| key | The translation key that will be used to store and lookup each translation; normally it is a string or integer. |
| trans | The actual translation text. |
| type | The type of translation Cardinal, Ordinal, Range or "" for a plain substitution(not required to be defined if plain used) |
| rule | The plural rule for which the translation is for eg. One, Two, Few, Many or Other.(not required to be defined if plain used) |
| override | If you wish to override an existing translation that has already been registered, set this to 'true'. 99% of the time there is no need to define it. |
Help With Tests
To anyone interesting in helping or contributing, I sure could use some help creating tests for each language. Please see issue here for details.
License
Distributed under MIT License, please see license file in code for more details.
