#csv #localization #read-input #json-file #plain-text

bin+lib translocate

translocate is a high performance converter that takes CSV translation files and outputs corresponding JSON translation files

9 releases (breaking)

0.8.1-beta.1 Dec 18, 2024
0.8.0 Jan 10, 2024
0.7.0 Jan 4, 2024
0.6.0 Jan 2, 2024
0.1.0 Oct 27, 2023

#45 in Internationalization (i18n)

Download history 8/week @ 2024-09-18 14/week @ 2024-09-25 2/week @ 2024-10-02 4/week @ 2024-11-27 29/week @ 2024-12-04 34/week @ 2024-12-11 111/week @ 2024-12-18 1/week @ 2024-12-25 8/week @ 2025-01-01

159 downloads per month

MIT license

44KB
889 lines

translocate - convert CSV translation files to JSON

translocate is a high performance (blazingly fast) CSV translation file to JSON translation file transformer. It takes .csv or .tsv files as input, and will output one file for each language listed as a CSV column.

Why?

CSV files are a convenient, and somewhat common format for housing translations. They are plain text files in the CSV format. The ease of exporting from an spreadsheet to CSV format makes it an ideal candidate for non-technical users to use for output in localization tasks. CSV files are also a supported import and export format for many localization services.

Unfortunately, though the format has been standardized there are many non well-formed CSV files in existence, making their direct use for web localization projects somewhat challenging. JSON meanwhile has a very strict format. It is also very popular—especially in web development—as a localization format.

This crate provides a binary, translocate which uses functions provided by libtranslocate to to read an input CSV localization file, and output JSON localization files, with one JSON file being generated for every localization that exists as a column in the input CSV file. libtranslocate can be used as a library in lieu of the binary.

Requirements for use

There is one main requirements which should be followed for this crate to work optimally:

  • The first line of the input CSV (or TSV) file should be the heading column.

translocate has two internal methods used to transform your localized strings into JSON. The faster and more permissive method only requires that a heading line is present. translocate automatically tries the faster conversion method and, if it fails, will fall back to the stricter, slower strategy.

The alternate, stricter method attempts to deserialize input files based on a predefined list of languages. For this alternate mode the language identifiers in the heading should be in the format xx_YY or xx-YY — e.g. en_US or en-US. The very first heading should be named id, this will provide the translation keys. The current list of supported languages for this stricter mode is da_DK, de_DE, en_US, es_ES, fr_FR, it_IT, nl_NL, pt_BR, pt_PT and sv_SE. An example of the heading in a CSV with all supported languages is shown below:

id,da_DK,de_DE,en_US,es_ES,fr_FR,it_IT,nl_NL,pt_BR,pt_PT,sv_SE

If your particular requirements are not being served, you are encouraged to make a pull request which adds support. Alternatively you may fork the repository and modify for your specific needs; the license is quite permissive.

If you need to do some processing of your CSV before passing to translocate because of failures during the transformation from CSV to JSON, consider checking out the qsv or xsv crates.

Dependencies

~4MB
~43K SLoC