{"id":19119610,"url":"https://github.com/hexenq/kuroshiro","last_synced_at":"2026-04-09T05:32:18.474Z","repository":{"id":37432591,"uuid":"48940278","full_name":"hexenq/kuroshiro","owner":"hexenq","description":"Japanese language library for converting Japanese sentence to Hiragana, Katakana or Romaji with furigana and okurigana modes supported.","archived":false,"fork":false,"pushed_at":"2022-06-07T19:20:29.000Z","size":30343,"stargazers_count":947,"open_issues_count":47,"forks_count":96,"subscribers_count":17,"default_branch":"master","last_synced_at":"2026-01-30T19:46:02.836Z","etag":null,"topics":["furigana","hepburn","hiragana","japanese","kana","kanji","katakana","kuromoji","mecab","okurigana","romaji"],"latest_commit_sha":null,"homepage":"https://kuroshiro.org","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hexenq.png","metadata":{"files":{"readme":"README.eo-eo.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-01-03T09:16:40.000Z","updated_at":"2026-01-27T21:46:49.000Z","dependencies_parsed_at":"2022-07-15T21:30:31.530Z","dependency_job_id":null,"html_url":"https://github.com/hexenq/kuroshiro","commit_stats":null,"previous_names":["hexenq/kuroshiro.js"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/hexenq/kuroshiro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hexenq%2Fkuroshiro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hexenq%2Fkuroshiro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hexenq%2Fkuroshiro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hexenq%2Fkuroshiro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hexenq","download_url":"https://codeload.github.com/hexenq/kuroshiro/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hexenq%2Fkuroshiro/sbom","scorecard":{"id":462838,"data":{"date":"2025-08-11","repo":{"name":"github.com/hexenq/kuroshiro","commit":"39531b192253061033f40e62f1a3e0da94edd84f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":3,"reason":"Found 4/13 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T11:36:55.208Z","repository_id":37432591,"created_at":"2025-08-19T11:36:55.208Z","updated_at":"2025-08-19T11:36:55.208Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31587809,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"online","status_checked_at":"2026-04-09T02:00:06.848Z","response_time":112,"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":["furigana","hepburn","hiragana","japanese","kana","kanji","katakana","kuromoji","mecab","okurigana","romaji"],"created_at":"2024-11-09T05:10:07.726Z","updated_at":"2026-04-09T05:32:18.448Z","avatar_url":"https://github.com/hexenq.png","language":"JavaScript","funding_links":[],"categories":["Tools"],"sub_categories":[],"readme":"![kuroshiro](https://kuroshiro.org/kuroshiro.png)\n\n# Kuroshiro\n\n[![Build Status](https://travis-ci.org/hexenq/kuroshiro.svg?branch=master)](https://travis-ci.org/hexenq/kuroshiro)\n[![Coverage Status](https://coveralls.io/repos/hexenq/kuroshiro/badge.svg)](https://coveralls.io/r/hexenq/kuroshiro)\n[![npm version](https://badge.fury.io/js/kuroshiro.svg)](http://badge.fury.io/js/kuroshiro)\n[![Join the chat at https://gitter.im/hexenq/kuroshiro](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/hexenq/kuroshiro)\n[![License](https://img.shields.io/github/license/lassjs/lass.svg)](LICENSE)\n\nla Kuroshiro estas Japanalingvo kodlibrejo por konverti Japanajn frazojn al Hiraganao, Katakanao aŭ Romaĝio, kaj ankaŭ subtenas furiganaon kaj okuriganaon.\n\n*Legi ĉi tion per aliaj lingvoj: [English](README.md), [日本語](README.jp.md), [简体中文](README.zh-cn.md), [繁體中文](README.zh-tw.md), [Esperanto](README.eo-eo.md).*\n\n## Ekzempla Paĝo\nVidi la ekzemplan paĝon [ĉi tie](https://kuroshiro.org/#demo).\n\n## Elementoj\n- Japanalingva Frazo =\u003e Hiraganao, Katakanao aŭ Romaĝio\n- Furiganao kaj okuriganao modoj\n- 🆕Multaj lingvastrukturaj metodoj\n- 🆕Multaj romanaskriptkonvertaj sistemoj\n- Utilaj Japanalingvaj iloj\n\n## Gravaj Ŝanĝoj je 1.x\n- Aparta lingvasttrukturametoda ilo kaj fonetika notacia logiko por eblegi la uzaton de multaj lingvastrukturaj metodoj. ([finitaj iloj](#ready-made-analyzer-plugins) or [personigitaj iloj](CONTRIBUTING.md#how-to-submit-new-analyzer-plugins))\n- ES8/ES2017 por uzi \"async/await\" funkciojn\n- Uzu la modulon ES6 anstataŭ CommonJS\n    \n## Finitaj Analizilaj (Lingvastrukturaj) Iloj\n*Antaŭ uzi ilon, bonvolu certiĝi pri mediakongrueco*\n| Analizilo | Node.js Uzadeblo | Retumilo Uzadeblo | Plugin Repo | Programisto |\n|---|---|---|---|---|\n|Kuromoji|✓|✓|[kuroshiro-analyzer-kuromoji](https://github.com/hexenq/kuroshiro-analyzer-kuromoji)|[Hexen Qi](https://github.com/hexenq)|\n|Mecab|✓|✗|[kuroshiro-analyzer-mecab](https://github.com/hexenq/kuroshiro-analyzer-mecab)|[Hexen Qi](https://github.com/hexenq)|\n|Yahoo Web API|✓|✗|[kuroshiro-analyzer-yahoo-webapi](https://github.com/hexenq/kuroshiro-analyzer-yahoo-webapi)|[Hexen Qi](https://github.com/hexenq)|\n\n## Uzado\n### Node.js (aŭ per \"module bundler\"-ilo (kiel Webpack))\nInstali per npm pako-administrilo:\n```sh\n$ npm install kuroshiro\n```\n    \nŜargi la kodotekon:\n\n*Subtenas ambaŭ \"ES6 Module\" `import` kaj \"CommonJS\" `require`*\n```js\nimport Kuroshiro from \"kuroshiro\";\n```\n\nGeneri:\n```js\nconst kuroshiro = new Kuroshiro();\n```\n\nIniciati kuroshiro kun genero de analizilo (Rigardu la dokumenton [apidoc](#initanalyzer) por vidi pli da informo):\n```js\n// Por ĉi tiu ekzemplo, vi devus fari npm install kaj importi la \"kuromoji\" analizilon unue.\nimport KuromojiAnalyzer from \"kuroshiro-analyzer-kuromoji\";\n\n// ...\n\n// Ŝargi\n// Ĉi tio uzas async/await, sed vi ankaŭ povus uzi Promise\nawait kuroshiro.init(new KuromojiAnalyzer());\n```\n\nKonverti frazon:\n```js\nconst result = await kuroshiro.convert(\"感じ取れたら手を繋ごう、重なるのは人生のライン and レミリア最高！\", { to: \"hiragana\" });\n```\n    \n### Retumilo\nAldoni `dist/kuroshiro.min.js` al via \"frontend-a projekto\" (vi povas antaŭe kompili la originalan kodon per `npm run build` post `npm install`), kaj en via HTML:\n```html\n\u003cscript src=\"url/to/kuroshiro.min.js\"\u003e\u003c/script\u003e\n```\n\nPor fari kiel en ĉi ekzemplo, vi devas ankaŭ inkluzivi `kuroshiro-analyzer-kuromoji.min.js` kiu vi povas preni ĉe [kuroshiro-analyzer-kuromoji](https://github.com/hexenq/kuroshiro-analyzer-kuromoji)\n```html\n\u003cscript src=\"url/to/kuroshiro-analyzer-kuromoji.min.js\"\u003e\u003c/script\u003e\n```\n\nŜargi:\n```js\nvar kuroshiro = new Kuroshiro();\n```\n\nIniciati kuroshiro per ŝargo de analizilo, poste konverti:\n```js\nkuroshiro.init(new KuromojiAnalyzer({ dictPath: \"url/to/dictFiles\" }))\n    .then(function () {\n        return kuroshiro.convert(\"感じ取れたら手を繋ごう、重なるのは人生のライン and レミリア最高！\", { to: \"hiragana\" });\n    })\n    .then(function(result){\n        console.log(result);\n    })\n```\n\n## API\n### Konstruilo\n__Ekzemploj__\n\n```js\nconst kuroshiro = new Kuroshiro();\n```\n\n### Instancometodoj\n#### init(analyzer)\nIniciati kuroshiro per instanco de analizilo. Vi devus unue importi analizilon kaj iniciati ĝin. Vi povas uzi la [finitaj-iloj](#ready-made-analyzer-plugins) skribita supre. Bonvole rigardu la analizilan dokumentaron por vidi instrukciojn.\n\n__Argumentoj__\n\n* `analyzer` - Instanco de Analizilo.\n\n__Ekzemploj__\n\n```js\nawait kuroshiro.init(new KuromojiAnalyzer());\n```\n\n#### convert(str, [options])\nKonverti frazon al cela skribsistemo (kun agordoj)\n\n__Argumentoj__\n\n* `str` - Konvertvola Frazo.\n* `options` - *Optional* kuroshiro havas multajn frazajn konvertagordojn.\n\n| Agordoj | Tipo | Defaŭlto | Informo |\n|---|---|---|---|\n| to | String | \"hiragana\" | Target syllabary [`hiragana`, `katakana`, `romaji`] |\n| mode | String | \"normal\" | Convert mode [`normal`, `spaced`, `okurigana`, `furigana`] |\n| romajiSystem\u003csup\u003e*\u003c/sup\u003e | String | \"hepburn\" | Romanization system [`nippon`, `passport`, `hepburn`] |\n| delimiter_start | String | \"(\" | Delimiter(Start) |\n| delimiter_end | String | \")\" | Delimiter(End) |\n\n**: Param `romajiSystem` estas uzata sole kiam parametro `to` estas `romaji`. Por vidi plie, rigardu [Romanaskriptkonvertaj Sistemoj](#romanization-system)*\n\n__Ekzemploj__\n\n```js\n// normal\nawait kuroshiro.convert(\"感じ取れたら手を繋ごう、重なるのは人生のライン and レミリア最高！\", {mode:\"okurigana\", to:\"hiragana\"});\n// rezulto：かんじとれたらてをつなごう、かさなるのはじんせいのライン and レミリアさいこう！\n```\n\n```js\n// spaced\nawait kuroshiro.convert(\"感じ取れたら手を繋ごう、重なるのは人生のライン and レミリア最高！\", {mode:\"okurigana\", to:\"hiragana\"});\n// rezulto：かんじとれ たら て を つなご う 、 かさなる の は じんせい の ライン   and   レミ リア さいこう ！\n```\n\n```js\n// okurigana\nawait kuroshiro.convert(\"感じ取れたら手を繋ごう、重なるのは人生のライン and レミリア最高！\", {mode:\"okurigana\", to:\"hiragana\"});\n// rezulto: 感(かん)じ取(と)れたら手(て)を繋(つな)ごう、重(かさ)なるのは人生(じんせい)のライン and レミリア最高(さいこう)！\n```\n\n\u003cpre\u003e\n// furigana\nawait kuroshiro.convert(\"感じ取れたら手を繋ごう、重なるのは人生のライン and レミリア最高！\", {mode:\"furigana\", to:\"hiragana\"});\n// rezulto: \u003cruby\u003e感\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eかん\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003eじ\u003cruby\u003e取\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eと\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003eれたら\u003cruby\u003e手\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eて\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003eを\u003cruby\u003e繋\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eつな\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003eごう、\u003cruby\u003e重\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eかさ\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003eなるのは\u003cruby\u003e人生\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eじんせい\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003eのライン and レミリア\u003cruby\u003e最高\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eさいこう\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003e！\n\u003c/pre\u003e\n\n### Utilaĵoj\n\n__Ekzemploj__\n```js\nconst result = Kuroshiro.Util.isHiragana(\"あ\"));\n```\n#### isHiragana(char)\nDetermini se enigita litero estas hiragana.\n\n#### isKatakana(char)\nDetermini se enigita litero estas katakana.\n\n#### isKana(char)\nDetermini se enigita litero estas kana.\n\n#### isKanji(char)\nDetermini se enigita litero estas kanĵio.\n\n#### isJapanese(char)\nDetermini se enigita litero estas Japanolingva.\n\n#### hasHiragana(str)\nDetermini se enigita frazo enhavas hiraganan.\n\n#### hasKatakana(str)\nDetermini se enigita frazo enhavas katakanan.\n\n#### hasKana(str)\nDetermini se enigita frazo enhavas kanan.\n\n#### hasKanji(str)\nDetermini se enigita frazo enhavas kanĵion.\n\n#### hasJapanese(str)\nDetermini se enigita frazo enhavas Japanolingvajn Frazojn.\n\n#### kanaToHiragna(str)\nKonverti enigitan kanan frazon al hiragana\n\n#### kanaToKatakana(str)\nKonverti enigitan kanan frazon al katakana.\n\n#### kanaToRomaji(str, system)\nKonverti enigitan kanan frazon al romaĝio. Param `system` povas enhavi `\"nippon\"`, `\"passport\"`, `\"hepburn\"` (Defaŭlta: \"hepburn\").\n\n## Romanaskriptkonvertaj Sistemoj\nkuroshiro povas uzi tri da Romanaskriptkonvertajn Sistemojn.\n\n`nippon`: Nippon-shiki sistemo. Rigardu [ISO 3602 Strict](http://www.age.ne.jp/x/nrs/iso3602/iso3602.html).\n\n`passport`: Passport-shiki sistemo. Rigardu [Japanese romanization table](https://www.ezairyu.mofa.go.jp/passport/hebon.html) de la \"Japana Ministerio de Eksteraj Aferoj\".\n\n`hepburn`: Hepburn sistemo. Rigardu [BS 4812 : 1972](https://archive.is/PiJ4).\n\nPor vidi la malsamecoj de la tri sistemoj, rigardu [webpage](http://jgrammar.life.coocan.jp/ja/data/rohmaji2.htm).\n\n### Informo pri Romaĝia Konvertado\nNe eblas tute konverti __furigana__ precize al __romaĝio__ ĉar furigana ne enhavas kompletan prononcan informon, (Rigardu [なぜ フリガナでは ダメなのか？](https://green.adam.ne.jp/roomazi/onamae.html#naze)) do kuroshiro ne konvertas chōon dum konvertado el furigana (kana) -\u003e romaĝio je ĉiom da sistemoj (Sed, Chōonpu ĉiam konvertas) \n\n*Ekzemple, vi vidos \"kousi\", \"koushi\", \"koushi\" dum kana konvertado de \"こうし\" al romaĝio \nkiam vi uzas `nippon`, `passport`, `hepburn` sistemojn respektive*\n\nKanĝip -\u003e romaĝio konvertado __ne estas afektita__.\n\n## Kontribui\nRigardu [CONTRIBUTING](CONTRIBUTING.md).\n\n## Inspiroj\n- kuromoji\n- wanakana\n\n## Licenco\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhexenq%2Fkuroshiro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhexenq%2Fkuroshiro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhexenq%2Fkuroshiro/lists"}