{"id":21509917,"url":"https://github.com/nitotm/efficient-language-detector","last_synced_at":"2026-04-19T11:06:43.295Z","repository":{"id":167978990,"uuid":"643602436","full_name":"nitotm/efficient-language-detector","owner":"nitotm","description":"Fast and accurate natural language detection. Detector written in PHP. Nito-ELD, ELD.","archived":false,"fork":false,"pushed_at":"2026-02-24T17:33:22.000Z","size":134155,"stargazers_count":57,"open_issues_count":1,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-02-24T21:49:06.862Z","etag":null,"topics":["language","language-classification","language-detection","language-detector","language-identification","natural-language","natural-language-processing","nlp","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nitotm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"nitotm","ko_fi":"nitotm","custom":"https://linktr.ee/nitotm"}},"created_at":"2023-05-21T17:23:34.000Z","updated_at":"2026-02-24T17:33:48.000Z","dependencies_parsed_at":"2025-07-13T00:01:37.055Z","dependency_job_id":null,"html_url":"https://github.com/nitotm/efficient-language-detector","commit_stats":{"total_commits":31,"total_committers":3,"mean_commits":"10.333333333333334","dds":0.09677419354838712,"last_synced_commit":"58b8a7e5915bbad5d4fa243c07496b400f325869"},"previous_names":["nitotm/efficient-language-detector"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/nitotm/efficient-language-detector","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitotm%2Fefficient-language-detector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitotm%2Fefficient-language-detector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitotm%2Fefficient-language-detector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitotm%2Fefficient-language-detector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nitotm","download_url":"https://codeload.github.com/nitotm/efficient-language-detector/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitotm%2Fefficient-language-detector/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32004046,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["language","language-classification","language-detection","language-detector","language-identification","natural-language","natural-language-processing","nlp","php"],"created_at":"2024-11-23T21:34:14.353Z","updated_at":"2026-04-19T11:06:43.286Z","avatar_url":"https://github.com/nitotm.png","language":"PHP","funding_links":["https://github.com/sponsors/nitotm","https://ko-fi.com/nitotm","https://linktr.ee/nitotm"],"categories":[],"sub_categories":[],"readme":"# Efficient Language Detector\n\n\u003cdiv align=\"center\"\u003e\n\t\n![supported PHP versions](https://img.shields.io/badge/PHP-%3E%3D%207.4-blue)\n[![license](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n[![supported languages](https://img.shields.io/badge/supported%20languages-60-brightgreen.svg)](#languages)\n![version](https://img.shields.io/badge/ver.-3.0-blue)\n\t\n\u003c/div\u003e\n\nEfficient language detector (*Nito-ELD* or *ELD*) is a fast and accurate natural language detection software, written 100% in PHP, with a speed comparable to fast C++ compiled detectors, and accuracy rivaling the best detectors to date.\n\nIt has no dependencies, easy installation, all it's needed is PHP with the **mb** extension.  \nELD scales perfectly with database size.  \nELD is also available (outdated versions) in [Javascript](https://github.com/nitotm/efficient-language-detector-js) and [Python](https://github.com/nitotm/efficient-language-detector-py).\n\n1. [Installation](#installation)\n2. [How to use](#how-to-use)\n3. [Benchmarks](#benchmarks)\n4. [Databases](#databases)\n5. [Testing](#testing)\n6. [Languages](#languages)\n\n## Installation\n\n```bash\n$ composer require nitotm/efficient-language-detector\n```\n- `--prefer-dist` will omit *tests/*, *misc/* \u0026 *benchmark/*, or use `--prefer-source` to include everything  \n- Install `nitotm/efficient-language-detector:dev-main` to try the last unstable changes  \n- Alternatively, download / clone the files can work just fine.  \n(Only *small* DB install under construction)  \n\n\n### ELD execution options\n\n- ELD has database execution Modes: `array`, `string`, `bytes`, `disk`  \n- ELD database Sizes: `small`, `medium`, `large`, `extralarge` \n- Confused? No worries, use default with no arguments. [How to use](#how-to-use)\n\n**Low memory Modes**  \nFor Modes `string`, `bytes` and `disk`, all size databases can run with *128MB* PHP default setting  \n`disk` mode with `extralarge` size, can run with almost no RAM as it only uses 0.5MB  \n`string` and `bytes` are a great choice for general use, as they are just ~2x slower than `array`  \n\n**Fastest Mode: Array** (higher memory usage)  \nFor `array` Mode it is recommended to use OPcache, specially for the larger databases to reduce load times  \nWe need to set `opcache.interned_strings_buffer`, `opcache.memory_consumption` high enough for each database  \n\nCheck [Databases](#databases) for more info.  \n\n## How to use?\n\n`detect()` expects a UTF-8 string and returns an object with a `language` property, containing an *ISO 639-1* code (or other selected scheme), or `'und'` for undetermined language.\n```php\nuse Nitotm\\Eld\\LanguageDetector;\n\n$eld = new LanguageDetector(); // Default Size: 'large', Mode: 'string' (since v3.2)\n\n$eld-\u003edetect('Hola, cómo te llamas?');\n// object( language =\u003e string, scores() =\u003e array\u003cstring, float\u003e, isReliable() =\u003e bool )\n// ( language =\u003e 'es', scores() =\u003e ['es' =\u003e 0.25, 'nl' =\u003e 0.05], isReliable() =\u003e true )\n\n$eld-\u003edetect('Hola, cómo te llamas?')-\u003elanguage;\n// 'es'\n```\nTo select database **Size** and **Mode**, or language output scheme. We can import `Eld...` constants to see avalible options.\n```php\nuse Nitotm\\Eld\\{LanguageDetector, EldDataFile, EldScheme, EldMode};\n\n// LanguageDetector(databaseFile: ?string, outputFormat: ?string, mode: string)\n$eld = new LanguageDetector(EldDataFile::SMALL, EldScheme::ISO639_1, EldMode::MODE_ARRAY);\n\n// Database Size files: 'small', 'medium', 'large', 'extralarge'.\n// Schemes: 'ISO639_1', 'ISO639_2T', 'ISO639_1_BCP47', 'ISO639_2T_BCP47' and 'FULL_TEXT'\n// Database Modes: 'array', 'string', 'bytes', 'disk'. Check memory requirements for 'array'\n// Constants are not mandatory, LanguageDetector('small'); will also work\n```\n\n#### Languages subsets\n\nCalling `langSubset()` once, will set the subset.  \n- In `array` mode the first call takes longer as it creates a new database, if save enabled (default), it will be loaded next time we make the same subset.  \n- In modes `string`, `bytes` \u0026 `disk`, a \"virtual\" subset is created instantly, `detect()` will just remove unwanted languages before returning results.  \n- To load a subset with 0 overhead, we can feed the returned file by `langSubset()` in `array` mode, when creating the instance `LanguageDetector(file)`  \n  - To make use of pre-built subsets in modes `string`, `bytes` \u0026 `disk`, getting lower memory usage and increased speed, it is possible by manually converting an `array` database, using `BlobDataBuilder()` \n- Check available [Languages](#languages) below.\n```php\n// It accepts any ISO codes. In \"array\" mode it will return a subset file name, if saved\n// langSubset(languages: [], save: true, encode: true);\n$eld-\u003elangSubset(['en', 'es', 'fr', 'it', 'nl', 'de']);\n// Object ( success =\u003e bool, languages =\u003e ?array, error =\u003e ?string, file =\u003e ?string )\n// ( success =\u003e true, languages =\u003e ['en', 'es'...], error =\u003e NULL, file =\u003e 'small_6_mfss...' )\n\n// to remove the subset\n$eld-\u003elangSubset();\n\n// Load pre-saved subset directly, just like a default database\n$eld_subset = new Nitotm\\Eld\\LanguageDetector('small_6_mfss5z1t', null, 'array');\n\n// Build a binary database for modes 'string', 'bytes' \u0026 'disk', from any 'array' database\n// Memory requirements for 'array' database input apply \n$eldBuilder = new Nitotm\\Eld\\BlobDataBuilder('large'); // or subset 'small_6_mfss5z1t'\n// Create subset directly: new BlobDataBuilder('extralarge', ['en', 'es', 'de', 'it']);\n$eldBuilder-\u003ebuildDatabase();\n```\n\n#### Other Functions\n\n```php\n// if enableTextCleanup(True), detect() removes Urls, .com domains, emails, alphanumerical...\n// Not recommended, as urls \u0026 domains contain hints of a language, which might help accuracy\n$eld-\u003eenableTextCleanup(true); // Default is false\n\n// If needed, we can get info of the ELD instance: languages, database type, etc.\n$eld-\u003einfo();\n\n// Change output scheme on demand\n// 'ISO639_1', 'ISO639_2T', 'ISO639_1_BCP47', 'ISO639_2T_BCP47', 'FULL_TEXT'\n$eld-\u003esetOutputScheme('ISO639_2T'); // returns bool true on success\n```\nThere is a CLI wrapper (BETA version)  \n`\u003e./bin/eld --help` on Linux.  \n`\u003ephp bin/eld --help` on Windows.\n\n## Benchmarks\n\nI compared *ELD* with a different variety of detectors, as there are not many in PHP.\n\n| URL                                                      | Version      | Language     |\n|:---------------------------------------------------------|:-------------|:-------------|\n| https://github.com/nitotm/efficient-language-detector/   | 3.1.0        | PHP          |\n| https://github.com/pemistahl/lingua-py                   | 2.0.2        | Python       |\n| https://github.com/facebookresearch/fastText             | 0.9.2        | C++          |\n| https://github.com/CLD2Owners/cld2                       | Aug 21, 2015 | C++          |\n| https://github.com/patrickschur/language-detection       | 5.3.0        | PHP          |\n| https://github.com/wooorm/franc                          | 7.2.0        | Javascript   |\n\n\nBenchmarks:\n* **Tatoeba**: *20MB*, short sentences from Tatoeba, 50 languages supported by all contenders, up to 10k lines each.  \n\u003e * For Tatoeba, I limited all detectors to the 50 languages subset, making the comparison as fair as possible.  \n\u003e * Also, Tatoeba is not part of **ELD** training dataset (nor tuning), but it is for **fasttext**  \n* **ELD Test**: *10MB*, sentences from the 60 languages supported by ELD, 1000 lines each. Extracted from the 60GB of ELD training data.    \n* **Sentences**: *8MB*, sentences from *Lingua* benchmark, minus unsupported languages and Yoruba which had broken characters.  \n* **Word pairs** *1.5MB*, and **Single words** *870KB*, also from Lingua, same 53 languages.\n\n\u003c!--- Time table\n|                       | Tatoeba-50   | ELD test     | Sentences    | Word pairs   | Single words |\n|:----------------------|:------------:|:------------:|:------------:|:------------:|:------------:|\n| **Nito-ELD-S-array**  |     4.7\"     |      1.6\"    |      1.4\"    |     0.44\"    |     0.34\"    |\n| **Nito-ELD-M-array**  |     5.2\"     |      1.8\"    |      1.5\"    |     0.47\"    |     0.37\"    |\n| **Nito-ELD-L-array**  |     4.4\"     |      1.5\"    |      1.2\"    |     0.41\"    |     0.33\"    |\n| **Nito-ELD-L-string** |     9.5\"     |      3.5\"    |      2.9\"    |     0.68\"    |     0.48\"    |\n| **Nito-ELD-L-bytes**  |     9.5\"     |      3.5\"    |      2.9\"    |     0.68\"    |     0.48\"    |\n| **Nito-ELD-L-disk**   |    58\"       |     25\"      |     20\"      |     3.9\"     |     2.3\"     |\n| **Nito-ELD-XL-array** |     4.7\"     |      1.6\"    |      1.3\"    |     0.44\"    |     0.34\"    |\n| **Nito-ELD-XL-string**|    11\"       |      4.0\"    |      3.4\"    |     0.77\"    |     0.53\"    |\n| **Nito-ELD-XL-bytes** |    11\"       |      4.0\"    |      3.4\"    |     0.77\"    |     0.53\"    |\n| **Nito-ELD-XL-disk**  |    65\"       |     27\"      |     22\"      |     4.4\"     |     2.6\"     |\n| **Lingua**            |    98\"       |     27\"      |     24\"      |     8.2\"     |     5.9\"     |\n| **fasttext-subset**   |    12\"       |      2.7\"    |      2.3\"    |     1.2\"     |     1.1\"     |\n| **fasttext-all**      |     --       |      2.4\"    |      2.0\"    |     0.91\"    |     0.73\"    |\n| **CLD2**              |     3.5\"     |      0.71\"   |      0.59\"   |     0.35\"    |     0.32\"    |\n| **Lingua-low**        |    37\"       |     13\"      |     11\"      |     3.0\"     |     2.3\"     |\n| **patrickschur**      |   227\"       |     74\"      |     63\"      |    18\"       |    11\"       |\n| **franc**             |    43\"       |     10\"      |      9\"      |     4.1\"     |     3.2\"     |\n--\u003e\nTime execution benchmark for ELD size `large` ( check others sizes at \u003ca href=\"https://raw.githubusercontent.com/nitotm/efficient-language-detector/main/misc/table_time_extra_v3.svg\" target=\"_blank\"\u003emore benchmarks\u003c/a\u003e )  \n\u003cimg alt=\"timetable\" width=\"800\" src=\"https://raw.githubusercontent.com/nitotm/efficient-language-detector/main/misc/table_time_v3.svg\"\u003e\n\n\u003c!-- Accuracy table\n|                     | Tatoeba-50 | ELD test     | Sentences    | Word pairs   | Single words |\n|:--------------------|:----------:|:------------:|:------------:|:------------:|:------------:|\n| **Nito-ELD-S**      |   97.2%    | 99.7%        | 99.2%        | 91.1%        | 75.5%        |\n| **Nito-ELD-M**      |   98.0%    | 99.7%        | 99.3%        | 93.1%        | 80.4%        |\n| **Nito-ELD-L**      |   98.7%    | 99.8%        | 99.4%        | 94.7%        | 83.4%        |\n| **Nito-ELD-XL**     |   98.8%    | 99.8%        | 99.5%        | 95.3%        | 85.0%        |\n| **Lingua**          |   96.1%    | 99.2%        | 98.7%        | 93.4%        | 80.7%        |\n| **fasttext-subset** |   94.1%    | 98.0%        | 97.9%        | 83.1%        | 67.8%        |\n| **fasttext-all**    |     --     | 97.4%        | 97.6%        | 81.5%        | 65.7%        |\n| **CLD2** *          |   92.1% *  | 98.1%        | 97.4%        | 85.6%        | 70.7%        |\n| **Lingua-low**      |    89.3    | 97.3%        | 96.3%        | 84.1%        | 68.6%        |\n| **patrickschur**    |   84.1%    | 94.8%        | 93.6%        | 71.9%        | 57.1%        |\n| **franc**           |   76.9%    | 93.8%        | 92.3%        | 67.0%        | 53.8%        |\n--\u003e\n\u003cimg alt=\"accuracy table\" width=\"800\" src=\"https://raw.githubusercontent.com/nitotm/efficient-language-detector/main/misc/table_accuracy_v3.svg\"\u003e  \n\n* **Lingua** participates with 54 languages, **Franc** with 58, **patrickschur** with 54.  \n* **fasttext** does not have a built-in subset option, so to show its accuracy and speed potential I made two benchmarks, fasttext-all not being limited by any subset at any test  \n* \u003csup style=\"color:#08e\"\u003e*\u003c/sup\u003e Google's **CLD2** also lacks subset option, and it's difficult to make a subset even with its option `bestEffort = True`, as usually returns only one language, so it has a comparative disadvantage.\n* Time is normalized: (total lines * time) / processed lines\n\n\n## Databases\n\n### Low memory database modes \n\nModes `'bytes'` and `'string'` are very similar, they differ on how they are load, and are just 2x slower than **Array**  \nMode `'string'` can be OPcache'd, more expensive compilation, but then instant load, `'bytes'` has always a steady ~fast load  \nSpecial mention to `'disk'` mode, while slower, is the fastest uncached load \u0026 detect for the larger databases\n\n| Mode                     | Disk          | Bytes        | String      | Bytes        | String      |\n|--------------------------|---------------|--------------|-------------|--------------|-------------|\n| Database Size option     | Extralarge    | Extralarge   | Extralarge  | Large        | Large       |\n| File size                | 39 MB         | 39 MB        | 39 MB       | 20 MB        | 20 MB       |\n| Memory usage             | 0.4 MB        | 40 MB        | 40 MB       | 22 MB        | 22 MB       |\n| Memory usage Cached      | 0.4 MB        | 40 MB        | 0.4 MB + OP | 22 MB        | 0.4 MB + OP |\n| Memory peak              | 0.4 MB        | 40 MB        | 56 MB       | 22 MB        | 32 MB       |\n| Memory peak Cached       | 0.4 MB        | 40 MB        | 0.4 MB + OP | 22 MB        | 0.4 MB + OP |\n| OPcache used memory      | -             | -            | 39 MB       | -            | 20 MB       |\n| OPcache used interned    | -             | -            | 0.4 MB      | -            | 0.4 MB      |\n| Load \u0026 detect() Uncached | 0.0012 sec    | 0.04 sec     | 0.25 sec    | 0.02 sec     | 0.11 sec    |\n| Load \u0026 detect() Cached   | 0.0011 sec    | 0.04 sec     | 0.0003 sec  | 0.02 sec     | 0.0003 sec  |\n\n| Mode                     | Bytes         | String        | Bytes         | String        |\n|--------------------------|---------------|---------------|---------------|---------------|\n| Database Size option     | Medium        | Medium        | Small         | Small         |\n| File size                | 6 MB          | 6 MB          | 2 MB          | 2 MB          |\n| Memory usage             | 8 MB          | 8 MB          | 2 MB          | 2 MB          |\n| Memory usage Cached      | 8 MB          | 0.4 MB + OP   | 2 MB          | 0.4 MB + OP   |\n| Memory peak              | 8 MB          | 12 MB         | 2 MB          | 3 MB          |\n| Memory peak Cached       | 8 MB          | 0.4 MB + OP   | 2 MB          | 0.4 MB + OP   |\n| OPcache used memory      | -             | 0 MB          | -             | 0 MB          |\n| OPcache used interned    | -             | 6 MB          | -             | 2 MB          |\n| Load \u0026 detect() Uncached | 0.006 sec     | 0.04 sec      | 0.003 sec     | 0.016 sec     |\n| Load \u0026 detect() Cached   | 0.006 sec     | 0.0003 sec    | 0.002 sec     | 0.0003 sec    |\n\n### Fastest mode *Array*, but memory hungry\n\n| Array Mode, Size:          | Small           | Medium             | Large         | Extralarge     |\n|----------------------------|-----------------|--------------------|---------------|----------------|\n| Pros                       | Lowest memory   | Equilibrated       | Fastest       | Most accurate  |\n| Cons                       | Least accurate  | Slowest (but fast) | High memory   | Highest memory |\n| File size                  | 3 MB            | 9 MB               | 28 MB         | 64 MB          |\n| Memory usage               | 46 MB           | 137 MB             | 547 MB        | 1143 MB        |\n| Memory usage Cached        | 0.4 MB + OP     | 0.4 MB + OP        | 0.4 MB + OP   | 0.4 MB + OP    |\n| Memory peak                | 78 MB           | 287 MB             | 969 MB        | 2047 MB        |\n| Memory peak Cached         | 0.4 MB + OP     | 0.4 MB + OP        | 0.4 MB + OP   | 0.4 MB + OP    |\n| OPcache used memory        | 21 MB           | 70 MB              | 242 MB        | 516 MB         |\n| OPcache used interned      | 4 MB            | 10 MB              | 45 MB         | 91 MB          |\n| Load \u0026 detect() Uncached   | 0.13 sec        | 0.5 sec            | 1.4 sec       | 3.2 sec        |\n| Load \u0026 detect() Cached     | 0.0003 sec      | 0.0003 sec         | 0.0003 sec    | 0.0003 sec     |\n| **Settings** (Recommended) |                 |                    |               |                |\n| `memory_limit`             | \\\u003e= 128         | \\\u003e= 340            | \\\u003e= 1060      | \\\u003e= 2200       |\n| `opcache.interned...`\\*    | \\\u003e= 8      (16) | \\\u003e= 16        (32) | \\\u003e= 60   (70) | \\\u003e= 116  (128) |\n| `opcache.memory`           | \\\u003e= 64    (128) | \\\u003e= 128      (230) | \\\u003e= 360 (450) | \\\u003e= 750  (820) |\n\n* \\* I recommend using more than enough `interned_strings_buffer` as *buffers overflow* error might delay server response.  \nTo use *all* databases `opcache.interned_strings_buffer` should be a minimum of 160MB (170MB).  \n* When choosing the amount of memory keep in mind `opcache.memory_consumption` includes `opcache.interned_strings_buffer`.  \n  * If OPcache memory is 230MB, interned_strings is 32MB, and medium DB is 69MB cached, we have a total of (230 -32 -69) = 129MB of OPcache for everything else.  \n* Also, if you are going to use a subset of languages in addition to the main database, or multiple subsets, increase `opcache.memory` accordingly if you want them to be loaded instantly.\nTo cache all default databases comfortably you would want to set it at 1200MB.\n\n## Testing\nDefault composer install might not include these files. Use `--prefer-source` to include them.\n- For *dev* environment with composer *\"autoload-dev\"* (root only), the following will execute the tests\n```php\nnew Nitotm\\Eld\\Tests\\TestsAutoload();\n```\n- Or, you can also run the tests executing the following file:\n```bash\n$ php efficient-language-detector/tests/tests.php # Update path\n```\n- To run the accuracy benchmarks run the `benchmark/bench.php` file.\n\n## Languages\n\n* These are the *ISO 639-1 codes* that include the 60 languages. Plus `'und'` for undetermined  \nIt is the default ELD language scheme. `outputScheme: 'ISO639_1'`\n\n\u003e am, ar, az, be, bg, bn, ca, cs, da, de, el, en, es, et, eu, fa, fi, fr, gu, he, hi, hr, hu, hy, is, it, ja, ka, kn, ko, ku, lo, lt, lv, ml, mr, ms, nl, no, or, pa, pl, pt, ro, ru, sk, sl, sq, sr, sv, ta, te, th, tl, tr, uk, ur, vi, yo, zh\n\n* These are the 60 supported languages for *Nito-ELD*. `outputScheme: 'FULL_TEXT'`\n\n\u003e Amharic, Arabic, Azerbaijani (Latin), Belarusian, Bulgarian, Bengali, Catalan, Czech, Danish, German, Greek, English, Spanish, Estonian, Basque, Persian, Finnish, French, Gujarati, Hebrew, Hindi, Croatian, Hungarian, Armenian, Icelandic, Italian, Japanese, Georgian, Kannada, Korean, Kurdish (Arabic), Lao, Lithuanian, Latvian, Malayalam, Marathi, Malay (Latin), Dutch, Norwegian, Oriya, Punjabi, Polish, Portuguese, Romanian, Russian, Slovak, Slovene, Albanian, Serbian (Cyrillic), Swedish, Tamil, Telugu, Thai, Tagalog, Turkish, Ukrainian, Urdu, Vietnamese, Yoruba, Chinese\n\n* *ISO 639-1 codes* with IETF BCP 47 script name tag. `outputScheme: 'ISO639_1_BCP47'`\n\n\u003e am, ar, az-Latn, be, bg, bn, ca, cs, da, de, el, en, es, et, eu, fa, fi, fr, gu, he, hi, hr, hu, hy, is, it, ja, ka, kn, ko, ku-Arab, lo, lt, lv, ml, mr, ms-Latn, nl, no, or, pa, pl, pt, ro, ru, sk, sl, sq, sr-Cyrl, sv, ta, te, th, tl, tr, uk, ur, vi, yo, zh\n\n* *ISO 639-2/T* codes (which are also valid *639-3*) `outputScheme: 'ISO639_2T'`. Also available with BCP 47 `ISO639_2T_BCP47`\n\n\u003e amh, ara, aze, bel, bul, ben, cat, ces, dan, deu, ell, eng, spa, est, eus, fas, fin, fra, guj, heb, hin, hrv, hun, hye, isl, ita, jpn, kat, kan, kor, kur, lao, lit, lav, mal, mar, msa, nld, nor, ori, pan, pol, por, ron, rus, slk, slv, sqi, srp, swe, tam, tel, tha, tgl, tur, ukr, urd, vie, yor, zho\n  \n***\n\n#### Donations and suggestions\n\nIf you wish to donate for open source improvements, hire me for private modifications, request alternative dataset training, or contact me, please use the following link: https://linktr.ee/nitotm","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnitotm%2Fefficient-language-detector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnitotm%2Fefficient-language-detector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnitotm%2Fefficient-language-detector/lists"}