Add Norwegian Nynorsk (nn) language#236
Merged
Merged
Conversation
Owner
|
Thank you. I'll look at this in the next few weeks.
|
prisis
pushed a commit
to visulima/visulima
that referenced
this pull request
Jun 19, 2026
Ports EvanHahn/HumanizeDuration.js#236 by adding a Norwegian Nynorsk (`nn`) duration language alongside the existing Norwegian Bokmål (`no`). - Add `src/language/nn.ts` with Nynorsk unit forms (månad/månader, veke/veker, dag/dagar, time/timar) and neuter plurals left unchanged per the official norm (minutt, sekund, millisekund). - Add `__fixtures__/duration/nn.tsv` test fixture (34 cases). - Register `nn` in the localized duration test and bump the assertion count accordingly. - Relabel "Norwegian" as "Norwegian Bokmål" and add "Norwegian Nynorsk" to the README language table. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AJpAwteq55WffChweDCept
prisis
pushed a commit
to visulima/visulima
that referenced
this pull request
Jun 19, 2026
Ports EvanHahn/HumanizeDuration.js#236 by adding a Norwegian Nynorsk (`nn`) duration language alongside the existing Norwegian Bokmål (`no`). - Add `src/language/nn.ts` with Nynorsk unit forms (månad/månader, veke/veker, dag/dagar, time/timar) and neuter plurals left unchanged per the official norm (minutt, sekund, millisekund). - Add `__fixtures__/duration/nn.tsv` test fixture (34 cases). - Register `nn` in the localized duration test and bump the assertion count accordingly. - Relabel "Norwegian" as "Norwegian Bokmål" and add "Norwegian Nynorsk" to the README language table. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AJpAwteq55WffChweDCept
prisis
added a commit
to visulima/visulima
that referenced
this pull request
Jun 19, 2026
Ports EvanHahn/HumanizeDuration.js#236 by adding a Norwegian Nynorsk (`nn`) duration language alongside the existing Norwegian Bokmål (`no`). - Add `src/language/nn.ts` with Nynorsk unit forms (månad/månader, veke/veker, dag/dagar, time/timar) and neuter plurals left unchanged per the official norm (minutt, sekund, millisekund). - Add `__fixtures__/duration/nn.tsv` test fixture (34 cases). - Register `nn` in the localized duration test and bump the assertion count accordingly. - Relabel "Norwegian" as "Norwegian Bokmål" and add "Norwegian Nynorsk" to the README language table. Claude-Session: https://claude.ai/code/session_01AJpAwteq55WffChweDCept Co-authored-by: Claude <noreply@anthropic.com>
prisis
pushed a commit
to visulima/visulima
that referenced
this pull request
Jun 19, 2026
…isulima/humanizer [3.0.0-alpha.15](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.14...@visulima/humanizer@3.0.0-alpha.15) (2026-06-19) ### Features * **humanizer:** add Norwegian Nynorsk (nn) duration language ([#684](#684)) ([4d0c07d](4d0c07d)), closes [EvanHahn/HumanizeDuration.js#236](EvanHahn/HumanizeDuration.js#236)
There was a problem hiding this comment.
Pull request overview
Adds Norwegian Nynorsk (nn) as a first-class locale alongside existing Norwegian Bokmål (no), including test fixtures and documentation updates so the new locale is exercised by the existing language test harness and discoverable via getSupportedLanguages().
Changes:
- Added a new
nnlanguage definition to the built-inLANGUAGESmap. - Introduced
test/definitions/nn.tsvfixtures sonnis covered by the existing localization tests. - Updated
README.mdto distinguish Bokmål vs Nynorsk and added contributor credit.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| humanize-duration.js | Adds nn locale via onesLanguage(...) so getSupportedLanguages() includes it. |
| test/definitions/nn.tsv | Adds nn TSV fixtures to validate locale output across units/decimals. |
| README.md | Documents nn and clarifies no as Bokmål; adds credit line. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Owner
|
Thanks! This has been published in |
prisis
pushed a commit
to visulima/visulima
that referenced
this pull request
Jul 3, 2026
…umanizer [3.0.0](https://github.com/visulima/visulima/compare/@visulima/humanizer@2.0.5...@visulima/humanizer@3.0.0) (2026-07-03) ### ⚠ BREAKING CHANGES * change min node version to 22.13 ### Features * **humanizer:** add Norwegian Nynorsk (nn) duration language ([#684](#684)) ([4d0c07d](4d0c07d)), closes [EvanHahn/HumanizeDuration.js#236](EvanHahn/HumanizeDuration.js#236) * **humanizer:** fix parse/format bugs and add humanizer factory, bits, iso8601 ([15a4a19](15a4a19)) * **web:** auto-generate packages page from workspace metadata ([623e520](623e520)) ### Bug Fixes * add new package image, fixed readme rendering on npm, fixed building of packages ([b790ba2](b790ba2)) * **data-manipulation:** resolve eslint and type-safety issues ([f1682c2](f1682c2)) * **humanizer:** 3 bug fixes + 1 perf ([97686e3](97686e3)) * **humanizer:** keep runtime dynamic language import out of the build glob ([48693e3](48693e3)) * **humanizer:** properly fix eslint errors in code ([cb00491](cb00491)) * **humanizer:** remove remaining eslint suppressions with proper code fixes ([ec9c058](ec9c058)) * **humanizer:** resolve eslint and formatting issues ([18e63f7](18e63f7)) * **humanizer:** resolve eslint errors ([4dea64f](4dea64f)) * **humanizer:** update package files ([f370cff](f370cff)) * **humanizer:** update packem to 2.0.0-alpha.54 ([f38a2ba](f38a2ba)) * Remove JSR configuration generation script and generated jsr.json files ([#616](#616)) ([533744b](533744b)) * resolve failing tests across multiple packages ([2b4b6f0](2b4b6f0)) * **storage-client:** percent-encode user fields in defaultFingerprint ([7c78a0f](7c78a0f)) * update Node.js engine version requirement to >=22.13 in multiple package.json files for improved compatibility ([b828e9a](b828e9a)) * update package OG images across multiple packages ([f08e4dd](f08e4dd)) * update Romanian duration translations and improve unit handling ([f553b09](f553b09)) * **web:** improve build setup with incremental stats caching and prod install ([fe33e75](fe33e75)) ### Documentation * **humanizer,html,iso-locale,package,tsconfig:** add comprehensive Fumadocs documentation ([19781ce](19781ce)) * **humanizer:** add HumanizeDuration.js credits ([#688](#688)) ([a4d57c8](a4d57c8)) ### Miscellaneous Chores * add fallow code-intelligence across all packages ([a3b4821](a3b4821)) * bump engines.node to ^22.14.0 || >=24.10.0 ([c3d0931](c3d0931)) * **ci-stability:** green CI across vis, native, lint, tests, attw ([#651](#651)) ([d4eb684](d4eb684)) * **data-manipulation:** remove empty dependency objects from package.json ([c0e8f76](c0e8f76)) * **data-manipulation:** update dependencies ([49458ab](49458ab)) * fixed jsr.json ([5d85e51](5d85e51)) * fixed project.json names and schema path ([964722f](964722f)) * **humanizer:** add tsconfig.eslint.json for type-aware linting ([3c39145](3c39145)) * **humanizer:** apply prettier formatting ([f66629e](f66629e)) * **humanizer:** enforce curly braces and apply lint fixes ([35b82d7](35b82d7)) * **humanizer:** exclude __bench__ dir from eslint config ([435f953](435f953)) * **humanizer:** housekeeping cleanup ([0aa67b7](0aa67b7)) * **humanizer:** migrate .prettierrc.cjs to prettier.config.js ([85c09a7](85c09a7)) * **humanizer:** migrate deps to pnpm catalogs ([f731305](f731305)) * **humanizer:** update dependencies ([48f5e2c](48f5e2c)) * **humanizer:** update dependencies ([70c666e](70c666e)) * **humanizer:** update dependencies ([d536412](d536412)) * **humanizer:** upgrade packem to 2.0.0-alpha.76 ([d0399e3](d0399e3)) * moved all packages into groups ([0615e9d](0615e9d)) * re-sort workspace package.json files via vis sort-package-json ([f625696](f625696)) * **release:** @visulima/humanizer@3.0.0-alpha.1 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.1](https://github.com/visulima/visulima/compare/@visulima/humanizer@2.0.5...@visulima/humanizer@3.0.0-alpha.1) (2025-12-04) ([60ba833](60ba833)) * **release:** @visulima/humanizer@3.0.0-alpha.10 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.10](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.9...@visulima/humanizer@3.0.0-alpha.10) (2026-04-15) ([6e90778](6e90778)) * **release:** @visulima/humanizer@3.0.0-alpha.11 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.11](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.10...@visulima/humanizer@3.0.0-alpha.11) (2026-04-22) ([55e381a](55e381a)) * **release:** @visulima/humanizer@3.0.0-alpha.12 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.12](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.11...@visulima/humanizer@3.0.0-alpha.12) (2026-05-27) ([5b58e7d](5b58e7d)) * **release:** @visulima/humanizer@3.0.0-alpha.13 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.13](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.12...@visulima/humanizer@3.0.0-alpha.13) (2026-06-04) ([197bbee](197bbee)) * **release:** @visulima/humanizer@3.0.0-alpha.14 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.14](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.13...@visulima/humanizer@3.0.0-alpha.14) (2026-06-13) ([bab30a9](bab30a9)) * **release:** @visulima/humanizer@3.0.0-alpha.15 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.15](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.14...@visulima/humanizer@3.0.0-alpha.15) (2026-06-19) ([6c56082](6c56082)) * **release:** @visulima/humanizer@3.0.0-alpha.2 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.2](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.1...@visulima/humanizer@3.0.0-alpha.2) (2025-12-06) ([eff2416](eff2416)) * **release:** @visulima/humanizer@3.0.0-alpha.3 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.3](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.2...@visulima/humanizer@3.0.0-alpha.3) (2025-12-10) ([83174fd](83174fd)) * **release:** @visulima/humanizer@3.0.0-alpha.4 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.4](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.3...@visulima/humanizer@3.0.0-alpha.4) (2025-12-11) ([f307744](f307744)) * **release:** @visulima/humanizer@3.0.0-alpha.5 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.5](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.4...@visulima/humanizer@3.0.0-alpha.5) (2025-12-27) ([40a9c7d](40a9c7d)) * **release:** @visulima/humanizer@3.0.0-alpha.6 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.6](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.5...@visulima/humanizer@3.0.0-alpha.6) (2026-03-06) ([74def4f](74def4f)) * **release:** @visulima/humanizer@3.0.0-alpha.7 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.7](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.6...@visulima/humanizer@3.0.0-alpha.7) (2026-03-26) ([abb72a0](abb72a0)) * **release:** @visulima/humanizer@3.0.0-alpha.8 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.8](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.7...@visulima/humanizer@3.0.0-alpha.8) (2026-03-26) ([6f2e9f8](6f2e9f8)) * **release:** @visulima/humanizer@3.0.0-alpha.9 [skip ci]\n\n## @visulima/humanizer [3.0.0-alpha.9](https://github.com/visulima/visulima/compare/@visulima/humanizer@3.0.0-alpha.8...@visulima/humanizer@3.0.0-alpha.9) (2026-04-08) ([ee162e4](ee162e4)) * **repo:** sort package.json keys across all packages ([e1fd9ab](e1fd9ab)) * simplify pnpm-workspace packages list ([7cab221](7cab221)) * sorted package.json ([b47c545](b47c545)) * update @anolilab/semantic-release-pnpm and @anolilab/semantic-release-preset to versions 3.2.2 and 12.1.2 across multiple package.json files for improved compatibility ([3921626](3921626)) * update dependencies across multiple packages to improve compatibility and performance, including upgrading `@anolilab/semantic-release-pnpm` and `@anolilab/semantic-release-preset` to versions 3.2.0 and 12.1.0 respectively, and updating `react`, `react-dom`, and `next` versions to 19.2.1 and 16.0.7 in various package.json files ([aee8fcd](aee8fcd)) * update lock file maintenance ([d83e716](d83e716)) * visulima website ([#591](#591)) ([59ab2e2](59ab2e2)) * year update ([47f4105](47f4105)) ### Tests * **humanizer:** cover bytes/duration edge paths, slavic plural forms, and create-duration-language options ([f557598](f557598)) * **humanizer:** tighten bytes and duration assertions ([0d74921](0d74921)) * improve coverage across packages ([91bd6d3](91bd6d3)) * **repo:** add dist runtime + types integration tests ([32ee300](32ee300)) ### Continuous Integration * **fallow:** make fallow:health advisory (--report-only) ([d57148e](d57148e))
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds Norwegian Nynorsk (
nn) as a supported language. The library already shipsno(Bokmål); Norway has two official written standards, and Nynorsk differs in several time units (e.g. månad/månader, veke/veker, dagar, timar), so this is a genuine addition rather than a duplicate ofno.Changes
humanize-duration.js: newnndefinition (inserted alphabetically beforeno).test/definitions/nn.tsv: full test fixtures fornn(mirrorsno.tsv).README.md: added aNorwegian Nynorsk/nnrow to the languages table (and relabelled the existingnorow asNorwegian Bokmålfor clarity) plus a credit line.Verification
Ran the actual humanizer against all 34
nn.tsvcases locally — all pass.getSupportedLanguages()now includesnnand still matches the set of.tsvfixtures (so the get-supported-languages test stays green).Disclosure
Prepared with AI assistance (Claude) and reviewed by a native Norwegian speaker (whose strongest dialect is Bokmål). The Nynorsk neuter plurals (minutt, sekund, millisekund unchanged) follow the official norm — happy to adjust if you'd prefer the -er variants.