All Projects → ipfs-shipyard → i18n

ipfs-shipyard / i18n

Licence: other
IPFS Translation Project

Labels

Projects that are alternatives of or similar to i18n

timeliness-i18n
Translations for timeliness and validates_timeliness gem.
Stars: ✭ 16 (+14.29%)
Mutual labels:  i18n
js-http-client
[DEPRECATED] Official Textile JS HTTP Wrapper Client
Stars: ✭ 29 (+107.14%)
Mutual labels:  ipfs
gutenberg-i18n-block
Gutenberg block to demo internationalization functionality.
Stars: ✭ 35 (+150%)
Mutual labels:  i18n
add-to-web3
⁂ Github Action to upload your website to web3.storage
Stars: ✭ 22 (+57.14%)
Mutual labels:  ipfs
crates
🌎 A tool to generate your locale files compatible with i18n.
Stars: ✭ 52 (+271.43%)
Mutual labels:  i18n
language-tags
A Swiss Army knife for language tags.
Stars: ✭ 46 (+228.57%)
Mutual labels:  i18n
plate
Internationalization library for Python
Stars: ✭ 31 (+121.43%)
Mutual labels:  i18n
nft.storage
😋 Free decentralized storage and bandwidth for NFTs on IPFS and Filecoin.
Stars: ✭ 309 (+2107.14%)
Mutual labels:  ipfs
python-fluent
Python implementation of Project Fluent
Stars: ✭ 142 (+914.29%)
Mutual labels:  i18n
c-flo
MsgFlo setup for programming the c-base space station
Stars: ✭ 21 (+50%)
Mutual labels:  ipfs
potools
Tools for working with translations in R
Stars: ✭ 42 (+200%)
Mutual labels:  i18n
academic
Jekyll theme with a focus on simplicity, typography and flexibility
Stars: ✭ 71 (+407.14%)
Mutual labels:  i18n
language-subtag-registry
BCP 47/IANA language subtag data in JSON format.
Stars: ✭ 53 (+278.57%)
Mutual labels:  i18n
currency-exchange
Currency Exchange | powered by Angular 10, TypeScript, ES6+ features, SCSS, JavaScript, PWA
Stars: ✭ 13 (-7.14%)
Mutual labels:  i18n
ipfs-api-kotlin
IPFS API for kotlin to access a IPFS node via http
Stars: ✭ 82 (+485.71%)
Mutual labels:  ipfs
i18n-tag-schema
Generates a json schema for all i18n tagged template literals in your project
Stars: ✭ 15 (+7.14%)
Mutual labels:  i18n
nft-website
NFT School: Community education platform for developers in the non-fungible token space.
Stars: ✭ 260 (+1757.14%)
Mutual labels:  ipfs
go-libp2p-quic-transport
An implementation of a libp2p transport using QUIC
Stars: ✭ 102 (+628.57%)
Mutual labels:  ipfs
kaizen-cli
🌐🛠 Kaizen is a powerful framework combine all the blockchain technologies to help you easily develop and deploy dapps
Stars: ✭ 33 (+135.71%)
Mutual labels:  ipfs
auto-translate-converter
a cli work for part of i18n project chain
Stars: ✭ 19 (+35.71%)
Mutual labels:  i18n

IPFS Translation Project 🌐✍️🖖

Adapting IPFS apps and websites for a specific language by translating text and adding locale-specific components

Lead

Marcin Rataj

How can I contribute translation for my language?

Go to https://www.transifex.com/ipfs/public/, select languages you want to help with and start translating!

Transifex is localization platform for crowdsourcing translations from IPFS Community:

  • Everyone can contribute translations.
  • Be sure to change your Transifex notification settings to be notified when translation sources change.
  • Missing language? Request it via Transifex UI
  • Night Owl? Try Dark Mode 🦉

That is all!

I am a developer, how can I enable translation of my project?

Continue reading!

What does i18n mean?

Internationalization (I18N) is the process of designing a software application so that it can be adapted to various languages and regions without engineering changes.

Localization (L10N) is the process of adapting internationalized software for a specific region or language by translating text and adding locale-specific components.

Localization (which is potentially performed multiple times, for different locales) uses the infrastructure or flexibility provided by internationalization (which is ideally performed only once, or as an integral part of ongoing development).

More: https://en.wikipedia.org/wiki/Internationalization_and_localization:


Developer Tools and Best Practices

Adding i18n to Your Project

  1. Extract strings into separate files(s) in JSON-ICU or PO formats and wire them up to be loaded by your app.
    • See sections below for platform-specific notes
  2. Create a PR with above changes in your repository
  3. Create an issue in this repo to: Add a new project to Transifex

Next steps, after your project is added to Transifex:

  1. Add .tx/config to the PR (read Transifex section below)
  2. Smoke-test by pushing source locale with tx push -s
  3. Merge the PR to master
  4. Set up automated sync of source locale (read Transifex section below)

That's it!

After this initial setup, the only manual step going forward is fetching new translations with tx pull -a as a part of release dance of your project.

Locale File Formats

The most important is to use future-proof format for locale files, such as ICU, JSON-ICU or gettext (.po).

Make sure to read and understand how plurals and genders impact translations, and how to define plurals in JSON-ICU.

Suggested Libraries

JavaScript

We've had some success with i18next with i18next-icu or using yahoo/intl-messageformat manually.

Transifex 101

Transifex is localization platform for crowdsourcing translations from IPFS Community.

Documentation Hightlights

Language Mapping

Transifex use POSIX style _ underscores when in it's locale tags to separate language tag and ISO region code, so en_GB denotes en or English as the language, and GB or Great Britain as the region.

Browsers and the IETF standard use hyphens as the separator, like en-GB. Some libraries such as i18next look up languages based on the hyphenated IETF language code, with hyphens rather than undercores so we tell the tx client to map those underscored country specific locales to the hypenated version in the config file .tx/config by adding:

lang_map = zh_CN: zh-CN, ko_KR: ko-KR

zh-CN and zh-TW vs zh-HANS and zh-HANT

Summary from mozilla/addons-server/issues/5829:

In practice, zh-CN and zh-SG are subsets of zh-Hans; zh-TW and zh-HK are subset of zh-Hant. So zh-CN if not resolved directly, should be resolved as zh-Hans.

The difference within the subsets are usually vocabularies and translation costumes (much like the difference between en_US and en_UK). But the scripts used are common within the sets.

More: https://www.w3.org/International/articles/bcp47/

Automatically Updating Source Locale at Transifex

Manually updating source files isn't fun or scalable if you've got frequent updates. To avoid this, you can have Transifex automatically check for updates to your source file. You simply need to provide Transifex with the public URL of the file. The file can be hosted on any service, such as GitHub

Project Manager is able to set up source file sync automation. Every new text that lands in master branch will be fetched by Transifex. Sync happens twice a day, so translation team gets notification within 24h.

Having this, the only manual step is to fetch fresh translations via tx pull -a as a part of release dance 💃

Example: Setting up IPFS Companion to sync source locale using raw URL:
https://github.com/ipfs-shipyard/ipfs-companion/raw/master/add-on/_locales/en/messages.json Setting up IPFS Companion i18n sync

Sharing Translation Memory

Each project in Transifex has its own Translation Memory. However, if you have projects which have similar or related content, e.g. [IPFS app and a website], you can share TMs across those projects by creating a TM group. – sharing-tm

Right now we have a single TM group named "ipfs".

Someone submitted a PR with translations instead of using Transifex

We don't accept direct PRs with translated strings coming from users other than Transifex itself, as those changes can be lost.

Translations need to be submitted using Transifex project at https://www.transifex.com/ipfs/public/

PRs that bypass Transifex should be closed without merging, with thank you note and ask to apply changes via Transifex or just a link to ipfs/i18n#how-can-i-contribute-translation-for-my-language (example).

Dark Mode

Transifex supports Dark Mode now, it can be enabled in Editor Preferences:

Enabling Dark Mode on Transifex

In the past, we had to use dedicated extensions:

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].