Skip to content

Add Norwegian Nynorsk (nn) language#236

Merged
EvanHahn merged 2 commits into
EvanHahn:mainfrom
arvindfroi:main
Jun 30, 2026
Merged

Add Norwegian Nynorsk (nn) language#236
EvanHahn merged 2 commits into
EvanHahn:mainfrom
arvindfroi:main

Conversation

@arvindfroi

Copy link
Copy Markdown
Contributor

Summary

Adds Norwegian Nynorsk (nn) as a supported language. The library already ships no (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 of no.

Changes

  • humanize-duration.js: new nn definition (inserted alphabetically before no).
    • test/definitions/nn.tsv: full test fixtures for nn (mirrors no.tsv).
    • README.md: added a Norwegian Nynorsk / nn row to the languages table (and relabelled the existing no row as Norwegian Bokmål for clarity) plus a credit line.

Verification

Ran the actual humanizer against all 34 nn.tsv cases locally — all pass. getSupportedLanguages() now includes nn and still matches the set of .tsv fixtures (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.

@EvanHahn

EvanHahn commented Jun 18, 2026 via email

Copy link
Copy Markdown
Owner

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
@EvanHahn EvanHahn requested a review from Copilot June 28, 2026 13:39

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 nn language definition to the built-in LANGUAGES map.
  • Introduced test/definitions/nn.tsv fixtures so nn is covered by the existing localization tests.
  • Updated README.md to 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.

@EvanHahn EvanHahn merged commit fd49da2 into EvanHahn:main Jun 30, 2026
1 check passed
@EvanHahn

Copy link
Copy Markdown
Owner

Thanks! This has been published in humanize-duration@3.34.0.

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))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants