[
  {
    "path": ".editorconfig",
    "content": "root = true\n# EditorConfig: http://EditorConfig.org\n\n# top-most EditorConfig file\n\n[*]\nindent_style = space\n\n\n[*.cs]\nindent_size = 4\ncharset = utf-8\ntab_width = 4\nend_of_line = crlf\ndotnet_style_operator_placement_when_wrapping = beginning_of_line\ndotnet_style_coalesce_expression = true:suggestion\ndotnet_style_null_propagation = true:suggestion\ndotnet_style_prefer_auto_properties = true:silent\ndotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion\ndotnet_style_collection_initializer = true:suggestion\ndotnet_style_object_initializer = true:suggestion\ndotnet_style_prefer_simplified_boolean_expressions = true:suggestion\ndotnet_style_prefer_conditional_expression_over_assignment = true:silent\ndotnet_style_prefer_conditional_expression_over_return = true:silent\ndotnet_style_explicit_tuple_names = true:suggestion\ndotnet_style_prefer_inferred_tuple_names = true:suggestion\ndotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion\ndotnet_style_prefer_compound_assignment = true:suggestion\ndotnet_style_prefer_simplified_interpolation = true:suggestion\ndotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion\ndotnet_style_namespace_match_folder = true:suggestion\ndotnet_style_readonly_field = true:suggestion\ndotnet_style_predefined_type_for_locals_parameters_members = true:error\ndotnet_style_predefined_type_for_member_access = true:error\ndotnet_style_require_accessibility_modifiers = never:error\ndotnet_style_allow_multiple_blank_lines_experimental = true:silent\ndotnet_style_allow_statement_immediately_after_block_experimental = true:silent\ndotnet_code_quality_unused_parameters = all:suggestion\ndotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:none\ndotnet_style_parentheses_in_other_binary_operators = always_for_clarity:none\ndotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:none\ndotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent\ndotnet_style_qualification_for_field = false:error\ndotnet_style_qualification_for_property = false:error\ndotnet_style_qualification_for_method = false:error\ndotnet_style_qualification_for_event = false:error\ndotnet_diagnostic.CA1305.severity = none\ndotnet_diagnostic.CA1304.severity = none\n\n# Microsoft .NET properties\ntrim_trailing_whitespace = true\ncsharp_preferred_modifier_order = public, private, protected, internal, new, static, abstract, virtual, sealed, readonly, override, extern, unsafe, volatile, async:suggestion\nresharper_namespace_body = file_scoped\ndotnet_naming_rule.private_constants_rule.severity = warning\ndotnet_naming_rule.private_constants_rule.style = upper_camel_case_style\ndotnet_naming_rule.private_constants_rule.symbols = private_constants_symbols\ndotnet_naming_rule.private_instance_fields_rule.severity = warning\ndotnet_naming_rule.private_instance_fields_rule.style = lower_camel_case_style\ndotnet_naming_rule.private_instance_fields_rule.symbols = private_instance_fields_symbols\ndotnet_naming_rule.private_static_fields_rule.severity = warning\ndotnet_naming_rule.private_static_fields_rule.style = lower_camel_case_style\ndotnet_naming_rule.private_static_fields_rule.symbols = private_static_fields_symbols\ndotnet_naming_rule.private_static_readonly_rule.severity = warning\ndotnet_naming_rule.private_static_readonly_rule.style = upper_camel_case_style\ndotnet_naming_rule.private_static_readonly_rule.symbols = private_static_readonly_symbols\ndotnet_naming_style.lower_camel_case_style.capitalization = camel_case\ndotnet_naming_style.upper_camel_case_style.capitalization = pascal_case\ndotnet_naming_symbols.private_constants_symbols.applicable_accessibilities = private\ndotnet_naming_symbols.private_constants_symbols.applicable_kinds = field\ndotnet_naming_symbols.private_constants_symbols.required_modifiers = const\ndotnet_naming_symbols.private_instance_fields_symbols.applicable_accessibilities = private\ndotnet_naming_symbols.private_instance_fields_symbols.applicable_kinds = field\ndotnet_naming_symbols.private_static_fields_symbols.applicable_accessibilities = private\ndotnet_naming_symbols.private_static_fields_symbols.applicable_kinds = field\ndotnet_naming_symbols.private_static_fields_symbols.required_modifiers = static\ndotnet_naming_symbols.private_static_readonly_symbols.applicable_accessibilities = private\ndotnet_naming_symbols.private_static_readonly_symbols.applicable_kinds = field\ndotnet_naming_symbols.private_static_readonly_symbols.required_modifiers = static, readonly\ndotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:none\ndotnet_style_parentheses_in_other_binary_operators = always_for_clarity:none\ndotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:none\n\n\n# Sort using and Import directives with System.* appearing first\ndotnet_sort_system_directives_first = true\n\n# Avoid \"this.\" and \"Me.\" if not necessary\ndotnet_style_qualification_for_field = false:error\ndotnet_style_qualification_for_property = false:error\ndotnet_style_qualification_for_method = false:error\ndotnet_style_qualification_for_event = false:error\n\n# Use language keywords instead of framework type names for type references\ndotnet_style_predefined_type_for_locals_parameters_members = true:error\ndotnet_style_predefined_type_for_member_access = true:error\n\n# Suggest more modern language features when available\ndotnet_style_object_initializer = true:suggestion\ndotnet_style_collection_initializer = true:suggestion\ndotnet_style_coalesce_expression = false:suggestion\ndotnet_style_null_propagation = true:suggestion\ndotnet_style_explicit_tuple_names = true:suggestion\n\n# Prefer \"var\" everywhere\ncsharp_style_var_for_built_in_types = true:error\ncsharp_style_var_when_type_is_apparent = true:error\ncsharp_style_var_elsewhere = true:error\n\n# Prefer method-like constructs to have a block body\ncsharp_style_expression_bodied_methods = true:error\ncsharp_style_expression_bodied_local_functions = true:error\ncsharp_style_expression_bodied_constructors = true:error\ncsharp_style_expression_bodied_operators = true:error\nresharper_place_expr_method_on_single_line = false\n\n# Prefer property-like constructs to have an expression-body\ncsharp_style_expression_bodied_properties = true:error\ncsharp_style_expression_bodied_indexers = true:error\ncsharp_style_expression_bodied_accessors = true:error\n\n# Suggest more modern language features when available\ncsharp_style_pattern_matching_over_is_with_cast_check = true:error\ncsharp_style_pattern_matching_over_as_with_null_check = true:error\ncsharp_style_inlined_variable_declaration = true:suggestion\ncsharp_style_throw_expression = true:suggestion\ncsharp_style_conditional_delegate_call = true:suggestion\n\n# Newline settings\n#csharp_new_line_before_open_brace = all:error\ncsharp_new_line_before_else = true\ncsharp_new_line_before_catch = true\ncsharp_new_line_before_finally = true\ncsharp_new_line_before_members_in_object_initializers = true\ncsharp_new_line_before_members_in_anonymous_types = true\ndotnet_style_require_accessibility_modifiers = never:error\ninsert_final_newline = false\ncsharp_using_directive_placement = outside_namespace:silent\ncsharp_prefer_simple_using_statement = true:suggestion\ncsharp_prefer_braces = true:silent\ncsharp_style_namespace_declarations = file_scoped:silent\ncsharp_style_prefer_method_group_conversion = true:silent\ncsharp_style_prefer_top_level_statements = true:silent\ncsharp_style_prefer_primary_constructors = true:suggestion\ncsharp_prefer_system_threading_lock = true:suggestion\ncsharp_style_prefer_simple_property_accessors = true:suggestion\ncsharp_style_expression_bodied_lambdas = true:silent\ncsharp_style_prefer_null_check_over_type_check = true:suggestion\ncsharp_prefer_simple_default_expression = true:suggestion\ncsharp_style_prefer_local_over_anonymous_function = true:suggestion\ncsharp_style_prefer_index_operator = true:suggestion\ncsharp_style_prefer_range_operator = true:suggestion\ncsharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion\ncsharp_style_prefer_implicitly_typed_lambda_expression = true:suggestion\ncsharp_style_prefer_tuple_swap = true:suggestion\ncsharp_style_prefer_unbound_generic_type_in_nameof = true:suggestion\ncsharp_style_prefer_utf8_string_literals = true:suggestion\ncsharp_style_deconstructed_variable_declaration = true:suggestion\ncsharp_style_unused_value_assignment_preference = discard_variable:suggestion\ncsharp_style_unused_value_expression_statement_preference = discard_variable:silent\ncsharp_prefer_static_local_function = true:suggestion\ncsharp_prefer_static_anonymous_function = true:suggestion\ncsharp_style_prefer_readonly_struct = true:suggestion\ncsharp_style_prefer_readonly_struct_member = true:suggestion\ncsharp_style_allow_embedded_statements_on_same_line_experimental = true:silent\ncsharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent\ncsharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:silent\ncsharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true:silent\ncsharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true:silent\ncsharp_style_prefer_switch_expression = true:suggestion\ncsharp_style_prefer_pattern_matching = true:silent\ncsharp_style_prefer_not_pattern = true:suggestion\ncsharp_style_prefer_extended_property_pattern = true:suggestion\n\n# Legacy rules\n\ndotnet_diagnostic.CA1001.severity = error\ndotnet_diagnostic.CA1009.severity = error\ndotnet_diagnostic.CA1016.severity = error\ndotnet_diagnostic.CA1033.severity = error\ndotnet_diagnostic.CA1049.severity = error\ndotnet_diagnostic.CA1060.severity = error\ndotnet_diagnostic.CA1061.severity = error\ndotnet_diagnostic.CA1063.severity = error\ndotnet_diagnostic.CA1065.severity = error\ndotnet_diagnostic.CA1301.severity = error\ndotnet_diagnostic.CA1400.severity = error\ndotnet_diagnostic.CA1401.severity = error\ndotnet_diagnostic.CA1403.severity = error\ndotnet_diagnostic.CA1404.severity = error\ndotnet_diagnostic.CA1405.severity = error\ndotnet_diagnostic.CA1410.severity = error\ndotnet_diagnostic.CA1415.severity = error\ndotnet_diagnostic.CA1821.severity = error\ndotnet_diagnostic.CA1900.severity = error\ndotnet_diagnostic.CA1901.severity = error\ndotnet_diagnostic.CA2002.severity = error\ndotnet_diagnostic.CA2100.severity = error\ndotnet_diagnostic.CA2101.severity = error\ndotnet_diagnostic.CA2108.severity = error\ndotnet_diagnostic.CA2111.severity = error\ndotnet_diagnostic.CA2112.severity = error\ndotnet_diagnostic.CA2114.severity = error\ndotnet_diagnostic.CA2116.severity = error\ndotnet_diagnostic.CA2117.severity = error\ndotnet_diagnostic.CA2122.severity = error\ndotnet_diagnostic.CA2123.severity = error\ndotnet_diagnostic.CA2124.severity = error\ndotnet_diagnostic.CA2126.severity = error\ndotnet_diagnostic.CA2131.severity = error\ndotnet_diagnostic.CA2132.severity = error\ndotnet_diagnostic.CA2133.severity = error\ndotnet_diagnostic.CA2134.severity = error\ndotnet_diagnostic.CA2137.severity = error\ndotnet_diagnostic.CA2138.severity = error\ndotnet_diagnostic.CA2140.severity = error\ndotnet_diagnostic.CA2141.severity = error\ndotnet_diagnostic.CA2146.severity = error\ndotnet_diagnostic.CA2147.severity = error\ndotnet_diagnostic.CA2149.severity = error\ndotnet_diagnostic.CA2200.severity = error\ndotnet_diagnostic.CA2202.severity = error\ndotnet_diagnostic.CA2207.severity = error\ndotnet_diagnostic.CA2212.severity = error\ndotnet_diagnostic.CA2213.severity = error\ndotnet_diagnostic.CA2214.severity = error\ndotnet_diagnostic.CA2216.severity = error\ndotnet_diagnostic.CA2220.severity = error\ndotnet_diagnostic.CA2229.severity = error\ndotnet_diagnostic.CA2231.severity = error\ndotnet_diagnostic.CA2232.severity = error\ndotnet_diagnostic.CA2235.severity = error\ndotnet_diagnostic.CA2236.severity = error\ndotnet_diagnostic.CA2237.severity = error\ndotnet_diagnostic.CA2238.severity = error\ndotnet_diagnostic.CA2240.severity = error\ndotnet_diagnostic.CA2241.severity = error\ndotnet_diagnostic.CA2242.severity = error\n\n\n# Test Projects\n\n# IDE0022: Use expression body for method\ndotnet_diagnostic.IDE0022.severity = silent\n\n# IDE0130: Namespace match folder structure\ndotnet_diagnostic.IDE0130.severity = none\n\n[Benchmarks/**/*.cs]\ndotnet_diagnostic.CA1050.severity = none # CA1050: Declare types in namespaces\n\n[**/Humanizer.Tests/**/*.cs]\ndotnet_diagnostic.CA1050.severity = none # CA1050: Declare types in namespaces\n\n\n# Xml files\n[*.{xml,config,nuspec,resx,vsixmanifest,csproj,targets,props,fsproj}]\nindent_size = 2\n\n[*.json]\nindent_size = 2"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto\r\n\r\n# Custom for Visual Studio\r\n*.cs     diff=csharp\r\n*.sln    merge=union\r\n*.csproj merge=union\r\n*.vbproj merge=union\r\n*.fsproj merge=union\r\n*.dbproj merge=union\r\n\r\n*.snk binary\r\n\r\n# Normalise endings to CRLF\r\n*.cs              eol=crlf\r\n*.xml             eol=crlf\r\n*.xaml            eol=crlf\r\n*.xsl             eol=crlf\r\n*.xsd             eol=crlf\r\n*.cshtml          eol=crlf\r\n*.css             eol=crlf\r\n*.js              eol=crlf\r\n*.txt             eol=crlf\r\n*.config          eol=crlf\r\n*.sql             eol=crlf\r\n*.sln             eol=crlf\r\n*.csproj          eol=crlf\r\n*.vbproj          eol=crlf\r\n*.fsproj          eol=crlf\r\n*.dbproj          eol=crlf\r\n*.nunit           eol=crlf\r\n*.html            eol=crlf\r\n*.md              eol=crlf\r\n*.proj            eol=crlf\r\n*.bat             eol=crlf\r\n*.cmd             eol=crlf\r\n*.nuspec          eol=crlf\r\n*.targets         eol=crlf\r\n*.conf            eol=crlf\r\n*.manifest        eol=crlf\r\n*.ps1             eol=crlf\r\n*.resx            eol=crlf\r\n*.asax            eol=crlf\r\n*.aspx            eol=crlf\r\n*.ncrunchproject  eol=crlf\r\n*.ncrunchsolution eol=crlf\r\n*.msbuild         eol=crlf\r\n*.template        eol=crlf\r\n*.settings        eol=crlf\r\n*.java            eol=crlf\r\n.gitattributes    eol=crlf\r\n.classpath        eol=crlf\r\n.project          eol=crlf\r\n\r\n# Standard to msysgit\r\n*.doc  diff=astextplain\r\n*.DOC  diff=astextplain\r\n*.docx diff=astextplain\r\n*.DOCX diff=astextplain\r\n*.dot  diff=astextplain\r\n*.DOT  diff=astextplain\r\n*.pdf  diff=astextplain\r\n*.PDF  diff=astextplain\r\n*.rtf  diff=astextplain\r\n*.RTF  diff=astextplain\r\n\r\n\r\n*.verified.txt text eol=lf working-tree-encoding=UTF-8"
  },
  {
    "path": ".github/CODE_OF_CONDUCT.md",
    "content": "# Code of Conduct\r\n\r\nThis project has adopted the code of conduct defined by the Contributor Covenant\r\nto clarify expected behavior in our community.\r\nFor more information, see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct).\r\n"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "content": "## <a id=\"how-to-contribute\">How to contribute?</a>\r\nYour contributions to Humanizer are very welcome.\r\nIf you find a bug, please raise it as an issue.\r\nEven better fix it and send a pull request.\r\nIf you like to help out with existing bugs and feature requests just check out the list of [issues](https://github.com/Humanizr/Humanizer/issues) and grab and fix one.\r\nSome of the issues are labeled as as `jump in`. These issues are generally low hanging fruit so you can start with easier tasks.\r\n\r\nThis project has adopted the code of conduct defined by the [Contributor Covenant](http://contributor-covenant.org/)\r\nto clarify expected behavior in our community. \r\nFor more information see the [.NET Foundation Code of Conduct](http://www.dotnetfoundation.org/code-of-conduct).\r\n\r\n### <a id=\"getting-started\">Getting started</a>\r\nThis project uses C# 8 language features and SDK-style projects, so you'll need any edition of [Visual Studio 2019](https://www.visualstudio.com/downloads/download-visual-studio-vs) to open and compile the project. The free [Community Edition](https://go.microsoft.com/fwlink/?LinkId=532606&clcid=0x409) will work.\r\n\r\n### <a id=\"contribution-guideline\">Contribution guideline</a>\r\nThis project uses [GitHub flow](http://scottchacon.com/2011/08/31/github-flow.html) for pull requests.\r\nSo if you want to contribute, fork the repo, preferably create a local branch, based off of the `main` branch, to avoid conflicts with other activities, fix an issue, run build.cmd from the root of the project, and send a PR if all is green.\r\n\r\nPull requests are code reviewed. Here is a checklist you should tick through before submitting a pull request:\r\n\r\n - Implementation is clean\r\n - Code adheres to the existing coding standards; e.g. no curlies for one-line blocks, no redundant empty lines between methods or code blocks, spaces rather than tabs, etc. There is an `.editorconfig` file that must be respected.\r\n - No ReSharper warnings\r\n - There is proper unit test coverage\r\n - If the code is copied from StackOverflow (or a blog or OSS) full disclosure is included. That includes required license files and/or file headers explaining where the code came from with proper attribution\r\n - There are very few or no comments (because comments shouldn't be needed if you write clean code)\r\n - Xml documentation is added/updated for the addition/change\r\n - Your PR is (re)based on top of the latest commits from the `main` branch (more info below)\r\n - Link to the issue(s) you're fixing from your PR description. Use `fixes #<the issue number>`\r\n - Readme is updated if you change an existing feature or add a new one\r\n - Run either `build.cmd` or `build.ps1` and ensure there are no test failures\r\n\r\nPlease rebase your code on top of the latest `main` branch commits.\r\nBefore working on your fork make sure you pull the latest so you work on top of the latest commits to avoid merge conflicts.\r\nAlso before sending the pull request please rebase your code as there is a chance there have been new commits pushed after you pulled last.\r\nPlease refer to [this guide](https://gist.github.com/jbenet/ee6c9ac48068889b0912#the-workflow) if you're new to git.\r\n\r\n### <a id=\"need-your-help-with-localisation\">Need your help with localisation</a>\r\nOne area where Humanizer can always use your help is localisation.\r\nCurrently Humanizer supports quite a few localisations for `DateTime.Humanize`, `TimeSpan.Humanize`, `ToWords` and `ToOrdinalWords`.\r\n\r\nHumanizer could definitely do with more translations.\r\nTo add a translation for `DateTime.Humanize` and `TimeSpan.Humanize`,\r\nfork the repository if you haven't done yet, duplicate the [resources.resx](https://github.com/Humanizr/Humanizer/blob/main/src/Humanizer/Properties/Resources.resx) file, add your target [locale code](http://msdn.microsoft.com/en-us/library/hh441729.aspx)\r\nto the end (e.g. resources.ru.resx for Russian), translate the values to your language, register your formatter in [FormatterRegistry.cs](https://github.com/Humanizr/Humanizer/blob/main/src/Humanizer/Configuration/FormatterRegistry.cs), write unit tests for the translation, commit, and send a pull request for it. Thanks.\r\n\r\nSome languages have complex rules when it comes to dealing with numbers; for example, in Romanian \"5 days\" is \"5 zile\", while \"24 days\" is \"24 de zile\" and in Arabic \"2 days\" is \"يومان\" not \"2 يوم\".\r\nObviously a normal resource file doesn't cut it in these cases as a more complex mapping is required.\r\nIn cases like this, in addition to creating a resource file, you should also subclass [`DefaultFormatter`](https://github.com/Humanizr/Humanizer/blob/main/src/Humanizer/Localisation/Formatters/DefaultFormatter.cs) in a class that represents your language;\r\ne.g. [`RomanianFormatter`](https://github.com/Humanizr/Humanizer/blob/main/src/Humanizer/Localisation/Formatters/RomanianFormatter.cs) and then override the methods that need the complex rules.\r\nWe think overriding the `GetResourceKey` method should be enough.\r\nTo see how to do that check out `RomanianFormatter` and `RussianFormatter`.\r\nThen you return an instance of your class in the [`Configurator`](https://github.com/Humanizr/Humanizer/blob/main/src/Humanizer/Configuration/Configurator.cs) class in the getter of the [Formatter property](https://github.com/Humanizr/Humanizer/blob/main/src/Humanizer/Configuration/Configurator.cs) based on the current culture.\r\n\r\nTranslations for `ToWords` and `ToOrdinalWords` methods are currently done in code as there is a huge difference between the way different languages deal with number words.\r\nCheck out [Dutch](https://github.com/Humanizr/Humanizer/blob/main/src/Humanizer/Localisation/NumberToWords/DutchNumberToWordsConverter.cs) and\r\n[Russian](https://github.com/Humanizr/Humanizer/blob/main/src/Humanizer/Localisation/NumberToWords/RussianNumberToWordsConverter.cs) localisations for examples of how you can write a Converter for your language.\r\nYou should then register your converter in the [ConverterFactory](https://github.com/Humanizr/Humanizer/blob/main/src/Humanizer/NumberToWordsExtension.cs#L13) for it to kick in on your locale.\r\n\r\nDon't forget to write tests for your localisations. Check out the existing [DateHumanizeTests](https://github.com/Humanizr/Humanizer/blob/main/tests/Humanizer.Tests/Localisation/ru-RU/DateHumanizeTests.cs), [TimeSpanHumanizeTests](https://github.com/Humanizr/Humanizer/blob/main/tests/Humanizer.Tests/Localisation/ru-RU/TimeSpanHumanizeTests.cs) and [NumberToWordsTests](https://github.com/Humanizr/Humanizer/blob/main/tests/Humanizer.Tests/Localisation/ru-RU/NumberToWordsTests.cs).\r\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "Here is a checklist you should tick through before submitting a pull request: \r\n - [ ] Implementation is clean\r\n - [ ] Code adheres to the existing coding standards; e.g. no curlies for one-line blocks, no redundant empty lines between methods or code blocks, spaces rather than tabs, etc.\r\n - [ ] No Code Analysis warnings\r\n - [ ] There is proper unit test coverage\r\n - [ ] If the code is copied from StackOverflow (or a blog or OSS) full disclosure is included. That includes required license files and/or file headers explaining where the code came from with proper attribution\r\n - [ ] There are very few or no comments (because comments shouldn't be needed if you write clean code)\r\n - [ ] Xml documentation is added/updated for the addition/change\r\n - [ ] Your PR is (re)based on top of the latest commits from the `main` branch (more info below)\r\n - [ ] Link to the issue(s) you're fixing from your PR description. Use `fixes #<the issue number>`\r\n - [ ] Readme is updated if you change an existing feature or add a new one\r\n - [ ] Run either `build.cmd` or `build.ps1` and ensure there are no test failures\r\n"
  },
  {
    "path": ".github/codeql/codeql-config.yml",
    "content": "name: humanizer-codeql\nqueries:\n  - uses: security-extended\n  - uses: security-and-quality\npaths:\n  - src/Humanizer/\npaths-ignore:\n  - src/**/bin/**\n  - src/**/obj/**\n"
  },
  {
    "path": ".github/copilot-instructions.md",
    "content": "# Agent Instructions\r\n\r\n## Scope\r\nThese instructions apply to the entire repository.\r\n\r\n## Project Overview\r\n- Humanizer is a .NET library for turning numbers, dates, times, enums, quantities, etc. into human-friendly text across many locales.\r\n- The main library lives in `src/Humanizer`; tests are under `tests/`.\r\n\r\n## Toolchain\r\n- Primary language: C# (modern features).\r\n- Target frameworks: .NET 8.0, .NET 10.0, and .NET Framework 4.8.\r\n- Tests use xUnit and should live alongside similar tests in `tests/Humanizer.Tests`.\r\n- Build with the .NET CLI (`dotnet`). Prefer the latest SDK (see install script in `.github/copilot-instructions.md`).\r\n\r\n## Coding Guidelines\r\n- Respect `.editorconfig`; use spaces, 4-space indentation, and file-scoped namespaces.\r\n- Use `var` for obvious types, and language keywords (`string`, `int`, etc.).\r\n- Order `using` directives with `System.*` first; prefer existing global usings.\r\n- Keep code self-documenting; use comments sparingly.\r\n- Never wrap imports in `try/catch`.\r\n- Avoid unnecessary `this.` and braces for one-line blocks; trim redundant blank lines.\r\n- Follow existing naming conventions (camelCase private fields, PascalCase public members/constants/static readonly).\r\n- Add XML documentation for new or modified public APIs.\r\n\r\n## Testing Expectations\r\n- Every functional change must include or update xUnit tests in `tests/Humanizer.Tests`.\r\n- Use culture-specific folders and `UseCulture` attribute for localization tests when applicable.\r\n- Run the test suite for the supported .NET targets (`dotnet test --project tests/Humanizer.Tests/Humanizer.Tests.csproj --framework net10.0` and `--framework net8.0`). Avoid invoking the net48 target on Linux, and allow a few minutes for each run to complete.\r\n\r\n## Build & Validation\r\n- Build command: `dotnet build src/Humanizer/Humanizer.csproj -c Release /t:PackNuSpecs /p:PackageOutputPath=<path>` (from the repository root). It must succeed without warnings or errors.\r\n- If you need to reference those newly build packages, create or update `NuGet.config` to use that package output path as a package source--but never commit changes to that file.\r\n- When verifying restore, build first, then pass the output path into `tests/verify-packages.ps1`.\r\n- When running `tests/verify-packages.ps1`, you can override the default `-MinimumPassingSdkVersion` (`9.0.200`) to mark older SDK/MSBuild restores as expected failures.\r\n- Do not introduce new compiler warnings or break existing build/test workflows.\r\n\r\n## Localization Guidance\r\n- When adding a locale, duplicate and translate the relevant resource files under `src/Humanizer/Properties`.\r\n- Register new formatters/converters in the appropriate registries (see `Configuration/FormatterRegistry.cs` and number converter factories).\r\n- Cover new localization behavior with targeted tests under `tests/Humanizer.Tests/Localisation/{culture}`.\r\n\r\n## Documentation Updates\r\n- Update `readme.md`, resource comments, or XML docs when introducing new features or behavior changes.\r\n- Provide meaningful examples in documentation and XML summaries where appropriate.\r\n\r\n## Pull Request Guidelines\r\n- Keep changes focused with clear commit messages.\r\n- Follow repository PR template expectations: summarize changes, list tests run, and reference related issues (e.g., `fixes #123`) when applicable.\r\n- Ensure the codebase remains backward-compatible unless intentionally introducing a documented breaking change.\r\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n- package-ecosystem: nuget\n  directory: \"/\"\n  schedule:\n    interval: daily\n  open-pull-requests-limit: 10\n"
  },
  {
    "path": ".github/workflows/.devskim",
    "content": "{\n  \"Globs\": [\n    \"**/.git/**\",\n    \"**/bin/**\",\n    \"**/obj/**\",\n    \"**/nuget.config\"        // exact file at repo root\n  ]\n}\n"
  },
  {
    "path": ".github/workflows/benchmarks-baseline-vs-current.yml",
    "content": "name: Benchmark Baseline vs Current\n\non:\n  workflow_dispatch:\n    inputs:\n      baselineVersion:\n        description: 'NuGet version of Humanizer to use for the baseline run'\n        required: true\n        type: string\n        default: '3.0.0-rc.6'\n\n  push:\n    paths:\n      - '.github/workflows/benchmarks-baseline-vs-current.yml'        \n  pull_request:\n    paths:\n      - '.github/workflows/benchmarks-baseline-vs-current.yml'\n\n  schedule:\n    - cron: '0 4 * * 1'  # Every Monday at 04:00 UTC\n\njobs:\n  benchmark:\n    name: Run Benchmarks (${{ matrix.kind }})\n    runs-on: ubuntu-latest\n    timeout-minutes: 180\n    env:\n      BASELINE_VERSION: ${{ inputs.baselineVersion || '3.0.0-rc.6' }}\n    strategy:\n      matrix:\n        kind: [baseline, current]\n    \n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v5\n        with:\n          fetch-depth: 0\n\n      - name: Setup .NET 8,10\n        uses: actions/setup-dotnet@v5\n        with:\n          dotnet-version: |\n            8.0\n            10.0\n                \n      - name: Display run information\n        run: |\n          echo \"## Benchmark Run: ${{ matrix.kind }}\" >> $GITHUB_STEP_SUMMARY\n          echo \"\" >> $GITHUB_STEP_SUMMARY\n          echo \"- **Commit SHA:** ${{ github.sha }}\" >> $GITHUB_STEP_SUMMARY\n          echo \"- **Baseline Version:** ${{ env.BASELINE_VERSION }}\" >> $GITHUB_STEP_SUMMARY\n          echo \"- **Run Type:** ${{ matrix.kind }}\" >> $GITHUB_STEP_SUMMARY\n          echo \"\" >> $GITHUB_STEP_SUMMARY\n      \n      - name: Build Benchmarks (baseline)\n        if: matrix.kind == 'baseline'\n        run: |\n          out=\"artifacts/baseline\"\n          mkdir -p \"$out\"\n          dotnet run --project src/Benchmarks/Benchmarks.csproj -c Release -f net8.0 -- --filter '*' --artifacts \"$out\" --envVars UseBaselinePackage:true,BaselinePackageVersion:${{ env.BASELINE_VERSION }} \n\n      - name: Build Benchmarks (current)\n        if: matrix.kind == 'current'\n        run: |\n          out=\"artifacts/current\"\n          mkdir -p \"$out\"\n          dotnet run --project src/Benchmarks/Benchmarks.csproj -c Release -f net8.0 -- --filter '*' --artifacts \"$out\"\n      \n      - name: Append Results to Summary\n        run: |\n          out=\"artifacts/${{ matrix.kind }}\"\n          \n          # Find all markdown files and append them to the summary\n          echo \"\" >> $GITHUB_STEP_SUMMARY\n          echo \"### Benchmark Results (${{ matrix.kind }})\" >> $GITHUB_STEP_SUMMARY\n          echo \"\" >> $GITHUB_STEP_SUMMARY\n          \n          while IFS= read -r MD; do\n            cat \"$MD\" >> $GITHUB_STEP_SUMMARY\n            echo \"\" >> $GITHUB_STEP_SUMMARY\n          done < <(find \"$out\" -type f -name '*.md')\n      \n      - name: Upload JSON Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: humanizer-bdn-${{ matrix.kind }}-json\n          path: artifacts/${{ matrix.kind }}/**/*.json\n          retention-days: 7\n      \n      - name: Upload All Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: humanizer-bdn-${{ matrix.kind }}-all\n          path: artifacts/${{ matrix.kind }}/\n          retention-days: 7\n\n  compare:\n    name: Compare Baseline vs Current\n    runs-on: ubuntu-latest\n    needs: benchmark\n    env:\n      BASELINE_VERSION: ${{ inputs.baselineVersion || '3.0.0-rc.6' }}\n    \n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v5\n        with:\n          fetch-depth: 0\n\n      - name: Download Baseline JSON\n        uses: actions/download-artifact@v4\n        with:\n          name: humanizer-bdn-baseline-json\n          path: baseline\n      \n      - name: Download Current JSON\n        uses: actions/download-artifact@v4\n        with:\n          name: humanizer-bdn-current-json\n          path: current\n      \n      - name: Setup .NET\n        uses: actions/setup-dotnet@v5\n        with:\n          dotnet-version: '10.x'\n      \n      - name: Clone and Build ResultsComparer\n        run: |\n          git clone --depth 1 https://github.com/dotnet/performance          \n      \n      - name: Split Benchmark Results by TFM\n        run: |\n          set -euo pipefail\n          \n          baseline_results=$(find baseline -type d -name results -print -quit)\n          current_results=$(find current -type d -name results -print -quit)\n          \n          if [ -z \"$baseline_results\" ]; then\n            echo \"Baseline results directory not found under 'baseline'.\" >&2\n            exit 1\n          fi\n          \n          if [ -z \"$current_results\" ]; then\n            echo \"Current results directory not found under 'current'.\" >&2\n            exit 1\n          fi\n          \n          echo \"Using baseline results directory: $baseline_results\"\n          echo \"Using current results directory: $current_results\"\n          \n          pwsh -File src/scripts/split-benchmark-results.ps1 -InputDir \"$baseline_results\" -OutputRoot baseline-split\n          pwsh -File src/scripts/split-benchmark-results.ps1 -InputDir \"$current_results\" -OutputRoot current-split\n      \n      - name: Run ResultsComparer for each TFM\n        run: |\n          mkdir -p comparisons\n          \n          # Compare each target framework independently\n          for tfm_dir in baseline-split/*; do\n            if [ -d \"$tfm_dir\" ]; then\n              tfm=$(basename \"$tfm_dir\")\n              echo \"Comparing results for $tfm...\"\n              \n              if [ -d \"current-split/$tfm\" ]; then\n                dotnet run --project performance/src/tools/ResultsComparer/ResultsComparer.csproj -c Release -p:PERFLAB_TARGET_FRAMEWORKS=net10.0 -f net10.0 --base \"$tfm_dir\" --diff \"current-split/$tfm\" --threshold \"5%\" > \"comparisons/diff-$tfm.md\" || true\n              else\n                echo \"⚠️ No current results found for $tfm\" > \"comparisons/diff-$tfm.md\"\n              fi\n            fi\n          done\n      \n      - name: Append Comparison to Summary\n        run: |\n          echo \"\" >> $GITHUB_STEP_SUMMARY\n          echo \"## Performance Comparison: Baseline vs Current\" >> $GITHUB_STEP_SUMMARY\n          echo \"\" >> $GITHUB_STEP_SUMMARY\n          echo \"**Baseline Version:** ${{ env.BASELINE_VERSION }}\" >> $GITHUB_STEP_SUMMARY\n          echo \"\" >> $GITHUB_STEP_SUMMARY\n          \n          # Append comparison for each TFM\n          for diff_file in comparisons/diff-*.md; do\n            if [ -f \"$diff_file\" ]; then\n              tfm=$(basename \"$diff_file\" .md | sed 's/diff-//')\n              echo \"### Results for $tfm\" >> $GITHUB_STEP_SUMMARY\n              echo \"\" >> $GITHUB_STEP_SUMMARY\n              cat \"$diff_file\" >> $GITHUB_STEP_SUMMARY\n              echo \"\" >> $GITHUB_STEP_SUMMARY\n            fi\n          done\n          \n          if [ ! -f comparisons/diff-*.md ]; then\n            echo \"⚠️ No comparison results available\" >> $GITHUB_STEP_SUMMARY\n          fi\n      \n      - name: Upload Comparison Report\n        uses: actions/upload-artifact@v4\n        if: always()\n        with:\n          name: humanizer-bdn-comparison\n          path: comparisons/\n          retention-days: 7\n"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "content": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# You may wish to alter this file to override the set of languages analyzed,\n# or to provide custom queries or build logic.\n#\n# ******** NOTE ********\n# We have attempted to detect the languages in your repository. Please check\n# the `language` matrix defined below to confirm you have the correct set of\n# supported CodeQL languages.\n#\nname: \"CodeQL Advanced\"\n\non:\n  push:\n    branches:\n      - main\n      - 'rel/**'\n  pull_request:\n    branches:    \n      - main\n      - 'rel/**'\n  schedule:\n    - cron: '41 11 * * 2'\n\njobs:\n  analyze:\n    name: Analyze C#\n    runs-on: 'windows-latest'\n    permissions:\n      security-events: write\n      packages: read\n      actions: read\n      contents: read\n\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n        fetch-tags: true\n\n    # Add any setup steps before running the `github/codeql-action/init` action.\n    # This includes steps like installing compilers or runtimes (`actions/setup-node`\n    # or others). This is typically only required for manual builds.\n    # - name: Setup runtime (example)\n    #   uses: actions/setup-example@v1\n    - uses: actions/setup-dotnet@v5\n      with:\n        global-json-file: global.json\n    # Initializes the CodeQL tools for scanning.\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@v3\n      with:\n        languages: csharp\n        build-mode: manual\n        config-file: .github/codeql/codeql-config.yml\n\n    - name: Build\n      working-directory: src\n      shell: pwsh\n      run: |\n        dotnet build Humanizer/Humanizer.csproj -c Release --nologo --verbosity minimal\n         \n    - name: Perform CodeQL Analysis\n      uses: github/codeql-action/analyze@v3\n"
  },
  {
    "path": ".github/workflows/copilot-setup-steps.yml",
    "content": "name: \"Copilot Setup Steps\"\n\n# Automatically run the setup steps when they are changed to allow for easy validation, and\n# allow manual testing through the repository's \"Actions\" tab\non:\n  workflow_dispatch:\n  push:\n    paths:\n      - .github/workflows/copilot-setup-steps.yml\n  pull_request:\n    paths:\n      - .github/workflows/copilot-setup-steps.yml\n\njobs:\n  # The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot.\n  copilot-setup-steps:\n    runs-on: ubuntu-latest\n\n    # Set the permissions to the lowest permissions possible needed for your steps.\n    # Copilot will be given its own token for its operations.\n    permissions:\n      # If you want to clone the repository as part of your setup steps, for example to install dependencies, you'll need the `contents: read` permission. If you don't clone the repository in your setup steps, Copilot will do this for you automatically after the steps complete.\n      contents: read\n\n    # You can define any steps you want, and they will run before the agent starts.\n    # If you do not check out your code, Copilot will do this for you.\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v5\n        with:\n          fetch-depth: 0\n          fetch-tags: true\n\n      - uses: actions/setup-dotnet@v5\n        with:\n          global-json-file: global.json\n"
  },
  {
    "path": ".github/workflows/devskim.yml",
    "content": "# This workflow uses actions that are not certified by GitHub.\n# They are provided by a third-party and are governed by\n# separate terms of service, privacy policy, and support\n# documentation.\n\nname: DevSkim\n\non:\n  push:\n    branches:\n      - main\n      - 'rel/**'\n  pull_request:\n    branches:    \n      - main\n      - 'rel/**'\n  schedule:\n    - cron: '23 9 * * 2'\n\njobs:\n  lint:\n    name: DevSkim\n    runs-on: ubuntu-latest\n    permissions:\n      actions: read\n      contents: read\n      security-events: write\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Run DevSkim scanner\n        uses: microsoft/DevSkim-Action@v1\n        with:\n          options-json: .github/workflows/.devskim.json\n    \n      - name: Upload DevSkim scan results to GitHub Security tab\n        uses: github/codeql-action/upload-sarif@v3\n        with:\n          sarif_file: devskim-results.sarif\n"
  },
  {
    "path": ".github/workflows/jekyll-gh-pages.yml",
    "content": "# Sample workflow for building and deploying a Jekyll site to GitHub Pages\nname: Deploy Jekyll with GitHub Pages dependencies preinstalled\n\non:\n  # Runs on pushes targeting the default branch\n  push:\n    branches: [\"main\"]\n\n  # Allows you to run this workflow manually from the Actions tab\n  workflow_dispatch:\n\n# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages\npermissions:\n  contents: read\n  pages: write\n  id-token: write\n\n# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.\n# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.\nconcurrency:\n  group: \"pages\"\n  cancel-in-progress: false\n\njobs:\n  # Build job\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Prepare index.md from readme\n        run: |\n          echo \"---\" > docs/index.md\n          echo \"layout: default\" >> docs/index.md\n          echo \"title: Humanizer\" >> docs/index.md\n          echo \"---\" >> docs/index.md\n          echo \"\" >> docs/index.md\n          cat readme.md >> docs/index.md\n      - name: Copy logo to docs\n        run: cp logo.png docs/logo.png\n      - name: Setup Pages\n        uses: actions/configure-pages@v5\n      - name: Build with Jekyll\n        uses: actions/jekyll-build-pages@v1\n        with:\n          source: ./docs\n          destination: ./_site\n      - name: Upload artifact\n        uses: actions/upload-pages-artifact@v3\n\n  # Deployment job\n  deploy:\n    environment:\n      name: github-pages\n      url: ${{ steps.deployment.outputs.page_url }}\n    runs-on: ubuntu-latest\n    needs: build\n    steps:\n      - name: Deploy to GitHub Pages\n        id: deployment\n        uses: actions/deploy-pages@v4\n"
  },
  {
    "path": ".gitignore",
    "content": "## --------------------------------------------\n##  xUnit.net specific ignores\n\nTest*.html\nTest*.xml\n*.zip\n*.exe\n*.nuget.props\n*.nuget.targets\n\n## --------------------------------------------\n##  Adapted from https://raw.githubusercontent.com/github/gitignore/a4ec7f03ca5ae0bf09fad42c0fb7d1e8346bcf25/VisualStudio.gitignore\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\n[Bb]in/\n[Oo]bj/\n\n# Visual Studio 2015 cache/options directory\n.vs/\n\n# Visual Studio test runner\n[Tt]est[Rr]esult*/\nIndex.dat\nStorage.dat\n\n# DNX\nproject.lock.json\n*.lock.json\nartifacts/\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JetBrains IDE\n.idea/\n\n# JustCode is a .NET coding add-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\n\n# NuGet Packages\n*.nupkg\n**/packages/*\n#!**/packages/build/\n\n# Windows Store app package directory\nAppPackages/\n\n# Visual Studio cache files\n*.[Cc]ache\n!*.[Cc]ache/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# local tools\n.store/\n\nsrc/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.approve_public_api.received.txt\n\n.DS_Store\n/samples/Humanizer.MvcSample/Humanizer.MvcSample.sln\n/src/Humanizer/Properties/launchSettings.json\n\n\n*.received.*\n\n# Jekyll\ndocs/_site/\ndocs/.jekyll-cache/\ndocs/.sass-cache/\n\n# BenchmarkDotNet artifacts\n**/BenchmarkDotNet.Artifacts/"
  },
  {
    "path": "AGENTS.md",
    "content": "# Agent Instructions\r\n\r\n## Scope\r\nThese instructions apply to the entire repository.\r\n\r\n## Project Overview\r\n- Humanizer is a .NET library for turning numbers, dates, times, enums, quantities, etc. into human-friendly text across many locales.\r\n- The main library lives in `src/Humanizer`; tests are under `tests/`.\r\n\r\n## Toolchain\r\n- Primary language: C# (modern features).\r\n- Target frameworks: .NET 8.0, .NET 10.0, and .NET Framework 4.8.\r\n- Tests use xUnit and should live alongside similar tests in `tests/Humanizer.Tests`.\r\n- Build with the .NET CLI (`dotnet`). Prefer the latest SDK (see install script in `.github/copilot-instructions.md`).\r\n\r\n## Coding Guidelines\r\n- Respect `.editorconfig`; use spaces, 4-space indentation, and file-scoped namespaces.\r\n- Use `var` for obvious types, and language keywords (`string`, `int`, etc.).\r\n- Order `using` directives with `System.*` first; prefer existing global usings.\r\n- Keep code self-documenting; use comments sparingly.\r\n- Never wrap imports in `try/catch`.\r\n- Avoid unnecessary `this.` and braces for one-line blocks; trim redundant blank lines.\r\n- Follow existing naming conventions (camelCase private fields, PascalCase public members/constants/static readonly).\r\n- Add XML documentation for new or modified public APIs.\r\n\r\n## Testing Expectations\r\n- Every functional change must include or update xUnit tests in `tests/Humanizer.Tests`.\r\n- Use culture-specific folders and `UseCulture` attribute for localization tests when applicable.\r\n- Run the test suite for the supported .NET targets (`dotnet test --project tests/Humanizer.Tests/Humanizer.Tests.csproj --framework net10.0` and `--framework net8.0`). Avoid invoking the net48 target on Linux, and allow a few minutes for each run to complete.\r\n\r\n## Build & Validation\r\n- Build command: `dotnet build src/Humanizer/Humanizer.csproj -c Release /t:PackNuSpecs /p:PackageOutputPath=<path>` (from the repository root). It must succeed without warnings or errors.\r\n- If you need to reference those newly build packages, create or update `NuGet.config` to use that package output path as a package source--but never commit changes to that file.\r\n- When verifying restore, build first, then pass the output path into `tests/verify-packages.ps1`.\r\n- When running `tests/verify-packages.ps1`, you can override the default `-MinimumPassingSdkVersion` (`9.0.200`) to mark older SDK/MSBuild restores as expected failures.\r\n- Do not introduce new compiler warnings or break existing build/test workflows.\r\n\r\n## Localization Guidance\r\n- When adding a locale, duplicate and translate the relevant resource files under `src/Humanizer/Properties`.\r\n- Register new formatters/converters in the appropriate registries (see `Configuration/FormatterRegistry.cs` and number converter factories).\r\n- Cover new localization behavior with targeted tests under `tests/Humanizer.Tests/Localisation/{culture}`.\r\n\r\n## Documentation Updates\r\n- Update `readme.md`, resource comments, or XML docs when introducing new features or behavior changes.\r\n- Provide meaningful examples in documentation and XML summaries where appropriate.\r\n\r\n## Pull Request Guidelines\r\n- Keep changes focused with clear commit messages.\r\n- Follow repository PR template expectations: summarize changes, list tests run, and reference related issues (e.g., `fixes #123`) when applicable.\r\n- Ensure the codebase remains backward-compatible unless intentionally introducing a documented breaking change.\r\n"
  },
  {
    "path": "Directory.Build.props",
    "content": "<Project>  \n  \n  <PropertyGroup>\n    <LangVersion>preview</LangVersion>\n    <Nullable>enable</Nullable>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>\n    <NoWarn>1573;1591</NoWarn>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <DebugType Condition=\" '$(BuildingForLiveUnitTesting)' != 'true' \">embedded</DebugType>\n    <SignAssembly>true</SignAssembly>\n    <PublicKey>0024000004800000940000000602000000240000525341310004000001000100F9104F5F9BDB168AE140366EB1CD84C469B020EA3423D5D29996D5214CE2BD9B7C0BA3EAD1CA545C4399668AB8911E61CC1CC83C7DF6D50FD6B781365B467E65173F40A11C957D27C5AA0CB0F8DA9C91C988203CC8AEF1468C74A472839D0FD870DA8D13A4DC6B3AAFDAF0384D8E18E393C613D88BF02A64467A119902204FCC</PublicKey>\n    <AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)Humanizer.snk</AssemblyOriginatorKeyFile>\n    <EmbedUntrackedSources>true</EmbedUntrackedSources>\n    <SuppressNETCoreSdkPreviewMessage>true</SuppressNETCoreSdkPreviewMessage>\n    <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>    \n    <AnalysisMode>Minimum</AnalysisMode>\n  </PropertyGroup>\n  \n  <PropertyGroup>\n    <PolyStringInterpolation>true</PolyStringInterpolation>\n    <PolyNullability>true</PolyNullability>\n    <PolyEnsure>true</PolyEnsure>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <Authors>Claire Novotny, Mehdi Khalili</Authors>\n    <PackageLicenseExpression>MIT</PackageLicenseExpression>\n    <PackageProjectUrl>https://humanizr.net</PackageProjectUrl>\n    <MinClientVersion>2.12</MinClientVersion>\n    <Copyright>Copyright © 2012 - $([System.DateTime]::UtcNow.Year) .NET Foundation and Contributors</Copyright>\n    <PublishRepositoryUrl>true</PublishRepositoryUrl>   \n  </PropertyGroup>\n\n  <PropertyGroup Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))\">\n    <IsAotCompatible>true</IsAotCompatible>\n    <IsTrimmable>true</IsTrimmable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Using Include=\"System.ReadOnlySpan&lt;System.Char&gt;\" Alias=\"CharSpan\" />\n    <Using Remove=\"System.Net.Http\" />\n  </ItemGroup>\n  \n  <PropertyGroup Condition=\"'$(TF_BUILD)' == 'true'\">\n    <ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>\n  </PropertyGroup>\n</Project>\n"
  },
  {
    "path": "Directory.Build.targets",
    "content": "<Project>\r\n\r\n\r\n  <PropertyGroup>\r\n    <Product>$(Product) ($(TargetFramework))</Product>\r\n  </PropertyGroup>\r\n\r\n\r\n  <PropertyGroup>\r\n    <EnableSourceLink Condition=\"'$(Configuration)' == 'Debug'\">false</EnableSourceLink>\r\n    <EnableNETAnalyzers Condition=\"'$(TargetFramework)' == 'netstandard2.0' or $(TargetFrameworkIdentifier) == '.NETFramework'\">true</EnableNETAnalyzers>\r\n  </PropertyGroup>\r\n\r\n  <Target Name=\"AddCommitHashToAssemblyAttributes\" BeforeTargets=\"GetAssemblyAttributes\">\r\n    <ItemGroup>\r\n      <AssemblyAttribute Include=\"System.Reflection.AssemblyMetadataAttribute\" Condition=\" '$(SourceRevisionId)' != '' \">\r\n        <_Parameter1>CommitHash</_Parameter1>\r\n        <_Parameter2>$(SourceRevisionId)</_Parameter2>\r\n      </AssemblyAttribute>\r\n\r\n      <AssemblyAttribute Include=\"System.Reflection.AssemblyMetadataAttribute\" Condition=\" '$(PublicRelease)' == 'true' \">\r\n        <_Parameter1>CloudBuildNumber</_Parameter1>\r\n        <_Parameter2>$(BuildVersionSimple)</_Parameter2>\r\n      </AssemblyAttribute>\r\n      <AssemblyAttribute Include=\"System.Reflection.AssemblyMetadataAttribute\" Condition=\" '$(PublicRelease)' == 'false' \">\r\n        <_Parameter1>CloudBuildNumber</_Parameter1>\r\n        <_Parameter2>$(BuildVersionSimple)$(SemVerBuildSuffix)</_Parameter2>\r\n      </AssemblyAttribute>\r\n    </ItemGroup>\r\n\r\n  </Target>\r\n</Project>"
  },
  {
    "path": "Directory.Packages.props",
    "content": "﻿<Project>\n  <PropertyGroup>\n    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>\n    <CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>\n    <SystemDependencyVersion>10.0.5</SystemDependencyVersion>\n  </PropertyGroup>\n  <ItemGroup>\n    <GlobalPackageReference Include=\"Nerdbank.GitVersioning\" Version=\"3.9.50\" />\n    <PackageVersion Include=\"BenchmarkDotNet\" Version=\"0.15.8\" />\n    <PackageVersion Include=\"Microsoft.CodeAnalysis.Analyzers\" Version=\"3.0.0\" />\n    <PackageVersion Include=\"Microsoft.CodeAnalysis.CSharp\" Version=\"3.8.0\" />\n    <PackageVersion Include=\"Microsoft.CodeAnalysis.CSharp.Analyzer.Testing\" Version=\"1.1.3\" />\n    <PackageVersion Include=\"Microsoft.CodeAnalysis.CSharp.CodeFix.Testing\" Version=\"1.1.3\" />\n    <PackageVersion Include=\"Microsoft.CodeAnalysis.CSharp.Workspaces\" Version=\"3.8.0\" />\n    <PackageVersion Include=\"Microsoft.Testing.Extensions.CodeCoverage\" Version=\"18.5.2\" />\n    <PackageVersion Include=\"Microsoft.Testing.Extensions.TrxReport\" Version=\"2.1.0\" />\n    <PackageVersion Include=\"Polyfill\" Version=\"9.18.0\" />\n    <PackageVersion Include=\"PublicApiGenerator\" Version=\"11.5.4\" />\n    <PackageVersion Include=\"System.Collections.Immutable\" Version=\"$(SystemDependencyVersion)\" />\n    <PackageVersion Include=\"System.ComponentModel.Annotations\" Version=\"5.0.0\" />\n    <PackageVersion Include=\"System.Memory\" Version=\"4.6.3\" />\n    <PackageVersion Include=\"Verify.DiffPlex\" Version=\"3.1.2\" />\n    <PackageVersion Include=\"Verify.XunitV3\" Version=\"31.13.2\" />\n    <PackageVersion Include=\"xunit.v3.mtp-v2\" Version=\"3.2.2\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "Directory.Solution.targets",
    "content": "﻿<Project>\r\n    <Target Name=\"AssertRestoreTaskOutputProperties\"\r\n            AfterTargets=\"Restore\">\r\n        <Error\r\n            Condition=\"'$(RestoreProjectCount)' != '$([MSBuild]::Add($(RestoreProjectsAuditedCount), $(RestoreSkippedCount)))'\"\r\n            Text=\"Restore did not audit every project in the solution. Expected: $(RestoreProjectCount) Found: $(RestoreProjectsAuditedCount), Skipped: $(RestoreSkippedCount)\" />\r\n    </Target>\r\n</Project>"
  },
  {
    "path": "Humanizer.slnx",
    "content": "<Solution>\n  <Configurations>\n    <Platform Name=\"Any CPU\" />\n    <Platform Name=\"ARM\" />\n    <Platform Name=\"x64\" />\n    <Platform Name=\"x86\" />\n  </Configurations>\n  <Folder Name=\"/Solution Items/\">\n    <File Path=\".gitattributes\" />\n    <File Path=\".gitignore\" />\n    <File Path=\"azure-pipelines.yml\" />\n    <File Path=\"global.json\" />\n    <File Path=\"license.txt\" />\n    <File Path=\"NuSpecs/Humanizer.Core.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.nuspec\" />\n    <File Path=\"readme.md\" />\n    <File Path=\"release_notes.md\" />\n    <File Path=\"version.json\" />\n    <File Path=\".editorconfig\" />\n    <File Path=\"Directory.Build.props\" />\n    <File Path=\"Directory.Build.targets\" />\n    <File Path=\"Directory.Packages.props\" />\n    <File Path=\"Directory.Solution.targets\" />\n    <File Path=\"ResXManager.config.xml\" />\n    <File Path=\"nuget.config\" />\n    <File Path=\"src/scripts/split-benchmark-results.ps1\" />\n  </Folder>\n  <Folder Name=\"/Solution Items/NuSpecs/\">\n    <File Path=\"NuSpecs/Humanizer.Core.af.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.ar.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.az.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.bg.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.bn.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.ca.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.cs.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.da.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.de.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.el.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.es.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.fa.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.fi.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.fil.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.fr.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.he.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.hr.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.hu.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.hy.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.id.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.is.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.it.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.ja.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.ko.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.ku.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.lb.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.lt.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.lv.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.ms.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.mt.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.nb.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.nl.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.pl.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.pt-BR.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.pt.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.ro.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.ru.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.sk.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.sl.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.sr-Latn.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.sr.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.sv.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.ta.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.th.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.tr.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.uk.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.uz-Cyrl-UZ.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.uz-Latn-UZ.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.vi.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.zh-CN.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.zh-Hans.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.Core.zh-Hant.nuspec\" />\n    <File Path=\"NuSpecs/Humanizer.nuspec\" />\n  </Folder>\n  <Project Path=\"src/Benchmarks/Benchmarks.csproj\" />\n  <Project Path=\"tests/Humanizer.Analyzers.Tests/Humanizer.Analyzers.Tests.csproj\" />\n  <Project Path=\"src/Humanizer.Analyzers/Humanizer.Analyzers.csproj\" />\n  <Project Path=\"tests/Humanizer.Tests/Humanizer.Tests.csproj\" />\n  <Project Path=\"src/Humanizer/Humanizer.csproj\" />\n</Solution>\n"
  },
  {
    "path": "NuSpecs/Humanizer.Core.af.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.af</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (af)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Afrikaans (af)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    \r\n    <language>af</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\af\\*.*\" target=\"lib\\netstandard2.0\\af\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\af\\*.*\" target=\"lib\\net8.0\\af\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\af\\*.*\" target=\"lib\\net48\\af\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\af\\*.*\" target=\"lib\\net10.0\\af\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.ar.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.ar</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (ar)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Arabic (ar)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>ar</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\ar\\*.*\" target=\"lib\\netstandard2.0\\ar\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\ar\\*.*\" target=\"lib\\net8.0\\ar\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\ar\\*.*\" target=\"lib\\net48\\ar\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\ar\\*.*\" target=\"lib\\net10.0\\ar\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.az.nuspec",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.az</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (az)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Azerbaijani (az)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>az</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\az\\*.*\" target=\"lib\\netstandard2.0\\az\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\az\\*.*\" target=\"lib\\net8.0\\az\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\az\\*.*\" target=\"lib\\net48\\az\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\az\\*.*\" target=\"lib\\net10.0\\az\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.bg.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.bg</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (bg)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Bulgarian (bg)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>bg</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\bg\\*.*\" target=\"lib\\netstandard2.0\\bg\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\bg\\*.*\" target=\"lib\\net8.0\\bg\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\bg\\*.*\" target=\"lib\\net48\\bg\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\bg\\*.*\" target=\"lib\\net10.0\\bg\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.bn.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.bn</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (bn)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Bangla (Bangladesh) (bn)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>bn</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\bn\\*.*\" target=\"lib\\netstandard2.0\\bn\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\bn\\*.*\" target=\"lib\\net8.0\\bn\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\bn\\*.*\" target=\"lib\\net48\\bn\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\bn\\*.*\" target=\"lib\\net10.0\\bn\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.ca.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.ca</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (ca)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Catalan (ca)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>ca</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\ca\\*.*\" target=\"lib\\netstandard2.0\\ca\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\ca\\*.*\" target=\"lib\\net8.0\\ca\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\ca\\*.*\" target=\"lib\\net48\\ca\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\ca\\*.*\" target=\"lib\\net10.0\\ca\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.cs.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.cs</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (cs)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Czech (cs)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>cs</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\cs\\*.*\" target=\"lib\\netstandard2.0\\cs\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\cs\\*.*\" target=\"lib\\net8.0\\cs\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\cs\\*.*\" target=\"lib\\net48\\cs\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\cs\\*.*\" target=\"lib\\net10.0\\cs\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.da.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.da</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (da)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Danish (da)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>da</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\da\\*.*\" target=\"lib\\netstandard2.0\\da\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\da\\*.*\" target=\"lib\\net8.0\\da\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\da\\*.*\" target=\"lib\\net48\\da\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\da\\*.*\" target=\"lib\\net10.0\\da\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.de.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.de</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (de)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale German (de)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>de</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\de\\*.*\" target=\"lib\\netstandard2.0\\de\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\de\\*.*\" target=\"lib\\net8.0\\de\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\de\\*.*\" target=\"lib\\net48\\de\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\de\\*.*\" target=\"lib\\net10.0\\de\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.el.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.el</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (el)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Greek (el)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>el</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\el\\*.*\" target=\"lib\\netstandard2.0\\el\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\el\\*.*\" target=\"lib\\net8.0\\el\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\el\\*.*\" target=\"lib\\net48\\el\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\el\\*.*\" target=\"lib\\net10.0\\el\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.es.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.es</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (es)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Spanish (es)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>es</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\es\\*.*\" target=\"lib\\netstandard2.0\\es\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\es\\*.*\" target=\"lib\\net8.0\\es\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\es\\*.*\" target=\"lib\\net48\\es\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\es\\*.*\" target=\"lib\\net10.0\\es\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.fa.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.fa</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (fa)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Persian (fa)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>fa</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\fa\\*.*\" target=\"lib\\netstandard2.0\\fa\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\fa\\*.*\" target=\"lib\\net8.0\\fa\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\fa\\*.*\" target=\"lib\\net48\\fa\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\fa\\*.*\" target=\"lib\\net10.0\\fa\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.fi.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.fi</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (fi)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Finnish (Finland) (fi)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>fi</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\fi\\*.*\" target=\"lib\\netstandard2.0\\fi\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\fi\\*.*\" target=\"lib\\net8.0\\fi\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\fi\\*.*\" target=\"lib\\net48\\fi\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\fi\\*.*\" target=\"lib\\net10.0\\fi\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.fil.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.fil</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (fil)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Filipino (Philippines) (fil)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>fil</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\fil\\*.*\" target=\"lib\\netstandard2.0\\fil\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\fil\\*.*\" target=\"lib\\net8.0\\fil\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\fil\\*.*\" target=\"lib\\net48\\fil\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\fil\\*.*\" target=\"lib\\net10.0\\fil\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.fr.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.fr</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (fr)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale French (fr)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>fr</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\fr\\*.*\" target=\"lib\\netstandard2.0\\fr\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\fr\\*.*\" target=\"lib\\net8.0\\fr\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\fr\\*.*\" target=\"lib\\net48\\fr\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\fr\\*.*\" target=\"lib\\net10.0\\fr\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.he.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.he</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (he)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Hebrew (he)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>he</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\he\\*.*\" target=\"lib\\netstandard2.0\\he\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\he\\*.*\" target=\"lib\\net8.0\\he\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\he\\*.*\" target=\"lib\\net48\\he\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\he\\*.*\" target=\"lib\\net10.0\\he\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.hr.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.hr</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (hr)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Croatian (hr)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>hr</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\hr\\*.*\" target=\"lib\\netstandard2.0\\hr\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\hr\\*.*\" target=\"lib\\net8.0\\hr\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\hr\\*.*\" target=\"lib\\net48\\hr\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\hr\\*.*\" target=\"lib\\net10.0\\hr\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.hu.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.hu</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (hu)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Hungarian (hu)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>hu</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\hu\\*.*\" target=\"lib\\netstandard2.0\\hu\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\hu\\*.*\" target=\"lib\\net8.0\\hu\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\hu\\*.*\" target=\"lib\\net48\\hu\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\hu\\*.*\" target=\"lib\\net10.0\\hu\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.hy.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.hy</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (hy)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Armenian (hy)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>hy</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\hy\\*.*\" target=\"lib\\netstandard2.0\\hy\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\hy\\*.*\" target=\"lib\\net8.0\\hy\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\hy\\*.*\" target=\"lib\\net48\\hy\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\hy\\*.*\" target=\"lib\\net10.0\\hy\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>\r\n"
  },
  {
    "path": "NuSpecs/Humanizer.Core.id.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.id</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (id)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Indonesian (id)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>id</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\id\\*.*\" target=\"lib\\netstandard2.0\\id\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\id\\*.*\" target=\"lib\\net8.0\\id\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\id\\*.*\" target=\"lib\\net48\\id\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\id\\*.*\" target=\"lib\\net10.0\\id\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.is.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.is</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (is)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Icelandic (is)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>is</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\is\\*.*\" target=\"lib\\netstandard2.0\\is\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\is\\*.*\" target=\"lib\\net8.0\\is\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\is\\*.*\" target=\"lib\\net48\\is\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\is\\*.*\" target=\"lib\\net10.0\\is\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.it.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.it</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (it)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Italian (it)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>it</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\it\\*.*\" target=\"lib\\netstandard2.0\\it\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\it\\*.*\" target=\"lib\\net8.0\\it\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\it\\*.*\" target=\"lib\\net48\\it\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\it\\*.*\" target=\"lib\\net10.0\\it\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.ja.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.ja</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (ja)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Japanese (ja)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>ja</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\ja\\*.*\" target=\"lib\\netstandard2.0\\ja\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\ja\\*.*\" target=\"lib\\net8.0\\ja\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\ja\\*.*\" target=\"lib\\net48\\ja\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\ja\\*.*\" target=\"lib\\net10.0\\ja\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.ko.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.ko</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (ko)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Korean (South Korea) (ko)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <language>ko</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\ko\\*.*\" target=\"lib\\netstandard2.0\\ko\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\ko\\*.*\" target=\"lib\\net8.0\\ko\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\ko\\*.*\" target=\"lib\\net48\\ko\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\ko\\*.*\" target=\"lib\\net10.0\\ko\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.ku.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.ku</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (ku)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Central Kurdish (ku)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>ku</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\ku\\*.*\" target=\"lib\\netstandard2.0\\ku\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\ku\\*.*\" target=\"lib\\net8.0\\ku\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\ku\\*.*\" target=\"lib\\net48\\ku\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\ku\\*.*\" target=\"lib\\net10.0\\ku\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.lb.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.lb</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (lb)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Luxembourgish (lb)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>lb</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\lb\\*.*\" target=\"lib\\netstandard2.0\\lb\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\lb\\*.*\" target=\"lib\\net8.0\\lb\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\lb\\*.*\" target=\"lib\\net48\\lb\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\lb\\*.*\" target=\"lib\\net10.0\\lb\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.lt.nuspec",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.lt</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (lt)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Lithuanian (lt)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>lt</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\lt\\*.*\" target=\"lib\\netstandard2.0\\lt\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\lt\\*.*\" target=\"lib\\net8.0\\lt\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\lt\\*.*\" target=\"lib\\net48\\lt\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\lt\\*.*\" target=\"lib\\net10.0\\lt\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.lv.nuspec",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.lv</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (lv)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Latvian (lv)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>lv</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\lv\\*.*\" target=\"lib\\netstandard2.0\\lv\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\lv\\*.*\" target=\"lib\\net8.0\\lv\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\lv\\*.*\" target=\"lib\\net48\\lv\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\lv\\*.*\" target=\"lib\\net10.0\\lv\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.ms.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.ms</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (ms)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Malay (Malaysia) (ms)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <language>ms</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\ms\\*.*\" target=\"lib\\netstandard2.0\\ms\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\ms\\*.*\" target=\"lib\\net8.0\\ms\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\ms\\*.*\" target=\"lib\\net48\\ms\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\ms\\*.*\" target=\"lib\\net10.0\\ms\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.mt.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.mt</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (mt)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Maltese (mt)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>mt</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\mt\\*.*\" target=\"lib\\netstandard2.0\\mt\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\mt\\*.*\" target=\"lib\\net8.0\\mt\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\mt\\*.*\" target=\"lib\\net48\\mt\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\mt\\*.*\" target=\"lib\\net10.0\\mt\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.nb.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.nb</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (nb)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Norwegian Bokmål (nb)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>nb</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\nb\\*.*\" target=\"lib\\netstandard2.0\\nb\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\nb\\*.*\" target=\"lib\\net8.0\\nb\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\nb\\*.*\" target=\"lib\\net48\\nb\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\nb\\*.*\" target=\"lib\\net10.0\\nb\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.nl.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.nl</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (nl)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Dutch (nl)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>nl</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\nl\\*.*\" target=\"lib\\netstandard2.0\\nl\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\nl\\*.*\" target=\"lib\\net8.0\\nl\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\nl\\*.*\" target=\"lib\\net48\\nl\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\nl\\*.*\" target=\"lib\\net10.0\\nl\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (en)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer core package that contains the library and the neutral language (English) resources</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <language>en</language>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <dependencies>\r\n      <group targetFramework=\".NETStandard2.0\">\r\n        <dependency id=\"System.Collections.Immutable\" version=\"10.0.5\" exclude=\"Build,Analyzers\" />\r\n        <dependency id=\"System.ComponentModel.Annotations\" version=\"5.0.0\" exclude=\"Build,Analyzers\" />\r\n        <dependency id=\"System.Memory\" version=\"4.6.3\" exclude=\"Build,Analyzers\" />\r\n      </group>\r\n      <group targetFramework=\"net48\">\r\n        <dependency id=\"System.Collections.Immutable\" version=\"10.0.5\" exclude=\"Build,Analyzers\" />\r\n        <dependency id=\"System.ComponentModel.Annotations\" version=\"5.0.0\" exclude=\"Build,Analyzers\" />\r\n        <dependency id=\"System.Memory\" version=\"4.6.3\" exclude=\"Build,Analyzers\" />\r\n      </group>\r\n      <group targetFramework=\"net8.0\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\Humanizer.dll\" target=\"lib\\netstandard2.0\" />\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\Humanizer.xml\" target=\"lib\\netstandard2.0\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\Humanizer.dll\" target=\"lib\\net48\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\Humanizer.xml\" target=\"lib\\net48\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\Humanizer.dll\" target=\"lib\\net8.0\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\Humanizer.xml\" target=\"lib\\net8.0\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\Humanizer.dll\" target=\"lib\\net10.0\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\Humanizer.xml\" target=\"lib\\net10.0\" />\r\n    <file src=\"Humanizer.Analyzers\\bin\\Release\\roslyn3.8\\netstandard2.0\\Humanizer.Analyzers.dll\" target=\"analyzers\\dotnet\\roslyn3.8\\cs\" />\r\n    <file src=\"Humanizer.Analyzers\\bin\\Release\\roslyn4.8\\netstandard2.0\\Humanizer.Analyzers.dll\" target=\"analyzers\\dotnet\\roslyn4.8\\cs\" />\r\n    <file src=\"Humanizer.Analyzers\\bin\\Release\\roslyn4.14\\netstandard2.0\\Humanizer.Analyzers.dll\" target=\"analyzers\\dotnet\\roslyn4.14\\cs\" />\r\n    <file src=\"Humanizer.Analyzers\\build\\Humanizer.Core.targets\" target=\"buildTransitive\\Humanizer.Core.targets\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>\r\n"
  },
  {
    "path": "NuSpecs/Humanizer.Core.pl.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.pl</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (pl)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Polish (pl)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>pl</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\pl\\*.*\" target=\"lib\\netstandard2.0\\pl\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\pl\\*.*\" target=\"lib\\net8.0\\pl\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\pl\\*.*\" target=\"lib\\net48\\pl\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\pl\\*.*\" target=\"lib\\net10.0\\pl\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.pt-BR.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.pt-BR</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (pt-BR)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Portuguese, Brazil (pt-BR)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>pt-BR</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\pt-BR\\*.*\" target=\"lib\\netstandard2.0\\pt-BR\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\pt-BR\\*.*\" target=\"lib\\net8.0\\pt-BR\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\pt-BR\\*.*\" target=\"lib\\net48\\pt-BR\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\pt-BR\\*.*\" target=\"lib\\net10.0\\pt-BR\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.pt.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.pt</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (pt)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Portuguese (pt)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>pt</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\pt\\*.*\" target=\"lib\\netstandard2.0\\pt\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\pt\\*.*\" target=\"lib\\net8.0\\pt\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\pt\\*.*\" target=\"lib\\net48\\pt\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\pt\\*.*\" target=\"lib\\net10.0\\pt\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.ro.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.ro</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (ro)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Romanian (ro)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>ro</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\ro\\*.*\" target=\"lib\\netstandard2.0\\ro\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\ro\\*.*\" target=\"lib\\net8.0\\ro\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\ro\\*.*\" target=\"lib\\net48\\ro\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\ro\\*.*\" target=\"lib\\net10.0\\ro\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.ru.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.ru</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (ru)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Russian (ru)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>ru</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\ru\\*.*\" target=\"lib\\netstandard2.0\\ru\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\ru\\*.*\" target=\"lib\\net8.0\\ru\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\ru\\*.*\" target=\"lib\\net48\\ru\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\ru\\*.*\" target=\"lib\\net10.0\\ru\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.sk.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.sk</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (sk)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Slovak (sk)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>sk</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\sk\\*.*\" target=\"lib\\netstandard2.0\\sk\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\sk\\*.*\" target=\"lib\\net8.0\\sk\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\sk\\*.*\" target=\"lib\\net48\\sk\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\sk\\*.*\" target=\"lib\\net10.0\\sk\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.sl.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.sl</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (sl)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Slovenian (sl)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>sl</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\sl\\*.*\" target=\"lib\\netstandard2.0\\sl\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\sl\\*.*\" target=\"lib\\net8.0\\sl\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\sl\\*.*\" target=\"lib\\net48\\sl\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\sl\\*.*\" target=\"lib\\net10.0\\sl\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.sr-Latn.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.sr-Latn</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (sr-Latn)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Serbian (sr-Latn)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>sr-Latn</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\sr-Latn\\*.*\" target=\"lib\\netstandard2.0\\sr-Latn\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\sr-Latn\\*.*\" target=\"lib\\net8.0\\sr-Latn\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\sr-Latn\\*.*\" target=\"lib\\net48\\sr-Latn\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\sr-Latn\\*.*\" target=\"lib\\net10.0\\sr-Latn\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.sr.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.sr</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (sr)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Serbian (sr)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>sr</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\sr\\*.*\" target=\"lib\\netstandard2.0\\sr\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\sr\\*.*\" target=\"lib\\net8.0\\sr\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\sr\\*.*\" target=\"lib\\net48\\sr\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\sr\\*.*\" target=\"lib\\net10.0\\sr\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.sv.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.sv</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (sv)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Swedish (sv)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>sv</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\sv\\*.*\" target=\"lib\\netstandard2.0\\sv\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\sv\\*.*\" target=\"lib\\net8.0\\sv\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\sv\\*.*\" target=\"lib\\net48\\sv\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\sv\\*.*\" target=\"lib\\net10.0\\sv\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.ta.nuspec.unused",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package>\n  <metadata minClientVersion=\"2.12\">\n    <id>Humanizer.Core.ta</id>\n    <version>$version$</version>\n    <title>Humanizer Locale (ta)</title>\n    <authors>Mehdi Khalili, Claire Novotny</authors>\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\n    <icon>logo.png</icon>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Humanizer Locale Tamil (ta)</description>\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\n    <license type=\"expression\">MIT</license>\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\n    <language>ta</language>\n    <dependencies>\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\n    </dependencies>\n  </metadata>\n  <files>\n\t\t<file src=\"Humanizer\\bin\\Release\\netstandard2.0\\ta\\*.*\" target=\"lib\\netstandard2.0\\ta\" />\n\t\t<file src=\"Humanizer\\bin\\Release\\net8.0\\ta\\*.*\" target=\"lib\\net8.0\\ta\" />\n\t\t<file src=\"Humanizer\\bin\\Release\\net48\\ta\\*.*\" target=\"lib\\net48\\ta\" />\n\t\t<file src=\"Humanizer\\bin\\Release\\net10.0\\ta\\*.*\" target=\"lib\\net10.0\\ta\" />\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\n  </files>\n</package>\n"
  },
  {
    "path": "NuSpecs/Humanizer.Core.th.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.th</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (th-TH)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Thai (Thailand) (th)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <language>th</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\th\\*.*\" target=\"lib\\netstandard2.0\\th\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\th\\*.*\" target=\"lib\\net8.0\\th\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\th\\*.*\" target=\"lib\\net48\\th\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\th\\*.*\" target=\"lib\\net10.0\\th\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.tr.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.tr</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (tr)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Turkish (tr)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>tr</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\tr\\*.*\" target=\"lib\\netstandard2.0\\tr\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\tr\\*.*\" target=\"lib\\net8.0\\tr\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\tr\\*.*\" target=\"lib\\net48\\tr\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\tr\\*.*\" target=\"lib\\net10.0\\tr\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.uk.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.uk</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (uk)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Ukrainian (uk)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>uk</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\uk\\*.*\" target=\"lib\\netstandard2.0\\uk\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\uk\\*.*\" target=\"lib\\net8.0\\uk\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\uk\\*.*\" target=\"lib\\net48\\uk\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\uk\\*.*\" target=\"lib\\net10.0\\uk\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.uz-Cyrl-UZ.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.uz-Cyrl-UZ</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (uz-Cyrl-UZ)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Uzbek (Cyrillic, Uzbekistan) (uz-Cyrl-UZ)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>uz-Cyrl-UZ</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\uz-Cyrl-UZ\\*.*\" target=\"lib\\netstandard2.0\\uz-Cyrl-UZ\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\uz-Cyrl-UZ\\*.*\" target=\"lib\\net8.0\\uz-Cyrl-UZ\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\uz-Cyrl-UZ\\*.*\" target=\"lib\\net48\\uz-Cyrl-UZ\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\uz-Cyrl-UZ\\*.*\" target=\"lib\\net10.0\\uz-Cyrl-UZ\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.uz-Latn-UZ.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.uz-Latn-UZ</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (uz-Latn-UZ)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Uzbek (Latin, Uzbekistan) (uz-Latn-UZ)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>uz-Latn-UZ</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\uz-Latn-UZ\\*.*\" target=\"lib\\netstandard2.0\\uz-Latn-UZ\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\uz-Latn-UZ\\*.*\" target=\"lib\\net8.0\\uz-Latn-UZ\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\uz-Latn-UZ\\*.*\" target=\"lib\\net48\\uz-Latn-UZ\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\uz-Latn-UZ\\*.*\" target=\"lib\\net10.0\\uz-Latn-UZ\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.vi.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.vi</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (vi)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Vietnamese (vi)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>vi</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\vi\\*.*\" target=\"lib\\netstandard2.0\\vi\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\vi\\*.*\" target=\"lib\\net8.0\\vi\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\vi\\*.*\" target=\"lib\\net48\\vi\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\vi\\*.*\" target=\"lib\\net10.0\\vi\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.zh-CN.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.zh-CN</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (zh-CN)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Chinese (China) (zh-CN)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>zh-CN</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\zh-CN\\*.*\" target=\"lib\\netstandard2.0\\zh-CN\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\zh-CN\\*.*\" target=\"lib\\net8.0\\zh-CN\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\zh-CN\\*.*\" target=\"lib\\net48\\zh-CN\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\zh-CN\\*.*\" target=\"lib\\net10.0\\zh-CN\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.zh-Hans.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.zh-Hans</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (zh-Hans)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Chinese (zh-Hans)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>zh-Hans</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\zh-Hans\\*.*\" target=\"lib\\netstandard2.0\\zh-Hans\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\zh-Hans\\*.*\" target=\"lib\\net8.0\\zh-Hans\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\zh-Hans\\*.*\" target=\"lib\\net48\\zh-Hans\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\zh-Hans\\*.*\" target=\"lib\\net10.0\\zh-Hans\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.Core.zh-Hant.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"2.12\">\r\n    <id>Humanizer.Core.zh-Hant</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer Locale (zh-Hant)</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer Locale Chinese (zh-Hant)</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <language>zh-Hant</language>\r\n    <dependencies>\r\n       <dependency id=\"Humanizer.Core\" version=\"[$version$]\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"Humanizer\\bin\\Release\\netstandard2.0\\zh-Hant\\*.*\" target=\"lib\\netstandard2.0\\zh-Hant\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net8.0\\zh-Hant\\*.*\" target=\"lib\\net8.0\\zh-Hant\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net48\\zh-Hant\\*.*\" target=\"lib\\net48\\zh-Hant\" />\r\n    <file src=\"Humanizer\\bin\\Release\\net10.0\\zh-Hant\\*.*\" target=\"lib\\net10.0\\zh-Hant\" />\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>"
  },
  {
    "path": "NuSpecs/Humanizer.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package>\r\n  <metadata minClientVersion=\"6.13\">\r\n    <id>Humanizer</id>\r\n    <version>$version$</version>\r\n    <title>Humanizer</title>\r\n    <authors>Claire Novotny, Mehdi Khalili</authors>\r\n    <projectUrl>https://github.com/Humanizr/Humanizer</projectUrl>\r\n    <icon>logo.png</icon>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>Humanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities</description>\r\n    <copyright>Copyright (c) .NET Foundation and Contributors</copyright>\r\n    <license type=\"expression\">MIT</license>\r\n    <repository type=\"$RepositoryType$\" url=\"$RepositoryUrl$\" commit=\"$RepositoryCommit$\" />\r\n    <dependencies>\r\n      <dependency id=\"Humanizer.Core.af\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.ar\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.az\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.bg\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.bn\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.ca\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.cs\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.da\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.de\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.el\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.es\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.fa\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.fi\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.fil\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.fr\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.he\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.hr\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.hu\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.hy\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.id\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.is\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.it\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.ja\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.ko\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.ku\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.lb\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.lt\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.lv\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.ms\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.mt\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.nb\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.nl\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.pl\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.pt\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.pt-BR\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.ro\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.ru\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.sk\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.sl\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.sr\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.sr-Latn\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.sv\" version=\"$version$\" />\r\n      <!--<dependency id=\"Humanizer.Core.ta\" version=\"$version$\" /> no resources yet -->\r\n      <dependency id=\"Humanizer.Core.th\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.tr\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.uk\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.uz-Cyrl-UZ\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.uz-Latn-UZ\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.vi\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.zh-CN\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.zh-Hans\" version=\"$version$\" />\r\n      <dependency id=\"Humanizer.Core.zh-Hant\" version=\"$version$\" />\r\n    </dependencies>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"..\\logo.png\" target=\"logo.png\" />\r\n  </files>\r\n</package>\r\n"
  },
  {
    "path": "ResXManager.config.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Values xmlns=\"urn:tom-englert.de/Configuration/1/0\">\r\n  <Value Key=\"SortFileContentOnSave\">True</Value>\r\n</Values>"
  },
  {
    "path": "azure-pipelines.yml",
    "content": "trigger:\n- main\n- rel/*\n\npr:\n- main\n- rel/*\n\nvariables:\n  BuildConfiguration: Release\n  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true\n\nstages:\n- stage: Build\n  variables:\n  - group: 'Report Generator License Key'\n\n  jobs:\n  - job: Build\n    pool:\n      vmImage: windows-latest\n\n    steps:\n    - task: UseDotNet@2\n      displayName: 'Use .NET 8 SDK'\n      inputs:\n        version: 8.x\n\n    - task: UseDotNet@2\n      displayName: 'Use .NET 9 SDK'\n      inputs:\n        version: 9.x\n\n    - task: UseDotNet@2\n      displayName: 'Use .NET 10 SDK'\n      inputs:\n        includePreviewVersions: true\n        version: 10.x\n\n    - task: UseDotNet@2\n      displayName: 'Use .NET 11 SDK'\n      inputs:\n        includePreviewVersions: true\n        version: 11.x\n\n    - task: DotNetCoreCLI@2\n      inputs:\n        command: custom\n        custom: tool\n        arguments: install --tool-path . nbgv\n      displayName: Install NBGV tool\n\n    - script: nbgv cloud -c -a\n      displayName: Set Version\n\n    - task: DotNetCoreCLI@2\n      inputs:\n        command: build\n        projects: ./src/Humanizer/Humanizer.csproj\n        arguments: -c $(BuildConfiguration) /t:PackNuSpecs /p:PackageOutputPath=$(Build.ArtifactStagingDirectory)/Packages \n      displayName: Restore, Build, and Pack\n\n    - pwsh: |\n        $(Build.SourcesDirectory)/tests/verify-packages.ps1 `\n          -PackageVersion '$(NBGV_NuGetPackageVersion)' `\n          -PackagesDirectory '$(Build.ArtifactStagingDirectory)/Packages' `\n          -IncludeWapProjSmokeTest\n      displayName: Verify Package Structure and Dependencies\n      failOnStderr: false\n\n    - task: DotNetCoreCLI@2\n      inputs:\n        command: test\n        projects: |\n          tests/Humanizer.Tests/Humanizer.Tests.csproj\n          tests/Humanizer.Analyzers.Tests/Humanizer.Analyzers.Tests.csproj\n        arguments: -c $(BuildConfiguration) --coverage --xunit-info\n      displayName: Run Tests\n\n    # Generate code coverage report\n    # https://danielpalme.github.io/ReportGenerator/\n    - task: reportgenerator@5\n      displayName: Generate Code Coverage Report\n      inputs:\n        reports: '$(Agent.TempDirectory)/**/*.cobertura.xml'\n        targetdir: $(Build.ArtifactStagingDirectory)/coverageReports/ \n        reporttypes: HtmlInline_AzurePipelines_Dark;Cobertura;Badges\n        license: '$(ReportGeneratorLicenseKey)'\n        publishCodeCoverageResults: true\n      \n    - publish: $(Build.ArtifactStagingDirectory)/Packages\n      displayName: Publish build packages\n      artifact: BuildPackages\n\n\n- stage: CodeSign\n  dependsOn: Build\n  condition: and(succeeded('Build'), not(eq(variables['build.reason'], 'PullRequest')))\n  jobs:\n  - job: CodeSign\n    displayName: Code Signing\n    pool:\n      vmImage: windows-latest\n    variables:\n    - group: SignCLI Creds\n\n    steps:\n\n    # Retreive unsigned artifacts \n    - download: current\n      artifact: BuildPackages\n      displayName: Download build artifacts\n\n    - task: UseDotNet@2\n      displayName: 'Use .NET 10 SDK'\n      inputs:\n        includePreviewVersions: true\n        version: 10.x\n\n    # Install the code signing tool\n    - task: DotNetCoreCLI@2\n      inputs:\n        command: custom\n        custom: tool\n        arguments: install --tool-path . --prerelease sign \n      displayName: Install SignTool tool\n\n    - task: AzureCLI@2\n      inputs:\n        azureSubscription: 'AzureRM - Humanizr'\n        scriptType: pscore\n        scriptLocation: inlineScript\n        inlineScript: |\n          .\\sign code azure-key-vault `\n          \"**/*.nupkg\" `\n          --base-directory \"$(Pipeline.Workspace)\\BuildPackages\" `\n          --publisher-name \"Humanizer\" `\n          --description \"Humanizer\" `\n          --description-url \"https://github.com/Humanizr/Humanizer\" `\n          --azure-key-vault-certificate \"$(SignKeyVaultCertificate)\" `\n          --azure-key-vault-url \"$(SignKeyVaultUrl)\"\n      displayName: Sign packages\n    \n    # Publish the signed packages\n    - publish: $(Pipeline.Workspace)/BuildPackages\n      displayName: Publish Signed Packages\n      artifact: SignedPackages\n"
  },
  {
    "path": "docs/_config.yml",
    "content": "# Jekyll configuration for Humanizer GitHub Pages\ntitle: Humanizer\ndescription: Humanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities\nbaseurl: \"\" # the subpath of your site, e.g. /blog\nurl: \"\" # the base hostname & protocol for your site\n\n# Build settings\nmarkdown: kramdown\n\n# Use readme.md as the index page\ndefaults:\n  - scope:\n      path: \"\"\n    values:\n      layout: \"default\"\n"
  },
  {
    "path": "docs/_layouts/default.html",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>{{ page.title | default: site.title }}</title>\r\n    <meta name=\"description\" content=\"{{ page.description | default: site.description }}\">\r\n    <link rel=\"stylesheet\" href=\"{{ '/assets/css/style.css' | relative_url }}\">\r\n</head>\r\n<body>\r\n    <header>\r\n        <div class=\"container\">\r\n            <h1>{{ site.title }}</h1>\r\n            <p>{{ site.description }}</p>\r\n        </div>\r\n    </header>\r\n    \r\n    <main class=\"container\">\r\n        {{ content }}\r\n    </main>\r\n    \r\n    <footer>\r\n        <div class=\"container\">\r\n            <p>&copy; {{ 'now' | date: \"%Y\" }} Humanizer. Licensed under MIT.</p>\r\n            <p>\r\n                <a href=\"https://github.com/Humanizr/Humanizer\" target=\"_blank\">GitHub</a> |\r\n                <a href=\"https://www.nuget.org/packages/Humanizer\" target=\"_blank\">NuGet</a>\r\n            </p>\r\n        </div>\r\n    </footer>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "docs/assets/css/style.css",
    "content": "/* Root CSS variables for light mode (default) */\r\n:root {\r\n    --bg-color: #ffffff;\r\n    --text-color: #333333;\r\n    --header-bg: #f8f9fa;\r\n    --header-border: #e9ecef;\r\n    --link-color: #0366d6;\r\n    --link-hover: #0256b9;\r\n    --code-bg: #f6f8fa;\r\n    --code-border: #e1e4e8;\r\n    --footer-bg: #f8f9fa;\r\n    --footer-text: #586069;\r\n    --shadow: rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n/* Dark mode variables - automatically applied based on system preference */\r\n@media (prefers-color-scheme: dark) {\r\n    :root {\r\n        --bg-color: #0d1117;\r\n        --text-color: #c9d1d9;\r\n        --header-bg: #161b22;\r\n        --header-border: #30363d;\r\n        --link-color: #58a6ff;\r\n        --link-hover: #79c0ff;\r\n        --code-bg: #161b22;\r\n        --code-border: #30363d;\r\n        --footer-bg: #161b22;\r\n        --footer-text: #8b949e;\r\n        --shadow: rgba(0, 0, 0, 0.3);\r\n    }\r\n}\r\n\r\n/* Base styles */\r\n* {\r\n    margin: 0;\r\n    padding: 0;\r\n    box-sizing: border-box;\r\n}\r\n\r\nbody {\r\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif;\r\n    line-height: 1.6;\r\n    background-color: var(--bg-color);\r\n    color: var(--text-color);\r\n    transition: background-color 0.3s ease, color 0.3s ease;\r\n}\r\n\r\n.container {\r\n    max-width: 1200px;\r\n    margin: 0 auto;\r\n    padding: 0 20px;\r\n}\r\n\r\n/* Header styles */\r\nheader {\r\n    background-color: var(--header-bg);\r\n    border-bottom: 1px solid var(--header-border);\r\n    padding: 2rem 0;\r\n    margin-bottom: 2rem;\r\n    box-shadow: 0 2px 4px var(--shadow);\r\n    transition: background-color 0.3s ease, border-color 0.3s ease;\r\n}\r\n\r\nheader h1 {\r\n    font-size: 2.5rem;\r\n    margin-bottom: 0.5rem;\r\n    font-weight: 600;\r\n}\r\n\r\nheader p {\r\n    font-size: 1.1rem;\r\n    color: var(--footer-text);\r\n}\r\n\r\n/* Main content */\r\nmain {\r\n    min-height: 60vh;\r\n    padding: 2rem 0;\r\n}\r\n\r\n/* Typography */\r\nh1, h2, h3, h4, h5, h6 {\r\n    margin-top: 1.5rem;\r\n    margin-bottom: 1rem;\r\n    font-weight: 600;\r\n    line-height: 1.25;\r\n}\r\n\r\nh1 { font-size: 2rem; }\r\nh2 { font-size: 1.75rem; }\r\nh3 { font-size: 1.5rem; }\r\nh4 { font-size: 1.25rem; }\r\nh5 { font-size: 1rem; }\r\nh6 { font-size: 0.875rem; }\r\n\r\np {\r\n    margin-bottom: 1rem;\r\n}\r\n\r\n/* Links */\r\na {\r\n    color: var(--link-color);\r\n    text-decoration: none;\r\n    transition: color 0.2s ease;\r\n}\r\n\r\na:hover {\r\n    color: var(--link-hover);\r\n    text-decoration: underline;\r\n}\r\n\r\n/* Code blocks */\r\ncode {\r\n    background-color: var(--code-bg);\r\n    border: 1px solid var(--code-border);\r\n    border-radius: 3px;\r\n    padding: 0.2em 0.4em;\r\n    font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\r\n    font-size: 85%;\r\n    transition: background-color 0.3s ease, border-color 0.3s ease;\r\n}\r\n\r\npre {\r\n    background-color: var(--code-bg);\r\n    border: 1px solid var(--code-border);\r\n    border-radius: 6px;\r\n    padding: 1rem;\r\n    overflow-x: auto;\r\n    margin-bottom: 1rem;\r\n    transition: background-color 0.3s ease, border-color 0.3s ease;\r\n}\r\n\r\npre code {\r\n    background: none;\r\n    border: none;\r\n    padding: 0;\r\n}\r\n\r\n/* Lists */\r\nul, ol {\r\n    margin-bottom: 1rem;\r\n    padding-left: 2rem;\r\n}\r\n\r\nli {\r\n    margin-bottom: 0.5rem;\r\n}\r\n\r\n/* Footer */\r\nfooter {\r\n    background-color: var(--footer-bg);\r\n    border-top: 1px solid var(--header-border);\r\n    margin-top: 3rem;\r\n    padding: 2rem 0;\r\n    text-align: center;\r\n    color: var(--footer-text);\r\n    transition: background-color 0.3s ease, border-color 0.3s ease;\r\n}\r\n\r\nfooter p {\r\n    margin-bottom: 0.5rem;\r\n}\r\n\r\nfooter a {\r\n    color: var(--link-color);\r\n    margin: 0 0.5rem;\r\n}\r\n\r\n/* Responsive design */\r\n@media (max-width: 768px) {\r\n    header h1 {\r\n        font-size: 2rem;\r\n    }\r\n    \r\n    header p {\r\n        font-size: 1rem;\r\n    }\r\n    \r\n    .container {\r\n        padding: 0 15px;\r\n    }\r\n}\r\n\r\n/* Additional utility classes */\r\n.text-center {\r\n    text-align: center;\r\n}\r\n\r\n.mt-1 { margin-top: 1rem; }\r\n.mt-2 { margin-top: 2rem; }\r\n.mb-1 { margin-bottom: 1rem; }\r\n.mb-2 { margin-bottom: 2rem; }\r\n"
  },
  {
    "path": "docs/extensibility.md",
    "content": "# Extensibility\r\n\r\nHumanizer is designed to be extensible, allowing you to customize and extend its behavior to meet your specific needs.\r\n\r\n## Custom String Transformers\r\n\r\nImplement `IStringTransformer` to create custom string transformations:\r\n\r\n```csharp\r\npublic interface IStringTransformer\r\n{\r\n    string Transform(string input);\r\n}\r\n```\r\n\r\n### Example: Custom Title Case\r\n\r\n```csharp\r\npublic class MyTitleCase : IStringTransformer\r\n{\r\n    private readonly HashSet<string> _articlesAndPrepositions = new()\r\n    {\r\n        \"a\", \"an\", \"the\", \"and\", \"but\", \"or\", \"for\", \"nor\", \"on\", \"at\", \"to\", \"from\", \"by\"\r\n    };\r\n\r\n    public string Transform(string input)\r\n    {\r\n        var words = input.Split(' ');\r\n        for (int i = 0; i < words.Length; i++)\r\n        {\r\n            // Always capitalize first word\r\n            if (i == 0 || !_articlesAndPrepositions.Contains(words[i].ToLower()))\r\n            {\r\n                words[i] = char.ToUpper(words[i][0]) + words[i].Substring(1).ToLower();\r\n            }\r\n        }\r\n        return string.Join(\" \", words);\r\n    }\r\n}\r\n\r\n// Usage\r\n\"the quick brown fox\".Transform(new MyTitleCase());\r\n// => \"The Quick Brown Fox\"\r\n```\r\n\r\nThe advantage over the built-in `LetterCasing` enum is complete control over the transformation logic.\r\n\r\n## Custom Truncators\r\n\r\nImplement `ITruncator` to create custom truncation strategies:\r\n\r\n```csharp\r\npublic interface ITruncator\r\n{\r\n    string Truncate(string value, int length, string truncationString, \r\n                   TruncateFrom truncateFrom = TruncateFrom.Right);\r\n}\r\n```\r\n\r\n### Example: Sentence Boundary Truncator\r\n\r\n```csharp\r\npublic class SentenceTruncator : ITruncator\r\n{\r\n    public string Truncate(string value, int length, string truncationString, \r\n                          TruncateFrom truncateFrom)\r\n    {\r\n        if (value.Length <= length)\r\n            return value;\r\n\r\n        // Find the last sentence boundary before the length limit\r\n        var truncated = value.Substring(0, length);\r\n        var lastPeriod = truncated.LastIndexOf('.');\r\n        \r\n        if (lastPeriod > 0)\r\n        {\r\n            return truncated.Substring(0, lastPeriod + 1);\r\n        }\r\n\r\n        // Fall back to word boundary\r\n        var lastSpace = truncated.LastIndexOf(' ');\r\n        if (lastSpace > 0)\r\n        {\r\n            return truncated.Substring(0, lastSpace) + truncationString;\r\n        }\r\n\r\n        return truncated + truncationString;\r\n    }\r\n}\r\n\r\n// Usage\r\n\"First sentence. Second sentence. Third sentence.\"\r\n    .Truncate(30, \"...\", new SentenceTruncator());\r\n// => \"First sentence.\"\r\n```\r\n\r\n## Custom Vocabularies\r\n\r\nExtend the pluralization/singularization vocabulary:\r\n\r\n```csharp\r\n// Add irregular word\r\nVocabularies.Default.AddIrregular(\"person\", \"people\");\r\n\r\n// Add uncountable word\r\nVocabularies.Default.AddUncountable(\"equipment\");\r\n\r\n// Add plural rule\r\nVocabularies.Default.AddPlural(\"(quiz)$\", \"$1zes\");\r\n\r\n// Add singular rule\r\nVocabularies.Default.AddSingular(\"(vert|ind)ices$\", \"$1ex\");\r\n```\r\n\r\n### Match Ending Control\r\n\r\n```csharp\r\n// Match only \"person\" (not \"salesperson\")\r\nVocabularies.Default.AddIrregular(\"person\", \"people\", matchEnding: false);\r\n\r\n// Match \"person\" and \"salesperson\"\r\nVocabularies.Default.AddIrregular(\"person\", \"people\", matchEnding: true);\r\n```\r\n\r\n## Custom Number to Words Converters\r\n\r\nImplement language-specific number to words conversion:\r\n\r\n```csharp\r\npublic interface INumberToWordsConverter\r\n{\r\n    string Convert(long number);\r\n    string Convert(long number, GrammaticalGender gender);\r\n    string ConvertToOrdinal(int number);\r\n    string ConvertToOrdinal(int number, GrammaticalGender gender);\r\n}\r\n```\r\n\r\nRegister your converter:\r\n\r\n```csharp\r\nConfigurator.NumberToWordsConverters.Register(\"my-culture\", \r\n    new MyNumberToWordsConverter());\r\n```\r\n\r\n## Custom Formatters\r\n\r\nImplement custom date/time/number formatting:\r\n\r\n```csharp\r\npublic interface IFormatter\r\n{\r\n    string DateHumanize(DateTime value, DateTime? comparisonBase, \r\n                       CultureInfo culture);\r\n    string TimeSpanHumanize(TimeSpan timeSpan, int precision, \r\n                           CultureInfo culture);\r\n    // ... other methods\r\n}\r\n```\r\n\r\nRegister your formatter:\r\n\r\n```csharp\r\nConfigurator.Formatters.Register(\"my-culture\", new MyFormatter());\r\n```\r\n\r\n## Configuration\r\n\r\nCustomize Humanizer's behavior globally:\r\n\r\n```csharp\r\n// Custom enum description property name\r\nConfigurator.EnumDescriptionPropertyLocator = p => p.Name == \"Info\";\r\n\r\n// Custom collection separator\r\nConfigurator.CollectionFormatters.Register(\"my-culture\", \r\n    new MyCollectionFormatter());\r\n```\r\n\r\n## Best Practices\r\n\r\n1. **Implement interfaces rather than extending classes** - This ensures compatibility with future versions\r\n\r\n2. **Register custom components at application startup** - Do this once rather than on every use\r\n\r\n3. **Thread safety** - Make custom implementations thread-safe if they'll be used concurrently\r\n\r\n4. **Test thoroughly** - Custom implementations should have comprehensive test coverage\r\n\r\n5. **Consider culture** - If your custom component is culture-specific, register it appropriately\r\n\r\n## Related Topics\r\n\r\n- [Custom Vocabularies](custom-vocabularies.md) - Detailed pluralization customization\r\n- [Localization](localization.md) - Multi-language support\r\n- [Configuration](configuration.md) - Global configuration options\r\n"
  },
  {
    "path": "docs/index.md",
    "content": "# Humanizer Documentation\r\n\r\nHumanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities.\r\n\r\n## Getting Started\r\n\r\n- [Installation](installation.md) - How to install and configure Humanizer\r\n- [Quick Start Guide](quick-start.md) - Get up and running quickly\r\n\r\n## Core Features\r\n\r\n### String Manipulation\r\n- [String Humanization](string-humanization.md) - Transform computerized strings to human-readable text\r\n- [String Dehumanization](string-dehumanization.md) - Convert back to PascalCase\r\n- [String Transformations](string-transformations.md) - Apply custom transformations with IStringTransformer\r\n- [String Truncation](string-truncation.md) - Intelligent truncation strategies\r\n\r\n### Enumerations\r\n- [Enum Humanization](enum-humanization.md) - Make enums readable\r\n- [Enum Dehumanization](enum-dehumanization.md) - Parse strings back to enums\r\n\r\n### Date and Time\r\n- [DateTime Humanization](datetime-humanization.md) - Relative time (\"2 hours ago\", \"tomorrow\")\r\n- [TimeSpan Humanization](timespan-humanization.md) - Human-readable durations\r\n- [Fluent Date API](fluent-date.md) - Readable date/time construction and manipulation\r\n- [DateTime to Ordinal Words](datetime-ordinal-words.md) - \"1st of January 2020\"\r\n- [TimeOnly to Clock Notation](timeonly-clock-notation.md) - \"half past two\" (.NET 6+)\r\n\r\n### Numbers\r\n- [Number to Words](number-to-words.md) - \"123\" → \"one hundred twenty-three\"\r\n- [Number to Ordinal Words](number-to-ordinal-words.md) - \"1\" → \"first\"\r\n- [Words to Number](words-to-number.md) - \"forty-two\" → 42\r\n- [Ordinalization](ordinalization.md) - \"1\" → \"1st\"\r\n- [Roman Numerals](roman-numerals.md) - Convert to/from Roman numerals\r\n- [Metric Numerals](metric-numerals.md) - \"1230\" → \"1.23k\"\r\n- [Number to Numbers](number-to-numbers.md) - Fluent API for large numbers\r\n- [Tupleize](tupleize.md) - \"2\" → \"double\"\r\n\r\n### Collections\r\n- [Collection Humanization](collection-humanization.md) - Turn lists into \"item1, item2, and item3\"\r\n- [ToQuantity](to-quantity.md) - \"5 cases\", \"1 man\", \"2 men\"\r\n\r\n### Word Manipulation\r\n- [Pluralization](pluralization.md) - Handle singular/plural forms\r\n- [Singularization](singularization.md) - Convert plurals to singular\r\n- [Inflector Methods](inflector-methods.md) - Pascalize, Camelize, Underscore, Kebaberize, etc.\r\n\r\n### Specialized Features\r\n- [ByteSize](bytesize.md) - Human-readable byte sizes\r\n- [Heading](heading.md) - Convert headings to text\r\n- [Time Unit Symbols](time-unit-symbols.md) - \"ms\", \"s\", \"min\", etc.\r\n\r\n## Advanced Topics\r\n\r\n- [Localization](localization.md) - Multi-language support\r\n- [Custom Vocabularies](custom-vocabularies.md) - Add custom pluralization rules\r\n- [Extensibility](extensibility.md) - Implement custom transformers and truncators\r\n- [Configuration](configuration.md) - Customize Humanizer behavior\r\n\r\n## Migration Guides\r\n\r\n- [Migrating from 2.14.1 to 3.0.8](migration-v3.md) - Comprehensive breaking changes, patch-line fixes, and known regressions\r\n- [Namespace migration details](v3-namespace-migration.md) - Namespace-only migration guidance and analyzer usage\r\n\r\n## API Reference\r\n\r\n- [Complete API Reference](api-reference.md) - Full API documentation\r\n\r\n## Contributing\r\n\r\n- [Contributing Guide](../CONTRIBUTING.md) - How to contribute to Humanizer\r\n"
  },
  {
    "path": "docs/installation.md",
    "content": "# Installation\r\n\r\n## NuGet Packages\r\n\r\nHumanizer is available as NuGet packages with different language support options:\r\n\r\n### All Languages (Recommended)\r\n\r\n```bash\r\ndotnet add package Humanizer\r\n```\r\n\r\nThis package includes all supported languages and pulls in `Humanizer.Core` plus all language satellite packages.\r\n\r\n### English Only\r\n\r\n```bash\r\ndotnet add package Humanizer.Core\r\n```\r\n\r\nThis package includes only English language support, resulting in a smaller download size.\r\n\r\n### Specific Languages\r\n\r\nYou can install `Humanizer.Core` along with specific language packages:\r\n\r\n```bash\r\ndotnet add package Humanizer.Core\r\ndotnet add package Humanizer.Core.fr  # French\r\ndotnet add package Humanizer.Core.es  # Spanish\r\ndotnet add package Humanizer.Core.de  # German\r\n# Add as many language packages as needed\r\n```\r\n\r\nAvailable language packages include: af, ar, az, bg, bn, ca, cs, da, de, el, es, fa, fi, fil, fr, he, hr, hu, hy, id, is, it, ja, ko, ku, lb, lt, lv, ms, mt, nb, nl, pl, pt, pt-BR, ro, ru, sk, sl, sr, sr-Latn, sv, th, tr, uk, uz-Cyrl-UZ, uz-Latn-UZ, vi, zh-CN, zh-Hans, zh-Hant.\r\n\r\n## Supported Frameworks\r\n\r\nHumanizer supports the following .NET target frameworks:\r\n\r\n- **.NET 10.0** (net10.0)\r\n- **.NET 8.0** (net8.0)\r\n- **.NET Framework 4.8** (net48)\r\n- **.NET Standard 2.0** (netstandard2.0) - Special case for Roslyn Analyzers and MSBuild tasks\r\n\r\n> **Note:** While .NET Framework versions 4.6.1 through 4.7.2 can technically consume netstandard2.0 libraries, they are **not officially supported** by Humanizer and may not work correctly. Use one of the explicitly supported frameworks above.\r\n\r\n## Requirements for Humanizer 3.0\r\n\r\n> [!IMPORTANT]\r\n> The `Humanizer` metapackage requires the NuGet locale parsing fix shipped in **.NET SDK 9.0.200** and corresponding Visual Studio/MSBuild updates.\r\n>\r\n> Restore operations must run on:\r\n> - .NET SDK 9.0.200 or newer, OR\r\n> - Visual Studio 2022/MSBuild versions that include the locale parsing patch\r\n>\r\n> Older SDKs/MSBuild versions will fail to restore the metapackage because they do not recognize three-letter locale identifiers.\r\n>\r\n> **Workaround for older tooling:** Reference `Humanizer.Core` directly and add desired `Humanizer.Core.<locale>` satellite packages individually.\r\n\r\n## Source Link Support\r\n\r\nHumanizer symbols are source-indexed with [SourceLink](https://github.com/dotnet/sourcelink) and included in the package. This means you can step through Humanizer's source code while debugging your own application.\r\n\r\n## Verification\r\n\r\nAfter installation, verify Humanizer is working:\r\n\r\n```csharp\r\nusing Humanizer;\r\n\r\n\"PascalCaseString\".Humanize(); // Returns \"Pascal case string\"\r\nDateTime.UtcNow.AddHours(-2).Humanize(); // Returns \"2 hours ago\"\r\n```\r\n\r\n## Next Steps\r\n\r\n- [Quick Start Guide](quick-start.md)\r\n- [Migration from 2.14.1 to 3.0.8](migration-v3.md)\r\n- [String Humanization](string-humanization.md)\r\n- [DateTime Humanization](datetime-humanization.md)\r\n"
  },
  {
    "path": "docs/localization.md",
    "content": "# Localization\r\n\r\nHumanizer supports over 40 languages and cultures, with localized implementations for most features.\r\n\r\n## Supported Languages\r\n\r\nHumanizer includes localization for:\r\n\r\nArabic (ar), Azerbaijani (az), Bulgarian (bg), Bengali (bn-BD), Czech (cs), Danish (da), German (de), Greek (el), Spanish (es), Persian (fa), Finnish (fi), French (fr), Hebrew (he), Croatian (hr), Hungarian (hu), Armenian (hy), Indonesian (id), Icelandic (is), Italian (it), Japanese (ja), Korean (ko), Kurdish (ku), Latvian (lv), Malay (ms-MY), Maltese (mt), Norwegian Bokmål (nb, nb-NO), Dutch (nl), Polish (pl), Portuguese (pt, pt-BR), Romanian (ro), Russian (ru), Slovak (sk), Slovenian (sl), Serbian (sr, sr-Latn), Swedish (sv), Thai (th), Turkish (tr), Ukrainian (uk), Uzbek (uz-Cyrl-UZ, uz-Latn-UZ), Vietnamese (vi), Chinese (zh-CN, zh-Hans, zh-Hant).\r\n\r\n## Installing Language Packages\r\n\r\n### All Languages\r\n\r\n```bash\r\ndotnet add package Humanizer\r\n```\r\n\r\n### Specific Languages\r\n\r\n```bash\r\ndotnet add package Humanizer.Core\r\ndotnet add package Humanizer.Core.fr  # French\r\ndotnet add package Humanizer.Core.es  # Spanish\r\ndotnet add package Humanizer.Core.de  # German\r\n```\r\n\r\n## Using Cultures\r\n\r\nMost Humanizer methods respect the current thread's `CurrentCulture` or `CurrentUICulture`. You can also explicitly specify a culture:\r\n\r\n### DateTime Humanization\r\n\r\n```csharp\r\nvar date = DateTime.UtcNow.AddHours(-2);\r\n\r\n// Uses current culture\r\ndate.Humanize(); \r\n\r\n// Explicit culture\r\ndate.Humanize(culture: new CultureInfo(\"fr-FR\")); \r\n// => \"il y a 2 heures\"\r\n\r\ndate.Humanize(culture: new CultureInfo(\"es\")); \r\n// => \"hace 2 horas\"\r\n```\r\n\r\n### Number to Words\r\n\r\n```csharp\r\n1234.ToWords(); // Uses current culture\r\n\r\n1234.ToWords(new CultureInfo(\"es\")); \r\n// => \"mil doscientos treinta y cuatro\"\r\n\r\n1234.ToWords(new CultureInfo(\"fr\")); \r\n// => \"mille deux cent trente-quatre\"\r\n```\r\n\r\n### TimeSpan Humanization\r\n\r\n```csharp\r\nTimeSpan.FromDays(1).Humanize(); // Uses current culture\r\n\r\nTimeSpan.FromDays(1).Humanize(culture: new CultureInfo(\"de\")); \r\n// => \"1 Tag\"\r\n\r\nTimeSpan.FromDays(3).Humanize(culture: new CultureInfo(\"ru\")); \r\n// => \"3 дня\"\r\n```\r\n\r\n## Grammatical Features\r\n\r\nSome languages require additional grammatical information:\r\n\r\n### Grammatical Gender\r\n\r\n```csharp\r\n// Russian\r\n1.ToWords(GrammaticalGender.Masculine, new CultureInfo(\"ru\")); \r\n// => \"один\"\r\n\r\n1.ToWords(GrammaticalGender.Feminine, new CultureInfo(\"ru\")); \r\n// => \"одна\"\r\n\r\n// Portuguese ordinals\r\n1.Ordinalize(GrammaticalGender.Masculine); \r\n// => \"1º\"\r\n\r\n1.Ordinalize(GrammaticalGender.Feminine); \r\n// => \"1ª\"\r\n```\r\n\r\n### Grammatical Case\r\n\r\n```csharp\r\n// Russian - date to ordinal words\r\nvar date = new DateTime(2020, 1, 1);\r\n\r\ndate.ToOrdinalWords(GrammaticalCase.Nominative); \r\n// Different form\r\n\r\ndate.ToOrdinalWords(GrammaticalCase.Genitive); \r\n// Different form\r\n```\r\n\r\n### Word Forms\r\n\r\n```csharp\r\n// Spanish - ordinal variations\r\n3.Ordinalize(GrammaticalGender.Masculine, WordForm.Abbreviation); \r\n// => \"3.er\"\r\n\r\n3.Ordinalize(GrammaticalGender.Masculine, WordForm.Normal); \r\n// => \"3.º\"\r\n```\r\n\r\n## Feature Support by Language\r\n\r\nNot all features are available in all languages:\r\n\r\n| Feature | Widely Supported | Limited Support |\r\n|---------|------------------|-----------------|\r\n| String Humanization | All languages | - |\r\n| DateTime Humanization | All languages | - |\r\n| TimeSpan Humanization | All languages | - |\r\n| Number to Words | Most languages | Some Asian languages |\r\n| Ordinalization | Most European languages | Limited in Asian languages |\r\n| Pluralization | English only | - |\r\n\r\nCheck the specific feature documentation to see which languages are supported.\r\n\r\n## Contributing Localizations\r\n\r\nTo contribute a new language or improve existing localizations:\r\n\r\n1. Implement the required interfaces (e.g., `IFormatter`, `IDateToOrdinalWordConverter`)\r\n2. Add resource files with translated strings\r\n3. Register the formatter in `Configurator`\r\n4. Add tests for the new language\r\n\r\nSee the [Contributing Guide](../CONTRIBUTING.md) for details.\r\n\r\n## Related Topics\r\n\r\n- [Installation](installation.md) - How to install language packages\r\n- [Number to Words](number-to-words.md) - Language-specific number formatting\r\n- [DateTime Humanization](datetime-humanization.md) - Relative time in different languages\r\n"
  },
  {
    "path": "docs/migration-v3.md",
    "content": "# Migrating from Humanizer 2.14.1 to 3.0.8\r\n\r\nThis guide is for teams upgrading directly from `2.14.1` to `3.0.8`.\r\n\r\nThis document was added to address [issue #1656](https://github.com/Humanizr/Humanizer/issues/1656) (undocumented v3 breaking changes).\r\n\r\nValidated against:\r\n- Git tag `v2.14.1`\r\n- v3 breaking-change commits through `v3.0.1`\r\n- v3 patch-line fixes included in `3.0.8`:\r\n  - Roslyn analyzer compatibility fixes in [PR #1676](https://github.com/Humanizr/Humanizer/pull/1676)\r\n  - `ToQuantity(int, ...)` compatibility fix in [PR #1679](https://github.com/Humanizr/Humanizer/pull/1679)\r\n  - `TitleCase` first-word capitalization fix in [PR #1678](https://github.com/Humanizr/Humanizer/pull/1678)\r\n\r\n## Quick Upgrade Checklist\r\n\r\n1. Update package/tooling prerequisites first (framework and restore requirements).\r\n2. If you are on `3.0.1`, upgrade to `3.0.8` to pick up patch-line compatibility fixes ([#1655](https://github.com/Humanizr/Humanizer/issues/1655), [#1665](https://github.com/Humanizr/Humanizer/issues/1665), [#1672](https://github.com/Humanizr/Humanizer/issues/1672), [#1652](https://github.com/Humanizr/Humanizer/issues/1652), [#1658](https://github.com/Humanizr/Humanizer/issues/1658)).\r\n3. Run the namespace migration analyzer and replace old `using Humanizer.*` directives.\r\n4. Replace removed APIs (`FormatWith`, obsolete `ToMetric` overloads, etc.).\r\n5. Rebuild all assemblies that reference Humanizer (binary compatibility changed in a few APIs).\r\n6. If you implement extensibility points (`IFormatter`, `DefaultFormatter`), update those implementations.\r\n7. Run behavioral regression tests for `Titleize`, `Pascalize`, `Dehumanize`, and enum humanization.\r\n\r\n## Breaking Changes\r\n\r\n### Namespace Consolidation (source-breaking)\r\n\r\nAll Humanizer APIs were consolidated into the root `Humanizer` namespace.\r\n\r\nRelated:\r\n- [PR #1351](https://github.com/Humanizr/Humanizer/pull/1351)\r\n- Upgrade impact report: [issue #1656](https://github.com/Humanizr/Humanizer/issues/1656)\r\n\r\nBefore:\r\n\r\n```csharp\r\nusing Humanizer.Bytes;\r\nusing Humanizer.Localisation;\r\nusing Humanizer.Configuration;\r\n```\r\n\r\nAfter:\r\n\r\n```csharp\r\nusing Humanizer;\r\n```\r\n\r\nUse the built-in analyzer (`HUMANIZER001`) to automate this migration.\r\n\r\nSee also: [Namespace-only migration guide](v3-namespace-migration.md).\r\n\r\n### Removed APIs\r\n\r\n1. `StringExtensions.FormatWith(...)` was removed.\r\n\r\nRelated:\r\n- [PR #1395](https://github.com/Humanizr/Humanizer/pull/1395)\r\n- Upgrade impact report: [issue #1656](https://github.com/Humanizr/Humanizer/issues/1656)\r\n\r\nBefore:\r\n\r\n```csharp\r\n\"{0:N2}\".FormatWith(culture, value);\r\n```\r\n\r\nAfter:\r\n\r\n```csharp\r\nstring.Format(culture, \"{0:N2}\", value);\r\n```\r\n\r\n2. Obsolete `ToMetric` overloads were removed:\r\n\r\n- `ToMetric(this int input, bool hasSpace, bool useSymbol = true, int? decimals = null)`\r\n- `ToMetric(this double input, bool hasSpace, bool useSymbol = true, int? decimals = null)`\r\n\r\nUse `MetricNumeralFormats` instead:\r\n\r\n```csharp\r\n// Equivalent to: value.ToMetric(hasSpace: true, useSymbol: true, decimals: 2);\r\nvalue.ToMetric(MetricNumeralFormats.WithSpace, decimals: 2);\r\n\r\n// If you previously passed useSymbol: false:\r\nvalue.ToMetric(MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, decimals: 2);\r\n```\r\n\r\nRelated:\r\n- [PR #1389](https://github.com/Humanizr/Humanizer/pull/1389)\r\n- Upgrade impact report: [issue #1656](https://github.com/Humanizr/Humanizer/issues/1656)\r\n\r\n3. `ToQuantity(this string, int, ...)` overloads were removed in early v3 and later restored in the patch line (`3.0.6+`, including `3.0.8`).\r\n\r\nRelated:\r\n- [PR #1338](https://github.com/Humanizr/Humanizer/pull/1338)\r\n- Follow-up request and resolution: [issue #1652](https://github.com/Humanizr/Humanizer/issues/1652), [PR #1679](https://github.com/Humanizr/Humanizer/pull/1679)\r\n\r\n4. `EnglishArticles` enum was removed.\r\n\r\nRelated:\r\n- [PR #1443](https://github.com/Humanizr/Humanizer/pull/1443)\r\n\r\n5. `Configurator.EnumDescriptionPropertyLocator` public property was removed.\r\n\r\nUse `Configurator.UseEnumDescriptionPropertyLocator(...)` instead, and call it early during startup:\r\n\r\n```csharp\r\nConfigurator.UseEnumDescriptionPropertyLocator(p => p.Name == \"Info\");\r\n```\r\n\r\n`UseEnumDescriptionPropertyLocator(...)` now throws if you call it after enum humanization has already occurred.\r\n\r\nRelated:\r\n- Upgrade impact report: [issue #1656](https://github.com/Humanizr/Humanizer/issues/1656)\r\n\r\n### Enum API Signature Changes\r\n\r\nEnum APIs moved from `Enum`-based extension signatures to constrained generics:\r\n\r\nBefore (`2.14.1`):\r\n\r\n```csharp\r\npublic static string Humanize(this Enum input)\r\npublic static string Humanize(this Enum input, LetterCasing casing)\r\npublic static TTargetEnum DehumanizeTo<TTargetEnum>(this string input)\r\n    where TTargetEnum : struct, IComparable, IFormattable\r\n```\r\n\r\nAfter (`3.0.8`):\r\n\r\n```csharp\r\npublic static string Humanize<T>(this T input) where T : struct, Enum\r\npublic static string Humanize<T>(this T input, LetterCasing casing) where T : struct, Enum\r\npublic static TTargetEnum DehumanizeTo<TTargetEnum>(this string input)\r\n    where TTargetEnum : struct, Enum\r\n```\r\n\r\nImpact:\r\n\r\n- Code that stores values as `Enum` (not a concrete enum type) and then calls `.Humanize()` no longer compiles.\r\n- Generic callers with non-enum constraints for `DehumanizeTo<T>` no longer compile.\r\n\r\nRelated:\r\n- Upgrade impact report: [issue #1656](https://github.com/Humanizr/Humanizer/issues/1656)\r\n\r\n### Extensibility Breaks (`IFormatter` / `DefaultFormatter`)\r\n\r\nIf you implement or subclass formatting infrastructure, update your code:\r\n\r\n1. `IFormatter` now requires:\r\n\r\n```csharp\r\nstring TimeSpanHumanize_Age();\r\n```\r\n\r\n2. `DefaultFormatter` override surface changed:\r\n\r\nBefore:\r\n\r\n```csharp\r\nprotected virtual string Format(string resourceKey, int number, bool toWords = false)\r\n```\r\n\r\nAfter:\r\n\r\n```csharp\r\nprotected virtual string Format(TimeUnit unit, string resourceKey, int number, bool toWords = false)\r\n```\r\n\r\nIf you had custom `DefaultFormatter` subclasses overriding the old signature, they must be migrated.\r\n\r\nRelated:\r\n- API introduction that expanded formatter contract: [PR #1068](https://github.com/Humanizr/Humanizer/pull/1068)\r\n- Upgrade impact report: [issue #1656](https://github.com/Humanizr/Humanizer/issues/1656)\r\n\r\n## Framework, Packaging, and Tooling Breaks\r\n\r\n### Target Framework Support Changes\r\n\r\nCompared to `2.14.1`, v3 removed support for:\r\n\r\n- `netstandard1.0`\r\n- `net462`\r\n- `net472`\r\n- dedicated `net6.0` assets (consumers on `net6.0`/`net7.0` now resolve `netstandard2.0` assets)\r\n\r\n`3.0.8` package assets target:\r\n\r\n- `netstandard2.0`\r\n- `net48`\r\n- `net8.0`\r\n- `net10.0`\r\n\r\nRelated:\r\n- `netstandard1.0` removal: [PR #1322](https://github.com/Humanizr/Humanizer/pull/1322)\r\n- `net462`/`net472` removal: [PR #1482](https://github.com/Humanizr/Humanizer/pull/1482)\r\n- Upgrade impact report: [issue #1656](https://github.com/Humanizr/Humanizer/issues/1656)\r\n\r\n### Metapackage Restore Requirement\r\n\r\nThe `Humanizer` metapackage requires NuGet locale parsing support from newer tooling.\r\n\r\nYou need:\r\n\r\n- .NET SDK `9.0.200+`, or\r\n- Visual Studio/MSBuild that includes the same NuGet locale parsing fix.\r\n\r\nOn older tooling, restore can fail for the metapackage. Workaround: reference `Humanizer.Core` directly and install needed locale packages explicitly.\r\n\r\nRelated:\r\n- NuGet locale parsing fix dependency note: [NuGet.Client discussion](https://github.com/NuGet/NuGet.Client/pull/6124#issuecomment-3391090183)\r\n\r\n### Locale Package ID Changes\r\n\r\nSeveral locale package IDs changed between `2.14.1` and `3.0.8`:\r\n\r\n| `2.14.1` package | `3.0.8` package |\r\n| --- | --- |\r\n| `Humanizer.Core.bn-BD` | `Humanizer.Core.bn` |\r\n| `Humanizer.Core.fi-FI` | `Humanizer.Core.fi` |\r\n| `Humanizer.Core.ko-KR` | `Humanizer.Core.ko` |\r\n| `Humanizer.Core.ms-MY` | `Humanizer.Core.ms` |\r\n| `Humanizer.Core.nb-NO` | `Humanizer.Core.nb` |\r\n| `Humanizer.Core.th-TH` | `Humanizer.Core.th` |\r\n\r\nRemoved from the metapackage dependency list (no direct one-to-one replacement):\r\n\r\n- `Humanizer.Core.fr-BE`\r\n\r\nRelated:\r\n- Locale ID normalization change: [commit 7b14ef6f](https://github.com/Humanizr/Humanizer/commit/7b14ef6f)\r\n- Upgrade impact report: [issue #1656](https://github.com/Humanizr/Humanizer/issues/1656)\r\n\r\n## Behavior Changes to Validate\r\n\r\n1. `Pascalize` now treats hyphens (`-`) as delimiters.\r\n2. `Dehumanize` output can differ because it is based on `Humanize().Pascalize()` and inherits `Pascalize` changes.\r\n3. `Humanize` / `Titleize` preserve strings with no recognized letters instead of returning empty string.\r\n\r\nRelated:\r\n- `Pascalize` hyphen behavior change: [issue #1282](https://github.com/Humanizr/Humanizer/issues/1282), [PR #1299](https://github.com/Humanizr/Humanizer/pull/1299)\r\n- `Dehumanize`/spacing impact reports: [issue #1656](https://github.com/Humanizr/Humanizer/issues/1656), [issue #1668](https://github.com/Humanizr/Humanizer/issues/1668)\r\n- `Titleize` no-letter preservation: [issue #385](https://github.com/Humanizr/Humanizer/issues/385), [PR #1611](https://github.com/Humanizr/Humanizer/pull/1611)\r\n- `TitleCase` first-word casing regression: [issue #1658](https://github.com/Humanizr/Humanizer/issues/1658)\r\n\r\n## Roslyn Analyzer Fixes Included in 3.0.8\r\n\r\n`3.0.8` includes analyzer loading compatibility fixes from [PR #1676](https://github.com/Humanizr/Humanizer/pull/1676).\r\n\r\n| Issue | Status | Impact in 3.0.1 | 3.0.8 result |\r\n| --- | --- | --- | --- |\r\n| [#1655](https://github.com/Humanizr/Humanizer/issues/1655) | Closed | Analyzer could fail to load on .NET 8 SDK hosts. | Fixed |\r\n| [#1665](https://github.com/Humanizr/Humanizer/issues/1665) | Closed | Analyzer load failure due to `System.Memory` binding mismatch. | Fixed |\r\n| [#1672](https://github.com/Humanizr/Humanizer/issues/1672) | Closed | Analyzer load failure due to `System.Collections.Immutable` dependency mismatch. | Fixed |\r\n\r\n## Compatibility Fixes Included in 3.0.8\r\n\r\n| Issue | Status | Patch-line fix |\r\n| --- | --- | --- |\r\n| [#1652](https://github.com/Humanizr/Humanizer/issues/1652) | Closed | `ToQuantity(int, ...)` compatibility restored via [PR #1679](https://github.com/Humanizr/Humanizer/pull/1679) (in `3.0.6+`, included in `3.0.8`). |\r\n| [#1658](https://github.com/Humanizr/Humanizer/issues/1658) | Closed | `TitleCase` first-word capitalization fixed via [PR #1678](https://github.com/Humanizr/Humanizer/pull/1678) (in `3.0.6+`, included in `3.0.8`). |\r\n\r\n## Remaining Known Upgrade Issue (as of March 5, 2026)\r\n\r\n| Issue | Status | Impact | Suggested mitigation |\r\n| --- | --- | --- | --- |\r\n| [#1668](https://github.com/Humanizr/Humanizer/issues/1668) | Open | Some `Dehumanize()` cases retain underscore before digits (for example `everything_0`). | Pre-normalize affected inputs before `Dehumanize()`, or use custom conversion logic for these patterns. |\r\n\r\n## Recommended Validation Pass\r\n\r\nAfter migration:\r\n\r\n1. Full clean restore with your actual CI SDK image.\r\n2. Full rebuild of all projects that reference Humanizer.\r\n3. Integration tests around string casing, enum formatting/dehumanization, and quantity formatting.\r\n4. Spot-check localized output if you depended on renamed locale packages.\r\n"
  },
  {
    "path": "docs/quick-start.md",
    "content": "# Quick Start Guide\r\n\r\nGet started with Humanizer in minutes.\r\n\r\n## Installation\r\n\r\nInstall the Humanizer NuGet package:\r\n\r\n```bash\r\ndotnet add package Humanizer\r\n```\r\n\r\nFor English-only:\r\n\r\n```bash\r\ndotnet add package Humanizer.Core\r\n```\r\n\r\nSee [Installation](installation.md) for more options.\r\n\r\n## Basic Examples\r\n\r\n### Humanize Strings\r\n\r\n```csharp\r\nusing Humanizer;\r\n\r\n\"PascalCaseString\".Humanize(); \r\n// => \"Pascal case string\"\r\n\r\n\"some_property_name\".Humanize(); \r\n// => \"Some property name\"\r\n```\r\n\r\n### Humanize DateTimes\r\n\r\n```csharp\r\nDateTime.UtcNow.AddHours(-2).Humanize(); \r\n// => \"2 hours ago\"\r\n\r\nDateTime.UtcNow.AddDays(1).Humanize(); \r\n// => \"tomorrow\"\r\n```\r\n\r\n### Humanize TimeSpans\r\n\r\n```csharp\r\nTimeSpan.FromDays(1).Humanize(); \r\n// => \"1 day\"\r\n\r\nTimeSpan.FromMinutes(90).Humanize(); \r\n// => \"an hour\"\r\n```\r\n\r\n### Humanize Enums\r\n\r\n```csharp\r\npublic enum PaymentStatus\r\n{\r\n    PendingApproval,\r\n    Approved,\r\n    Declined\r\n}\r\n\r\nPaymentStatus.PendingApproval.Humanize(); \r\n// => \"Pending approval\"\r\n```\r\n\r\n### Pluralization\r\n\r\n```csharp\r\n\"person\".Pluralize(); \r\n// => \"people\"\r\n\r\n\"case\".ToQuantity(5); \r\n// => \"5 cases\"\r\n```\r\n\r\n### Number Conversions\r\n\r\n```csharp\r\n1234.ToWords(); \r\n// => \"one thousand two hundred and thirty-four\"\r\n\r\n1.Ordinalize(); \r\n// => \"1st\"\r\n\r\n21.Ordinalize(); \r\n// => \"21st\"\r\n```\r\n\r\n### Fluent Dates\r\n\r\n```csharp\r\nIn.January; \r\n// => January 1st of current year\r\n\r\n2.Days() + 3.Hours(); \r\n// => TimeSpan of 2 days and 3 hours\r\n\r\nDateTime.Now + 2.Weeks(); \r\n// => DateTime 2 weeks from now\r\n```\r\n\r\n### Collections\r\n\r\n```csharp\r\nvar items = new[] { \"apple\", \"banana\", \"cherry\" };\r\nitems.Humanize(); \r\n// => \"apple, banana, and cherry\"\r\n```\r\n\r\n### Truncation\r\n\r\n```csharp\r\n\"Long text that needs truncating\".Truncate(10); \r\n// => \"Long text…\"\r\n```\r\n\r\n## Common Patterns\r\n\r\n### Display Property Names in UI\r\n\r\n```csharp\r\npublic class Person\r\n{\r\n    public string FirstName { get; set; }\r\n    public string LastName { get; set; }\r\n    public DateTime DateOfBirth { get; set; }\r\n}\r\n\r\n// Generate labels automatically\r\nnameof(Person.FirstName).Humanize(); \r\n// => \"First name\"\r\n\r\nnameof(Person.DateOfBirth).Humanize(); \r\n// => \"Date of birth\"\r\n```\r\n\r\n### Relative Time Display\r\n\r\n```csharp\r\nvar postDate = DateTime.UtcNow.AddHours(-3);\r\n$\"Posted {postDate.Humanize()}\"; \r\n// => \"Posted 3 hours ago\"\r\n```\r\n\r\n### Format Numbers for Display\r\n\r\n```csharp\r\nvar count = 1234567;\r\n$\"Downloaded {count.ToMetric()} times\"; \r\n// => \"Downloaded 1.23M times\"\r\n```\r\n\r\n### Pluralize Based on Count\r\n\r\n```csharp\r\nvar itemCount = 5;\r\n$\"You have {itemCount} {\"item\".ToQuantity(itemCount)}\"; \r\n// => \"You have 5 items\"\r\n\r\nvar singleItem = 1;\r\n$\"You have {singleItem} {\"item\".ToQuantity(singleItem)}\"; \r\n// => \"You have 1 item\"\r\n```\r\n\r\n## Next Steps\r\n\r\nExplore the documentation for detailed information on each feature:\r\n\r\n- [String Humanization](string-humanization.md)\r\n- [DateTime Humanization](datetime-humanization.md)\r\n- [Number Conversions](number-to-words.md)\r\n- [Pluralization](pluralization.md)\r\n- [All Features](index.md)\r\n"
  },
  {
    "path": "docs/string-dehumanization.md",
    "content": "# String Dehumanization\r\n\r\nConvert human-friendly strings back to PascalCase format.\r\n\r\n## Overview\r\n\r\nDehumanization reverses the humanization process, taking a humanized string and converting it back to PascalCase. This is useful when you need to convert user input or display text back into a format suitable for code identifiers.\r\n\r\n## Basic Usage\r\n\r\n```csharp\r\n\"Pascal case input string is turned into sentence\".Dehumanize() \r\n    // => \"PascalCaseInputStringIsTurnedIntoSentence\"\r\n\r\n\"some string\".Dehumanize() \r\n    // => \"SomeString\"\r\n\r\n\"Some String\".Dehumanize() \r\n    // => \"SomeString\"\r\n```\r\n\r\n## Behavior\r\n\r\nThe dehumanization process:\r\n1. Splits the input on spaces\r\n2. Humanizes each word (to handle edge cases)\r\n3. Pascalizes each word (capitalizing first letter)\r\n4. Removes all spaces\r\n\r\nIf the input is already in PascalCase (contains no spaces), it is returned unchanged.\r\n\r\n## Examples\r\n\r\n```csharp\r\n\"SomeStringAndAnotherString\".Dehumanize() \r\n    // => \"SomeStringAndAnotherString\" (unchanged)\r\n```\r\n\r\n## Related Topics\r\n\r\n- [String Humanization](string-humanization.md)\r\n- [Inflector Methods](inflector-methods.md) - Pascalize, Camelize\r\n"
  },
  {
    "path": "docs/string-humanization.md",
    "content": "# String Humanization\r\n\r\nString humanization transforms computerized strings (like class names, method names, or property names) into human-readable text. This is particularly useful when displaying programming identifiers to end users.\r\n\r\n## Overview\r\n\r\nThe `Humanize` extension method intelligently handles:\r\n- **PascalCase**: `PascalCaseString` → `Pascal case string`\r\n- **camelCase**: `camelCaseString` → `Camel case string`\r\n- **Underscores**: `underscored_string` → `Underscored string`\r\n- **Dashes**: `dash-separated-string` → `Dash separated string`\r\n\r\n## Basic Usage\r\n\r\n```csharp\r\nusing Humanizer;\r\n\r\n\"PascalCaseInputStringIsTurnedIntoSentence\".Humanize() \r\n    // => \"Pascal case input string is turned into sentence\"\r\n\r\n\"Underscored_input_string_is_turned_into_sentence\".Humanize() \r\n    // => \"Underscored input string is turned into sentence\"\r\n\r\n\"dash-separated-string\".Humanize() \r\n    // => \"Dash separated string\"\r\n```\r\n\r\n## Acronym Handling\r\n\r\nStrings containing only uppercase letters are treated as acronyms and left unchanged:\r\n\r\n```csharp\r\n\"HTML\".Humanize() // => \"HTML\"\r\n\"HUMANIZER\".Humanize() // => \"HUMANIZER\"\r\n```\r\n\r\nTo force humanization of all-caps strings, use the `Transform` method:\r\n\r\n```csharp\r\n\"HUMANIZER\".Transform(To.LowerCase, To.TitleCase) // => \"Humanizer\"\r\n```\r\n\r\n## Letter Casing\r\n\r\nControl the output casing:\r\n\r\n```csharp\r\n\"CanReturnTitleCase\".Humanize(LetterCasing.Title) \r\n    // => \"Can Return Title Case\"\r\n\r\n\"CanReturnLowerCase\".Humanize(LetterCasing.LowerCase) \r\n    // => \"can return lower case\"\r\n\r\n\"CanHumanizeIntoUpperCase\".Humanize(LetterCasing.AllCaps) \r\n    // => \"CAN HUMANIZE INTO UPPER CASE\"\r\n\r\n\"some string\".Humanize(LetterCasing.Sentence) \r\n    // => \"Some string\"\r\n```\r\n\r\nAvailable casing options:\r\n- `LetterCasing.Title` - Capitalizes the first letter of each word\r\n- `LetterCasing.Sentence` - Capitalizes only the first letter\r\n- `LetterCasing.AllCaps` - All uppercase\r\n- `LetterCasing.LowerCase` - All lowercase\r\n\r\n## How It Works\r\n\r\nThe humanization process applies several rules in order:\r\n\r\n1. If the entire input is uppercase (an acronym), it returns unchanged\r\n2. Handles freestanding underscores/dashes (e.g., \"some _ string\")\r\n3. Splits on underscores and dashes\r\n4. Breaks up PascalCase and camelCase text\r\n5. Capitalizes the first letter of the result\r\n\r\n## Real-World Examples\r\n\r\n### Display Test Method Names\r\n\r\n```csharp\r\n// In a testing framework\r\npublic void ItShouldCalculateTheTotalPrice()\r\n{\r\n    // Test implementation\r\n}\r\n\r\n// Display to user:\r\nnameof(ItShouldCalculateTheTotalPrice).Humanize()\r\n// => \"It should calculate the total price\"\r\n```\r\n\r\n### Display Property Names in UI\r\n\r\n```csharp\r\npublic class User\r\n{\r\n    public string FirstName { get; set; }\r\n    public string LastName { get; set; }\r\n    public DateTime DateOfBirth { get; set; }\r\n}\r\n\r\n// Generate form labels automatically\r\nnameof(User.FirstName).Humanize() // => \"First name\"\r\nnameof(User.DateOfBirth).Humanize() // => \"Date of birth\"\r\n```\r\n\r\n### Convert API Field Names\r\n\r\n```csharp\r\n// API returns: \"account_status\", \"last_login_date\"\r\nvar fields = new[] { \"account_status\", \"last_login_date\" };\r\n\r\nforeach (var field in fields)\r\n{\r\n    Console.WriteLine(field.Humanize());\r\n}\r\n// Output:\r\n// Account status\r\n// Last login date\r\n```\r\n\r\n## Version 3.0 Behavioral Change\r\n\r\nIn version 3.0, `Humanize` and `Titleize` now preserve input strings that contain no recognized letters (e.g., special characters, unrecognized Unicode scripts) instead of returning an empty string:\r\n\r\n```csharp\r\n// Before v3.0: returned \"\"\r\n// v3.0 and later: returns \"@@\"\r\n\"@@\".Humanize() // => \"@@\"\r\n\r\n// Cyrillic and other Unicode scripts are preserved\r\n\"Майк\".Titleize() // => \"Майк\"\r\n```\r\n\r\n## Related Topics\r\n\r\n- [String Dehumanization](string-dehumanization.md) - Convert back to PascalCase\r\n- [String Transformations](string-transformations.md) - Custom transformations\r\n- [Inflector Methods](inflector-methods.md) - Titleize, Pascalize, Camelize, etc.\r\n"
  },
  {
    "path": "docs/string-truncation.md",
    "content": "# String Truncation\r\n\r\nHumanizer provides intelligent string truncation with multiple strategies to handle different use cases.\r\n\r\n## Overview\r\n\r\nTruncation is useful when you need to limit string length for display purposes while maintaining readability. Humanizer offers several truncation strategies and uses the `…` character (one character) instead of `\"...\"` (three characters) to maximize visible text.\r\n\r\n## Basic Usage\r\n\r\n```csharp\r\nusing Humanizer;\r\n\r\n\"Long text to truncate\".Truncate(10) \r\n    // => \"Long text…\"\r\n\r\n\"Long text to truncate\".Truncate(10, \"---\") \r\n    // => \"Long te---\"\r\n```\r\n\r\n## Truncation Strategies\r\n\r\n### Fixed Length (Default)\r\n\r\nTruncates to a specific total length including the truncation indicator:\r\n\r\n```csharp\r\n\"Long text to truncate\".Truncate(10, Truncator.FixedLength) \r\n    // => \"Long text…\"\r\n\r\n\"Long text to truncate\".Truncate(10, \"---\", Truncator.FixedLength) \r\n    // => \"Long te---\"\r\n```\r\n\r\n### Fixed Number of Characters\r\n\r\nTruncates to a specific number of alphanumeric characters:\r\n\r\n```csharp\r\n\"Long text to truncate\".Truncate(6, Truncator.FixedNumberOfCharacters) \r\n    // => \"Long t…\"\r\n\r\n\"Long text to truncate\".Truncate(6, \"---\", Truncator.FixedNumberOfCharacters) \r\n    // => \"Lon---\"\r\n```\r\n\r\n### Fixed Number of Words\r\n\r\nTruncates to a specific number of words:\r\n\r\n```csharp\r\n\"Long text to truncate\".Truncate(2, Truncator.FixedNumberOfWords) \r\n    // => \"Long text…\"\r\n\r\n\"Long text to truncate\".Truncate(2, \"---\", Truncator.FixedNumberOfWords) \r\n    // => \"Long text---\"\r\n```\r\n\r\n### Dynamic Length - Preserve Words\r\n\r\nSimilar to fixed length but attempts to preserve whole words:\r\n\r\n```csharp\r\n\"Long text to truncate\".Truncate(10, Truncator.DynamicLengthAndPreserveWords) \r\n    // => \"Long text…\"\r\n\r\n\"Long text to truncate\".Truncate(10, \"---\", Truncator.DynamicLengthAndPreserveWords) \r\n    // => \"Long---\"\r\n```\r\n\r\n### Dynamic Characters - Preserve Words\r\n\r\nSimilar to fixed number of characters but attempts to preserve whole words:\r\n\r\n```csharp\r\n\"Long text to truncate\".Truncate(6, Truncator.DynamicNumberOfCharactersAndPreserveWords) \r\n    // => \"Long…\"\r\n\r\n\"Long text to truncate\".Truncate(6, \"---\", Truncator.DynamicNumberOfCharactersAndPreserveWords) \r\n    // => \"---\"\r\n```\r\n\r\n## Truncation Direction\r\n\r\nBy default, truncation happens from the right (end) of the string. You can truncate from the left (beginning) using `TruncateFrom.Left`:\r\n\r\n```csharp\r\n\"Long text to truncate\".Truncate(10, Truncator.FixedLength, TruncateFrom.Left) \r\n    // => \"… truncate\"\r\n\r\n\"Long text to truncate\".Truncate(10, \"---\", Truncator.FixedLength, TruncateFrom.Left) \r\n    // => \"---runcate\"\r\n\r\n\"Long text to truncate\".Truncate(2, Truncator.FixedNumberOfWords, TruncateFrom.Left) \r\n    // => \"…to truncate\"\r\n```\r\n\r\n## Custom Truncation Indicators\r\n\r\nYou can use any string as a truncation indicator:\r\n\r\n```csharp\r\n\"Long text to truncate\".Truncate(15, \" [more]\") \r\n    // => \"Long [more]\"\r\n\r\n\"Long text to truncate\".Truncate(15, \"...\") \r\n    // => \"Long text...\"\r\n```\r\n\r\n## Custom Truncators\r\n\r\nImplement the `ITruncator` interface to create custom truncation logic:\r\n\r\n```csharp\r\npublic interface ITruncator\r\n{\r\n    string Truncate(string value, int length, string truncationString, TruncateFrom truncateFrom = TruncateFrom.Right);\r\n}\r\n```\r\n\r\nExample custom truncator:\r\n\r\n```csharp\r\npublic class SentenceTruncator : ITruncator\r\n{\r\n    public string Truncate(string value, int length, string truncationString, TruncateFrom truncateFrom)\r\n    {\r\n        // Custom logic to truncate at sentence boundaries\r\n        // Implementation details...\r\n    }\r\n}\r\n\r\n// Usage\r\n\"First sentence. Second sentence. Third sentence.\"\r\n    .Truncate(30, new SentenceTruncator());\r\n```\r\n\r\n## Real-World Examples\r\n\r\n### Truncate Article Previews\r\n\r\n```csharp\r\nvar article = \"This is a very long article that needs to be truncated for the preview.\";\r\nvar preview = article.Truncate(50, Truncator.FixedNumberOfWords);\r\n// => \"This is a very long article that needs to be…\"\r\n```\r\n\r\n### Truncate File Names\r\n\r\n```csharp\r\nvar fileName = \"Very_Long_File_Name_That_Needs_Truncation.pdf\";\r\nvar displayName = fileName.Truncate(20, \"…\", Truncator.DynamicLengthAndPreserveWords);\r\n// => \"Very_Long_File_Name…\"\r\n```\r\n\r\n### Truncate User Comments\r\n\r\n```csharp\r\nvar comment = \"This is a user comment that might be too long to display in a notification.\";\r\nvar notification = comment.Truncate(40);\r\n// => \"This is a user comment that might be…\"\r\n```\r\n\r\n## Best Practices\r\n\r\n1. **Choose the right strategy**: \r\n   - Use `FixedLength` for consistent visual length\r\n   - Use `FixedNumberOfWords` when word boundaries matter\r\n   - Use dynamic strategies when readability is more important than exact length\r\n\r\n2. **Consider the truncation indicator**:\r\n   - Use `…` (single character) for space efficiency\r\n   - Use `\"...\"` if your audience expects it\r\n   - Use `\" [more]\"` or similar for clarity\r\n\r\n3. **Test with your actual content**: Different text may truncate differently depending on word boundaries\r\n\r\n## Related Topics\r\n\r\n- [String Humanization](string-humanization.md)\r\n- [String Transformations](string-transformations.md)\r\n"
  },
  {
    "path": "docs/v3-namespace-migration.md",
    "content": "# Humanizer v3 Namespace Migration\r\n\r\nThis document provides guidance on migrating code from Humanizer v2 to v3, focusing on the namespace consolidation changes.\r\n\r\n> For the full `2.14.1 -> 3.0.8` upgrade path (all breaking changes, package/tooling changes, patch-line fixes, and known regressions), see [migration-v3.md](migration-v3.md).\r\n\r\n## What Changed in v3\r\n\r\nHumanizer v3 consolidates all sub-namespaces into the root `Humanizer` namespace. This is a **source-breaking change** that requires code updates.\r\n\r\n### Consolidated Namespaces\r\n\r\nAll of the following namespaces have been moved into `Humanizer`:\r\n\r\n- `Humanizer.Bytes`\r\n- `Humanizer.Localisation`\r\n- `Humanizer.Localisation.Formatters`\r\n- `Humanizer.Localisation.NumberToWords`\r\n- `Humanizer.DateTimeHumanizeStrategy`\r\n- `Humanizer.Configuration`\r\n- `Humanizer.Localisation.DateToOrdinalWords`\r\n- `Humanizer.Localisation.Ordinalizers`\r\n- `Humanizer.Inflections`\r\n- `Humanizer.Localisation.CollectionFormatters`\r\n- `Humanizer.Localisation.TimeToClockNotation`\r\n\r\n### Migration Path\r\n\r\n**Before (v2):**\r\n```csharp\r\nusing Humanizer.Bytes;\r\nusing Humanizer.Localisation;\r\nusing Humanizer.Configuration;\r\n\r\npublic class Example\r\n{\r\n    public void Method()\r\n    {\r\n        var size = ByteSize.FromKilobytes(10);\r\n        var formatter = new DefaultFormatter(\"en-US\");\r\n        Configurator.Localisation = new CultureInfo(\"en-US\");\r\n    }\r\n}\r\n```\r\n\r\n**After (v3):**\r\n```csharp\r\nusing Humanizer;\r\n\r\npublic class Example\r\n{\r\n    public void Method()\r\n    {\r\n        var size = ByteSize.FromKilobytes(10);\r\n        var formatter = new DefaultFormatter(\"en-US\");\r\n        Configurator.Localisation = new CultureInfo(\"en-US\");\r\n    }\r\n}\r\n```\r\n\r\n## Automated Migration with Roslyn Analyzer\r\n\r\nHumanizer v3 includes a Roslyn analyzer that automatically detects and fixes namespace usage. No separate installation is required—the analyzer is bundled with the `Humanizer.Core` package starting from v3.0.0.\r\n\r\n### Usage\r\n\r\nOnce you have installed or updated to `Humanizer.Core` v3.0.0 or later, the analyzer will be available automatically in your project.\r\n\r\nThe package includes Roslyn-versioned analyzer assets, so modern .NET SDK/Visual Studio toolchains load a compatible analyzer automatically. You should not need to add manual `System.*` package references to make the analyzer load.\r\n\r\nIf you are on `3.0.1` and see analyzer load warnings (for example AD0001) with older SDK/Visual Studio toolchains, upgrade to `3.0.8` and see the analyzer/patch-fix sections in [migration-v3.md](migration-v3.md).\r\n\r\n### Usage in Visual Studio / Rider\r\n\r\n1. The analyzer will highlight old namespace usages with warnings (HUMANIZER001)\r\n2. Click the lightbulb 💡 icon or press `Ctrl+.` (Windows/Linux) / `Cmd+.` (Mac)\r\n3. Select \"Update to Humanizer namespace\"\r\n4. To fix all occurrences:\r\n   - Right-click → Quick Actions and Refactorings\r\n   - Choose \"Fix all occurrences in Document/Project/Solution\"\r\n\r\n### Usage with dotnet CLI\r\n\r\nThe analyzer runs automatically during build and reports warnings:\r\n\r\n```bash\r\n# Build and see warnings\r\ndotnet build\r\n\r\n# Apply automatic fixes using dotnet format\r\ndotnet format analyzers --diagnostics HUMANIZER001\r\n```\r\n\r\n## Manual Migration\r\n\r\nIf you prefer to migrate manually or can't use the analyzer:\r\n\r\n### Step 1: Find Old Namespaces\r\n\r\nSearch your codebase for using directives:\r\n\r\n```bash\r\n# Using grep\r\ngrep -r \"using Humanizer\\.\" . --include=\"*.cs\" | grep -v \"using Humanizer;\"\r\n\r\n# Using PowerShell\r\nGet-ChildItem -Recurse -Filter *.cs | Select-String \"using Humanizer\\.\" | Where-Object { $_ -notmatch \"using Humanizer;\" }\r\n```\r\n\r\n### Step 2: Replace with Single Using\r\n\r\nReplace all old namespace usings with:\r\n```csharp\r\nusing Humanizer;\r\n```\r\n\r\n### Step 3: Remove Qualified Names\r\n\r\nIf you use fully qualified names in your code, update them:\r\n\r\n**Before:**\r\n```csharp\r\nvar size = Humanizer.Bytes.ByteSize.FromKilobytes(10);\r\n```\r\n\r\n**After:**\r\n```csharp\r\nvar size = Humanizer.ByteSize.FromKilobytes(10);\r\n// Or with using directive:\r\nusing Humanizer;\r\n// ...\r\nvar size = ByteSize.FromKilobytes(10);\r\n```\r\n\r\n### Step 4: Test Your Changes\r\n\r\nAfter migration, rebuild and test your application:\r\n\r\n```bash\r\ndotnet build\r\ndotnet test\r\n```\r\n\r\n## Common Migration Scenarios\r\n\r\n### Scenario 1: Multiple Old Namespaces\r\n\r\n**Before:**\r\n```csharp\r\nusing Humanizer.Bytes;\r\nusing Humanizer.Localisation;\r\nusing Humanizer.Configuration;\r\nusing Humanizer.Inflections;\r\n```\r\n\r\n**After:**\r\n```csharp\r\nusing Humanizer;\r\n```\r\n\r\n### Scenario 2: Mix of Old and New\r\n\r\n**Before:**\r\n```csharp\r\nusing Humanizer;\r\nusing Humanizer.Bytes;\r\nusing Humanizer.Localisation;\r\n```\r\n\r\n**After:**\r\n```csharp\r\nusing Humanizer;\r\n```\r\n\r\n### Scenario 3: Qualified Names in Code\r\n\r\n**Before:**\r\n```csharp\r\npublic Humanizer.Bytes.ByteSize GetFileSize(string path)\r\n{\r\n    var info = new FileInfo(path);\r\n    return Humanizer.Bytes.ByteSize.FromBytes(info.Length);\r\n}\r\n```\r\n\r\n**After:**\r\n```csharp\r\npublic Humanizer.ByteSize GetFileSize(string path)\r\n{\r\n    var info = new FileInfo(path);\r\n    return Humanizer.ByteSize.FromBytes(info.Length);\r\n}\r\n// Or better with using:\r\nusing Humanizer;\r\n\r\npublic ByteSize GetFileSize(string path)\r\n{\r\n    var info = new FileInfo(path);\r\n    return ByteSize.FromBytes(info.Length);\r\n}\r\n```\r\n\r\n## Troubleshooting\r\n\r\n### \"The type or namespace name could not be found\"\r\n\r\nIf you get compiler errors after migration, ensure:\r\n\r\n1. You've updated to Humanizer v3\r\n2. You have `using Humanizer;` at the top of your file\r\n3. You're targeting a supported framework (net8.0, net10.0, or net48)\r\n\r\n### Analyzer Not Showing Warnings\r\n\r\nIf the analyzer doesn't show warnings:\r\n\r\n1. Rebuild your solution (`dotnet clean && dotnet build`)\r\n2. Restart your IDE\r\n3. Check that the analyzer package is correctly referenced\r\n4. Ensure you're using a compatible IDE/editor (VS 2022, Rider, VS Code with C# extension)\r\n\r\n### Can't Use the Analyzer\r\n\r\nIf you can't use the Roslyn analyzer (e.g., older IDE, build system limitations):\r\n\r\n1. Use the manual migration steps above\r\n2. Use find/replace in your editor\r\n3. Use command-line tools (grep, sed, PowerShell) to find and replace\r\n\r\n## Support\r\n\r\n- **Documentation:** See [Humanizer README](../readme.md)\r\n- **Issues:** [GitHub Issues](https://github.com/Humanizr/Humanizer/issues)\r\n- **Discussions:** [GitHub Discussions](https://github.com/Humanizr/Humanizer/discussions)\r\n\r\n## Summary\r\n\r\n- ✅ **Recommended:** Use `Humanizer.Analyzers` for automatic detection and fixing\r\n- ✅ **Alternative:** Manual migration using find/replace\r\n- ⚠️ **Breaking Change:** Old namespaces will not work in v3\r\n- 📦 **Minimal Change:** Usually just need to update using directives to `using Humanizer;`\r\n- 🎯 **Goal:** All Humanizer types are now in the root `Humanizer` namespace\r\n"
  },
  {
    "path": "global.json",
    "content": "{\n  \"sdk\": {\n    \"version\": \"10.0.100\",\n    \"rollForward\": \"latestFeature\"\n  },\n  \"test\": {\n    \"runner\": \"Microsoft.Testing.Platform\"\n  }\n}"
  },
  {
    "path": "license.txt",
    "content": "The MIT License (MIT)\r\n\r\nCopyright (c) .NET Foundation and Contributors\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n\r\n==============================================================================\r\n\r\nInflector (https://github.com/srkirkland/Inflector)\r\nThe MIT License (MIT)\r\nCopyright (c) 2013 Scott Kirkland\r\n\r\n==============================================================================\r\n\r\nByteSize (https://github.com/omar/ByteSize)\r\nThe MIT License (MIT)\r\nCopyright (c) 2013-2014 Omar Khudeira (http://omar.io)\r\n\r\n==============================================================================\r\n"
  },
  {
    "path": "nuget.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n  <config>\r\n    <add key=\"signatureValidationMode\" value=\"require\" />\r\n  </config>\r\n  <packageSources>\r\n    <clear />\r\n    <add key=\"nuget.org\" value=\"https://api.nuget.org/v3/index.json\" />\r\n  </packageSources>\r\n  <trustedSigners>\r\n    <repository name=\"nuget.org\" serviceIndex=\"https://api.nuget.org/v3/index.json\">\r\n      <certificate fingerprint=\"0e5f38f57dc1bcc806d8494f4f90fbcedd988b46760709cbeec6f4219aa6157d\" hashAlgorithm=\"SHA256\" allowUntrustedRoot=\"false\" />\r\n      <certificate fingerprint=\"5a2901d6ada3d18260b9c6dfe2133c95d74b9eef6ae0e5dc334c8454d1477df4\" hashAlgorithm=\"SHA256\" allowUntrustedRoot=\"false\" />\r\n      <certificate fingerprint=\"1f4b311d9acc115c8dc8018b5a49e00fce6da8e2855f9f014ca6f34570bc482d\" hashAlgorithm=\"SHA256\" allowUntrustedRoot=\"false\" />\r\n    </repository>\r\n  </trustedSigners>\r\n</configuration>"
  },
  {
    "path": "readme.md",
    "content": "﻿# <img width=\"30px\" src=\"logo.png\" /> Humanizer\r\n\r\n[![Build Status](https://dev.azure.com/dotnet/Humanizer/_apis/build/status/Humanizer-CI?branchName=main)](https://dev.azure.com/dotnet/Humanizer/_build?definitionId=14)\r\n[![NuGet version](https://img.shields.io/nuget/v/Humanizer.svg?logo=nuget&cacheSeconds=300)](https://www.nuget.org/packages/Humanizer)\r\n[![NuGet version prerelease](https://img.shields.io/nuget/vpre/Humanizer.svg?logo=nuget&cacheSeconds=300)](https://img.shields.io/nuget/vpre/Humanizer.Core)\r\n[![NuGet downloads](https://img.shields.io/nuget/dt/Humanizer.Core.svg?logo=nuget&cacheSeconds=300)](https://www.nuget.org/packages/Humanizer.Core)\r\n\r\nHumanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities.\r\n\r\n> **📚 Full Documentation**: See the [documentation folder](docs/index.md) for comprehensive guides, examples, and API reference.\r\n\r\n\r\n## Install\r\n\r\nYou can install Humanizer as [a NuGet package](https://www.nuget.org/packages/Humanizer):\r\n\r\n**English only**: `Humanizer.Core`\r\n\r\nAll languages: `Humanizer`\r\n\r\n\r\n### Supported frameworks\r\n\r\n**Supported frameworks:** net10.0, net8.0, net48\r\n\r\n**netstandard2.0:** The NuGet package also targets netstandard2.0 as a special case to support specific scenarios such as Roslyn Analyzers and MSBuild tasks that require netstandard2.0.\r\n\r\n**Unsupported versions:** While other .NET Framework versions (net4.6.1 through net4.7.2) can technically consume netstandard2.0 libraries, they are **not officially supported** by Humanizer and may not work correctly. Please use one of the explicitly supported frameworks listed above for the best experience.\r\n\r\nHumanizer symbols are source-indexed with [SourceLink](https://github.com/dotnet/sourcelink) and included in the package, which means you can step through Humanizer's source code while debugging your own application.\r\n\r\n> [!IMPORTANT]\r\n> **Humanizer 3.0 restore requirements**: The `Humanizer` metapackage now requires the NuGet locale parsing fix shipped in [.NET SDK 9.0.200 and corresponding Visual Studio/MSBuild updates](https://github.com/NuGet/NuGet.Client/pull/6124#issuecomment-3391090183). Restore operations must run on .NET SDK 9.0.200 or newer, or on Visual Studio 2022/MSBuild versions that include that patch. Older SDKs/MSBuild builds will fail to restore the metapackage because they do not recognize three-letter locale identifiers. As a workaround, reference `Humanizer.Core` directly and add the desired `Humanizer.Core.<locale>` satellite packages individually when targeting older tooling.\r\n\r\n> Upgrading from `2.14.1` to `3.0.8`? See [docs/migration-v3.md](docs/migration-v3.md) for the complete breaking-change checklist, patch-line fix notes, and known regression status.\r\n\r\n### Specify Languages (Optional)\r\n\r\nYou choose which packages based on what NuGet package(s) you install. By default, the main `Humanizer` package installs all supported languages. If you're not sure, then just use the main `Humanizer` package.\r\n\r\nHere are the options:\r\n\r\n| Option | Package Name | Install Command | Included Languages |\r\n|--------|--------------|-----------------|-------------------|\r\n| **All languages** | `Humanizer` | `dotnet add package Humanizer` | All supported languages (pulls in `Humanizer.Core` and all language packages) |\r\n| **English only** | `Humanizer.Core` | `dotnet add package Humanizer.Core` | English only |\r\n| **Specific languages** | `Humanizer.Core.<locale>` | `dotnet add package Humanizer.Core.fr` (French example) | Install as many language-specific packages as needed |\r\n\r\nFor example, for French use `Humanizer.Core.fr`, for Spanish use `Humanizer.Core.es`, etc. You can include multiple languages by installing however many language packages you want.\r\n\r\nThe detailed explanation for how this works is in the comments [here](https://github.com/Humanizr/Humanizer/issues/59#issuecomment-152546079).\r\n\r\n\r\n## Features\r\n\r\n\r\n### Humanize String\r\n\r\nString humanization is a core feature that transforms computerized strings into readable, human-friendly text. This is particularly valuable when you need to display programming identifiers (class names, method names, properties) to end users in a readable format.\r\n\r\nThe foundation of this feature was originally developed for the [BDDfy framework](https://github.com/TestStack/TestStack.BDDfy) to turn test method names into readable test descriptions. `Humanize` intelligently handles PascalCase, camelCase, underscored_strings, and dash-separated-strings.\r\n\r\n```csharp\r\n\"PascalCaseInputStringIsTurnedIntoSentence\".Humanize() \r\n    => \"Pascal case input string is turned into sentence\"\r\n\r\n\"Underscored_input_string_is_turned_into_sentence\".Humanize() \r\n    => \"Underscored input string is turned into sentence\"\r\n\r\n\"dash-separated-string\".Humanize() \r\n    => \"Dash separated string\"\r\n```\r\n\r\n**Acronym Handling**: Strings containing only uppercase letters are treated as acronyms and left unchanged. To humanize any string, use the `Transform` method:\r\n\r\n```csharp\r\n\"HTML\".Humanize() => \"HTML\"  // Acronym preserved\r\n\"HUMANIZER\".Humanize() => \"HUMANIZER\"  // All caps preserved\r\n\r\n// Force humanization with Transform\r\n\"HUMANIZER\".Transform(To.LowerCase, To.TitleCase) => \"Humanizer\"\r\n```\r\n\r\n**Letter Casing**: Control the output casing directly:\r\n\r\n```csharp\r\n\"CanReturnTitleCase\".Humanize(LetterCasing.Title) => \"Can Return Title Case\"\r\n\"CanReturnLowerCase\".Humanize(LetterCasing.LowerCase) => \"can return lower case\"\r\n\"CanHumanizeIntoUpperCase\".Humanize(LetterCasing.AllCaps) => \"CAN HUMANIZE INTO UPPER CASE\"\r\n\"some string\".Humanize(LetterCasing.Sentence) => \"Some string\"\r\n```\r\n\r\n#### Version 3.0 Behavioral Change\r\n\r\nIn version 3.0, `Humanize` and `Titleize` now preserve input strings that contain no recognized letters (e.g., special characters, unrecognized Unicode scripts) instead of returning an empty string:\r\n\r\n```csharp\r\n// Before v3.0: returned \"\"\r\n// v3.0 and later: returns \"@@\"\r\n\"@@\".Humanize() => \"@@\"\r\n\r\n// Cyrillic and other Unicode scripts are also preserved\r\n\"Майк\".Titleize() => \"Майк\"\r\n```\r\n\r\n\r\n### Dehumanize String\r\n\r\nReverse the humanization process by converting human-friendly strings back to PascalCase:\r\n\r\n```csharp\r\n\"Pascal case input string is turned into sentence\".Dehumanize() \r\n    => \"PascalCaseInputStringIsTurnedIntoSentence\"\r\n\r\n\"some string\".Dehumanize() => \"SomeString\"\r\n\"Some String\".Dehumanize() => \"SomeString\"\r\n```\r\n\r\n\r\n### Transform String\r\n\r\nThe `Transform` method provides a flexible, extensible way to apply string transformations. Unlike the legacy `LetterCasing` enum which limits you to built-in options, `IStringTransformer` is an interface you can implement in your codebase for domain-specific transformations.\r\n\r\n```csharp\r\n\"Sentence casing\".Transform(To.LowerCase) => \"sentence casing\"\r\n\"Sentence casing\".Transform(To.SentenceCase) => \"Sentence casing\"\r\n\"Sentence casing\".Transform(To.TitleCase) => \"Sentence Casing\"\r\n\"Sentence casing\".Transform(To.UpperCase) => \"SENTENCE CASING\"\r\n```\r\n\r\n\r\n\r\n\r\n### Truncate String\r\n\r\nIntelligently truncate strings with multiple strategies. The default uses the `…` character (one character) instead of `\"...\"` (three characters) to maximize visible text before truncation. You can also implement custom `ITruncator` strategies for specialized truncation logic.\r\n\r\n```csharp\r\n\"Long text to truncate\".Truncate(10) => \"Long text…\"\r\n\"Long text to truncate\".Truncate(10, \"---\") => \"Long te---\"\r\n\r\n// Fixed length (default)\r\n\"Long text to truncate\".Truncate(10, Truncator.FixedLength) => \"Long text…\"\r\n\r\n// Fixed number of words\r\n\"Long text to truncate\".Truncate(2, Truncator.FixedNumberOfWords) => \"Long text…\"\r\n\r\n// Truncate from the left\r\n\"Long text to truncate\".Truncate(10, Truncator.FixedLength, TruncateFrom.Left) \r\n    => \"… truncate\"\r\n```\r\n\r\n\r\n\r\n\r\n### Humanize Enums\r\n\r\nEnum humanization eliminates the need to manually add spaces between words in enum member names. While you could use `DescriptionAttribute` on every enum member, Humanizer automatically handles the common case of simply needing to add spaces. When `DescriptionAttribute` (or any attribute with a `Description` property) is present, it takes precedence, making it easy to provide custom text only when needed.\r\n\r\n```csharp\r\npublic enum UserType\r\n{\r\n    [Description(\"Custom description\")]\r\n    MemberWithDescriptionAttribute,\r\n    MemberWithoutDescriptionAttribute,\r\n    ALLCAPITALS\r\n}\r\n\r\n// DescriptionAttribute value is used\r\nUserType.MemberWithDescriptionAttribute.Humanize() => \"Custom description\"\r\n\r\n// Automatic humanization when no attribute\r\nUserType.MemberWithoutDescriptionAttribute.Humanize() \r\n    => \"Member without description attribute\"\r\n\r\n// Apply casing transformations\r\nUserType.MemberWithoutDescriptionAttribute.Humanize().Transform(To.TitleCase) \r\n    => \"Member Without Description Attribute\"\r\n```\r\n\r\nHumanizer works with any attribute containing a `Description` property and supports localized `DisplayAttribute` for multi-language scenarios. This helps you avoid littering enums with unnecessary attributes while still providing customization when needed.\r\n\r\n\r\n### Dehumanize Enums\r\n\r\nConvert humanized strings back to their original enum values:\r\n\r\n```csharp\r\n\"Member without description attribute\".DehumanizeTo<UserType>() \r\n    => UserType.MemberWithoutDescriptionAttribute\r\n\r\n// Non-generic version for runtime types\r\n\"Member without description attribute\".DehumanizeTo(typeof(UserType)) \r\n    => UserType.MemberWithoutDescriptionAttribute\r\n\r\n// Handle missing matches gracefully\r\n\"Invalid\".DehumanizeTo<UserType>(OnNoMatch.ReturnsNull) => null\r\n```\r\n\r\nThe method honors `DescriptionAttribute` and is case-insensitive.\r\n\r\n\r\n### Humanize DateTime\r\n\r\nGet relative time descriptions for `DateTime` and `DateTimeOffset` values:\r\n\r\n```csharp\r\nDateTime.UtcNow.AddHours(-2).Humanize() => \"2 hours ago\"\r\nDateTime.UtcNow.AddHours(-30).Humanize() => \"yesterday\"\r\n\r\nDateTime.UtcNow.AddHours(2).Humanize() => \"2 hours from now\"\r\nDateTime.UtcNow.AddHours(30).Humanize() => \"tomorrow\"\r\n\r\nDateTimeOffset.UtcNow.AddHours(1).Humanize() => \"an hour from now\"\r\n```\r\n\r\nSupports both UTC and local times, with optional culture specification and custom comparison dates.\r\n\r\n```csharp\r\npublic static string Humanize(this DateTime input, bool utcDate = true, DateTime? dateToCompareAgainst = null, CultureInfo culture = null)\r\npublic static string Humanize(this DateTimeOffset input, DateTimeOffset? dateToCompareAgainst = null, CultureInfo culture = null)\r\n```\r\n\r\nMany localizations are available for this method. Here are a few examples:\r\n\r\n```csharp\r\n// In ar culture\r\nDateTime.UtcNow.AddDays(-1).Humanize() => \"أمس\"\r\nDateTime.UtcNow.AddDays(-2).Humanize() => \"منذ يومين\"\r\nDateTime.UtcNow.AddDays(-3).Humanize() => \"منذ 3 أيام\"\r\nDateTime.UtcNow.AddDays(-11).Humanize() => \"منذ 11 يوم\"\r\n\r\n// In ru-RU culture\r\nDateTime.UtcNow.AddMinutes(-1).Humanize() => \"минуту назад\"\r\nDateTime.UtcNow.AddMinutes(-2).Humanize() => \"2 минуты назад\"\r\nDateTime.UtcNow.AddMinutes(-10).Humanize() => \"10 минут назад\"\r\nDateTime.UtcNow.AddMinutes(-21).Humanize() => \"21 минуту назад\"\r\nDateTime.UtcNow.AddMinutes(-22).Humanize() => \"22 минуты назад\"\r\nDateTime.UtcNow.AddMinutes(-40).Humanize() => \"40 минут назад\"\r\n```\r\n\r\nThere are two strategies for `DateTime.Humanize`: the default one as seen above and a precision based one.\r\nTo use the precision based strategy you need to configure it:\r\n\r\n```csharp\r\nConfigurator.DateTimeHumanizeStrategy = new PrecisionDateTimeHumanizeStrategy(precision: .75);\r\nConfigurator.DateTimeOffsetHumanizeStrategy = new PrecisionDateTimeOffsetHumanizeStrategy(precision: .75); // configure when humanizing DateTimeOffset\r\n```\r\n\r\nThe default precision is set to .75, but you can pass your desired precision too. With precision set to 0.75:\r\n\r\n```csharp\r\n44 seconds => 44 seconds ago/from now\r\n45 seconds => one minute ago/from now\r\n104 seconds => one minute ago/from now\r\n105 seconds => two minutes ago/from now\r\n\r\n25 days => a month ago/from now\r\n```\r\n\r\n**No dehumanization for dates as `Humanize` is a lossy transformation and the human friendly date is not reversible**\r\n\r\n\r\n### Humanize TimeSpan\r\n\r\nYou can call `Humanize` on a `TimeSpan` to a get human friendly representation for it:\r\n\r\n```csharp\r\nTimeSpan.FromMilliseconds(1).Humanize() => \"1 millisecond\"\r\nTimeSpan.FromMilliseconds(2).Humanize() => \"2 milliseconds\"\r\nTimeSpan.FromDays(1).Humanize() => \"1 day\"\r\nTimeSpan.FromDays(16).Humanize() => \"2 weeks\"\r\n```\r\n\r\nThere is an optional `precision` parameter for `TimeSpan.Humanize` which allows you to specify the precision of the returned value.\r\nThe default value of `precision` is 1 which means only the largest time unit is returned like you saw in `TimeSpan.FromDays(16).Humanize()`.\r\nHere are a few examples of specifying precision:\r\n\r\n```csharp\r\nTimeSpan.FromDays(1).Humanize(precision:2) => \"1 day\" // no difference when there is only one unit in the provided TimeSpan\r\nTimeSpan.FromDays(16).Humanize(2) => \"2 weeks, 2 days\"\r\n\r\n// the same TimeSpan value with different precision returns different results\r\nTimeSpan.FromMilliseconds(1299630020).Humanize() => \"2 weeks\"\r\nTimeSpan.FromMilliseconds(1299630020).Humanize(3) => \"2 weeks, 1 day, 1 hour\"\r\nTimeSpan.FromMilliseconds(1299630020).Humanize(4) => \"2 weeks, 1 day, 1 hour, 30 seconds\"\r\nTimeSpan.FromMilliseconds(1299630020).Humanize(5) => \"2 weeks, 1 day, 1 hour, 30 seconds, 20 milliseconds\"\r\n```\r\n\r\nBy default, when using `precision` parameter empty time units are not counted towards the precision of the returned value.\r\nIf this behavior isn't desired for you, you can use the overloaded `TimeSpan.Humanize` method with `countEmptyUnits` parameter. Leading empty time units never count.\r\nHere is an example showing the difference of counting empty units:\r\n\r\n```csharp\r\nTimeSpan.FromMilliseconds(3603001).Humanize(3) => \"1 hour, 3 seconds, 1 millisecond\"\r\nTimeSpan.FromMilliseconds(3603001).Humanize(3, countEmptyUnits:true) => \"1 hour, 3 seconds\"\r\n```\r\n\r\nMany localizations are available for this method:\r\n\r\n```csharp\r\n// in de-DE culture\r\nTimeSpan.FromDays(1).Humanize() => \"Ein Tag\"\r\nTimeSpan.FromDays(2).Humanize() => \"2 Tage\"\r\n\r\n// in sk-SK culture\r\nTimeSpan.FromMilliseconds(1).Humanize() => \"1 milisekunda\"\r\nTimeSpan.FromMilliseconds(2).Humanize() => \"2 milisekundy\"\r\nTimeSpan.FromMilliseconds(5).Humanize() => \"5 milisekúnd\"\r\n```\r\n\r\nCulture to use can be specified explicitly. If it is not, current thread's current UI culture is used. Example:\r\n\r\n```csharp\r\nTimeSpan.FromDays(1).Humanize(culture: \"ru-RU\") => \"один день\"\r\n```\r\n\r\nIn addition, a minimum unit of time may be specified to avoid rolling down to a smaller unit. For example:\r\n  ```csharp\r\n  TimeSpan.FromMilliseconds(122500).Humanize(minUnit: TimeUnit.Second) => \"2 minutes, 2 seconds\"    // instead of 2 minutes, 2 seconds, 500 milliseconds\r\n  TimeSpan.FromHours(25).Humanize(minUnit: TimeUnit.Day) => \"1 Day\"   //instead of 1 Day, 1 Hour\r\n  ```\r\n\r\nIn addition, a maximum unit of time may be specified to avoid rolling up to the next largest unit. For example:\r\n```csharp\r\nTimeSpan.FromDays(7).Humanize(maxUnit: TimeUnit.Day) => \"7 days\"    // instead of 1 week\r\nTimeSpan.FromMilliseconds(2000).Humanize(maxUnit: TimeUnit.Millisecond) => \"2000 milliseconds\"    // instead of 2 seconds\r\n```\r\nThe default maxUnit is `TimeUnit.Week` because it gives exact results. You can increase this value to `TimeUnit.Month` or `TimeUnit.Year` which will give you an approximation based on 365.2425 days a year and 30.436875 days a month. Therefore, the months are alternating between 30 and 31 days in length and every fourth year is 366 days long.\r\n```csharp\r\nTimeSpan.FromDays(486).Humanize(maxUnit: TimeUnit.Year, precision: 7) => \"1 year, 3 months, 29 days\" // One day further is 1 year, 4 month\r\nTimeSpan.FromDays(517).Humanize(maxUnit: TimeUnit.Year, precision: 7) => \"1 year, 4 months, 30 days\" // This month has 30 days and one day further is 1 year, 5 months\r\n```\r\n\r\nWhen there are multiple time units, they are combined using the `\", \"` string:\r\n\r\n```csharp\r\nTimeSpan.FromMilliseconds(1299630020).Humanize(3) => \"2 weeks, 1 day, 1 hour\"\r\n```\r\n\r\nWhen `TimeSpan` is zero, the default behavior will return \"0\" plus whatever the minimum time unit is. However, if you assign `true` to `toWords` when calling `Humanize`, then the method returns \"no time\". For example:\r\n```csharp\r\nTimeSpan.Zero.Humanize(1) => \"0 milliseconds\"\r\nTimeSpan.Zero.Humanize(1, toWords: true) => \"no time\"\r\nTimeSpan.Zero.Humanize(1, minUnit: Humanizer.Localisation.TimeUnit.Second) => \"0 seconds\"\r\n```\r\n\r\nUsing the `collectionSeparator` parameter, you can specify your own separator string:\r\n\r\n```csharp\r\nTimeSpan.FromMilliseconds(1299630020).Humanize(3, collectionSeparator: \" - \") => \"2 weeks - 1 day - 1 hour\"\r\n````\r\n\r\nIt is also possible to use the current culture's collection formatter to combine the time units. To do so, specify `null` as the `collectionSeparator` parameter:\r\n\r\n```csharp\r\n// in en-US culture\r\nTimeSpan.FromMilliseconds(1299630020).Humanize(3, collectionSeparator: null) => \"2 weeks, 1 day, and 1 hour\"\r\n\r\n// in de-DE culture\r\nTimeSpan.FromMilliseconds(1299630020).Humanize(3, collectionSeparator: null) => \"2 Wochen, Ein Tag und Eine Stunde\"\r\n```\r\n\r\nIf words are preferred to numbers, a `toWords: true` parameter can be set to convert the numbers in a humanized TimeSpan to words:\r\n```csharp\r\nTimeSpan.FromMilliseconds(1299630020).Humanize(3, toWords: true) => \"two weeks, one day, one hour\"\r\n```\r\n\r\nBy calling `ToAge`, a `TimeSpan` can also be expressed as an age.\r\nFor cultures that do not define an age expression, the result will be the same as calling `Humanize` _(but with a default `maxUnit` equal to `TimeUnit.Year`)_. \r\n\r\n```csharp\r\n// in en-US culture\r\nTimeSpan.FromDays(750).ToAge() => \"2 years old\"\r\n\r\n// in fr culture\r\nTimeSpan.FromDays(750).ToAge() => \"2 ans\"\r\n```\r\n\r\n\r\n### Humanize Collections\r\n\r\nYou can call `Humanize` on any `IEnumerable` to get a nicely formatted string representing the objects in the collection. By default `ToString()` will be called on each item to get its representation but a formatting function may be passed to `Humanize` instead. Additionally, a default separator is provided (\"and\" in English), but a different separator may be passed into `Humanize`.\r\n\r\nFor instance:\r\n\r\n```csharp\r\nclass SomeClass\r\n{\r\n    public string SomeString;\r\n    public int SomeInt;\r\n    public override string ToString()\r\n    {\r\n        return \"Specific String\";\r\n    }\r\n}\r\n\r\nstring FormatSomeClass(SomeClass sc)\r\n{\r\n    return string.Format(\"SomeObject #{0} - {1}\", sc.SomeInt, sc.SomeString);\r\n}\r\n\r\nvar collection = new List<SomeClass>\r\n{\r\n    new SomeClass { SomeInt = 1, SomeString = \"One\" },\r\n    new SomeClass { SomeInt = 2, SomeString = \"Two\" },\r\n    new SomeClass { SomeInt = 3, SomeString = \"Three\" }\r\n};\r\n\r\ncollection.Humanize()                                    // \"Specific String, Specific String, and Specific String\"\r\ncollection.Humanize(\"or\")                                // \"Specific String, Specific String, or Specific String\"\r\ncollection.Humanize(FormatSomeClass)                     // \"SomeObject #1 - One, SomeObject #2 - Two, and SomeObject #3 - Three\"\r\ncollection.Humanize(sc => sc.SomeInt.Ordinalize(), \"or\") // \"1st, 2nd, or 3rd\"\r\n```\r\n\r\nItems are trimmed and blank (NullOrWhitespace) items are skipped. This results in clean comma punctuation. (If there is a custom formatter function, this applies only to the formatter's output.)\r\n\r\nYou can provide your own collection formatter by implementing `ICollectionFormatter` and registering it with `Configurator.CollectionFormatters`.\r\n\r\n\r\n### Inflector methods\r\n\r\nInflector methods handle the complexities of English pluralization and singularization rules, including irregular words (man/men, person/people) and uncountable words (fish, equipment). These methods save you from maintaining your own word lists and rules.\r\n\r\n\r\n#### Pluralize\r\n\r\nIntelligently pluralize words, handling irregular and uncountable forms:\r\n\r\n```csharp\r\n\"Man\".Pluralize() => \"Men\"\r\n\"string\".Pluralize() => \"strings\"\r\n\"person\".Pluralize() => \"people\"\r\n\r\n// Uncertain plurality? Use the optional parameter\r\n\"Men\".Pluralize(inputIsKnownToBeSingular: false) => \"Men\"\r\n\"string\".Pluralize(inputIsKnownToBeSingular: false) => \"strings\"\r\n```\r\n\r\n\r\n#### Singularize\r\n\r\nConvert plural words to singular form:\r\n\r\n```csharp\r\n\"Men\".Singularize() => \"Man\"\r\n\"strings\".Singularize() => \"string\"\r\n\"people\".Singularize() => \"person\"\r\n\r\n// Uncertain plurality? Use the optional parameter\r\n\"Man\".Singularize(inputIsKnownToBePlural: false) => \"Man\"\r\n```\r\n\r\n\r\n## Adding Words\r\n\r\nSometimes, you may need to add a rule from the singularization/pluralization vocabulary (the examples below are already in the `DefaultVocabulary` used by `Inflector`):\r\n\r\n```csharp\r\n// Adds a word to the vocabulary which cannot easily be pluralized/singularized by RegEx.\r\n// Will match both \"salesperson\" and \"person\".\r\nVocabularies.Default.AddIrregular(\"person\", \"people\");\r\n\r\n// To only match \"person\" and not \"salesperson\" you would pass false for the 'matchEnding' parameter.\r\nVocabularies.Default.AddIrregular(\"person\", \"people\", matchEnding: false);\r\n\r\n// Adds an uncountable word to the vocabulary.  Will be ignored when plurality is changed:\r\nVocabularies.Default.AddUncountable(\"fish\");\r\n\r\n// Adds a rule to the vocabulary that does not follow trivial rules for pluralization:\r\nVocabularies.Default.AddPlural(\"bus\", \"buses\");\r\n\r\n// Adds a rule to the vocabulary that does not follow trivial rules for singularization\r\n// (will match both \"vertices\" -> \"vertex\" and \"indices\" -> \"index\"):\r\nVocabularies.Default.AddSingular(\"(vert|ind)ices$\", \"$1ex\");\r\n\r\n```\r\n\r\n\r\n#### ToQuantity\r\n\r\nCombine numbers with properly pluralized/singularized words:\r\n\r\n```csharp\r\n\"case\".ToQuantity(0) => \"0 cases\"\r\n\"case\".ToQuantity(1) => \"1 case\"\r\n\"case\".ToQuantity(5) => \"5 cases\"\r\n\"man\".ToQuantity(2) => \"2 men\"\r\n\r\n// Display quantity as words or hide it\r\n\"case\".ToQuantity(5, ShowQuantityAs.Words) => \"five cases\"\r\n\"case\".ToQuantity(5, ShowQuantityAs.None) => \"cases\"\r\n\r\n// Format with custom number formatting\r\n\"dollar\".ToQuantity(2, \"C0\", new CultureInfo(\"en-US\")) => \"$2 dollars\"\r\n\"cases\".ToQuantity(12000, \"N0\") => \"12,000 cases\"\r\n```\r\n\r\n\r\n#### Ordinalize\r\n\r\nConvert numbers to ordinal strings (1st, 2nd, 3rd, etc.):\r\n\r\n```csharp\r\n1.Ordinalize() => \"1st\"\r\n5.Ordinalize() => \"5th\"\r\n21.Ordinalize() => \"21st\"\r\n\"21\".Ordinalize() => \"21st\"\r\n\r\n// Supports grammatical gender (culture-specific)\r\n1.Ordinalize(GrammaticalGender.Feminine) => \"1ª\"  // Brazilian Portuguese\r\n1.Ordinalize(GrammaticalGender.Masculine) => \"1º\"  // Brazilian Portuguese\r\n```\r\n\r\n\r\n#### Titleize, Pascalize, Camelize\r\n\r\nConvert strings to various coding conventions:\r\n\r\n```csharp\r\n// Titleize: Title Case with spaces\r\n\"some_title\".Titleize() => \"Some Title\"\r\n\r\n// Pascalize: UpperCamelCase without spaces\r\n\"some_title for something\".Pascalize() => \"SomeTitleForSomething\"\r\n\r\n// Camelize: lowerCamelCase without spaces\r\n\"some_title for something\".Camelize() => \"someTitleForSomething\"\r\n```\r\n\r\n\r\n#### Underscore, Dasherize, Kebaberize\r\n\r\nTransform to common naming conventions:\r\n\r\n```csharp\r\n// Underscore: snake_case\r\n\"SomeTitle\".Underscore() => \"some_title\"\r\n\r\n// Dasherize/Hyphenate: Replace underscores with dashes\r\n\"some_title\".Dasherize() => \"some-title\"\r\n\"some_title\".Hyphenate() => \"some-title\"\r\n\r\n// Kebaberize: kebab-case (lowercase with hyphens)\r\n\"SomeText\".Kebaberize() => \"some-text\"\r\n\"some property name\".Kebaberize() => \"some-property-name\"\r\n```\r\n\r\n\r\n### Fluent Date\r\n\r\nFluent date methods make time-based code dramatically more readable. Instead of verbose `DateTime.Now.AddDays(2).AddHours(3)` calls, you can write `DateTime.Now + 2.Days() + 3.Hours()`. This improves code clarity and reduces errors.\r\n\r\n**TimeSpan methods:**\r\n\r\n```csharp\r\n2.Milliseconds() => TimeSpan.FromMilliseconds(2)\r\n5.Seconds() => TimeSpan.FromSeconds(5)\r\n3.Minutes() => TimeSpan.FromMinutes(3)\r\n4.Hours() => TimeSpan.FromHours(4)\r\n7.Days() => TimeSpan.FromDays(7)\r\n2.Weeks() => TimeSpan.FromDays(14)\r\n```\r\n\r\n**Use fluent syntax instead of verbose `Add` methods:**\r\n\r\n```csharp\r\n// Instead of this:\r\nDateTime.Now.AddDays(2).AddHours(3).AddMinutes(-5)\r\n\r\n// Write this:\r\nDateTime.Now + 2.Days() + 3.Hours() - 5.Minutes()\r\n```\r\n\r\n**DateTime construction:**\r\n\r\n```csharp\r\nIn.TheYear(2010) => new DateTime(2010, 1, 1)\r\nIn.January => January 1st of current year\r\nIn.FebruaryOf(2009) => February 1st, 2009\r\n\r\nOn.January.The4th => January 4th of current year\r\nOn.February.The(12) => February 12th of current year\r\n```\r\n\r\n**DateTime manipulation:**\r\n\r\n```csharp\r\nvar date = new DateTime(2011, 2, 10, 5, 25, 45, 125);\r\n\r\ndate.In(2008) => Changes year to 2008\r\ndate.At(2, 20, 15) => Changes time to 2:20:15.125\r\ndate.AtNoon() => Changes time to 12:00:00\r\ndate.AtMidnight() => Changes time to 00:00:00\r\n```\r\n\r\n\r\n### Number to numbers\r\n\r\nCreate large numbers with readable fluent syntax:\r\n\r\n```csharp\r\n3.Thousands() => 3000\r\n5.Millions() => 5000000\r\n1.25.Billions() => 1250000000\r\n\r\n// Chain for complex values\r\n3.Hundreds().Thousands() => 300000\r\n```\r\n\r\n\r\n### Number to words\r\n\r\nConvert numbers to their word representation:\r\n\r\n```csharp\r\n1.ToWords() => \"one\"\r\n10.ToWords() => \"ten\"\r\n122.ToWords() => \"one hundred and twenty-two\"\r\n3501.ToWords() => \"three thousand five hundred and one\"\r\n\r\n// Grammatical gender support (culture-specific)\r\n1.ToWords(GrammaticalGender.Masculine, new CultureInfo(\"ru\")) => \"один\"\r\n1.ToWords(GrammaticalGender.Feminine, new CultureInfo(\"ru\")) => \"одна\"\r\n\r\n// Control \"and\" usage\r\n3501.ToWords(addAnd: false) => \"three thousand five hundred one\"\r\n```\r\n\r\n\r\n### Number to ordinal words\r\n\r\nConvert numbers to ordinal word form (first, second, third, etc.):\r\n\r\n```csharp\r\n0.ToOrdinalWords() => \"zeroth\"\r\n1.ToOrdinalWords() => \"first\"\r\n2.ToOrdinalWords() => \"second\"\r\n10.ToOrdinalWords() => \"tenth\"\r\n21.ToOrdinalWords() => \"twenty first\"\r\n121.ToOrdinalWords() => \"hundred and twenty first\"\r\n\r\n// Grammatical gender support (culture-specific)\r\n1.ToOrdinalWords(GrammaticalGender.Masculine, new CultureInfo(\"pt-BR\")) => \"primeiro\"\r\n1.ToOrdinalWords(GrammaticalGender.Feminine, new CultureInfo(\"pt-BR\")) => \"primeira\"\r\n```\r\n\r\n### Words to Number Conversion\r\n\r\nConvert English words to numbers (currently English-only):\r\n\r\n```csharp\r\n\"twenty\".ToNumber(new CultureInfo(\"en\")) => 20\r\n\"one hundred and five\".ToNumber(new CultureInfo(\"en\")) => 105\r\n\"three thousand two hundred\".ToNumber(new CultureInfo(\"en\")) => 3200\r\n\r\n// Try pattern for safe conversion\r\nif (\"forty-two\".TryToNumber(out var number, new CultureInfo(\"en\")))\r\n    Console.WriteLine(number); // Outputs: 42\r\n\r\n// Get unrecognized words on failure\r\nif (!\"tenn\".TryToNumber(out var invalid, new CultureInfo(\"en\"), out var badWord))\r\n    Console.WriteLine($\"Unrecognized word: {badWord}\"); // Outputs: Unrecognized word: tenn\r\n```\r\n\r\n> **Note:** Only English (`en`) is currently supported. Other languages throw `NotSupportedException`.\r\n\r\n### DateTime to ordinal words\r\n\r\nConvert dates to ordinal word format:\r\n\r\n```csharp\r\n// English UK\r\nnew DateTime(2015, 1, 1).ToOrdinalWords() => \"1st January 2015\"\r\nnew DateTime(2015, 3, 22).ToOrdinalWords() => \"22nd March 2015\"\r\n\r\n// English US\r\nnew DateTime(2015, 1, 1).ToOrdinalWords() => \"January 1st, 2015\"\r\nnew DateTime(2015, 2, 12).ToOrdinalWords() => \"February 12th, 2015\"\r\n\r\n// Grammatical case support (culture-specific)\r\nnew DateTime(2015, 1, 1).ToOrdinalWords(GrammaticalCase.Genitive)\r\n```\r\n\r\n\r\n### TimeOnly to Clock Notation\r\n\r\nConvert `TimeOnly` to readable clock notation (.NET 6+):\r\n\r\n```csharp\r\n// English US\r\nnew TimeOnly(3, 0).ToClockNotation() => \"three o'clock\"\r\nnew TimeOnly(12, 0).ToClockNotation() => \"noon\"\r\nnew TimeOnly(14, 30).ToClockNotation() => \"half past two\"\r\n\r\n// Brazilian Portuguese\r\nnew TimeOnly(3, 0).ToClockNotation() => \"três em ponto\"\r\nnew TimeOnly(14, 30).ToClockNotation() => \"duas e meia\"\r\n\r\n// Round to nearest 5 minutes\r\nnew TimeOnly(15, 7).ToClockNotation(ClockNotationRounding.NearestFiveMinutes) \r\n    => \"five past three\"\r\n```\r\n\r\n\r\n### Roman numerals\r\n\r\nConvert between integers and Roman numerals:\r\n\r\n```csharp\r\n// To Roman (supports 1-3999)\r\n1.ToRoman() => \"I\"\r\n4.ToRoman() => \"IV\"\r\n10.ToRoman() => \"X\"\r\n1990.ToRoman() => \"MCMXC\"\r\n\r\n// From Roman\r\n\"XIV\".FromRoman() => 14\r\n\"MCMXC\".FromRoman() => 1990\r\n```\r\n\r\n\r\n### Metric numerals\r\n\r\nConvert between numbers and metric notation:\r\n\r\n```csharp\r\n// To Metric\r\n1d.ToMetric() => \"1\"\r\n1230d.ToMetric() => \"1.23k\"\r\n0.1d.ToMetric() => \"100m\"\r\n456789.ToMetric(decimals: 2) => \"456.79k\"\r\n\r\n// From Metric\r\n\"1.23k\".FromMetric() => 1230\r\n\"100m\".FromMetric() => 0.1\r\n```\r\n\r\n\r\n### ByteSize\r\n\r\nHumanizer includes a port of the brilliant [ByteSize](https://github.com/omar/ByteSize) library.\r\nQuite a few changes and additions are made on `ByteSize` to make the interaction with `ByteSize` easier and more consistent with the Humanizer API.\r\nHere are a few examples of how you can convert from numbers to byte sizes and between size magnitudes:\r\n\r\n```c#\r\nvar fileSize = (10).Kilobytes();\r\n\r\nfileSize.Bits      => 81920\r\nfileSize.Bytes     => 10240\r\nfileSize.Kilobytes => 10\r\nfileSize.Megabytes => 0.009765625\r\nfileSize.Gigabytes => 9.53674316e-6\r\nfileSize.Terabytes => 9.31322575e-9\r\n```\r\n\r\nThere are a few extension methods that allow you to turn a number into a ByteSize instance:\r\n\r\n```csharp\r\n3.Bits();\r\n5.Bytes();\r\n(10.5).Kilobytes();\r\n(2.5).Megabytes();\r\n(10.2).Gigabytes();\r\n(4.7).Terabytes();\r\n```\r\n\r\nYou can also add/subtract the values using +/- operators and Add/Subtract methods:\r\n\r\n```csharp\r\nvar total = (10).Gigabytes() + (512).Megabytes() - (2.5).Gigabytes();\r\ntotal.Subtract((2500).Kilobytes()).Add((25).Megabytes());\r\n```\r\n\r\nA `ByteSize` object contains two properties that represent the largest metric prefix symbol and value:\r\n\r\n```csharp\r\nvar maxFileSize = (10).Kilobytes();\r\n\r\nmaxFileSize.LargestWholeNumberSymbol;  // \"KB\"\r\nmaxFileSize.LargestWholeNumberValue;   // 10\r\n```\r\n\r\nIf you want a string representation you can call `ToString` or `Humanize` interchangeably on the `ByteSize` instance:\r\n\r\n```csharp\r\n7.Bits().ToString();           // 7 b\r\n8.Bits().ToString();           // 1 B\r\n(.5).Kilobytes().Humanize();   // 512 B\r\n(1000).Kilobytes().ToString(); // 1000 KB\r\n(1024).Kilobytes().Humanize(); // 1 MB\r\n(.5).Gigabytes().Humanize();   // 512 MB\r\n(1024).Gigabytes().ToString(); // 1 TB\r\n```\r\n\r\nYou can also optionally provide a format for the expected string representation.\r\nThe formatter can contain the symbol of the value to display: `b`, `B`, `KB`, `MB`, `GB`, `TB`.\r\nThe formatter uses the built in [`double.ToString` method](https://docs.microsoft.com/dotnet/api/system.double.tostring) with `#.##` as the default format which rounds the number to two decimal places:\r\n\r\n```csharp\r\nvar b = (10.505).Kilobytes();\r\n\r\n// Default number format is #.##\r\nb.ToString(\"KB\");         // 10.52 KB\r\nb.Humanize(\"MB\");         // .01 MB\r\nb.Humanize(\"b\");          // 86057 b\r\n\r\n// Default symbol is the largest metric prefix value >= 1\r\nb.ToString(\"#.#\");        // 10.5 KB\r\n\r\n// All valid values of double.ToString(string format) are acceptable\r\nb.ToString(\"0.0000\");     // 10.5050 KB\r\nb.Humanize(\"000.00\");     // 010.51 KB\r\n\r\n// You can include number format and symbols\r\nb.ToString(\"#.#### MB\");  // .0103 MB\r\nb.Humanize(\"0.00 GB\");    // 0 GB\r\nb.Humanize(\"#.## B\");     // 10757.12 B\r\n```\r\n\r\nIf you want a string representation with full words you can call `ToFullWords` on the `ByteSize` instance:\r\n\r\n```csharp\r\n7.Bits().ToFullWords();           // 7 bits\r\n8.Bits().ToFullWords();           // 1 byte\r\n(.5).Kilobytes().ToFullWords();   // 512 bytes\r\n(1000).Kilobytes().ToFullWords(); // 1000 kilobytes\r\n(1024).Kilobytes().ToFullWords(); // 1 megabyte\r\n(.5).Gigabytes().ToFullWords();   // 512 megabytes\r\n(1024).Gigabytes().ToFullWords(); // 1 terabyte\r\n```\r\n\r\nThere isn't a `Dehumanize` method to turn a string representation back into a `ByteSize` instance; but you can use `Parse` and `TryParse` on `ByteSize` to do that.\r\nLike other `TryParse` methods, `ByteSize.TryParse` returns `boolean` value indicating whether the parsing was successful.\r\nIf the value is parsed it is output to the `out` parameter supplied:\r\n\r\n```csharp\r\nByteSize output;\r\nByteSize.TryParse(\"1.5mb\", out output);\r\n\r\n// Invalid\r\nByteSize.Parse(\"1.5 b\");   // Can't have partial bits\r\n\r\n// Valid\r\nByteSize.Parse(\"5b\");\r\nByteSize.Parse(\"1.55B\");\r\nByteSize.Parse(\"1.55KB\");\r\nByteSize.Parse(\"1.55 kB \"); // Spaces are trimmed\r\nByteSize.Parse(\"1.55 kb\");\r\nByteSize.Parse(\"1.55 MB\");\r\nByteSize.Parse(\"1.55 mB\");\r\nByteSize.Parse(\"1.55 mb\");\r\nByteSize.Parse(\"1.55 GB\");\r\nByteSize.Parse(\"1.55 gB\");\r\nByteSize.Parse(\"1.55 gb\");\r\nByteSize.Parse(\"1.55 TB\");\r\nByteSize.Parse(\"1.55 tB\");\r\nByteSize.Parse(\"1.55 tb\");\r\n```\r\n\r\nFinally, if you need to calculate the rate at which a quantity of bytes has been transferred, you can use the `Per` method of `ByteSize`. The `Per` method accepts one argument - the measurement interval for the bytes; this is the amount of time it took to transfer the bytes.\r\n\r\nThe `Per` method returns a `ByteRate` class which has a `Humanize` method. By default, rates are given in seconds (eg, MB/s). However, if desired, a TimeUnit may be passed to `Humanize` for an alternate interval. Valid intervals are `TimeUnit.Second`, `TimeUnit.Minute`, and `TimeUnit.Hour`. Examples of each interval and example byte rate usage is below.\r\n\r\n```csharp\r\nvar size = ByteSize.FromMegabytes(10);\r\nvar measurementInterval = TimeSpan.FromSeconds(1);\r\n\r\nvar text = size.Per(measurementInterval).Humanize();\r\n// 10 MB/s\r\n\r\ntext = size.Per(measurementInterval).Humanize(TimeUnit.Minute);\r\n// 600 MB/min\r\n\r\ntext = size.Per(measurementInterval).Humanize(TimeUnit.Hour);\r\n// 35.15625 GB/hour\r\n```\r\n\r\nYou can specify a format for the bytes part of the humanized output:\r\n\r\n```csharp\r\n19854651984.Bytes().Per(1.Seconds()).Humanize(\"#.##\");\r\n// 18.49 GB/s\r\n```\r\n\r\n\r\n### Heading to words\r\n\r\nHumanizer includes methods to change a numeric heading to words. The heading can be a `double` whereas the result will be a string. You can choose whether to return a full representation of the heading (e.g. north, east, south or west), a short representation (e.g. N, E, S, W) or a Unicode arrow character (e.g. ↑, →, ↓, ←).\r\n\r\n```csharp\r\n360.ToHeading();\r\n// N\r\n720.ToHeading();\r\n// N\r\n```\r\n\r\nTo retrieve a full version of the heading, use the following call:\r\n\r\n```csharp\r\n180.ToHeading(HeadingStyle.Full);\r\n// south\r\n360.ToHeading(HeadingStyle.Full);\r\n// north\r\n```\r\n\r\nPlease note that a textual representation has a maximum deviation of 11.25°.\r\n\r\nThe methods above all have an overload with which you can provide a `CultureInfo` object in order to determine the localized result to return.\r\n\r\nTo retrieve an arrow representing the heading use the following method:\r\n\r\n```csharp\r\n90.ToHeadingArrow();\r\n// →\r\n225.ToHeadingArrow();\r\n// ↙\r\n```\r\n\r\nThe arrow representation of the heading has a maximum deviation of 22.5°.\r\n\r\nIn order to retrieve a heading based on the short text representation (e.g. N, E, S, W), the following method can be used:\r\n\r\n```csharp\r\n\"S\".FromShortHeading();\r\n// 180\r\n\"SW\".FromShortHeading();\r\n// 225\r\n```\r\n\r\n\r\n### Tupleize\r\n\r\nHumanizer can change whole numbers into their 'tuple'  using `Tupleize`. For example:\r\n\r\n```csharp\r\n1.Tupleize();\r\n// single\r\n3.Tupleize();\r\n// triple\r\n100.Tupleize();\r\n// centuple\r\n```\r\n\r\nThe numbers 1-10, 100 and 1000 will be converted into a 'named' tuple (i.e. \"single\", \"double\" etc.). Any other number \"n\" will be converted to \"n-tuple\".\r\n\r\n\r\n### Time unit to symbol\r\n\r\nHumanizer can translate time units to their symbols:\r\n\r\n```csharp\r\nTimeUnit.Day.ToSymbol();\r\n// d\r\nTimeUnit.Week.ToSymbol();\r\n// week\r\nTimeUnit.Year.ToSymbol();\r\n// y\r\n```\r\n\r\n\r\n## Mix this into your framework to simplify your life\r\n\r\nThis is just a baseline, and you can use this to simplify your day-to-day job. For example, in Asp.Net MVC we keep chucking `Display` attribute on ViewModel properties so `HtmlHelper` can generate correct labels for us; but, just like enums, in the vast majority of cases we just need a space between the words in property name - so why not use `\"string\".Humanize` for that?!\r\n\r\nYou may find an ASP.NET MVC sample [in the code](https://github.com/Humanizr/Humanizer/tree/v2.7.9/samples/Humanizer.MvcSample) that does that (although the project is excluded from the solution file to make the NuGet package available for .NET 3.5 too).\r\n\r\nThis is achieved using a custom `DataAnnotationsModelMetadataProvider` I called [HumanizerMetadataProvider](https://github.com/Humanizr/Humanizer/blob/v2.7.9/samples/Humanizer.MvcSample/HumanizerMetadataProvider.cs). It is small enough to repeat here; so here we go:\r\n\r\n```csharp\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.ComponentModel.DataAnnotations;\r\nusing System.Linq;\r\nusing System.Web.Mvc;\r\nusing Humanizer;\r\n\r\npublic class HumanizerMetadataProvider : DataAnnotationsModelMetadataProvider\r\n{\r\n    protected override ModelMetadata CreateMetadata(\r\n        IEnumerable<Attribute> attributes,\r\n        Type containerType,\r\n        Func<object> modelAccessor,\r\n        Type modelType,\r\n        string propertyName)\r\n    {\r\n        var propertyAttributes = attributes.ToList();\r\n        var modelMetadata = base.CreateMetadata(propertyAttributes, containerType, modelAccessor, modelType, propertyName);\r\n\r\n        if (IsTransformRequired(modelMetadata, propertyAttributes))\r\n            modelMetadata.DisplayName = modelMetadata.PropertyName.Humanize();\r\n\r\n        return modelMetadata;\r\n    }\r\n\r\n    private static bool IsTransformRequired(ModelMetadata modelMetadata, IList<Attribute> propertyAttributes)\r\n    {\r\n        if (string.IsNullOrEmpty(modelMetadata.PropertyName))\r\n            return false;\r\n\r\n        if (propertyAttributes.OfType<DisplayNameAttribute>().Any())\r\n            return false;\r\n\r\n        if (propertyAttributes.OfType<DisplayAttribute>().Any())\r\n            return false;\r\n\r\n        return true;\r\n    }\r\n}\r\n```\r\n\r\nThis class calls the base class to extract the metadata and then, if required, humanizes the property name.\r\nIt is checking if the property already has a `DisplayName` or `Display` attribute on it in which case the metadata provider will just honor the attribute and leave the property alone.\r\nFor other properties it will Humanize the property name. That is all.\r\n\r\nNow you need to register this metadata provider with Asp.Net MVC.\r\nMake sure you use `System.Web.Mvc.ModelMetadataProviders`, and not `System.Web.ModelBinding.ModelMetadataProviders`:\r\n\r\n```csharp\r\nModelMetadataProviders.Current = new HumanizerMetadataProvider();\r\n```\r\n\r\n... and now you can replace:\r\n\r\n```csharp\r\npublic class RegisterModel\r\n{\r\n    [Display(Name = \"User name\")]\r\n    public string UserName { get; set; }\r\n\r\n    [Display(Name = \"Email address\")]\r\n    public string EmailAddress { get; set; }\r\n\r\n    [Display(Name = \"Confirm password\")]\r\n    public string ConfirmPassword { get; set; }\r\n}\r\n```\r\n\r\nwith:\r\n\r\n```csharp\r\npublic class RegisterModel\r\n{\r\n    public string UserName { get; set; }\r\n    public string EmailAddress { get; set; }\r\n    public string ConfirmPassword { get; set; }\r\n}\r\n```\r\n\r\n... and the \"metadata humanizer\" will take care of the rest.\r\n\r\nNo need to mention that if you want title casing for your labels you can chain the method with `Transform`:\r\n\r\n```csharp\r\nmodelMetadata.DisplayName = modelMetadata.PropertyName.Humanize().Transform(To.TitleCase);\r\n```\r\n\r\n\r\n## Use in ASP.NET 4.x MVC Views\r\n\r\nHumanizer is a Portable Class Library. There is currently [an issue](https://stackoverflow.com/questions/16675171/what-does-the-web-config-compilation-assemblies-element-do) if you try to use PCL's in an MVC view since the MVC views do not share the same build system as the regular project. You must specify all references in the `web.config` file, including ones the project system normally automatically adds.\r\n\r\nIf you encounter errors saying that you must add a reference to either `System.Runtime` or `System.Globalization`, this applies to you. The solution is to add the contract references to your `web.config` as listed [here](https://stackoverflow.com/a/19942274/738188). Note that this applies to any PCL you use in an MVC view, not just Humanizer.\r\n\r\n\r\n## Continuous Integration from Azure DevOps\r\n\r\nThe Humanizer project is built & tested continuously by Azure DevOps (more details [here](https://dev.azure.com/dotnet/Humanizer/_build?definitionId=14)). That applies to pull requests too. Shortly after you submit a PR you can check the build and test status notification on your PR.\r\n\r\nThe current build status on the CI server is [![Build status](https://dev.azure.com/dotnet/Humanizer/_apis/build/status/Humanizer-CI?branchName=main)](https://dev.azure.com/dotnet/Humanizer/_build?definitionId=14)\r\n\r\n## Related projects\r\n\r\nBelow is a list of related open-source projects:\r\n\r\n\r\n### Humanizer ReSharper Annotations\r\n\r\nIf using ReSharper, annotations for Humanizer are available in the [Humanizer.Annotations package](https://resharper-plugins.jetbrains.com/packages/Humanizer.Annotations/), which you can obtain via the ReSharper Extension Manager.\r\nThese annotations do not yet cover the entire library, but [pull requests are always welcome!](https://github.com/enduracode/humanizer-annotations).\r\n\r\n\r\n### PowerShell Humanizer\r\n\r\n[PowerShell Humanizer](https://github.com/dfinke/PowerShellHumanizer) is a PowerShell module that wraps Humanizer.\r\n\r\n\r\n### Humanizer JVM\r\n\r\n[Humanizer.jvm](https://github.com/MehdiK/Humanizer.jvm) is an adaptation of the Humanizer framework for .Net which is made for the jvm and is written in Kotlin.\r\nHumanizer.jvm meets all your jvm needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities.\r\n\r\n\r\n### Humanizer.node\r\n\r\n[Humanizer.node](https://github.com/fakoua/humanizer.node) is a TypeScript port of the Humanizer framework.\r\n\r\n\r\n## Contributing\r\n\r\nWe welcome contributions! If you'd like to contribute to Humanizer:\r\n\r\n- **Found a bug?** Please [open an issue](https://github.com/Humanizr/Humanizer/issues/new)\r\n- **Have a feature idea?** Create an issue to discuss it\r\n- **Want to submit code?** Read our [contribution guidelines](.github/CONTRIBUTING.md) and submit a pull request\r\n\r\nPlease read our [Code of Conduct](.github/CODE_OF_CONDUCT.md) before contributing.\r\n\r\n\r\n## License\r\n\r\nHumanizer is licensed under the [MIT License](license.txt).\r\n\r\nCopyright (c) .NET Foundation and Contributors\r\n\r\n\r\n## Reporting Issues\r\n\r\nIf you encounter any bugs or have feature requests, please:\r\n\r\n1. Check if the issue already exists in our [issue tracker](https://github.com/Humanizr/Humanizer/issues)\r\n2. If not, [create a new issue](https://github.com/Humanizr/Humanizer/issues/new) with:\r\n   - A clear description of the problem or feature request\r\n   - Steps to reproduce (for bugs)\r\n   - Expected vs actual behavior (for bugs)\r\n   - Your environment details (OS, .NET version, Humanizer version)\r\n\r\n\r\n## Icon\r\n\r\nThe icon was created by [Tyrone Rieschiek](https://twitter.com/Inkventive)\r\n"
  },
  {
    "path": "release_notes.md",
    "content": "# v2.2\r\n\r\n - [#634](https://github.com/Humanizr/Humanizer/pull/634) - Added support for Greek language in resources contributed by Christos Matskas ([cmatskas](https://github.com/cmatskas))\r\n - [#633](https://github.com/Humanizr/Humanizer/pull/633) - #632 Continued: Fuzzy month years logic for time span humanize extensions contributed by Claire Novotny ([onovotny](https://github.com/onovotny)) +enhancement\r\n - [#632](https://github.com/Humanizr/Humanizer/pull/632) - Fuzzy month years logic for time span humanize extensions contributed by Martin Strecker ([MaStr11](https://github.com/MaStr11))\r\n - [#631](https://github.com/Humanizr/Humanizer/pull/631) - Latvian localization contributed by Dmitry Bogatykh ([bogatykh](https://github.com/bogatykh))\r\n - [#630](https://github.com/Humanizr/Humanizer/pull/630) - billions and millions greater than 2 contributed by Rafael Bianchi ([rafaellfontana](https://github.com/rafaellfontana))\r\n - [#628](https://github.com/Humanizr/Humanizer/pull/628) - IsDefined is prefered contributed by Shimmy ([weitzhandler](https://github.com/weitzhandler))\r\n - [#623](https://github.com/Humanizr/Humanizer/issues/623) - Wrongful commit to master. What to do?\r\n - [#620](https://github.com/Humanizr/Humanizer/issues/620) - Double Barrel Name conversion\r\n - [#619](https://github.com/Humanizr/Humanizer/pull/619) - Update readme.md contributed by Tyler Brinkley ([TylerBrinkley](https://github.com/TylerBrinkley))\r\n - [#617](https://github.com/Humanizr/Humanizer/pull/617) - issue 611: added the method Kebaberize contributed by ([klaus78](https://github.com/klaus78))\r\n - [#616](https://github.com/Humanizr/Humanizer/issues/616) - English verb (Past Participle) tense conversion \"x\" => \"xed\" feasibility?\r\n - [#613](https://github.com/Humanizr/Humanizer/issues/613) - Humanizer.Core not working correctly, show localized strings instead of english\r\n - [#612](https://github.com/Humanizr/Humanizer/pull/612) - Added Swedish collection formatter contributed by Māris Brenčuks ([brencuks](https://github.com/brencuks))\r\n - [#610](https://github.com/Humanizr/Humanizer/pull/610) - adding parameter decimals toMetric(). Fixes #609 contributed by ([klaus78](https://github.com/klaus78))\r\n - [#609](https://github.com/Humanizr/Humanizer/issues/609) - add .ToMetric() rounding +enhancement\r\n - [#608](https://github.com/Humanizr/Humanizer/pull/608) - 605: Fix enum no display attrib contributed by Thomas Bo Nielsen ([basildk](https://github.com/basildk))\r\n - [#605](https://github.com/Humanizr/Humanizer/issues/605) - enum with DisplayAttribute but no Description attribute fails +fix\r\n - [#603](https://github.com/Humanizr/Humanizer/pull/603) - Syntax correction in readme.md contributed by Brian MacKay ([kinetiq](https://github.com/kinetiq))\r\n - [#602](https://github.com/Humanizr/Humanizer/pull/602) - Register Portuguese translations as `pt` contributed by ([hangy](https://github.com/hangy))\r\n - [#601](https://github.com/Humanizr/Humanizer/issues/601) - Humanize pt-PT problem\r\n - [#600](https://github.com/Humanizr/Humanizer/pull/600) - Revert \"Add Esperanto support to NumberToWords. Fixes #558\" contributed by Claire Novotny ([onovotny](https://github.com/onovotny))\r\n - [#598](https://github.com/Humanizr/Humanizer/pull/598) - Workaround for Croatian TimeSpan localization bug contributed by ([hangy](https://github.com/hangy))\r\n - [#597](https://github.com/Humanizr/Humanizer/issues/597) - Croatian localization of TimeSpan fails with >1 day\r\n - [#596](https://github.com/Humanizr/Humanizer/issues/596) - Can not add Humanizer 2.1.0 in Class library (.Net Core)\r\n - [#595](https://github.com/Humanizr/Humanizer/pull/595) - Add new overload for Ordinalize that accepts a CultureInfo contributed by Thijs Brobbel ([tiesmaster](https://github.com/tiesmaster))\r\n - [#590](https://github.com/Humanizr/Humanizer/pull/590) - English contributed by ([stevotennis](https://github.com/stevotennis))\r\n - [#589](https://github.com/Humanizr/Humanizer/pull/589) - Fix CONTRIBUTING.md of broken links. contributed by Sho Sato ([cssho](https://github.com/cssho))\r\n - [#588](https://github.com/Humanizr/Humanizer/pull/588) - Add resource value validation for DefaultFormatter contributed by Krisztián Bodrogi ([Chrissx](https://github.com/Chrissx))\r\n - [#586](https://github.com/Humanizr/Humanizer/pull/586) - added translation for DateHumanize_Now contributed by Daniel Katz ([danielkatz](https://github.com/danielkatz))\r\n - [#583](https://github.com/Humanizr/Humanizer/issues/583) - TimeSpan.Humanize does not behave as expected +enhancement\r\n - [#582](https://github.com/Humanizr/Humanizer/pull/582) - Pass through the content of the \"Letter, other\" Unicode category. contributed by ([hangy](https://github.com/hangy))\r\n - [#581](https://github.com/Humanizr/Humanizer/pull/581) - Fix misspelling contributed by Cameron Sjo ([cameron-sjo](https://github.com/cameron-sjo))\r\n - [#578](https://github.com/Humanizr/Humanizer/issues/578) - .Humanize() on \"Arabic\" letters returns empty string (or any other casing)\r\n - [#577](https://github.com/Humanizr/Humanizer/issues/577) - .NET Core 1.0 Support?\r\n - [#576](https://github.com/Humanizr/Humanizer/pull/576) - Fixed incorrect locale in readme contributed by ([fishchisel](https://github.com/fishchisel))\r\n - [#575](https://github.com/Humanizr/Humanizer/issues/575) - not installable for projects that targets .NET client profile\r\n - [#574](https://github.com/Humanizr/Humanizer/issues/574) - Difference Dasherize and Hyphenate\r\n - [#573](https://github.com/Humanizr/Humanizer/issues/573) - Humanizer.Core 2.1.0 breaks compatibility with PCL Profile 259\r\n - [#569](https://github.com/Humanizr/Humanizer/pull/569) - Add Esperanto support to NumberToWords. Fixes #558 contributed by Alois ([aloisdg](https://github.com/aloisdg))\r\n - [#558](https://github.com/Humanizr/Humanizer/issues/558) - Add Esperanto support for NumberToWords\r\n - [#504](https://github.com/Humanizr/Humanizer/pull/504) - Add support for long to ToQuantity contributed by Robert Pethick ([RobPethick](https://github.com/RobPethick)) +enhancement\r\n - [#503](https://github.com/Humanizr/Humanizer/issues/503) - ToQuantity does not support long quantities +enhancement\r\n - [#500](https://github.com/Humanizr/Humanizer/pull/500) - Add ToOrdinalWords extension with gender overload contributed by Robert Pethick ([RobPethick](https://github.com/RobPethick))\r\n - [#328](https://github.com/Humanizr/Humanizer/issues/328) - Ordinal number suffixes\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v2.1...v2.2)\r\n\r\n# vNext\r\n\r\n### v2.1 - 2016-07-04\r\n\r\n[Fixed issues](https://github.com/Humanizr/Humanizer/issues?q=is%3Aclosed+milestone%3Av2.1)\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v2.0.1...v2.1)\r\n\r\n### v2.0.1 - 2016-02-07\r\n  - [#520](https://github.com/Humanizr/Humanizer/issues/520) Humanizer.Core package does not install on Xamarin\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v2.0...v2.0.1)\r\n\r\n### v2.0.0 - 2016-01-30\r\n  - [#507](https://github.com/Humanizr/Humanizer/issues/507) Remove obsolete members\r\n  - [#517](https://github.com/Humanizr/Humanizer/pull/517) Allow formatted byte size when humanizing `ByteRate`\r\n  - [#497](https://github.com/Humanizr/Humanizer/issues/497) Add option to customize list of time indicators of humanized timespans\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.37.0...v2.0)\r\n\r\n### v2.0.0-beta02 - 2015-12-30\r\n  - [#59](https://github.com/Humanizr/Humanizer/issues/59) Getting only needed resources on nuget install \r\n  - [#101](https://github.com/Humanizr/Humanizer/issues/101) Add precision to DateTime.Humanize \r\n  - [#234](https://github.com/Humanizr/Humanizer/issues/234) Remove Plurality enum \r\n  - [#238](https://github.com/Humanizr/Humanizer/issues/238) Change DefaultDateTimeHumanizeStrategy to turn 60 min to one hour not 45 \r\n  - [#470](https://github.com/Humanizr/Humanizer/issues/470) & [#492](https://github.com/Humanizr/Humanizer/issues/492): Build warning fixes \r\n\r\n [Commits](https://github.com/Humanizr/Humanizer/compare/v2.0.0-beta01...v2.0.0-beta02)\r\n\r\n### v2.0.0-beta0001 - 2015-11-01\r\n - [#451](https://github.com/Humanizr/Humanizer/issues/451): Support `dotnet` TFM. Includes support for CoreCLR\r\n - [#465](https://github.com/Humanizr/Humanizer/issues/465): Dropped .NET 4 and Silverlight 5 support.\r\n - [#462](https://github.com/Humanizr/Humanizer/pull/462): Implemented Spanish cardinal feminines\r\n - [#459](https://github.com/Humanizr/Humanizer/pull/459): Add support of metric numeral expressions\r\n - Enable source debugging via [GitLink](https://github.com/GitTools/GitLink)\r\n\r\n [Commits](https://github.com/Humanizr/Humanizer/compare/v1.37.0...v2.0.0-beta01)\r\n\r\n### v1.37.0 - 2015-07-03\r\n - [#416](https://github.com/Humanizr/Humanizer/pull/416): Change BrazilianPortugueseOrdinalizer to PortugueseOrdinalizer\r\n - [#419](https://github.com/Humanizr/Humanizer/pull/419): Added Dutch Ordinalizer\r\n - [#432](https://github.com/Humanizr/Humanizer/pull/432): Added the 'xunit.runner.visualstudio' nuget package to the test project\r\n - [#431](https://github.com/Humanizr/Humanizer/pull/431): Added build target for .NET 4.0 Client Profile\r\n - [#435](https://github.com/Humanizr/Humanizer/pull/435): Added Afrikaans localization\r\n - [#438](https://github.com/Humanizr/Humanizer/pull/438): Fixed the bug with negative TimeSpan Humanize\r\n - [#421](https://github.com/Humanizr/Humanizer/pull/421) & [#425](https://github.com/Humanizr/Humanizer/pull/425): Fixed StringExentions -> StringExtensions\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.36.0...v1.37.0)\r\n\r\n### v1.36.0 - 2015-05-24\r\n - [#403](https://github.com/Humanizr/Humanizer/pull/403): Added TimeSpan minUnit option\r\n - [#417](https://github.com/Humanizr/Humanizer/pull/417): Support for Serbian language, ToWords()\r\n - [#414](https://github.com/Humanizr/Humanizer/pull/414): Add Ukraininan language\r\n - [#408](https://github.com/Humanizr/Humanizer/pull/408): Added support for adding/removing rules from singular/pluralization by adding `Vocabulary` class and `Vocabularies.Default`\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.35.0...v1.36.0)\r\n\r\n### v1.35.0 - 2015-03-29\r\n - [#399](https://github.com/Humanizr/Humanizer/pull/399): Added support for humanizing DateTimeOffset\r\n - [#395](https://github.com/Humanizr/Humanizer/pull/395): Added support for Xamarin platforms to PCL\r\n - [#397](https://github.com/Humanizr/Humanizer/pull/397): Added is/are to inflector rules\r\n - [#392](https://github.com/Humanizr/Humanizer/pull/394): Default implementation for collection formatter using regular style instead of an exception. Default separator is ampercent.\r\n - [#377](https://github.com/Humanizr/Humanizer/pull/377): Added culture specific decimal separator\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.34.0...v1.35.0)\r\n\r\n### v1.34.0 - 2015-03-04\r\n - [#381](https://github.com/Humanizr/Humanizer/pull/381): Fixes trailing question mark reported in #378.\r\n - [#382](https://github.com/Humanizr/Humanizer/pull/382): Fix 90000th and -thousandth in RussianNumberToWordsConverter.\r\n - [#386](https://github.com/Humanizr/Humanizer/pull/386): Collection formatter support for German, Danish, Dutch, Portuguese and Norwegian\r\n - [#384](https://github.com/Humanizr/Humanizer/pull/384): Added maximum TimeUnit to TimeSpanHumanizeExtensions.Humanize to enable prevention of rolling up the next largest unit of time.\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.33.7...v1.34.0)\r\n\r\n### v1.33.7 - 2015-02-03\r\n - [#376](https://github.com/Humanizr/Humanizer/pull/376): Fixes the IConvertible warning thrown on Windows Phone reported on #317\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.33.0...v1.33.7)\r\n\r\n### v1.33.0 - 2015-01-26\r\n - [#374](https://github.com/Humanizr/Humanizer/pull/374): **BREAKING CHANGE**: Fixed Chinese locale code: CHS to Hans & CHT to Hant\r\n - [#366](https://github.com/Humanizr/Humanizer/pull/366): Removed UnitPreposition to avoid warnings in Win 8.1 apps\r\n - [#365](https://github.com/Humanizr/Humanizer/pull/365): Added ByteSizeExtensions method for long inputs\r\n - [#364](https://github.com/Humanizr/Humanizer/pull/364): Added \"campuses\" as plural of \"campus\"\r\n - [#363](https://github.com/Humanizr/Humanizer/pull/363): Use RegexOptions.Compiled if available\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.32.0...v1.33.0)\r\n\r\n### v1.32.0 - 2014-12-18\r\n - [#354](https://github.com/Humanizr/Humanizer/pull/354): Removed unnecessary Regex constructors\r\n - [#356](https://github.com/Humanizr/Humanizer/pull/356): Added missing values for ro and changed the RomanianFormatter implementation so as to avoid duplicate resources\r\n - [#357](https://github.com/Humanizr/Humanizer/pull/357): Added Chinese localisation\r\n - [#350](https://github.com/Humanizr/Humanizer/pull/350): Added missing values for nl\r\n - [#359](https://github.com/Humanizr/Humanizer/pull/359): Added special case resources to neutral language\r\n - [#362](https://github.com/Humanizr/Humanizer/pull/362): Fixed arithmatic operations in ByteSize\r\n - [#361](https://github.com/Humanizr/Humanizer/pull/361): Added 'criteria' as the irregular plural of 'criterion'\r\n - [#355](https://github.com/Humanizr/Humanizer/pull/355): Added 'waves' as plural of 'wave'\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.31.0...v1.32.0)\r\n\r\n###v1.31.0 - 2014-11-08\r\n  - [#340](https://github.com/Humanizr/Humanizer/pull/340): Fixed TimeSpan humanization precision skips units after the largest one when they're zero until it finds a non-zero unit\r\n  - [#347](https://github.com/Humanizr/Humanizer/pull/347): Changed één to 1 for dutch language.\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.30.0...v1.31.0)\r\n\r\n### v1.30.0 - 2014-11-01\r\n  - [#341](https://github.com/Humanizr/Humanizer/pull/341): Added logic to properly treat underscores, dashes and spaces.\r\n  - [#342](https://github.com/Humanizr/Humanizer/pull/342): Added complete Uzbek localisation\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.29.0...v1.30.0)\r\n\r\n### v1.29.0 - 2014-09-12\r\n  - [#320](https://github.com/Humanizr/Humanizer/pull/320): Fixed Dehumanize actually humanizing an already dehumanized string\r\n  - [#322](https://github.com/Humanizr/Humanizer/pull/322): DefaultFormatter.TimeSpanHumanize throws a more meaningful exception when called with TimeUnits larger than TimeUnit.Week\r\n  - [#314](https://github.com/Humanizr/Humanizer/pull/314): Added ByteRate class and supporting members to facilitate calculation of byte transfer rates\r\n  - [#333](https://github.com/Humanizr/Humanizer/pull/333): Added support to humanize enums from resource strings\r\n  - [#332](https://github.com/Humanizr/Humanizer/pull/332): Added Italian localisation and tests: date and time Resources, CollectionFormatter, NumberToWordsConverter (cardinal and ordinal), Ordinalizer\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.28.0...v1.29.0)\r\n\r\n### v1.28.0 - 2014-07-06\r\n  - [#309](https://github.com/Humanizr/Humanizer/pull/309): Fixed the bug with DateTime.Humanize returning tomorrow when it's not actually tomorrow\r\n  - [#306](https://github.com/Humanizr/Humanizer/pull/306): Added Singularize/Pluralize overload without using obsolete plurality enum\r\n  - [#303](https://github.com/Humanizr/Humanizer/pull/303): Added support for all integer types in ByteSize extensions\r\n  - [#307](https://github.com/Humanizr/Humanizer/pull/307): Added support to string.FormatWith for the explicit culture parameter\r\n  - [#312](https://github.com/Humanizr/Humanizer/pull/312): Added Turkish ToWord, ToOrdinalWord and Ordinalize implementation\r\n  - [#173](https://github.com/Humanizr/Humanizer/pull/173): Added support for Window Phone 8.1\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.27.0...v1.28.0)\r\n\r\n### v1.27.0 - 2014-06-21\r\n  - [#301](https://github.com/Humanizr/Humanizer/pull/301): Added Bangla (Bangladesh) localisation\r\n  - [#300](https://github.com/Humanizr/Humanizer/pull/300): Added optional Culture parameter to NumberToWords\r\n  - [#297](https://github.com/Humanizr/Humanizer/pull/297): Added support for all integer types in Fluent Date\r\n  - [#294](https://github.com/Humanizr/Humanizer/pull/294): Added support for untyped comparison of ByteSize\r\n  - [#277](https://github.com/Humanizr/Humanizer/pull/277): Added support for custom enum description attribute property names\r\n  - [#276](https://github.com/Humanizr/Humanizer/pull/276): Added Farsi ToOrdinalWords\r\n  - [#281](https://github.com/Humanizr/Humanizer/pull/281): Changed the logic for handling hyphenation and large numbers ending in twelve for English ordinal words; e.g. before \"twenty first\" now \"twenty-first\"\r\n  - [#278](https://github.com/Humanizr/Humanizer/pull/278): Changed DefaultDateTimeHumanizeStrategy to turn 60 min to one hour not 45\r\n  - [#283](https://github.com/Humanizr/Humanizer/pull/283): Added Neutral nb support for DateTime and TimeSpan Humanize\r\n  - [#286](https://github.com/Humanizr/Humanizer/pull/286): Added optional Culture parameter to DateTime.Humanize & TimeSpan.Humanize\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.26.1...v1.27.0)\r\n\r\n### v1.26.1 - 2014-05-20\r\n  - [#257](https://github.com/Humanizr/Humanizer/pull/257): Added German localisation for ToOrdinalWords and Ordinalize\r\n  - [#261](https://github.com/Humanizr/Humanizer/pull/261): Added future dates to Portuguese - Brazil\r\n  - [#269](https://github.com/Humanizr/Humanizer/pull/269): Added Vietnamese localisation\r\n  - [#268](https://github.com/Humanizr/Humanizer/pull/268): Added humanization of collections\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.25.4...v1.26.1)\r\n\r\n### v1.25.4 - 2014-04-27\r\n  - [#236](https://github.com/Humanizr/Humanizer/pull/236): Added Turkish localisation\r\n  - [#239](https://github.com/Humanizr/Humanizer/pull/239): Added Serbian localisation\r\n  - [#241](https://github.com/Humanizr/Humanizer/pull/241): Added German ToWords localisation\r\n  - [#244](https://github.com/Humanizr/Humanizer/pull/244): Added Slovenian localisation\r\n  - [#247](https://github.com/Humanizr/Humanizer/pull/247): Added Slovenian number to words localisation\r\n  - [#227](https://github.com/Humanizr/Humanizer/pull/227) & [#243](https://github.com/Humanizr/Humanizer/pull/243): Moved localiser registry to their own classes, allowed public access via Configurator, and made the default registrations lazy loaded\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.24.1...v1.25.4)\r\n\r\n### v1.24.1 - 2014-04-21\r\n  - [#232](https://github.com/Humanizr/Humanizer/pull/232): Adding code & tests to handle Arabic numbers to ordinal\r\n  - [#235](https://github.com/Humanizr/Humanizer/pull/235): Fixed the conversion for \"1 millon\" in SpanishNumberToWordsConverter\r\n  - [#233](https://github.com/Humanizr/Humanizer/pull/233): Added build.cmd and Verify build configuration for strict project build and analysis\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.23.1...v1.24.1)\r\n\r\n### v1.23.1 - 2014-04-19\r\n  - [#217](https://github.com/Humanizr/Humanizer/pull/217): Added pt-BR and Spanish Ordinalize localisation.\r\n  - [#220](https://github.com/Humanizr/Humanizer/pull/220): Added string formatting options to ToQuantity\r\n  - [#219](https://github.com/Humanizr/Humanizer/pull/219): Added Japanese translation for date and timespan\r\n  - [#221](https://github.com/Humanizr/Humanizer/pull/221): Added Russian ordinalizer\r\n  - [#228](https://github.com/Humanizr/Humanizer/pull/228): Fixed the \"twenties\" in SpanishNumberToWordsConverter\r\n  - [#231](https://github.com/Humanizr/Humanizer/pull/231): Added more settings for FromNow, Dual and Plural (Arabic)\r\n  - [#222](https://github.com/Humanizr/Humanizer/pull/222): Updated Ordinalize and ToOrdinalWords to account for special exceptions with 1 and 3.\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.22.1...v1.23.1)\r\n\r\n### v1.22.1 - 2014-04-14\r\n  - [#188](https://github.com/Humanizr/Humanizer/pull/188): Added Spanish ToOrdinalWords translations\r\n  - [#166](https://github.com/Humanizr/Humanizer/pull/166): Added Dutch (NL) Number to words and ordinals\r\n  - [#199](https://github.com/Humanizr/Humanizer/pull/199): Added Hebrew Number to words (both genders)\r\n  - [#202](https://github.com/Humanizr/Humanizer/pull/202): Fixed typo sekunttia -> sekuntia (Finnish translation)\r\n  - [#203](https://github.com/Humanizr/Humanizer/pull/203): Added feminine gender for french ordinal words\r\n  - [#208](https://github.com/Humanizr/Humanizer/pull/208): Added Hebrew implementation of future DateTime\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.21.1...v1.22.1)\r\n\r\n### v1.21.1 - 2014-04-12\r\n  - [#196](https://github.com/Humanizr/Humanizer/pull/196): Added Gender for ToOrdinalWords (needed for Brazilian Portuguese). Added pt-br OrdinalToWords localisation\r\n  - [#194](https://github.com/Humanizr/Humanizer/pull/194): Added pt-BR NumberToWords localisation\r\n  - [#147](https://github.com/Humanizr/Humanizer/pull/147): Added Russian translation for ToWords\r\n  - [#190](https://github.com/Humanizr/Humanizer/pull/190): Added French translation for ToWords and ToOrdinalWords\r\n  - [#179](https://github.com/Humanizr/Humanizer/pull/179): Added Hungarian localisation\r\n  - [#181](https://github.com/Humanizr/Humanizer/pull/181): Added Bulgarian localization, date and timespan tests\r\n  - [#141](https://github.com/Humanizr/Humanizer/pull/141): Added Indonesian localization\r\n  - [#148](https://github.com/Humanizr/Humanizer/pull/148): Added Hebrew localization for date and timespan\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.20.15...v1.21.1)\r\n\r\n### v1.20.15 - 2014-04-12\r\n  - [#186](https://github.com/Humanizr/Humanizer/pull/186): Refactored `ToOrdinalWords` to use existing `NumberToWordsExtension` to prepare for Ordinal localization\r\n  - [#193](https://github.com/Humanizr/Humanizer/pull/193): Fixed the NullException error on DateTime.Humanize\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.20.2...v1.20.15)\r\n\r\n### v1.20.2 - 2014-04-11\r\n  - [#171](https://github.com/Humanizr/Humanizer/pull/171): T4-Template fix: Using EnglishNumberToWordsConverter instead of 'ToWords()' while dogfooding the template with the library.\r\n  - [#165](https://github.com/Humanizr/Humanizer/pull/165): Added precision based `DateTime.Humanize` strategy\r\n  - [#155](https://github.com/Humanizr/Humanizer/pull/155): French and Belgian French localisation\r\n  - [#151](https://github.com/Humanizr/Humanizer/pull/151): Added Spanish ToWords Translations\r\n  - [#172](https://github.com/Humanizr/Humanizer/pull/172): Added Polish translation for ToWords\r\n  - [#184](https://github.com/Humanizr/Humanizer/pull/184): Fixed spelling error with forth/fourth in EnglishNumberToWordsConverter\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.19.1...v1.20.2)\r\n\r\n### v1.19.1 - 2014-04-10\r\n  - [#149](https://github.com/Humanizr/Humanizer/pull/149): Improved & refactored number to words localisation\r\n  - [#143](https://github.com/Humanizr/Humanizer/pull/143): Added Russian translation for future DateTime, TimeSpan and Now\r\n  - [#144](https://github.com/Humanizr/Humanizer/pull/144): Added Danish localization (strings, tests)\r\n  - [#146](https://github.com/Humanizr/Humanizer/pull/146): Added Spanish translation for future DateTime, TimeSpan and Now\r\n\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.18.1...v1.19.1)\r\n\r\n### v1.18.1 - 2014-04-09\r\n  - [#137](https://github.com/Humanizr/Humanizer/pull/137): Fixed grammar error in `nb-NO` resource file & added missing Norwegian resource strings (mainly `DateHumanize_*FromNow`)\r\n  - [#135](https://github.com/Humanizr/Humanizer/pull/135): Added Swedish localization (strings, tests)\r\n  - [#140](https://github.com/Humanizr/Humanizer/pull/140): Added Polish localization (strings, formatter, tests)\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.17.1...v1.18.1)\r\n\r\n### v1.17.1 - 2014-04-06\r\n  - [#124](https://github.com/Humanizr/Humanizer/pull/124): Added Slovak localization (strings, formatter, tests)\r\n  - [#130](https://github.com/Humanizr/Humanizer/pull/130): Added Czech localization (strings, formatter, tests)\r\n  - [#131](https://github.com/Humanizr/Humanizer/pull/131): Clean date humanize tests and renamed `TimeUnitTense` to `Tense`\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.16.4...v1.17.1)\r\n\r\n### v1.16.4 - 2014-04-04\r\n  - [#129](https://github.com/Humanizr/Humanizer/pull/129): Removed all but PCL references\r\n  - [#121](https://github.com/Humanizr/Humanizer/pull/121): Added Farsi translation for DateTime, TimeSpan and NumberToWords\r\n  - [#120](https://github.com/Humanizr/Humanizer/pull/120): Added German translation for DateTime and TimeSpan\r\n  - [#117](https://github.com/Humanizr/Humanizer/pull/117): Added `FormatWith` string extension\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.15.1...v1.16.4)\r\n\r\n### v1.15.1 - 2014-03-28\r\n  - [#113](https://github.com/Humanizr/Humanizer/pull/113): Added `Truncate` feature\r\n  - [#109](https://github.com/Humanizr/Humanizer/pull/109): Made Dutch (NL) localization a neutral culture, not just for Belgium\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.14.1...v1.15.1)\r\n\r\n### v1.14.1 - 2014-03-26\r\n  - [#108](https://github.com/Humanizr/Humanizer/pull/108): Added support for custom description attributes\r\n  - [#106](https://github.com/Humanizr/Humanizer/pull/106):\r\n    - Refactored IFormatter and DefaultFormatter\r\n\t- Refactored `DateTime.Humanize` and `TimeSpan.Humanize`\r\n\t- Changed `ResourceKeys` to use a dynamic key generation\r\n\t- Fixed the intermittent failing tests on `DateTime.Humanize`\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.13.2...v1.14.1)\r\n\r\n### v1.13.2 - 2014-03-17\r\n  - [#99](https://github.com/Humanizr/Humanizer/pull/99): Added `ByteSize` feature\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.12.4...v1.13.2)\r\n\r\n### v1.12.4 - 2014-02-25\r\n  - [#95](https://github.com/Humanizr/Humanizer/pull/95): Added NoMatch optional parameter to DehumanizeTo & renamed `CannotMapToTargetException` to `NoMatchFoundException`\r\n\r\n#### Breaking Changes\r\nIf you were catching `CannotMapToTargetException` on a `DehumanizeTo` call, that's been renamed to `NoMatchFoundException` to make it more generic.\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.11.3...v1.12.4)\r\n\r\n### v1.11.3 - 2014-02-18\r\n  - [#93](https://github.com/Humanizr/Humanizer/pull/93): added non-generic DehumanizeTo for Enums unknown at compile time\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.10.1...v1.11.3)\r\n\r\n### v1.10.1 - 2014-02-15\r\n  - [#89](https://github.com/Humanizr/Humanizer/pull/89): added `ToRoman` and `FromRoman` extensions\r\n  - [#82](https://github.com/Humanizr/Humanizer/pull/82): fixed Greek locale code\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.9.1...v1.10.1)\r\n\r\n### v1.9.1 - 2014-02-12\r\n  - [#78](https://github.com/Humanizr/Humanizer/pull/78): added support for billions to `ToWords`\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.8.1...v1.9.1)\r\n\r\n### v1.8.16 - 2014-02-12\r\n  - [#81](https://github.com/Humanizr/Humanizer/pull/81): fixed issue with localised methods returning null in Windows Store apps\r\n  - Created [Humanizr.net](http://humanizr.net) website as GitHub pages\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.8.1...v1.8.16)\r\n\r\n### v1.8.1 - 2014-02-04\r\n  - [#73](https://github.com/Humanizr/Humanizer/pull/73): added `ToWords` implementation for Arabic\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.7.1...v1.8.1)\r\n\r\n### v1.7.1 - 2014-02-31\r\n  - [#68](https://github.com/Humanizr/Humanizer/pull/68): `DateTime.Humanize()` now supports future dates\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.6.1...v1.7.1)\r\n\r\n### v1.6.1 - 2014-01-27\r\n  - [#69](https://github.com/Humanizr/Humanizer/pull/69): changed the return type of `DehumanizeTo<TTargetEnum>` to `TTargetEnum`\r\n\r\n#### Potential breaking change\r\nThe return type of `DehumanizeTo<TTargetEnum>` was changed from `Enum` to `TTargetEnum` to make the API a lot easier to work with.\r\nThat also potentially means that your calls to the old method may be broken.\r\nDepending on how you were using the method you might have to either drop the now redundant cast to `TTargetEnum` in your code, or\r\nfix it based on your requirements.\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.5.1...v1.6.1)\r\n\r\n### v1.5.1 - 2014-01-23\r\n  - [#65](https://github.com/Humanizr/Humanizer/pull/65): added precision to `TimeSpan.Humanize`\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.4.1...v1.5.1)\r\n\r\n### v1.4.1 - 2014-01-20\r\n  - [#62](https://github.com/Humanizr/Humanizer/pull/62): added `ShowQuantityAs` parameter to `ToQuantity`\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.3.1...v1.4.1)\r\n\r\n### v1.3.1 - 2014-14-01\r\n  - [#51](https://github.com/Humanizr/Humanizer/pull/51): added Spanish translation for `DateTime.Humanize`\r\n  - [#52](https://github.com/Humanizr/Humanizer/pull/52): added Arabic translation for `DateTime.Humanize`\r\n  - [#53](https://github.com/Humanizr/Humanizer/pull/53): added `Hyphenate` as an overload for `Dasherize`\r\n  - [#54](https://github.com/Humanizr/Humanizer/pull/54): added Portuguese translation for `DateTime.Humanize`\r\n  - [#55](https://github.com/Humanizr/Humanizer/pull/55): added Arabic translation for `TimeSpan.Humanize`\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.1.0...v1.3.1)\r\n\r\n### v1.1.0 - 2014-01-01\r\n  - [#37](https://github.com/Humanizr/Humanizer/pull/37): added `ToQuantity` method\r\n  - [#43](https://github.com/Humanizr/Humanizer/pull/43):\r\n    - added `Plurality` enum\r\n    - can call `Singularize` on singular and `Pluralize` on plural words\r\n    - `ToQuantity` can be called on words with unknown plurality\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.0.29...v1.1.0)\r\n\r\n### v1.0.29 - 2013-12-25\r\n  - [#26](https://github.com/Humanizr/Humanizer/pull/26): added Norwegian (nb-NO) localization for `DateTime.Humanize()`\r\n  - [#33](https://github.com/Humanizr/Humanizer/pull/33):\r\n    - changed to Portable Class Library with support for .Net 4+, SilverLight 5, Windows Phone 8 and Win Store applications\r\n    - symbols nuget package is published so you can step through Humanizer code while debugging your code\r\n\r\n[Commits](https://github.com/Humanizr/Humanizer/compare/v1.0.0...v1.0.29)\r\n\r\n### v1.0.0 - 2013-11-10\r\nNo release history before this point: check out http://www.mehdi-khalili.com/humanizer-v1 for the feature-set at V1\r\n\r\nCommits: ...\r\n"
  },
  {
    "path": "src/Benchmarks/.editorconfig",
    "content": "\n[*.cs]\ndotnet_diagnostic.CA1050.severity = none # CA1050: Declare types in namespaces\n\n\n# CA1861: Avoid constant arrays as arguments\ndotnet_diagnostic.CA1861.severity = silent\n\n# IDE1006: Naming Styles\ndotnet_diagnostic.IDE1006.severity = none\n\n# CA1822: Mark members as static\ndotnet_diagnostic.CA1822.severity = none\n"
  },
  {
    "path": "src/Benchmarks/Benchmarks.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\r\n\r\n  <PropertyGroup>\r\n    <OutputType>Exe</OutputType>\r\n    <TargetFrameworks>net10.0;net8.0</TargetFrameworks>\r\n    <UseBaselinePackage Condition=\"'$(UseBaselinePackage)' == ''\">false</UseBaselinePackage>\r\n    <BaselinePackageVersion Condition=\"'$(BaselinePackageVersion)' == ''\">3.0.0-rc.6</BaselinePackageVersion>\r\n    <ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"BenchmarkDotNet\" Version =\"0.15.8\" />\r\n  </ItemGroup>\r\n\r\n  <!-- Use baseline package from NuGet for comparison -->\r\n  <ItemGroup Condition=\"'$(UseBaselinePackage)' == 'true'\">\r\n    <PackageReference Include=\"Humanizer\" Version=\"$(BaselinePackageVersion)\" />    \r\n  </ItemGroup>\r\n\r\n  <!-- Use current source code from the repo -->\r\n  <ItemGroup Condition=\"'$(UseBaselinePackage)' != 'true'\">\r\n    <ProjectReference Include=\"..\\Humanizer\\Humanizer.csproj\" />\r\n  </ItemGroup>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "src/Benchmarks/EnglishArticleBenchmarks.cs",
    "content": "[MemoryDiagnoser(false)]\r\npublic class EnglishArticleBenchmarks\r\n{\r\n    [Benchmark]\r\n    public string[] AppendArticlePrefix() =>\r\n        EnglishArticle.AppendArticlePrefix([\"Ant\", \"The Theater\", \"The apple\", \"Fox\", \"Bear\"]);\r\n\r\n    [Benchmark]\r\n    public string[] PrependArticleSuffix() =>\r\n        EnglishArticle.PrependArticleSuffix([\"Ant\", \"apple The\", \"Bear\", \"Fox\", \"Theater The\"]);\r\n}"
  },
  {
    "path": "src/Benchmarks/EnglishToWordsBenchmark.cs",
    "content": "[MemoryDiagnoser]\r\npublic class EnglishToWordsBenchmark\r\n{\r\n    readonly EnglishNumberToWordsConverter converter = new();\r\n\r\n    [Benchmark]\r\n    public string ToWords() =>\r\n        converter.Convert(int.MaxValue);\r\n\r\n    [Benchmark]\r\n    public string ToWordsOrdinal() =>\r\n        converter.ConvertToOrdinal(int.MaxValue);\r\n}"
  },
  {
    "path": "src/Benchmarks/EnumBenchmarks.cs",
    "content": "﻿[MemoryDiagnoser(false)]\r\npublic class EnumBenchmarks\r\n{\r\n    public enum EnumUnderTest\r\n    {\r\n        [Description(\"The description\")]\r\n        MemberWithDescriptionAttribute,\r\n        MemberWithoutDescriptionAttribute,\r\n\r\n        [Display(Description = \"Display value\")]\r\n        MemberWithDisplayAttribute,\r\n    }\r\n\r\n    [Benchmark(Description = \"Enum.Humanize\")]\r\n    public string Humanize() => EnumUnderTest.MemberWithDisplayAttribute.Humanize();\r\n\r\n    [Benchmark(Description = \"Enum.DehumanizeTo\")]\r\n    public EnumUnderTest Dehumanize() => \"Display value\".DehumanizeTo<EnumUnderTest>();\r\n}"
  },
  {
    "path": "src/Benchmarks/GlobalUsings.cs",
    "content": "global using System.ComponentModel;\r\nglobal using System.ComponentModel.DataAnnotations;\r\nglobal using BenchmarkDotNet.Attributes;\r\nglobal using BenchmarkDotNet.Running;\r\nglobal using Humanizer;"
  },
  {
    "path": "src/Benchmarks/InflectorBenchmarks.cs",
    "content": "using BenchmarkDotNet.Attributes;\r\nusing Humanizer;\r\n\r\nnamespace Benchmarks;\r\n\r\n/// <summary>\r\n/// Benchmarks for InflectorExtensions - demonstrates source-generated regex performance\r\n/// </summary>\r\n[MemoryDiagnoser]\r\npublic class InflectorBenchmarks\r\n{\r\n    [Benchmark(Description = \"Pascalize\")]\r\n    public string Pascalize() =>\r\n        \"some_title for_an article\".Pascalize();\r\n\r\n    [Benchmark(Description = \"Camelize\")]\r\n    public string Camelize() =>\r\n        \"some_title for_an article\".Camelize();\r\n\r\n    [Benchmark(Description = \"Underscore\")]\r\n    public string Underscore() =>\r\n        \"SomeClassName\".Underscore();\r\n\r\n    [Benchmark(Description = \"Dasherize\")]\r\n    public string Dasherize() =>\r\n        \"some_text_string\".Dasherize();\r\n\r\n    [Benchmark(Description = \"Kebaberize\")]\r\n    public string Kebaberize() =>\r\n        \"PascalCaseString\".Kebaberize();\r\n\r\n    [Benchmark(Description = \"Titleize\")]\r\n    public string Titleize() =>\r\n        \"some_title for_an article\".Titleize();\r\n\r\n    [Benchmark(Description = \"Pluralize\")]\r\n    public string Pluralize() =>\r\n        \"person\".Pluralize();\r\n\r\n    [Benchmark(Description = \"Singularize\")]\r\n    public string Singularize() =>\r\n        \"people\".Singularize();\r\n}\r\n"
  },
  {
    "path": "src/Benchmarks/ItalianNumberBenchmarks.cs",
    "content": "using System.Globalization;\r\n\r\n[MemoryDiagnoser(false)]\r\npublic class ItalianNumberBenchmarks\r\n{\r\n    static readonly CultureInfo culture = new(\"it\");\r\n    [Benchmark(Description = \"ItalianNumber.ToOrdinalWords\")]\r\n    public void ToOrdinalWords()\r\n    {\r\n        foreach (var number in numbers)\r\n        {\r\n            number.ToOrdinalWords(culture);\r\n            number.ToOrdinalWords(GrammaticalGender.Feminine, culture);\r\n        }\r\n    }\r\n\r\n    static readonly int[] numbers =\r\n    [\r\n        0,\r\n        1,\r\n        2,\r\n        9,\r\n        10,\r\n        11,\r\n        15,\r\n        18,\r\n        20,\r\n        21,\r\n        22,\r\n        28,\r\n        30,\r\n        44,\r\n        55,\r\n        60,\r\n        63,\r\n        66,\r\n        77,\r\n        88,\r\n        99,\r\n        100,\r\n        101,\r\n        102,\r\n        105,\r\n        109,\r\n        110,\r\n        119,\r\n        120,\r\n        121,\r\n        200,\r\n        201,\r\n        240,\r\n        300,\r\n        900,\r\n        1000,\r\n        1001,\r\n        1002,\r\n        1003,\r\n        1009,\r\n        1010,\r\n        1021,\r\n        2000,\r\n        2001,\r\n        3000,\r\n        10000,\r\n        10001,\r\n        10121,\r\n        100000,\r\n        100001,\r\n        1000000,\r\n        1000001,\r\n        1000002,\r\n        2000000,\r\n        10000000,\r\n        100000000,\r\n        1000000000,\r\n        2000000000,\r\n    ];\r\n}"
  },
  {
    "path": "src/Benchmarks/MetricNumeralBenchmarks.cs",
    "content": "using BenchmarkDotNet.Attributes;\r\nusing Humanizer;\r\n\r\nnamespace Benchmarks;\r\n\r\n/// <summary>\r\n/// Benchmarks for MetricNumeralExtensions - demonstrates FrozenDictionary performance\r\n/// </summary>\r\n[MemoryDiagnoser]\r\npublic class MetricNumeralBenchmarks\r\n{\r\n    [Benchmark(Description = \"ToMetric small\")]\r\n    public string ToMetricSmall() =>\r\n        123.ToMetric();\r\n\r\n    [Benchmark(Description = \"ToMetric kilo\")]\r\n    public string ToMetricKilo() =>\r\n        1000.ToMetric();\r\n\r\n    [Benchmark(Description = \"ToMetric mega\")]\r\n    public string ToMetricMega() =>\r\n        1000000.ToMetric();\r\n\r\n    [Benchmark(Description = \"ToMetric milli\")]\r\n    public string ToMetricMilli() =>\r\n        0.001.ToMetric();\r\n\r\n    [Benchmark(Description = \"FromMetric kilo\")]\r\n    public double FromMetricKilo() =>\r\n        \"1k\".FromMetric();\r\n\r\n    [Benchmark(Description = \"FromMetric mega\")]\r\n    public double FromMetricMega() =>\r\n        \"5M\".FromMetric();\r\n\r\n    [Benchmark(Description = \"FromMetric micro\")]\r\n    public double FromMetricMicro() =>\r\n        \"100μ\".FromMetric();\r\n}\r\n"
  },
  {
    "path": "src/Benchmarks/NumberToWordsBenchmarks.cs",
    "content": "using BenchmarkDotNet.Attributes;\r\nusing Humanizer;\r\n\r\nnamespace Benchmarks;\r\n\r\n/// <summary>\r\n/// Benchmarks for number-to-words conversions - demonstrates FrozenDictionary performance\r\n/// </summary>\r\n[MemoryDiagnoser]\r\npublic class NumberToWordsBenchmarks\r\n{\r\n    [Benchmark(Description = \"English ToWords small\")]\r\n    public string EnglishToWordsSmall() =>\r\n        42.ToWords();\r\n\r\n    [Benchmark(Description = \"English ToWords large\")]\r\n    public string EnglishToWordsLarge() =>\r\n        int.MaxValue.ToWords();\r\n\r\n    [Benchmark(Description = \"English ToOrdinalWords\")]\r\n    public string EnglishToOrdinalWords() =>\r\n        42.ToOrdinalWords();\r\n\r\n    [Benchmark(Description = \"Turkish ToWords\")]\r\n    public string TurkishToWords() =>\r\n        42.ToWords(new System.Globalization.CultureInfo(\"tr\"));\r\n\r\n    [Benchmark(Description = \"Greek ToWords\")]\r\n    public string GreekToWords() =>\r\n        42.ToWords(new System.Globalization.CultureInfo(\"el\"));\r\n\r\n    [Benchmark(Description = \"Korean ToWords\")]\r\n    public string KoreanToWords() =>\r\n        42.ToWords(new System.Globalization.CultureInfo(\"ko\"));\r\n\r\n    [Benchmark(Description = \"Finnish ToWords\")]\r\n    public string FinnishToWords() =>\r\n        42.ToWords(new System.Globalization.CultureInfo(\"fi\"));\r\n}\r\n"
  },
  {
    "path": "src/Benchmarks/OrdinalBenchmarks.cs",
    "content": "using BenchmarkDotNet.Attributes;\r\nusing Humanizer;\r\nusing System.Globalization;\r\n\r\nnamespace Benchmarks;\r\n\r\n/// <summary>\r\n/// Benchmarks for ordinal operations - demonstrates SearchValues and FrozenDictionary performance\r\n/// </summary>\r\n[MemoryDiagnoser]\r\npublic class OrdinalBenchmarks\r\n{\r\n    [Benchmark(Description = \"English Ordinalize\")]\r\n    public string EnglishOrdinalize() =>\r\n        42.Ordinalize();\r\n\r\n    [Benchmark(Description = \"Dutch Ordinalize\")]\r\n    public string DutchOrdinalize() =>\r\n        42.Ordinalize(new CultureInfo(\"nl\"));\r\n\r\n    [Benchmark(Description = \"Turkish Ordinalize\")]\r\n    public string TurkishOrdinalize() =>\r\n        42.Ordinalize(new CultureInfo(\"tr\"));\r\n\r\n    [Benchmark(Description = \"Greek Ordinalize\")]\r\n    public string GreekOrdinalize() =>\r\n        42.Ordinalize(new CultureInfo(\"el\"));\r\n\r\n    [Benchmark(Description = \"Finnish Ordinalize\")]\r\n    public string FinnishOrdinalize() =>\r\n        42.Ordinalize(new CultureInfo(\"fi\"));\r\n}\r\n"
  },
  {
    "path": "src/Benchmarks/Program.cs",
    "content": "using BenchmarkDotNet.Configs;\r\nusing BenchmarkDotNet.Diagnosers;\r\nusing BenchmarkDotNet.Environments;\r\nusing BenchmarkDotNet.Exporters;\r\nusing BenchmarkDotNet.Exporters.Json;\r\nusing BenchmarkDotNet.Jobs;\r\n\r\nvar config = ManualConfig.Create(DefaultConfig.Instance)\r\n                .AddJob(Job.Default\r\n                    .WithRuntime(CoreRuntime.Core10_0))\r\n                .AddJob(Job.Default\r\n                    .AsBaseline()\r\n                    .WithRuntime(CoreRuntime.Core80))\r\n                .AddExporter(JsonExporter.Full)\r\n                .AddExporter(MarkdownExporter.GitHub)\r\n                .AddDiagnoser(MemoryDiagnoser.Default);\r\n\r\nBenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args, config);"
  },
  {
    "path": "src/Benchmarks/README.md",
    "content": "# Humanizer Benchmarks\r\n\r\nThis project contains comprehensive benchmarks for the Humanizer library, demonstrating performance improvements from recent optimizations.\r\n\r\n## Running the Benchmarks\r\n\r\n### Locally\r\n\r\nRun all benchmarks:\r\n```bash\r\ncd src/Benchmarks\r\ndotnet run -c Release -- --filter *\r\n```\r\n\r\nRun specific benchmarks:\r\n```bash\r\ndotnet run -c Release -- --filter *StringHumanize*\r\n```\r\n\r\n### Baseline Comparison (GitHub Actions)\r\n\r\nA manual GitHub Actions workflow is available to compare performance between a baseline NuGet package version and the current source code:\r\n\r\n1. Go to **Actions** → **Benchmark Baseline vs Current**\r\n2. Click **Run workflow**\r\n3. Enter the baseline version (default: 2.14.1)\r\n4. The workflow will:\r\n   - Run benchmarks against the baseline package in parallel\r\n   - Run benchmarks against the current source code in parallel\r\n   - Compare results using ResultsComparer\r\n   - Publish detailed reports as artifacts\r\n   - Display results and comparison in the job summary\r\n\r\n**How it works:**\r\n- **Baseline run**: Builds benchmarks with `UseBaselinePackage=true` to reference the NuGet package\r\n- **Current run**: Builds benchmarks with `UseBaselinePackage=false` to reference the local source code\r\n- **Comparison**: Downloads both JSON results and uses `dotnet/performance` ResultsComparer tool to generate a diff table\r\n\r\n**Artifacts available after each run:**\r\n- `humanizer-bdn-baseline-json` - Full JSON results from baseline\r\n- `humanizer-bdn-current-json` - Full JSON results from current code\r\n- `humanizer-bdn-baseline-all` - Complete BenchmarkDotNet artifacts (baseline)\r\n- `humanizer-bdn-current-all` - Complete BenchmarkDotNet artifacts (current)\r\n- `humanizer-bdn-comparison` - ResultsComparer diff report\r\n\r\n## Benchmark Suites\r\n\r\n### 1. StringHumanizeBenchmarks\r\n**Optimizations tested**: Source-generated regex (NET7+)\r\n\r\nTests the performance of string humanization operations which use regex patterns to split and transform strings:\r\n- PascalCase → \"Pascal case\"\r\n- underscore_case → \"Underscore case\"\r\n- Mixed formats with special handling\r\n\r\n**Expected improvements**: 5-10x faster on .NET 7+ with zero allocations\r\n\r\n### 2. InflectorBenchmarks\r\n**Optimizations tested**: Source-generated regex (NET7+)\r\n\r\nTests various string transformation methods that rely on regex patterns:\r\n- `Pascalize()` - converts to PascalCase\r\n- `Camelize()` - converts to camelCase\r\n- `Underscore()` - converts to underscore_case\r\n- `Kebaberize()` - converts to kebab-case\r\n- `Titleize()` - converts to Title Case\r\n- `Pluralize()` / `Singularize()` - word pluralization\r\n\r\n**Expected improvements**: 5-10x faster on .NET 7+ with zero allocations\r\n\r\n### 3. RomanNumeralBenchmarks\r\n**Optimizations tested**: Source-generated regex (NET7+)\r\n\r\nTests conversion between integers and Roman numerals:\r\n- `ToRoman()` - converts integers to Roman numerals\r\n- `FromRoman()` - converts Roman numerals to integers (with regex validation)\r\n\r\n**Expected improvements**: 5-10x faster validation on .NET 7+\r\n\r\n### 4. NumberToWordsBenchmarks\r\n**Optimizations tested**: FrozenDictionary (all frameworks)\r\n\r\nTests number-to-words conversion across multiple locales:\r\n- English, Turkish, Greek, Korean, Finnish locales\r\n- Small and large numbers\r\n- Ordinal words\r\n\r\n**Expected improvements**: 2-3x faster lookups with reduced memory usage\r\n\r\n### 5. WordsToNumberBenchmarks\r\n**Optimizations tested**: FrozenDictionary + source-generated regex\r\n\r\nTests converting word representations to numbers:\r\n- Simple words (\"five\")\r\n- Compound words (\"forty-two\")\r\n- Complex numbers (\"one thousand two hundred thirty-four\")\r\n\r\n**Expected improvements**: Combined benefits of both optimizations\r\n\r\n### 6. MetricNumeralBenchmarks\r\n**Optimizations tested**: FrozenDictionary (all frameworks)\r\n\r\nTests metric prefix conversions:\r\n- `ToMetric()` - converts numbers to metric notation (1000 → \"1k\")\r\n- `FromMetric()` - parses metric notation back to numbers\r\n\r\n**Expected improvements**: 2-3x faster lookups\r\n\r\n### 7. OrdinalBenchmarks\r\n**Optimizations tested**: SearchValues (NET8+), FrozenDictionary\r\n\r\nTests ordinal number generation across locales:\r\n- Dutch (uses SearchValues for character set matching)\r\n- Turkish, Greek, Finnish (use FrozenDictionary)\r\n\r\n**Expected improvements**: \r\n- Dutch: 2-5x faster on .NET 8+ (hardware-accelerated)\r\n- Others: 2-3x faster lookups\r\n\r\n### 8. VocabularyBenchmarks\r\n**Optimizations tested**: Source-generated regex (NET7+)\r\n\r\nTests pluralization/singularization with vocabulary rules:\r\n- Batch operations on multiple words\r\n- Common and irregular words\r\n\r\n**Expected improvements**: 5-10x faster on .NET 7+\r\n\r\n### 9. EnumBenchmarks (existing)\r\nTests enum humanization and dehumanization\r\n\r\n### 10. EnglishArticleBenchmarks (existing)\r\nTests English article sorting operations\r\n\r\n### 11. EnglishToWordsBenchmark (existing)\r\nTests English number-to-words conversion\r\n\r\n### 12. TransformersBenchmarks (existing)\r\nTests string transformation operations\r\n\r\n## Performance Optimization Summary\r\n\r\n| Optimization | Target Framework | Typical Improvement | Benchmarks |\r\n|--------------|------------------|---------------------|------------|\r\n| Source-Generated Regex | .NET 7+ | 5-10x faster, zero allocations | StringHumanize, Inflector, RomanNumeral, Vocabulary, WordsToNumber |\r\n| FrozenDictionary | All (via polyfill) | 2-3x faster lookups | NumberToWords, MetricNumeral, Ordinal, WordsToNumber |\r\n| SearchValues | .NET 8+ | 2-5x faster (hardware-accelerated) | Ordinal (Dutch) |\r\n\r\n## Baseline Comparison\r\n\r\nTo compare against the pre-optimization performance, you can:\r\n\r\n1. Check out the commit before optimizations: `git checkout 97432f62`\r\n2. Run benchmarks and save results\r\n3. Return to current branch: `git checkout -`\r\n4. Run benchmarks again and compare\r\n\r\nOr use BenchmarkDotNet's baseline feature:\r\n\r\n```csharp\r\n[Benchmark(Baseline = true)]\r\npublic string OldImplementation() { ... }\r\n\r\n[Benchmark]\r\npublic string NewImplementation() { ... }\r\n```\r\n\r\n## Memory Diagnostics\r\n\r\nAll benchmarks include `[MemoryDiagnoser]` to track allocations. The optimizations significantly reduce or eliminate allocations in hot paths:\r\n\r\n- Regex operations: Zero allocations on .NET 7+ (source-generated)\r\n- Dictionary lookups: Reduced memory footprint (FrozenDictionary)\r\n- Character searches: Zero allocations on .NET 8+ (SearchValues)\r\n\r\n## Notes\r\n\r\n- Benchmarks run on .NET 10.0 to demonstrate maximum performance\r\n- Performance improvements are most significant on modern frameworks\r\n- Older frameworks (.NET 4.8, netstandard2.0) still benefit from FrozenDictionary via polyfills\r\n- Results may vary based on hardware and workload characteristics\r\n"
  },
  {
    "path": "src/Benchmarks/RomanNumeralBenchmarks.cs",
    "content": "using BenchmarkDotNet.Attributes;\r\nusing Humanizer;\r\n\r\nnamespace Benchmarks;\r\n\r\n/// <summary>\r\n/// Benchmarks for RomanNumeralExtensions - demonstrates source-generated regex performance\r\n/// </summary>\r\n[MemoryDiagnoser]\r\npublic class RomanNumeralBenchmarks\r\n{\r\n    [Benchmark(Description = \"ToRoman small\")]\r\n    public string ToRomanSmall() =>\r\n        42.ToRoman();\r\n\r\n    [Benchmark(Description = \"ToRoman medium\")]\r\n    public string ToRomanMedium() =>\r\n        1987.ToRoman();\r\n\r\n    [Benchmark(Description = \"ToRoman large\")]\r\n    public string ToRomanLarge() =>\r\n        3999.ToRoman();\r\n\r\n    [Benchmark(Description = \"FromRoman small\")]\r\n    public int FromRomanSmall() =>\r\n        \"XLII\".FromRoman();\r\n\r\n    [Benchmark(Description = \"FromRoman medium\")]\r\n    public int FromRomanMedium() =>\r\n        \"MCMLXXXVII\".FromRoman();\r\n\r\n    [Benchmark(Description = \"FromRoman large\")]\r\n    public int FromRomanLarge() =>\r\n        \"MMMCMXCIX\".FromRoman();\r\n}\r\n"
  },
  {
    "path": "src/Benchmarks/StringHumanizeBenchmarks.cs",
    "content": "using BenchmarkDotNet.Attributes;\r\nusing Humanizer;\r\n\r\nnamespace Benchmarks;\r\n\r\n/// <summary>\r\n/// Benchmarks for StringHumanizeExtensions - demonstrates source-generated regex performance\r\n/// </summary>\r\n[MemoryDiagnoser]\r\npublic class StringHumanizeBenchmarks\r\n{\r\n    [Benchmark(Description = \"Humanize PascalCase\")]\r\n    public string HumanizePascalCase() =>\r\n        \"PascalCaseInputStringToBeHumanized\".Humanize();\r\n\r\n    [Benchmark(Description = \"Humanize with underscore\")]\r\n    public string HumanizeUnderscore() =>\r\n        \"Underscored_input_string_is_turned_INTO_sentence\".Humanize();\r\n\r\n    [Benchmark(Description = \"Humanize with dashes\")]\r\n    public string HumanizeDashes() =>\r\n        \"Dashed-input-string-is-turned-INTO-sentence\".Humanize();\r\n\r\n    [Benchmark(Description = \"Humanize with casing\")]\r\n    public string HumanizeWithCasing() =>\r\n        \"PascalCaseInputString\".Humanize(LetterCasing.AllCaps);\r\n\r\n    [Benchmark(Description = \"Humanize mixed format\")]\r\n    public string HumanizeMixed() =>\r\n        \"HTML_to_JSON_Converter\".Humanize();\r\n}\r\n"
  },
  {
    "path": "src/Benchmarks/TimeOnlyToClockNotationConverterBenchmarks.cs",
    "content": "[MemoryDiagnoser(false)]\r\npublic class TimeOnlyToClockNotationConverterBenchmarks\r\n{\r\n    static readonly TimeOnly time = new(13, 6, 2, 88, 987);\r\n\r\n    static readonly EsTimeOnlyToClockNotationConverter esConverter = new();\r\n    [Benchmark]\r\n    public void EsClockNotationConverter()\r\n    {\r\n        esConverter.Convert(time, ClockNotationRounding.None);\r\n        esConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes);\r\n    }\r\n\r\n    static readonly BrazilianPortugueseTimeOnlyToClockNotationConverter brazilianConverter = new();\r\n    [Benchmark]\r\n    public void BrazilianPortugueseClockNotationConverter()\r\n    {\r\n        brazilianConverter.Convert(time, ClockNotationRounding.None);\r\n        brazilianConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes);\r\n    }\r\n\r\n    static readonly FrTimeOnlyToClockNotationConverter frConverter = new();\r\n    [Benchmark]\r\n    public void FrClockNotationConverter()\r\n    {\r\n        frConverter.Convert(time, ClockNotationRounding.None);\r\n        frConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes);\r\n    }\r\n\r\n    static readonly LbTimeOnlyToClockNotationConverter lbConverter = new();\r\n    [Benchmark]\r\n    public void LbClockNotationConverter()\r\n    {\r\n        lbConverter.Convert(time, ClockNotationRounding.None);\r\n        lbConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes);\r\n    }\r\n\r\n    static readonly DefaultTimeOnlyToClockNotationConverter defaultConverter = new();\r\n    [Benchmark]\r\n    public void DefaultClockNotationConverter()\r\n    {\r\n        defaultConverter.Convert(time, ClockNotationRounding.None);\r\n        defaultConverter.Convert(time, ClockNotationRounding.NearestFiveMinutes);\r\n    }\r\n}"
  },
  {
    "path": "src/Benchmarks/ToQuantityBenchmarks.cs",
    "content": "using BenchmarkDotNet.Attributes;\r\nusing Humanizer;\r\n\r\nnamespace Benchmarks;\r\n\r\n/// <summary>\r\n/// Benchmarks for ToQuantity - demonstrates string.Create performance optimization\r\n/// </summary>\r\n[MemoryDiagnoser]\r\npublic class ToQuantityBenchmarks\r\n{\r\n    [Benchmark(Description = \"ToQuantity Numeric - Plural\")]\r\n    public string ToQuantityNumericPlural() =>\r\n        \"request\".ToQuantity(5);\r\n\r\n    [Benchmark(Description = \"ToQuantity Numeric - Singular\")]\r\n    public string ToQuantityNumericSingular() =>\r\n        \"request\".ToQuantity(1);\r\n\r\n    [Benchmark(Description = \"ToQuantity Words\")]\r\n    public string ToQuantityWords() =>\r\n        \"process\".ToQuantity(123, ShowQuantityAs.Words);\r\n\r\n    [Benchmark(Description = \"ToQuantity Double\")]\r\n    public string ToQuantityDouble() =>\r\n        \"item\".ToQuantity(2.5);\r\n\r\n    [Benchmark(Description = \"ToQuantity Formatted\")]\r\n    public string ToQuantityFormatted() =>\r\n        \"request\".ToQuantity(10000, \"N0\");\r\n}\r\n"
  },
  {
    "path": "src/Benchmarks/TransformersBenchmarks.cs",
    "content": "[MemoryDiagnoser(false)]\r\npublic class TransformersBenchmarks\r\n{\r\n    // hard-coded seed ensures the same random strings are generated each time.\r\n    const int RAND_SEED = 17432;\r\n\r\n    static readonly char[] Alphabet =\r\n        [.. Enumerable\r\n            .Repeat((int)' ', 12)\r\n            .Concat(Enumerable.Range('a', 'z' - 'a'))\r\n            .Concat(Enumerable.Range('A', 'Z' - 'A'))\r\n            .Concat(Enumerable.Range('0', '9' - '0'))\r\n            .Concat([\r\n                '.',\r\n                ',',\r\n                '(',\r\n                ')',\r\n                '!',\r\n                '$'\r\n            ])\r\n            .Select(x => (char)x)];\r\n\r\n    readonly Random random = new(RAND_SEED);\r\n    string input = null!;\r\n\r\n    [Params(10, 100, 1000)]\r\n    public int StringLen;\r\n\r\n    [GlobalSetup]\r\n    public void GlobalSetup()\r\n    {\r\n        var chars = new char[StringLen];\r\n        for (var i = 0; i < StringLen; i++)\r\n        {\r\n            chars[i] = Alphabet[random.Next(0, Alphabet.Length)];\r\n        }\r\n\r\n        input = new(chars);\r\n    }\r\n\r\n    [Benchmark]\r\n    public string AllTransforms() =>\r\n        input.Transform(To.LowerCase, To.UpperCase, To.SentenceCase, To.TitleCase);\r\n\r\n    [Benchmark]\r\n    public string LowerCase() =>\r\n        input.Transform(To.LowerCase);\r\n\r\n    [Benchmark]\r\n    public string UpperCase() =>\r\n        input.Transform(To.UpperCase);\r\n\r\n    [Benchmark]\r\n    public string SentenceCase() =>\r\n        input.Transform(To.SentenceCase);\r\n\r\n    [Benchmark]\r\n    public string TitleCase() =>\r\n        input.Transform(To.TitleCase);\r\n}"
  },
  {
    "path": "src/Benchmarks/VocabularyBenchmarks.cs",
    "content": "using BenchmarkDotNet.Attributes;\r\nusing Humanizer;\r\n\r\nnamespace Benchmarks;\r\n\r\n/// <summary>\r\n/// Benchmarks for Vocabulary operations - demonstrates source-generated regex performance\r\n/// </summary>\r\n[MemoryDiagnoser]\r\npublic class VocabularyBenchmarks\r\n{\r\n    readonly string[] testWords = \r\n    [\r\n        \"person\", \"man\", \"woman\", \"child\", \"tooth\", \"foot\",\r\n        \"mouse\", \"goose\", \"sheep\", \"deer\", \"fish\", \"species\",\r\n        \"series\", \"movie\", \"index\", \"matrix\", \"vertex\", \"ox\"\r\n    ];\r\n\r\n    [Benchmark(Description = \"Pluralize various words\")]\r\n    public void PluralizeBatch()\r\n    {\r\n        foreach (var word in testWords)\r\n        {\r\n            _ = word.Pluralize();\r\n        }\r\n    }\r\n\r\n    [Benchmark(Description = \"Singularize various words\")]\r\n    public void SingularizeBatch()\r\n    {\r\n        foreach (var word in testWords)\r\n        {\r\n            _ = word.Singularize();\r\n        }\r\n    }\r\n\r\n    [Benchmark(Description = \"Pluralize single common\")]\r\n    public string PluralizeCommon() =>\r\n        \"person\".Pluralize();\r\n\r\n    [Benchmark(Description = \"Pluralize single irregular\")]\r\n    public string PluralizeIrregular() =>\r\n        \"mouse\".Pluralize();\r\n\r\n    [Benchmark(Description = \"Singularize single common\")]\r\n    public string SingularizeCommon() =>\r\n        \"people\".Singularize();\r\n\r\n    [Benchmark(Description = \"Singularize single irregular\")]\r\n    public string SingularizeIrregular() =>\r\n        \"mice\".Singularize();\r\n}\r\n"
  },
  {
    "path": "src/Benchmarks/WordsToNumberBenchmarks.cs",
    "content": "using BenchmarkDotNet.Attributes;\r\nusing Humanizer;\r\nusing System.Globalization;\r\n\r\nnamespace Benchmarks;\r\n\r\n/// <summary>\r\n/// Benchmarks for words-to-number conversions - demonstrates FrozenDictionary and source-generated regex\r\n/// </summary>\r\n[MemoryDiagnoser]\r\npublic class WordsToNumberBenchmarks\r\n{\r\n    static readonly CultureInfo EnglishCulture = new(\"en-US\");\r\n\r\n    [Benchmark(Description = \"Simple word\")]\r\n    public int SimpleWord() =>\r\n        \"five\".ToNumber(EnglishCulture);\r\n\r\n    [Benchmark(Description = \"Compound word\")]\r\n    public int CompoundWord() =>\r\n        \"forty-two\".ToNumber(EnglishCulture);\r\n\r\n    [Benchmark(Description = \"Complex number\")]\r\n    public int ComplexNumber() =>\r\n        \"one thousand two hundred thirty-four\".ToNumber(EnglishCulture);\r\n\r\n    [Benchmark(Description = \"Ordinal word\")]\r\n    public int OrdinalWord() =>\r\n        \"fifth\".ToNumber(EnglishCulture);\r\n\r\n    [Benchmark(Description = \"Large number\")]\r\n    public int LargeNumber() =>\r\n        \"nine hundred ninety-nine million\".ToNumber(EnglishCulture);\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/ArticlePrefixSort.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Contains methods for removing, appending and prepending article prefixes for sorting strings ignoring the article.\r\n/// </summary>\r\npublic static partial class EnglishArticle\r\n{\r\n    private const string ArticlePattern = @\"^((The)|(the)|(a)|(A)|(An)|(an))\\s\\w+\";\r\n\r\n#if NET7_0_OR_GREATER\r\n    [GeneratedRegex(ArticlePattern)]\r\n    private static partial Regex ArticleRegexGenerated();\r\n    \r\n    private static Regex ArticleRegex() => ArticleRegexGenerated();\r\n#else\r\n    private static readonly Regex ArticleRegexField = new(ArticlePattern, RegexOptions.Compiled);\r\n\r\n    private static Regex ArticleRegex() => ArticleRegexField;\r\n#endif\r\n\r\n    /// <summary>\r\n    /// Removes the prefixed article and appends it to the same string.\r\n    /// </summary>\r\n    /// <param name=\"items\">The input array of strings</param>\r\n    /// <returns>Sorted string array</returns>\r\n    public static string[] AppendArticlePrefix(string[] items)\r\n    {\r\n        if (items.Length == 0)\r\n        {\r\n            throw new ArgumentOutOfRangeException(nameof(items));\r\n        }\r\n\r\n        var transformed = new string[items.Length];\r\n\r\n        for (var i = 0; i < items.Length; i++)\r\n        {\r\n            var item = items[i]\r\n                .AsSpan();\r\n            if (ArticleRegex().IsMatch(item))\r\n            {\r\n                var indexOf = item.IndexOf(' ');\r\n                var removed = item[indexOf..]\r\n                    .TrimStart();\r\n                var article = item[..indexOf]\r\n                    .TrimEnd();\r\n                transformed[i] = $\"{removed} {article}\";\r\n            }\r\n            else\r\n            {\r\n                transformed[i] = item\r\n                    .Trim()\r\n                    .ToString();\r\n            }\r\n        }\r\n\r\n        Array.Sort(transformed);\r\n        return transformed;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Removes the previously appended article and prepends it to the same string.\r\n    /// </summary>\r\n    /// <param name=\"appended\">Sorted string array</param>\r\n    /// <returns>String array</returns>\r\n    public static string[] PrependArticleSuffix(string[] appended)\r\n    {\r\n        var inserted = new string[appended.Length];\r\n\r\n        for (var i = 0; i < appended.Length; i++)\r\n        {\r\n            var item = appended[i];\r\n            var append = item.AsSpan();\r\n            \r\n            // Check for \" the\" (4 chars total including space)\r\n            if (append.Length > 4 && append[^4] == ' ')\r\n            {\r\n                var lastThree = append[^3..];\r\n                if (lastThree.Equals(\"the\", StringComparison.OrdinalIgnoreCase))\r\n                {\r\n                    inserted[i] = RearrangeArticle(item, suffixLength: 3, totalLength: 4);\r\n                    continue;\r\n                }\r\n            }\r\n            \r\n            // Check for \" an\" (3 chars total including space)\r\n            if (append.Length > 3 && append[^3] == ' ')\r\n            {\r\n                var lastTwo = append[^2..];\r\n                if (lastTwo.Equals(\"an\", StringComparison.OrdinalIgnoreCase))\r\n                {\r\n                    inserted[i] = RearrangeArticle(item, suffixLength: 2, totalLength: 3);\r\n                    continue;\r\n                }\r\n            }\r\n            \r\n            // Check for \" a\" (2 chars total including space)\r\n            if (append.Length > 2 && append[^2] == ' ')\r\n            {\r\n                var lastOne = append[^1..];\r\n                if (lastOne.Equals(\"a\", StringComparison.OrdinalIgnoreCase))\r\n                {\r\n                    inserted[i] = RearrangeArticle(item, suffixLength: 1, totalLength: 2);\r\n                    continue;\r\n                }\r\n            }\r\n            \r\n            inserted[i] = item;\r\n        }\r\n\r\n        return inserted;\r\n    }\r\n\r\n    static string RearrangeArticle(string item, int suffixLength, int totalLength)\r\n    {\r\n#if NET6_0_OR_GREATER\r\n        return string.Create(item.Length, (item, suffixLength, totalLength), (span, state) =>\r\n        {\r\n            var source = state.item.AsSpan();\r\n            var suffix = source[^state.suffixLength..];\r\n            var prefix = source[..^state.totalLength];\r\n            suffix.CopyTo(span);\r\n            span[suffix.Length] = ' ';\r\n            prefix.CopyTo(span[(suffix.Length + 1)..]);\r\n        });\r\n#else\r\n        var source = item.AsSpan();\r\n        var suffix = source[^suffixLength..];\r\n        var prefix = source[..^totalLength];\r\n        return $\"{suffix} {prefix}\";\r\n#endif\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Bytes/ByteRate.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Class to hold a ByteSize and a measurement interval, for the purpose of calculating the rate of transfer\r\n/// </summary>\r\n/// <remarks>\r\n/// Create a ByteRate with given quantity of bytes across an interval\r\n/// </remarks>\r\npublic class ByteRate(ByteSize size, TimeSpan interval)\r\n{\r\n    /// <summary>\r\n    /// Quantity of bytes\r\n    /// </summary>\r\n    public ByteSize Size { get; } = size;\r\n\r\n    /// <summary>\r\n    /// Interval that bytes were transferred in\r\n    /// </summary>\r\n    public TimeSpan Interval { get; } = interval;\r\n\r\n    /// <summary>\r\n    /// Calculate rate for the quantity of bytes and interval defined by this instance\r\n    /// </summary>\r\n    /// <param name=\"timeUnit\">Unit of time to calculate rate for (defaults is per second)</param>\r\n    public string Humanize(TimeUnit timeUnit = TimeUnit.Second) =>\r\n        Humanize(null, timeUnit);\r\n\r\n    /// <summary>\r\n    /// Calculate rate for the quantity of bytes and interval defined by this instance\r\n    /// </summary>\r\n    /// <param name=\"timeUnit\">Unit of time to calculate rate for (defaults is per second)</param>\r\n    /// <param name=\"format\">The string format to use for the number of bytes</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    public string Humanize(string? format, TimeUnit timeUnit = TimeUnit.Second, CultureInfo? culture = null)\r\n    {\r\n        var displayInterval = timeUnit switch\r\n        {\r\n            TimeUnit.Second => TimeSpan.FromSeconds(1),\r\n            TimeUnit.Minute => TimeSpan.FromMinutes(1),\r\n            TimeUnit.Hour => TimeSpan.FromHours(1),\r\n            _ => throw new NotSupportedException(\"timeUnit must be Second, Minute, or Hour\"),\r\n        };\r\n        return new ByteSize(Size.Bytes / Interval.TotalSeconds * displayInterval.TotalSeconds)\r\n            .Humanize(format, culture) + '/' + timeUnit.ToSymbol(culture);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Bytes/ByteSize.cs",
    "content": "//The MIT License (MIT)\r\n\r\n//Copyright (c) 2013-2014 Omar Khudeira (http://omar.io)\r\n\r\n//Permission is hereby granted, free of charge, to any person obtaining a copy\r\n//of this software and associated documentation files (the \"Software\"), to deal\r\n//in the Software without restriction, including without limitation the rights\r\n//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n//copies of the Software, and to permit persons to whom the Software is\r\n//furnished to do so, subject to the following conditions:\r\n\r\n//The above copyright notice and this permission notice shall be included in\r\n//all copies or substantial portions of the Software.\r\n\r\n//THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n//THE SOFTWARE.\r\n\r\nusing System.Diagnostics;\r\nusing System.Runtime.CompilerServices;\r\n\r\nusing static System.Globalization.NumberStyles;\r\n\r\nnamespace Humanizer;\r\n#pragma warning disable 1591\r\npublic struct ByteSize(double byteSize) :\r\n    IComparable<ByteSize>,\r\n    IEquatable<ByteSize>,\r\n    IComparable,\r\n    IFormattable\r\n{\r\n    static readonly ConditionalWeakTable<NumberFormatInfo, HashSet<char>> NumberFormatSpecialCharsCache = new();\r\n\r\n    public static readonly ByteSize MinValue = FromBits(long.MinValue);\r\n    public static readonly ByteSize MaxValue = FromBits(long.MaxValue);\r\n\r\n    public const long BitsInByte = 8;\r\n    public const long BytesInKilobyte = 1024;\r\n    public const long BytesInMegabyte = 1048576;\r\n    public const long BytesInGigabyte = 1073741824;\r\n    public const long BytesInTerabyte = 1099511627776;\r\n\r\n    public const string BitSymbol = \"b\";\r\n    public const string Bit = \"bit\";\r\n    public const string ByteSymbol = \"B\";\r\n    public const string Byte = \"byte\";\r\n    public const string KilobyteSymbol = \"KB\";\r\n    public const string Kilobyte = \"kilobyte\";\r\n    public const string MegabyteSymbol = \"MB\";\r\n    public const string Megabyte = \"megabyte\";\r\n    public const string GigabyteSymbol = \"GB\";\r\n    public const string Gigabyte = \"gigabyte\";\r\n    public const string TerabyteSymbol = \"TB\";\r\n    public const string Terabyte = \"terabyte\";\r\n\r\n    public long Bits { get; } = (long)Math.Ceiling(byteSize * BitsInByte);\r\n    public double Bytes { get; } = byteSize;\r\n    public double Kilobytes { get; } = byteSize / BytesInKilobyte;\r\n    public double Megabytes { get; } = byteSize / BytesInMegabyte;\r\n    public double Gigabytes { get; } = byteSize / BytesInGigabyte;\r\n    public double Terabytes { get; } = byteSize / BytesInTerabyte;\r\n\r\n    public readonly string LargestWholeNumberSymbol => GetLargestWholeNumberSymbol();\r\n\r\n    public readonly string GetLargestWholeNumberSymbol(IFormatProvider? provider = null)\r\n    {\r\n        var cultureFormatter = Configurator.GetFormatter(provider as CultureInfo);\r\n\r\n        // Absolute value is used to deal with negative values\r\n        if (Math.Abs(Terabytes) >= 1)\r\n        {\r\n            return cultureFormatter.DataUnitHumanize(DataUnit.Terabyte, Terabytes, toSymbol: true);\r\n        }\r\n\r\n        if (Math.Abs(Gigabytes) >= 1)\r\n        {\r\n            return cultureFormatter.DataUnitHumanize(DataUnit.Gigabyte, Gigabytes, toSymbol: true);\r\n        }\r\n\r\n        if (Math.Abs(Megabytes) >= 1)\r\n        {\r\n            return cultureFormatter.DataUnitHumanize(DataUnit.Megabyte, Megabytes, toSymbol: true);\r\n        }\r\n\r\n        if (Math.Abs(Kilobytes) >= 1)\r\n        {\r\n            return cultureFormatter.DataUnitHumanize(DataUnit.Kilobyte, Kilobytes, toSymbol: true);\r\n        }\r\n\r\n        if (Math.Abs(Bytes) >= 1)\r\n        {\r\n            return cultureFormatter.DataUnitHumanize(DataUnit.Byte, Bytes, toSymbol: true);\r\n        }\r\n\r\n        return cultureFormatter.DataUnitHumanize(DataUnit.Bit, Bits, toSymbol: true);\r\n    }\r\n\r\n    public readonly string LargestWholeNumberFullWord => GetLargestWholeNumberFullWord();\r\n\r\n    public readonly string GetLargestWholeNumberFullWord(IFormatProvider? provider = null)\r\n    {\r\n        var cultureFormatter = Configurator.GetFormatter(provider as CultureInfo);\r\n\r\n        // Absolute value is used to deal with negative values\r\n        if (Math.Abs(Terabytes) >= 1)\r\n        {\r\n            return cultureFormatter.DataUnitHumanize(DataUnit.Terabyte, Terabytes, toSymbol: false);\r\n        }\r\n\r\n        if (Math.Abs(Gigabytes) >= 1)\r\n        {\r\n            return cultureFormatter.DataUnitHumanize(DataUnit.Gigabyte, Gigabytes, toSymbol: false);\r\n        }\r\n\r\n        if (Math.Abs(Megabytes) >= 1)\r\n        {\r\n            return cultureFormatter.DataUnitHumanize(DataUnit.Megabyte, Megabytes, toSymbol: false);\r\n        }\r\n\r\n        if (Math.Abs(Kilobytes) >= 1)\r\n        {\r\n            return cultureFormatter.DataUnitHumanize(DataUnit.Kilobyte, Kilobytes, toSymbol: false);\r\n        }\r\n\r\n        if (Math.Abs(Bytes) >= 1)\r\n        {\r\n            return cultureFormatter.DataUnitHumanize(DataUnit.Byte, Bytes, toSymbol: false);\r\n        }\r\n\r\n        return cultureFormatter.DataUnitHumanize(DataUnit.Bit, Bits, toSymbol: false);\r\n    }\r\n\r\n    public readonly double LargestWholeNumberValue\r\n    {\r\n        get\r\n        {\r\n            // Absolute value is used to deal with negative values\r\n            if (Math.Abs(Terabytes) >= 1)\r\n            {\r\n                return Terabytes;\r\n            }\r\n\r\n            if (Math.Abs(Gigabytes) >= 1)\r\n            {\r\n                return Gigabytes;\r\n            }\r\n\r\n            if (Math.Abs(Megabytes) >= 1)\r\n            {\r\n                return Megabytes;\r\n            }\r\n\r\n            if (Math.Abs(Kilobytes) >= 1)\r\n            {\r\n                return Kilobytes;\r\n            }\r\n\r\n            if (Math.Abs(Bytes) >= 1)\r\n            {\r\n                return Bytes;\r\n            }\r\n\r\n            return Bits;\r\n        }\r\n    }\r\n\r\n    // Get ceiling because bis are whole units\r\n\r\n    public static ByteSize FromBits(long value) =>\r\n        new(value / (double)BitsInByte);\r\n\r\n    public static ByteSize FromBytes(double value) =>\r\n        new(value);\r\n\r\n    public static ByteSize FromKilobytes(double value) =>\r\n        new(value * BytesInKilobyte);\r\n\r\n    public static ByteSize FromMegabytes(double value) =>\r\n        new(value * BytesInMegabyte);\r\n\r\n    public static ByteSize FromGigabytes(double value) =>\r\n        new(value * BytesInGigabyte);\r\n\r\n    public static ByteSize FromTerabytes(double value) =>\r\n        new(value * BytesInTerabyte);\r\n\r\n    /// <summary>\r\n    /// Converts the value of the current ByteSize object to a string.\r\n    /// The metric prefix symbol (bit, byte, kilo, mega, giga, tera) used is\r\n    /// the largest metric prefix such that the corresponding value is greater\r\n    ///  than or equal to one.\r\n    /// </summary>\r\n    public readonly override string ToString() =>\r\n        ToString(NumberFormatInfo.CurrentInfo);\r\n\r\n    public readonly string ToString(IFormatProvider? provider)\r\n    {\r\n        provider ??= CultureInfo.CurrentCulture;\r\n\r\n        return string.Format(provider, \"{0:0.##} {1}\", LargestWholeNumberValue, GetLargestWholeNumberSymbol(provider));\r\n    }\r\n\r\n    public readonly string ToString(string? format) =>\r\n        ToString(format, NumberFormatInfo.CurrentInfo);\r\n\r\n    public readonly string ToString(string? format, IFormatProvider? provider) =>\r\n        ToString(format, provider, toSymbol: true);\r\n\r\n    readonly string ToString(string? format, IFormatProvider? provider, bool toSymbol)\r\n    {\r\n        format ??= \"G\";\r\n        provider ??= CultureInfo.CurrentCulture;\r\n\r\n        if (format == \"G\")\r\n        {\r\n            format = \"0.##\";\r\n        }\r\n\r\n        if (format.IndexOfAny(['#', '0']) < 0)\r\n        {\r\n            format = \"0.## \" + format;\r\n        }\r\n\r\n        format = format.Replace(\"#.##\", \"0.##\");\r\n\r\n        var culture = provider as CultureInfo ?? CultureInfo.CurrentCulture;\r\n\r\n        bool has(string s) => culture.CompareInfo.IndexOf(format, s, CompareOptions.IgnoreCase) != -1;\r\n        string output(double n) => n.ToString(format, provider);\r\n\r\n        var cultureFormatter = Configurator.GetFormatter(provider as CultureInfo);\r\n\r\n        if (has(TerabyteSymbol))\r\n        {\r\n            format = format.Replace(TerabyteSymbol, cultureFormatter.DataUnitHumanize(DataUnit.Terabyte, Terabytes, toSymbol));\r\n            return output(Terabytes);\r\n        }\r\n\r\n        if (has(GigabyteSymbol))\r\n        {\r\n            format = format.Replace(GigabyteSymbol, cultureFormatter.DataUnitHumanize(DataUnit.Gigabyte, Gigabytes, toSymbol));\r\n            return output(Gigabytes);\r\n        }\r\n\r\n        if (has(MegabyteSymbol))\r\n        {\r\n            format = format.Replace(MegabyteSymbol, cultureFormatter.DataUnitHumanize(DataUnit.Megabyte, Megabytes, toSymbol));\r\n            return output(Megabytes);\r\n        }\r\n\r\n        if (has(KilobyteSymbol))\r\n        {\r\n            format = format.Replace(KilobyteSymbol, cultureFormatter.DataUnitHumanize(DataUnit.Kilobyte, Kilobytes, toSymbol));\r\n            return output(Kilobytes);\r\n        }\r\n\r\n        // Byte and Bit symbol look must be case-sensitive\r\n        if (format.Contains(ByteSymbol, StringComparison.Ordinal))\r\n        {\r\n            format = format.Replace(ByteSymbol, cultureFormatter.DataUnitHumanize(DataUnit.Byte, Bytes, toSymbol));\r\n            return output(Bytes);\r\n        }\r\n\r\n        if (format.Contains(BitSymbol, StringComparison.Ordinal))\r\n        {\r\n            format = format.Replace(BitSymbol, cultureFormatter.DataUnitHumanize(DataUnit.Bit, Bits, toSymbol));\r\n            return output(Bits);\r\n        }\r\n\r\n        var formattedLargeWholeNumberValue = LargestWholeNumberValue.ToString(format, provider);\r\n\r\n        formattedLargeWholeNumberValue = formattedLargeWholeNumberValue.Equals(string.Empty)\r\n            ? \"0\"\r\n            : formattedLargeWholeNumberValue;\r\n\r\n        return $\"{formattedLargeWholeNumberValue} {(toSymbol ? GetLargestWholeNumberSymbol(provider) : GetLargestWholeNumberFullWord(provider))}\";\r\n    }\r\n\r\n    /// <summary>\r\n    /// Converts the value of the current ByteSize object to a string with\r\n    /// full words. The metric prefix symbol (bit, byte, kilo, mega, giga,\r\n    /// tera) used is the largest metric prefix such that the corresponding\r\n    /// value is greater than or equal to one.\r\n    /// </summary>\r\n    public readonly string ToFullWords(string? format = null, IFormatProvider? provider = null) =>\r\n        ToString(format, provider, toSymbol: false);\r\n\r\n    public readonly override bool Equals(object? value)\r\n    {\r\n        if (value == null)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        ByteSize other;\r\n        if (value is ByteSize size)\r\n        {\r\n            other = size;\r\n        }\r\n        else\r\n        {\r\n            return false;\r\n        }\r\n\r\n        return Equals(other);\r\n    }\r\n\r\n    public readonly bool Equals(ByteSize value) =>\r\n        Bits == value.Bits;\r\n\r\n    public readonly override int GetHashCode() =>\r\n        Bits.GetHashCode();\r\n\r\n    public readonly int CompareTo(object? obj)\r\n    {\r\n        if (obj == null)\r\n        {\r\n            return 1;\r\n        }\r\n\r\n        if (obj is ByteSize size)\r\n        {\r\n            return CompareTo(size);\r\n        }\r\n\r\n        throw new ArgumentException(\"Object is not a ByteSize\");\r\n    }\r\n\r\n    public readonly int CompareTo(ByteSize other) =>\r\n        Bits.CompareTo(other.Bits);\r\n\r\n    public readonly ByteSize Add(ByteSize bs) =>\r\n        new(Bytes + bs.Bytes);\r\n\r\n    public readonly ByteSize AddBits(long value) =>\r\n        this + FromBits(value);\r\n\r\n    public readonly ByteSize AddBytes(double value) =>\r\n        this + FromBytes(value);\r\n\r\n    public readonly ByteSize AddKilobytes(double value) =>\r\n        this + FromKilobytes(value);\r\n\r\n    public readonly ByteSize AddMegabytes(double value) =>\r\n        this + FromMegabytes(value);\r\n\r\n    public readonly ByteSize AddGigabytes(double value) =>\r\n        this + FromGigabytes(value);\r\n\r\n    public readonly ByteSize AddTerabytes(double value) =>\r\n        this + FromTerabytes(value);\r\n\r\n    public readonly ByteSize Subtract(ByteSize bs) =>\r\n        new(Bytes - bs.Bytes);\r\n\r\n    public static ByteSize operator +(ByteSize b1, ByteSize b2) =>\r\n        new(b1.Bytes + b2.Bytes);\r\n\r\n    public static ByteSize operator -(ByteSize b1, ByteSize b2) =>\r\n        new(b1.Bytes - b2.Bytes);\r\n\r\n    public static ByteSize operator ++(ByteSize b) =>\r\n        new(b.Bytes + 1);\r\n\r\n    public static ByteSize operator -(ByteSize b) =>\r\n        new(-b.Bytes);\r\n\r\n    public static ByteSize operator --(ByteSize b) =>\r\n        new(b.Bytes - 1);\r\n\r\n    public static bool operator ==(ByteSize b1, ByteSize b2) =>\r\n        b1.Bits == b2.Bits;\r\n\r\n    public static bool operator !=(ByteSize b1, ByteSize b2) =>\r\n        b1.Bits != b2.Bits;\r\n\r\n    public static bool operator <(ByteSize b1, ByteSize b2) =>\r\n        b1.Bits < b2.Bits;\r\n\r\n    public static bool operator <=(ByteSize b1, ByteSize b2) =>\r\n        b1.Bits <= b2.Bits;\r\n\r\n    public static bool operator >(ByteSize b1, ByteSize b2) =>\r\n        b1.Bits > b2.Bits;\r\n\r\n    public static bool operator >=(ByteSize b1, ByteSize b2) =>\r\n        b1.Bits >= b2.Bits;\r\n\r\n    public static bool TryParse(string? s, out ByteSize result) =>\r\n        TryParse(s, null, out result);\r\n\r\n    public static bool TryParse(CharSpan s, out ByteSize result) =>\r\n        TryParse(s, null, out result);\r\n\r\n    public static bool TryParse(string? s, IFormatProvider? formatProvider, out ByteSize result) =>\r\n        TryParse(s.AsSpan(), formatProvider, out result);\r\n\r\n    public static bool TryParse(CharSpan s, IFormatProvider? formatProvider, out ByteSize result)\r\n    {\r\n        // Arg checking\r\n        s = s.TrimStart(); // Protect against leading spaces\r\n        if (s.IsEmpty)\r\n        {\r\n            result = default;\r\n            return false;\r\n        }\r\n\r\n        // Acquiring culture-specific parsing info\r\n        var numberFormat = NumberFormatInfo.GetInstance(formatProvider);\r\n\r\n        // Get or create cached set of special characters from number format strings\r\n        // Note: These can be multi-character strings in some cultures (e.g., Arabic)\r\n        var specialCharsSet = NumberFormatSpecialCharsCache.GetValue(\r\n            numberFormat,\r\n            static nfi => new HashSet<char>(\r\n                nfi.NumberDecimalSeparator\r\n                    .Concat(nfi.NumberGroupSeparator)\r\n                    .Concat(nfi.PositiveSign)\r\n                    .Concat(nfi.NegativeSign)\r\n            )\r\n        );\r\n\r\n        // Setup the result\r\n        result = default;\r\n\r\n        // Pick first non-digit number\r\n        int lastNumber;\r\n        for (lastNumber = 0; lastNumber < s.Length; lastNumber++)\r\n        {\r\n            if (!(char.IsDigit(s[lastNumber]) || specialCharsSet.Contains(s[lastNumber])))\r\n            {\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (lastNumber == s.Length)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        // Cut the input string in half\r\n        var numberPart = s\r\n[..lastNumber]\r\n            .Trim();\r\n        var sizePart = s[lastNumber..]\r\n            .Trim();\r\n\r\n        if (sizePart.Length is not (1 or 2))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        // Get the numeric part\r\n        const NumberStyles numberStyles = AllowDecimalPoint | AllowThousands | AllowLeadingSign;\r\n        if (!double.TryParse(\r\n#if NET\r\n            numberPart,\r\n#else\r\n            numberPart.ToString(),\r\n#endif\r\n            numberStyles, formatProvider, out var number))\r\n        {\r\n            return false;\r\n        }\r\n\r\n        Span<char> sizePartUpper = stackalloc char[sizePart.Length];\r\n        var upperLength = sizePart.ToUpperInvariant(sizePartUpper);\r\n        Debug.Assert(sizePartUpper.Length == upperLength);\r\n\r\n        // Get the magnitude part\r\n        switch (sizePartUpper)\r\n        {\r\n            case ByteSymbol:\r\n                if (sizePart.SequenceEqual(BitSymbol))\r\n                {\r\n                    if (!double.IsFinite(number))\r\n                    {\r\n                        return false;\r\n                    }\r\n\r\n                    if (number != Math.Truncate(number))\r\n                    {\r\n                        return false;\r\n                    }\r\n\r\n                    if (number < long.MinValue || number > long.MaxValue)\r\n                    {\r\n                        return false;\r\n                    }\r\n\r\n                    result = FromBits((long)number);\r\n                }\r\n                else\r\n                {\r\n                    result = FromBytes(number);\r\n                }\r\n\r\n                break;\r\n\r\n            case KilobyteSymbol:\r\n                result = FromKilobytes(number);\r\n                break;\r\n\r\n            case MegabyteSymbol:\r\n                result = FromMegabytes(number);\r\n                break;\r\n\r\n            case GigabyteSymbol:\r\n                result = FromGigabytes(number);\r\n                break;\r\n\r\n            case TerabyteSymbol:\r\n                result = FromTerabytes(number);\r\n                break;\r\n\r\n            default:\r\n                return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public static ByteSize Parse(string s) =>\r\n        Parse(s, null);\r\n\r\n    public static ByteSize Parse(string s, IFormatProvider? formatProvider)\r\n    {\r\n        ArgumentNullException.ThrowIfNull(s);\r\n\r\n        if (TryParse(s, formatProvider, out var result))\r\n        {\r\n            return result;\r\n        }\r\n\r\n        throw new FormatException(\"Value is not in the correct format\");\r\n    }\r\n}\r\n#pragma warning restore 1591\r\n"
  },
  {
    "path": "src/Humanizer/Bytes/ByteSizeExtensions.cs",
    "content": "﻿// ReSharper disable once CheckNamespace\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// Provides extension methods for ByteSize\r\n/// </summary>\r\npublic static class ByteSizeExtensions\r\n{\r\n    /// <summary>\r\n    /// Considers input as bits\r\n    /// </summary>\r\n    public static ByteSize Bits(this byte input) =>\r\n        ByteSize.FromBits(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as bits\r\n    /// </summary>\r\n    public static ByteSize Bits(this sbyte input) =>\r\n        ByteSize.FromBits(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as bits\r\n    /// </summary>\r\n    public static ByteSize Bits(this short input) =>\r\n        ByteSize.FromBits(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as bits\r\n    /// </summary>\r\n    public static ByteSize Bits(this ushort input) =>\r\n        ByteSize.FromBits(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as bits\r\n    /// </summary>\r\n    public static ByteSize Bits(this int input) =>\r\n        ByteSize.FromBits(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as bits\r\n    /// </summary>\r\n    public static ByteSize Bits(this uint input) =>\r\n        ByteSize.FromBits(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as bits\r\n    /// </summary>\r\n    public static ByteSize Bits(this long input) =>\r\n        ByteSize.FromBits(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as bytes\r\n    /// </summary>\r\n    public static ByteSize Bytes(this byte input) =>\r\n        ByteSize.FromBytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as bytes\r\n    /// </summary>\r\n    public static ByteSize Bytes(this sbyte input) =>\r\n        ByteSize.FromBytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as bytes\r\n    /// </summary>\r\n    public static ByteSize Bytes(this short input) =>\r\n        ByteSize.FromBytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as bytes\r\n    /// </summary>\r\n    public static ByteSize Bytes(this ushort input) =>\r\n        ByteSize.FromBytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as bytes\r\n    /// </summary>\r\n    public static ByteSize Bytes(this int input) =>\r\n        ByteSize.FromBytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as bytes\r\n    /// </summary>\r\n    public static ByteSize Bytes(this uint input) =>\r\n        ByteSize.FromBytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as bytes\r\n    /// </summary>\r\n    public static ByteSize Bytes(this double input) =>\r\n        ByteSize.FromBytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as bytes\r\n    /// </summary>\r\n    public static ByteSize Bytes(this long input) =>\r\n        ByteSize.FromBytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as kilobytes\r\n    /// </summary>\r\n    public static ByteSize Kilobytes(this byte input) =>\r\n        ByteSize.FromKilobytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as kilobytes\r\n    /// </summary>\r\n    public static ByteSize Kilobytes(this sbyte input) =>\r\n        ByteSize.FromKilobytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as kilobytes\r\n    /// </summary>\r\n    public static ByteSize Kilobytes(this short input) =>\r\n        ByteSize.FromKilobytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as kilobytes\r\n    /// </summary>\r\n    public static ByteSize Kilobytes(this ushort input) =>\r\n        ByteSize.FromKilobytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as kilobytes\r\n    /// </summary>\r\n    public static ByteSize Kilobytes(this int input) =>\r\n        ByteSize.FromKilobytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as kilobytes\r\n    /// </summary>\r\n    public static ByteSize Kilobytes(this uint input) =>\r\n        ByteSize.FromKilobytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as kilobytes\r\n    /// </summary>\r\n    public static ByteSize Kilobytes(this double input) =>\r\n        ByteSize.FromKilobytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as kilobytes\r\n    /// </summary>\r\n    public static ByteSize Kilobytes(this long input) =>\r\n        ByteSize.FromKilobytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as megabytes\r\n    /// </summary>\r\n    public static ByteSize Megabytes(this byte input) =>\r\n        ByteSize.FromMegabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as megabytes\r\n    /// </summary>\r\n    public static ByteSize Megabytes(this sbyte input) =>\r\n        ByteSize.FromMegabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as megabytes\r\n    /// </summary>\r\n    public static ByteSize Megabytes(this short input) =>\r\n        ByteSize.FromMegabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as megabytes\r\n    /// </summary>\r\n    public static ByteSize Megabytes(this ushort input) =>\r\n        ByteSize.FromMegabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as megabytes\r\n    /// </summary>\r\n    public static ByteSize Megabytes(this int input) =>\r\n        ByteSize.FromMegabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as megabytes\r\n    /// </summary>\r\n    public static ByteSize Megabytes(this uint input) =>\r\n        ByteSize.FromMegabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as megabytes\r\n    /// </summary>\r\n    public static ByteSize Megabytes(this double input) =>\r\n        ByteSize.FromMegabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as megabytes\r\n    /// </summary>\r\n    public static ByteSize Megabytes(this long input) =>\r\n        ByteSize.FromMegabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as gigabytes\r\n    /// </summary>\r\n    public static ByteSize Gigabytes(this byte input) =>\r\n        ByteSize.FromGigabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as gigabytes\r\n    /// </summary>\r\n    public static ByteSize Gigabytes(this sbyte input) =>\r\n        ByteSize.FromGigabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as gigabytes\r\n    /// </summary>\r\n    public static ByteSize Gigabytes(this short input) =>\r\n        ByteSize.FromGigabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as gigabytes\r\n    /// </summary>\r\n    public static ByteSize Gigabytes(this ushort input) =>\r\n        ByteSize.FromGigabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as gigabytes\r\n    /// </summary>\r\n    public static ByteSize Gigabytes(this int input) =>\r\n        ByteSize.FromGigabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as gigabytes\r\n    /// </summary>\r\n    public static ByteSize Gigabytes(this uint input) =>\r\n        ByteSize.FromGigabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as gigabytes\r\n    /// </summary>\r\n    public static ByteSize Gigabytes(this double input) =>\r\n        ByteSize.FromGigabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as gigabytes\r\n    /// </summary>\r\n    public static ByteSize Gigabytes(this long input) =>\r\n        ByteSize.FromGigabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as terabytes\r\n    /// </summary>\r\n    public static ByteSize Terabytes(this byte input) =>\r\n        ByteSize.FromTerabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as terabytes\r\n    /// </summary>\r\n    public static ByteSize Terabytes(this sbyte input) =>\r\n        ByteSize.FromTerabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as terabytes\r\n    /// </summary>\r\n    public static ByteSize Terabytes(this short input) =>\r\n        ByteSize.FromTerabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as terabytes\r\n    /// </summary>\r\n    public static ByteSize Terabytes(this ushort input) =>\r\n        ByteSize.FromTerabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as terabytes\r\n    /// </summary>\r\n    public static ByteSize Terabytes(this int input) =>\r\n        ByteSize.FromTerabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as terabytes\r\n    /// </summary>\r\n    public static ByteSize Terabytes(this uint input) =>\r\n        ByteSize.FromTerabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as terabytes\r\n    /// </summary>\r\n    public static ByteSize Terabytes(this double input) =>\r\n        ByteSize.FromTerabytes(input);\r\n\r\n    /// <summary>\r\n    /// Considers input as terabytes\r\n    /// </summary>\r\n    public static ByteSize Terabytes(this long input) =>\r\n        ByteSize.FromTerabytes(input);\r\n\r\n    /// <summary>\r\n    /// Turns a byte quantity into human readable form, eg 2 GB\r\n    /// </summary>\r\n    /// <param name=\"format\">The string format to use</param>\r\n    public static string Humanize(this ByteSize input, string? format = null) =>\r\n        string.IsNullOrWhiteSpace(format) ? input.ToString() : input.ToString(format);\r\n\r\n    /// <summary>\r\n    /// Turns a byte quantity into human readable form, eg 2 GB\r\n    /// </summary>\r\n    /// <param name=\"formatProvider\">The format provider to use</param>\r\n    public static string Humanize(this ByteSize input, IFormatProvider formatProvider) =>\r\n        input.ToString(formatProvider);\r\n\r\n    /// <summary>\r\n    /// Turns a byte quantity into human readable form, eg 2 GB\r\n    /// </summary>\r\n    /// <param name=\"format\">The string format to use</param>\r\n    /// <param name=\"formatProvider\">The format provider to use</param>\r\n    public static string Humanize(this ByteSize input, string? format, IFormatProvider? formatProvider) =>\r\n        string.IsNullOrWhiteSpace(format) ? input.ToString(formatProvider) : input.ToString(format, formatProvider);\r\n\r\n    /// <summary>\r\n    /// Turns a quantity of bytes in a given interval into a rate that can be manipulated\r\n    /// </summary>\r\n    /// <param name=\"size\">Quantity of bytes</param>\r\n    /// <param name=\"interval\">Interval to create rate for</param>\r\n    public static ByteRate Per(this ByteSize size, TimeSpan interval) =>\r\n        new(size, interval);\r\n}"
  },
  {
    "path": "src/Humanizer/Bytes/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013-2017 Omar Khudeira (http://omar.io)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "src/Humanizer/CasingExtensions.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// ApplyCase method to allow changing the case of a sentence easily\r\n/// </summary>\r\npublic static class CasingExtensions\r\n{\r\n    /// <summary>\r\n    /// Applies the specified letter casing transformation to the input string.\r\n    /// </summary>\r\n    /// <param name=\"input\">The string to transform. Must not be null.</param>\r\n    /// <param name=\"casing\">The desired letter casing style to apply to the input string.</param>\r\n    /// <returns>\r\n    /// A new string with the specified casing applied.\r\n    /// - <see cref=\"LetterCasing.Title\"/>: Each word is capitalized (e.g., \"Some String\")\r\n    /// - <see cref=\"LetterCasing.LowerCase\"/>: All letters are lowercase (e.g., \"some string\")\r\n    /// - <see cref=\"LetterCasing.AllCaps\"/>: All letters are uppercase (e.g., \"SOME STRING\")\r\n    /// - <see cref=\"LetterCasing.Sentence\"/>: First letter capitalized, rest lowercase (e.g., \"Some string\")\r\n    /// </returns>\r\n    /// <exception cref=\"ArgumentOutOfRangeException\">Thrown when an invalid <see cref=\"LetterCasing\"/> value is provided.</exception>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"some string\".ApplyCase(LetterCasing.Title) => \"Some String\"\r\n    /// \"SOME STRING\".ApplyCase(LetterCasing.LowerCase) => \"some string\"\r\n    /// \"some string\".ApplyCase(LetterCasing.AllCaps) => \"SOME STRING\"\r\n    /// \"some string\".ApplyCase(LetterCasing.Sentence) => \"Some string\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string ApplyCase(this string input, LetterCasing casing) =>\r\n        casing switch\r\n        {\r\n            LetterCasing.Title => input.Transform(To.TitleCase),\r\n            LetterCasing.LowerCase => input.Transform(To.LowerCase),\r\n            LetterCasing.AllCaps => input.Transform(To.UpperCase),\r\n            LetterCasing.Sentence => input.Transform(To.SentenceCase),\r\n            _ => throw new ArgumentOutOfRangeException(nameof(casing))\r\n        };\r\n}"
  },
  {
    "path": "src/Humanizer/ClockNotationRounding.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Options for specifying readable clock notation\r\n/// </summary>\r\npublic enum ClockNotationRounding\r\n{\r\n    /// <summary>\r\n    /// Do not round minutes\r\n    /// </summary>\r\n    None,\r\n\r\n    /// <summary>\r\n    /// Round time to nearest five minutes\r\n    /// </summary>\r\n    NearestFiveMinutes\r\n}"
  },
  {
    "path": "src/Humanizer/CollectionHumanizeExtensions.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Humanizes an IEnumerable into a human readable list\r\n/// </summary>\r\npublic static class CollectionHumanizeExtensions\r\n{\r\n    /// <summary>\r\n    /// Transforms a collection into a human-readable string representation by calling <see cref=\"object.ToString\"/> \r\n    /// on each element and combining them with the default separator for the current culture (typically \", \" with \r\n    /// \"and\" before the last item).\r\n    /// </summary>\r\n    /// <typeparam name=\"T\">The type of elements in the collection.</typeparam>\r\n    /// <param name=\"collection\">The collection to be humanized. Must not be null.</param>\r\n    /// <returns>\r\n    /// A formatted string representation of the collection elements separated by culture-specific separators.\r\n    /// For English, this typically produces: \"item1, item2 and item3\".\r\n    /// </returns>\r\n    /// <exception cref=\"ArgumentNullException\">Thrown when <paramref name=\"collection\"/> is null.</exception>\r\n    /// <example>\r\n    /// <code>\r\n    /// new[] { 1, 2, 3 }.Humanize() => \"1, 2 and 3\"\r\n    /// new[] { \"Alice\", \"Bob\", \"Charlie\" }.Humanize() => \"Alice, Bob and Charlie\"\r\n    /// new[] { \"single\" }.Humanize() => \"single\"\r\n    /// new string[] { }.Humanize() => \"\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Humanize<T>(this IEnumerable<T> collection) =>\r\n        Configurator.CollectionFormatter.Humanize(collection);\r\n\r\n    /// <summary>\r\n    /// Transforms a collection into a human-readable string representation using a custom formatter function\r\n    /// for each element, combined with the default separator for the current culture.\r\n    /// </summary>\r\n    /// <typeparam name=\"T\">The type of elements in the collection.</typeparam>\r\n    /// <param name=\"collection\">The collection to be humanized. Must not be null.</param>\r\n    /// <param name=\"displayFormatter\">\r\n    /// A function that converts each element of type <typeparamref name=\"T\"/> to a string representation.\r\n    /// Must not be null.\r\n    /// </param>\r\n    /// <returns>\r\n    /// A formatted string representation of the collection elements, where each element is formatted\r\n    /// using <paramref name=\"displayFormatter\"/> and separated by culture-specific separators.\r\n    /// </returns>\r\n    /// <exception cref=\"ArgumentNullException\">\r\n    /// Thrown when <paramref name=\"collection\"/> or <paramref name=\"displayFormatter\"/> is null.\r\n    /// </exception>\r\n    /// <example>\r\n    /// <code>\r\n    /// var people = new[] { new Person { Name = \"Alice\", Age = 30 }, new Person { Name = \"Bob\", Age = 25 } };\r\n    /// people.Humanize(p => p.Name) => \"Alice and Bob\"\r\n    /// people.Humanize(p => $\"{p.Name} ({p.Age})\") => \"Alice (30) and Bob (25)\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Humanize<T>(this IEnumerable<T> collection, Func<T, string> displayFormatter)\r\n    {\r\n        ArgumentNullException.ThrowIfNull(displayFormatter);\r\n\r\n        return Configurator.CollectionFormatter.Humanize(collection, displayFormatter);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Transforms a collection into a human-readable string representation using a custom formatter function\r\n    /// that returns an object for each element (which will be converted to string), combined with the default \r\n    /// separator for the current culture.\r\n    /// </summary>\r\n    /// <typeparam name=\"T\">The type of elements in the collection.</typeparam>\r\n    /// <param name=\"collection\">The collection to be humanized. Must not be null.</param>\r\n    /// <param name=\"displayFormatter\">\r\n    /// A function that converts each element of type <typeparamref name=\"T\"/> to an object that will be \r\n    /// converted to its string representation. Must not be null.\r\n    /// </param>\r\n    /// <returns>\r\n    /// A formatted string representation of the collection elements, where each element is formatted\r\n    /// using <paramref name=\"displayFormatter\"/> and separated by culture-specific separators.\r\n    /// </returns>\r\n    /// <exception cref=\"ArgumentNullException\">\r\n    /// Thrown when <paramref name=\"collection\"/> or <paramref name=\"displayFormatter\"/> is null.\r\n    /// </exception>\r\n    /// <example>\r\n    /// <code>\r\n    /// var numbers = new[] { 1, 2, 3 };\r\n    /// numbers.Humanize(n => n * 2) => \"2, 4 and 6\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Humanize<T>(this IEnumerable<T> collection, Func<T, object> displayFormatter)\r\n    {\r\n        ArgumentNullException.ThrowIfNull(displayFormatter);\r\n\r\n        return Configurator.CollectionFormatter.Humanize(collection, displayFormatter);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Transforms a collection into a string representation by calling <see cref=\"object.ToString\"/>\r\n    /// on each element and combining them with the specified separator.\r\n    /// </summary>\r\n    /// <typeparam name=\"T\">The type of elements in the collection.</typeparam>\r\n    /// <param name=\"collection\">The collection to be humanized. Must not be null.</param>\r\n    /// <param name=\"separator\">The string to use as a separator between elements.</param>\r\n    /// <returns>\r\n    /// A string representation of the collection elements separated by the specified separator.\r\n    /// </returns>\r\n    /// <exception cref=\"ArgumentNullException\">Thrown when <paramref name=\"collection\"/> is null.</exception>\r\n    /// <example>\r\n    /// <code>\r\n    /// new[] { 1, 2, 3 }.Humanize(\" | \") => \"1 | 2 | 3\"\r\n    /// new[] { \"Alice\", \"Bob\" }.Humanize(\"; \") => \"Alice; Bob\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Humanize<T>(this IEnumerable<T> collection, string separator) =>\r\n        Configurator.CollectionFormatter.Humanize(collection, separator);\r\n\r\n    /// <summary>\r\n    /// Transforms a collection into a string representation using a custom formatter function\r\n    /// for each element, combined with the specified separator.\r\n    /// </summary>\r\n    /// <typeparam name=\"T\">The type of elements in the collection.</typeparam>\r\n    /// <param name=\"collection\">The collection to be humanized. Must not be null.</param>\r\n    /// <param name=\"displayFormatter\">\r\n    /// A function that converts each element of type <typeparamref name=\"T\"/> to a string representation.\r\n    /// Must not be null.\r\n    /// </param>\r\n    /// <param name=\"separator\">The string to use as a separator between formatted elements.</param>\r\n    /// <returns>\r\n    /// A string representation of the collection elements, where each element is formatted\r\n    /// using <paramref name=\"displayFormatter\"/> and separated by the specified separator.\r\n    /// </returns>\r\n    /// <exception cref=\"ArgumentNullException\">\r\n    /// Thrown when <paramref name=\"collection\"/> or <paramref name=\"displayFormatter\"/> is null.\r\n    /// </exception>\r\n    /// <example>\r\n    /// <code>\r\n    /// var people = new[] { new Person { Name = \"Alice\" }, new Person { Name = \"Bob\" } };\r\n    /// people.Humanize(p => p.Name, \" | \") => \"Alice | Bob\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Humanize<T>(this IEnumerable<T> collection, Func<T, string> displayFormatter, string separator)\r\n    {\r\n        ArgumentNullException.ThrowIfNull(displayFormatter);\r\n\r\n        return Configurator.CollectionFormatter.Humanize(collection, displayFormatter, separator);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Transforms a collection into a string representation using a custom formatter function\r\n    /// that returns an object for each element (which will be converted to string), combined with the specified separator.\r\n    /// </summary>\r\n    /// <typeparam name=\"T\">The type of elements in the collection.</typeparam>\r\n    /// <param name=\"collection\">The collection to be humanized. Must not be null.</param>\r\n    /// <param name=\"displayFormatter\">\r\n    /// A function that converts each element of type <typeparamref name=\"T\"/> to an object that will be\r\n    /// converted to its string representation. Must not be null.\r\n    /// </param>\r\n    /// <param name=\"separator\">The string to use as a separator between formatted elements.</param>\r\n    /// <returns>\r\n    /// A string representation of the collection elements, where each element is formatted\r\n    /// using <paramref name=\"displayFormatter\"/> and separated by the specified separator.\r\n    /// </returns>\r\n    /// <exception cref=\"ArgumentNullException\">\r\n    /// Thrown when <paramref name=\"collection\"/> or <paramref name=\"displayFormatter\"/> is null.\r\n    /// </exception>\r\n    /// <example>\r\n    /// <code>\r\n    /// var numbers = new[] { 1, 2, 3 };\r\n    /// numbers.Humanize(n => n * 2, \" - \") => \"2 - 4 - 6\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Humanize<T>(this IEnumerable<T> collection, Func<T, object> displayFormatter, string separator)\r\n    {\r\n        ArgumentNullException.ThrowIfNull(displayFormatter);\r\n\r\n        return Configurator.CollectionFormatter.Humanize(collection, displayFormatter, separator);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Configuration/CollectionFormatterRegistry.cs",
    "content": "namespace Humanizer;\r\n\r\nclass CollectionFormatterRegistry : LocaliserRegistry<ICollectionFormatter>\r\n{\r\n    public CollectionFormatterRegistry()\r\n        : base(_ => new DefaultCollectionFormatter(\"&\"))\r\n    {\r\n        Register(\"en\", _ => new OxfordStyleCollectionFormatter());\r\n        Register(\"it\", _ => new DefaultCollectionFormatter(\"e\"));\r\n        Register(\"de\", _ => new DefaultCollectionFormatter(\"und\"));\r\n        Register(\"dk\", _ => new DefaultCollectionFormatter(\"og\"));\r\n        Register(\"nl\", _ => new DefaultCollectionFormatter(\"en\"));\r\n        Register(\"pt\", _ => new DefaultCollectionFormatter(\"e\"));\r\n        Register(\"ro\", _ => new DefaultCollectionFormatter(\"și\"));\r\n        Register(\"nn\", _ => new DefaultCollectionFormatter(\"og\"));\r\n        Register(\"nb\", _ => new DefaultCollectionFormatter(\"og\"));\r\n        Register(\"sv\", _ => new DefaultCollectionFormatter(\"och\"));\r\n        Register(\"is\", _ => new DefaultCollectionFormatter(\"og\"));\r\n        Register(\"es\", _ => new DefaultCollectionFormatter(\"y\"));\r\n        Register(\"lb\", _ => new DefaultCollectionFormatter(\"an\"));\r\n        Register(\"ca\", _ => new DefaultCollectionFormatter(\"i\"));\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Configuration/Configurator.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Provides a configuration point for Humanizer\r\n/// </summary>\r\npublic static class Configurator\r\n{\r\n    /// <summary>\r\n    /// A registry of formatters used to format collections based on the current locale\r\n    /// </summary>\r\n    public static LocaliserRegistry<ICollectionFormatter> CollectionFormatters { get; } = new CollectionFormatterRegistry();\r\n\r\n    /// <summary>\r\n    /// A registry of formatters used to format strings based on the current locale\r\n    /// </summary>\r\n    public static LocaliserRegistry<IFormatter> Formatters { get; } = new FormatterRegistry();\r\n\r\n    /// <summary>\r\n    /// A registry of number to words converters used to localise ToWords and ToOrdinalWords methods\r\n    /// </summary>\r\n    public static LocaliserRegistry<INumberToWordsConverter> NumberToWordsConverters { get; } = new NumberToWordsConverterRegistry();\r\n\r\n    /// <summary>\r\n    /// Registry of converters that transform words into numbers for english language\r\n    /// </summary>\r\n    private static LocaliserRegistry<IWordsToNumberConverter> WordsToNumberConverters { get; } = new WordsToNumberConverterRegistry();\r\n\r\n    /// <summary>\r\n    /// A registry of ordinalizers used to localise Ordinalize method\r\n    /// </summary>\r\n    public static LocaliserRegistry<IOrdinalizer> Ordinalizers { get; } = new OrdinalizerRegistry();\r\n\r\n    /// <summary>\r\n    /// A registry of ordinalizers used to localise Ordinalize method\r\n    /// </summary>\r\n    public static LocaliserRegistry<IDateToOrdinalWordConverter> DateToOrdinalWordsConverters { get; } = new DateToOrdinalWordsConverterRegistry();\r\n\r\n#if NET6_0_OR_GREATER\r\n    /// <summary>\r\n    /// A registry of ordinalizers used to localise Ordinalize method\r\n    /// </summary>\r\n    public static LocaliserRegistry<IDateOnlyToOrdinalWordConverter> DateOnlyToOrdinalWordsConverters { get; } = new DateOnlyToOrdinalWordsConverterRegistry();\r\n\r\n    /// <summary>\r\n    /// A registry of time to clock notation converters used to localise ToClockNotation methods\r\n    /// </summary>\r\n    public static LocaliserRegistry<ITimeOnlyToClockNotationConverter> TimeOnlyToClockNotationConverters { get; } = new TimeOnlyToClockNotationConvertersRegistry();\r\n#endif\r\n\r\n    internal static ICollectionFormatter CollectionFormatter => CollectionFormatters.ResolveForUiCulture();\r\n\r\n    /// <summary>\r\n    /// The formatter to be used\r\n    /// </summary>\r\n    /// <param name=\"culture\">The culture to retrieve formatter for. Null means that current thread's UI culture should be used.</param>\r\n    internal static IFormatter GetFormatter(CultureInfo? culture) =>\r\n        Formatters.ResolveForCulture(culture);\r\n\r\n    /// <summary>\r\n    /// The converter to be used\r\n    /// </summary>\r\n    /// <param name=\"culture\">The culture to retrieve number to words converter for. Null means that current thread's UI culture should be used.</param>\r\n    internal static INumberToWordsConverter GetNumberToWordsConverter(CultureInfo? culture) =>\r\n        NumberToWordsConverters.ResolveForCulture(culture);\r\n\r\n    internal static IWordsToNumberConverter GetWordsToNumberConverter(CultureInfo culture) =>\r\n        WordsToNumberConverters.ResolveForCulture(culture);\r\n\r\n\r\n\r\n    /// <summary>\r\n    /// The ordinalizer to be used\r\n    /// </summary>\r\n    internal static IOrdinalizer Ordinalizer => Ordinalizers.ResolveForUiCulture();\r\n\r\n    /// <summary>\r\n    /// The ordinalizer to be used\r\n    /// </summary>\r\n    internal static IDateToOrdinalWordConverter DateToOrdinalWordsConverter => DateToOrdinalWordsConverters.ResolveForUiCulture();\r\n\r\n#if NET6_0_OR_GREATER\r\n    /// <summary>\r\n    /// The ordinalizer to be used\r\n    /// </summary>\r\n    internal static IDateOnlyToOrdinalWordConverter DateOnlyToOrdinalWordsConverter => DateOnlyToOrdinalWordsConverters.ResolveForUiCulture();\r\n\r\n    internal static ITimeOnlyToClockNotationConverter TimeOnlyToClockNotationConverter => TimeOnlyToClockNotationConverters.ResolveForUiCulture();\r\n#endif\r\n\r\n    /// <summary>\r\n    /// The strategy to be used for DateTime.Humanize\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// This property should be set only once during application startup before any humanization operations occur.\r\n    /// For thread-safety, use volatile reads or appropriate synchronization when accessing this property in multi-threaded scenarios.\r\n    /// In production applications, avoid changing this value after the application has started serving requests.\r\n    /// </remarks>\r\n    public static IDateTimeHumanizeStrategy DateTimeHumanizeStrategy { get; set; } = new DefaultDateTimeHumanizeStrategy();\r\n\r\n    /// <summary>\r\n    /// The strategy to be used for DateTimeOffset.Humanize\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// This property should be set only once during application startup before any humanization operations occur.\r\n    /// For thread-safety, use volatile reads or appropriate synchronization when accessing this property in multi-threaded scenarios.\r\n    /// In production applications, avoid changing this value after the application has started serving requests.\r\n    /// </remarks>\r\n    public static IDateTimeOffsetHumanizeStrategy DateTimeOffsetHumanizeStrategy { get; set; } = new DefaultDateTimeOffsetHumanizeStrategy();\r\n\r\n#if NET6_0_OR_GREATER\r\n    /// <summary>\r\n    /// The strategy to be used for DateOnly.Humanize\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// This property should be set only once during application startup before any humanization operations occur.\r\n    /// For thread-safety, use volatile reads or appropriate synchronization when accessing this property in multi-threaded scenarios.\r\n    /// In production applications, avoid changing this value after the application has started serving requests.\r\n    /// </remarks>\r\n    public static IDateOnlyHumanizeStrategy DateOnlyHumanizeStrategy { get; set; } = new DefaultDateOnlyHumanizeStrategy();\r\n\r\n    /// <summary>\r\n    /// The strategy to be used for TimeOnly.Humanize\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// This property should be set only once during application startup before any humanization operations occur.\r\n    /// For thread-safety, use volatile reads or appropriate synchronization when accessing this property in multi-threaded scenarios.\r\n    /// In production applications, avoid changing this value after the application has started serving requests.\r\n    /// </remarks>\r\n    public static ITimeOnlyHumanizeStrategy TimeOnlyHumanizeStrategy { get; set; } = new DefaultTimeOnlyHumanizeStrategy();\r\n#endif\r\n\r\n    static readonly Func<PropertyInfo, bool> DefaultEnumDescriptionPropertyLocator = p => p.Name == \"Description\";\r\n    static readonly object EnumDescriptionPropertyLocatorLock = new();\r\n    static volatile Func<PropertyInfo, bool> enumDescriptionPropertyLocator = DefaultEnumDescriptionPropertyLocator;\r\n    static volatile bool enumDescriptionPropertyLocatorHasBeenUsed;\r\n\r\n    internal static Func<PropertyInfo, bool> EnumDescriptionPropertyLocator\r\n    {\r\n        get\r\n        {\r\n            enumDescriptionPropertyLocatorHasBeenUsed = true;\r\n            return enumDescriptionPropertyLocator;\r\n        }\r\n        private set => enumDescriptionPropertyLocator = value;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Use a predicate function for description property of attribute to use for Enum.Humanize\r\n    /// </summary>\r\n    public static void UseEnumDescriptionPropertyLocator(Func<PropertyInfo, bool> func)\r\n    {\r\n        lock (EnumDescriptionPropertyLocatorLock)\r\n        {\r\n            if (enumDescriptionPropertyLocatorHasBeenUsed)\r\n            {\r\n                throw new(\"UseEnumDescriptionPropertyLocator must be called before any Enum.Humanize has already been. Move the call to UseEnumDescriptionPropertyLocator to the app startup or a ModuleInitializer.\");\r\n            }\r\n\r\n            EnumDescriptionPropertyLocator = func;\r\n        }\r\n    }\r\n\r\n    internal static void ResetUseEnumDescriptionPropertyLocator()\r\n    {\r\n        lock (EnumDescriptionPropertyLocatorLock)\r\n        {\r\n            enumDescriptionPropertyLocatorHasBeenUsed = false;\r\n            EnumDescriptionPropertyLocator = DefaultEnumDescriptionPropertyLocator;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Configuration/DateOnlyToOrdinalWordsConverterRegistry.cs",
    "content": "#if NET6_0_OR_GREATER\r\nnamespace Humanizer;\r\n\r\nclass DateOnlyToOrdinalWordsConverterRegistry : LocaliserRegistry<IDateOnlyToOrdinalWordConverter>\r\n{\r\n    public DateOnlyToOrdinalWordsConverterRegistry() : base(_ => new DefaultDateOnlyToOrdinalWordConverter())\r\n    {\r\n        Register(\"en-US\", _ => new UsDateOnlyToOrdinalWordsConverter());\r\n        Register(\"fr\", _ => new FrDateOnlyToOrdinalWordsConverter());\r\n        Register(\"es\", _ => new EsDateOnlyToOrdinalWordsConverter());\r\n        Register(\"lt\", _ => new LtDateOnlyToOrdinalWordsConverter());\r\n        Register(\"ca\", _ => new CaDateOnlyToOrdinalWordsConverter());\r\n    }\r\n}\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Configuration/DateToOrdinalWordsConverterRegistry.cs",
    "content": "namespace Humanizer;\r\n\r\nclass DateToOrdinalWordsConverterRegistry : LocaliserRegistry<IDateToOrdinalWordConverter>\r\n{\r\n    public DateToOrdinalWordsConverterRegistry()\r\n        : base(_ => new DefaultDateToOrdinalWordConverter())\r\n    {\r\n        Register(\"en-US\", _ => new UsDateToOrdinalWordsConverter());\r\n        Register(\"fr\", _ => new FrDateToOrdinalWordsConverter());\r\n        Register(\"es\", _ => new EsDateToOrdinalWordsConverter());\r\n        Register(\"lt\", _ => new LtDateToOrdinalWordsConverter());\r\n        Register(\"ca\", _ => new CaDateToOrdinalWordsConverter());\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Configuration/FormatterRegistry.cs",
    "content": "namespace Humanizer;\r\n\r\nclass FormatterRegistry : LocaliserRegistry<IFormatter>\r\n{\r\n    public FormatterRegistry()\r\n        : base(c => new DefaultFormatter(c))\r\n    {\r\n        Register(\"ar\", c => new ArabicFormatter(c));\r\n        Register(\"de\", c => new GermanFormatter(c));\r\n        Register(\"he\", c => new HebrewFormatter(c));\r\n        Register(\"ro\", c => new RomanianFormatter(c));\r\n        Register(\"ru\", c => new RussianFormatter(c));\r\n        Register(\"sl\", c => new SlovenianFormatter(c));\r\n        Register(\"hr\", c => new CroatianFormatter(c));\r\n        Register(\"sr\", c => new SerbianFormatter(c));\r\n        Register(\"uk\", c => new UkrainianFormatter(c));\r\n        Register(\"fr\", c => new FrenchFormatter(c));\r\n        RegisterCzechSlovakPolishFormatter(\"cs\");\r\n        RegisterCzechSlovakPolishFormatter(\"pl\");\r\n        RegisterCzechSlovakPolishFormatter(\"sk\");\r\n        Register(\"bg\", c => new BulgarianFormatter(c));\r\n        RegisterDefaultFormatter(\"ku\");\r\n        RegisterDefaultFormatter(\"pt\");\r\n        RegisterDefaultFormatter(\"sv\");\r\n        RegisterDefaultFormatter(\"tr\");\r\n        RegisterDefaultFormatter(\"vi\");\r\n        RegisterDefaultFormatter(\"en\");\r\n        RegisterDefaultFormatter(\"af\");\r\n        RegisterDefaultFormatter(\"az\");\r\n        RegisterDefaultFormatter(\"da\");\r\n        RegisterDefaultFormatter(\"el\");\r\n        RegisterDefaultFormatter(\"es\");\r\n        RegisterDefaultFormatter(\"fa\");\r\n        RegisterDefaultFormatter(\"fi\");\r\n        RegisterDefaultFormatter(\"fil\");\r\n        RegisterDefaultFormatter(\"hu\");\r\n        RegisterDefaultFormatter(\"hy\");\r\n        RegisterDefaultFormatter(\"id\");\r\n        Register(\"is\", c => new IcelandicFormatter(c));\r\n        RegisterDefaultFormatter(\"ja\");\r\n        RegisterDefaultFormatter(\"ko\");\r\n        RegisterDefaultFormatter(\"lv\");\r\n        Register(\"mt\", c => new MalteseFormatter(c));\r\n        RegisterDefaultFormatter(\"ms\");\r\n        RegisterDefaultFormatter(\"nb\");\r\n        RegisterDefaultFormatter(\"nl\");\r\n        RegisterDefaultFormatter(\"bn\");\r\n        RegisterDefaultFormatter(\"it\");\r\n        RegisterDefaultFormatter(\"ta\");\r\n        RegisterDefaultFormatter(\"uz-Latn-UZ\");\r\n        RegisterDefaultFormatter(\"uz-Cyrl-UZ\");\r\n        RegisterDefaultFormatter(\"zh-CN\");\r\n        RegisterDefaultFormatter(\"zh-Hans\");\r\n        RegisterDefaultFormatter(\"zh-Hant\");\r\n        RegisterDefaultFormatter(\"th\");\r\n        Register(\"lt\", c => new LithuanianFormatter(c));\r\n        Register(\"lb\", c => new LuxembourgishFormatter(c));\r\n        Register(\"ca\", c => new CatalanFormatter(c));\r\n    }\r\n\r\n    void RegisterDefaultFormatter(string localeCode) =>\r\n        Register(localeCode, c => new DefaultFormatter(c));\r\n\r\n    void RegisterCzechSlovakPolishFormatter(string localeCode) =>\r\n        Register(localeCode, c => new CzechSlovakPolishFormatter(c));\r\n}"
  },
  {
    "path": "src/Humanizer/Configuration/LocaliserRegistry.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// A registry of localised system components with their associated locales\r\n/// </summary>\r\npublic class LocaliserRegistry<TLocaliser>\r\n    where TLocaliser : class\r\n{\r\n    readonly Dictionary<string, Func<CultureInfo, TLocaliser>> localisersBuilder = [];\r\n    readonly object lockObject = new();\r\n    volatile FrozenDictionary<string, Func<CultureInfo, TLocaliser>>? frozenLocalisers;\r\n    readonly Func<CultureInfo, TLocaliser> defaultLocaliser;\r\n    readonly ConcurrentDictionary<string, TLocaliser> cultureSpecificCache = new();\r\n\r\n    /// <summary>\r\n    /// Creates a localiser registry with the default localiser set to the provided value\r\n    /// </summary>\r\n    public LocaliserRegistry(TLocaliser defaultLocaliser) =>\r\n        this.defaultLocaliser = _ => defaultLocaliser;\r\n\r\n    /// <summary>\r\n    /// Creates a localiser registry with the default localiser factory set to the provided value\r\n    /// </summary>\r\n    public LocaliserRegistry(Func<CultureInfo, TLocaliser> defaultLocaliser) =>\r\n        this.defaultLocaliser = defaultLocaliser;\r\n\r\n    /// <summary>\r\n    /// Gets the localiser for the current thread's UI culture\r\n    /// </summary>\r\n    public TLocaliser ResolveForUiCulture() =>\r\n        ResolveForCulture(null);\r\n\r\n    /// <summary>\r\n    /// Gets the localiser for the specified culture\r\n    /// </summary>\r\n    /// <param name=\"culture\">The culture to retrieve localiser for. If not specified, current thread's UI culture is used.</param>\r\n    public TLocaliser ResolveForCulture(CultureInfo? culture)\r\n    {\r\n        var cultureInfo = culture ?? CultureInfo.CurrentUICulture;\r\n        var cultureName = cultureInfo.Name;\r\n        \r\n        // Use ConcurrentDictionary with culture name (string) as key to avoid CultureInfo equality checks\r\n        // and reduce allocations when the same culture is requested multiple times\r\n        return cultureSpecificCache.GetOrAdd(cultureName, _ =>\r\n        {\r\n            var factory = FindLocaliser(cultureInfo);\r\n            return factory(cultureInfo);\r\n        });\r\n    }\r\n\r\n    /// <summary>\r\n    /// Registers the localiser for the culture provided\r\n    /// </summary>\r\n    public void Register(string localeCode, TLocaliser localiser)\r\n    {\r\n        lock (lockObject)\r\n        {\r\n            if (frozenLocalisers != null)\r\n            {\r\n                throw new InvalidOperationException(\"Cannot register localisers after the registry has been used.\");\r\n            }\r\n            localisersBuilder[localeCode] = _ => localiser;\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Registers the localiser factory for the culture provided\r\n    /// </summary>\r\n    public void Register(string localeCode, Func<CultureInfo, TLocaliser> localiser)\r\n    {\r\n        lock (lockObject)\r\n        {\r\n            if (frozenLocalisers != null)\r\n            {\r\n                throw new InvalidOperationException(\"Cannot register localisers after the registry has been used.\");\r\n            }\r\n            localisersBuilder[localeCode] = localiser;\r\n        }\r\n    }\r\n\r\n    Func<CultureInfo, TLocaliser> FindLocaliser(CultureInfo culture)\r\n    {\r\n        // Check if already frozen (fast path without lock)\r\n        var frozen = frozenLocalisers;\r\n        if (frozen == null)\r\n        {\r\n            lock (lockObject)\r\n            {\r\n                // Double-check after acquiring lock\r\n                frozen = frozenLocalisers;\r\n                if (frozen == null)\r\n                {\r\n                    // Freeze the dictionary on first use for better read performance\r\n                    frozen = localisersBuilder.ToFrozenDictionary();\r\n                    frozenLocalisers = frozen;\r\n                }\r\n            }\r\n        }\r\n\r\n        for (var c = culture; !string.IsNullOrEmpty(c.Name); c = c.Parent)\r\n        {\r\n            if (frozen.TryGetValue(c.Name, out var localiser))\r\n            {\r\n                return localiser;\r\n            }\r\n        }\r\n\r\n        return defaultLocaliser;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Configuration/NumberToWordsConverterRegistry.cs",
    "content": "namespace Humanizer;\r\n\r\nclass NumberToWordsConverterRegistry : LocaliserRegistry<INumberToWordsConverter>\r\n{\r\n    public NumberToWordsConverterRegistry()\r\n        : base(_ => new EnglishNumberToWordsConverter())\r\n    {\r\n        Register(\"af\", _ => new AfrikaansNumberToWordsConverter());\r\n        Register(\"en\", _ => new EnglishNumberToWordsConverter());\r\n        Register(\"ar\", _ => new ArabicNumberToWordsConverter());\r\n        Register(\"cs\", c => new CzechNumberToWordsConverter(c));\r\n        Register(\"fa\", _ => new FarsiNumberToWordsConverter());\r\n        Register(\"es\", _ => new SpanishNumberToWordsConverter());\r\n        Register(\"pl\", c => new PolishNumberToWordsConverter(c));\r\n        Register(\"pt\", _ => new PortugueseNumberToWordsConverter());\r\n        Register(\"pt-BR\", _ => new BrazilianPortugueseNumberToWordsConverter());\r\n        Register(\"ro\", _ => new RomanianNumberToWordsConverter());\r\n        Register(\"ru\", _ => new RussianNumberToWordsConverter());\r\n        Register(\"fi\", _ => new FinnishNumberToWordsConverter());\r\n        Register(\"fr-BE\", _ => new FrenchBelgianNumberToWordsConverter());\r\n        Register(\"fr-CH\", _ => new FrenchSwissNumberToWordsConverter());\r\n        Register(\"fr\", _ => new FrenchNumberToWordsConverter());\r\n        Register(\"nl\", _ => new DutchNumberToWordsConverter());\r\n        Register(\"he\", c => new HebrewNumberToWordsConverter(c));\r\n        Register(\"sl\", c => new SlovenianNumberToWordsConverter(c));\r\n        Register(\"de\", _ => new GermanNumberToWordsConverter());\r\n        Register(\"de-CH\", _ => new GermanSwissLiechtensteinNumberToWordsConverter());\r\n        Register(\"de-LI\", _ => new GermanSwissLiechtensteinNumberToWordsConverter());\r\n        Register(\"bn\", _ => new BanglaNumberToWordsConverter());\r\n        Register(\"tr\", _ => new TurkishNumberToWordConverter());\r\n        Register(\"is\", _ => new IcelandicNumberToWordsConverter());\r\n        Register(\"it\", _ => new ItalianNumberToWordsConverter());\r\n        Register(\"mt\", _ => new MalteseNumberToWordsConvertor());\r\n        Register(\"uk\", _ => new UkrainianNumberToWordsConverter());\r\n        Register(\"uz-Latn-UZ\", _ => new UzbekLatnNumberToWordConverter());\r\n        Register(\"uz-Cyrl-UZ\", _ => new UzbekCyrlNumberToWordConverter());\r\n        Register(\"sv\", _ => new SwedishNumberToWordsConverter());\r\n        Register(\"sr\", c => new SerbianCyrlNumberToWordsConverter(c));\r\n        Register(\"sr-Latn\", c => new SerbianNumberToWordsConverter(c));\r\n        Register(\"ta\", _ => new TamilNumberToWordsConverter());\r\n        Register(\"hr\", c => new CroatianNumberToWordsConverter(c));\r\n        Register(\"nb\", _ => new NorwegianBokmalNumberToWordsConverter());\r\n        Register(\"vi\", _ => new VietnameseNumberToWordsConverter());\r\n        Register(\"zh-CN\", _ => new ChineseNumberToWordsConverter());\r\n        Register(\"zh-Hans\", _ => new ChineseNumberToWordsConverter());\r\n        Register(\"zh-Hant\", _ => new ChineseNumberToWordsConverter());\r\n        Register(\"bg\", _ => new BulgarianNumberToWordsConverter());\r\n        Register(\"hy\", _ => new ArmenianNumberToWordsConverter());\r\n        Register(\"az\", _ => new AzerbaijaniNumberToWordsConverter());\r\n        Register(\"ja\", _ => new JapaneseNumberToWordsConverter());\r\n        Register(\"ku\", _ => new CentralKurdishNumberToWordsConverter());\r\n        Register(\"el\", _ => new GreekNumberToWordsConverter());\r\n        Register(\"th\", _ => new ThaiNumberToWordsConverter());\r\n        Register(\"lv\", _ => new LatvianNumberToWordsConverter());\r\n        Register(\"ko\", _ => new KoreanNumberToWordsConverter());\r\n        Register(\"en-IN\", _ => new IndianNumberToWordsConverter());\r\n        Register(\"lt\", _ => new LithuanianNumberToWordsConverter());\r\n        Register(\"lb\", _ => new LuxembourgishNumberToWordsConverter());\r\n        Register(\"hu\", _ => new HungarianNumberToWordsConverter());\r\n        Register(\"ca\", _ => new CatalanNumberToWordsConverter());\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Configuration/OrdinalizerRegistry.cs",
    "content": "namespace Humanizer;\r\n\r\nclass OrdinalizerRegistry : LocaliserRegistry<IOrdinalizer>\r\n{\r\n    public OrdinalizerRegistry()\r\n        : base(_ => new DefaultOrdinalizer())\r\n    {\r\n        Register(\"de\", _ => new GermanOrdinalizer());\r\n        Register(\"en\", _ => new EnglishOrdinalizer());\r\n        Register(\"es\", c => new SpanishOrdinalizer(c));\r\n        Register(\"fr\", _ => new FrenchOrdinalizer());\r\n        Register(\"is\", _ => new IcelandicOrdinalizer());\r\n        Register(\"it\", _ => new ItalianOrdinalizer());\r\n        Register(\"nl\", _ => new DutchOrdinalizer());\r\n        Register(\"pt\", _ => new PortugueseOrdinalizer());\r\n        Register(\"ro\", _ => new RomanianOrdinalizer());\r\n        Register(\"ru\", _ => new RussianOrdinalizer());\r\n        Register(\"tr\", _ => new TurkishOrdinalizer());\r\n        Register(\"uk\", _ => new UkrainianOrdinalizer());\r\n        Register(\"hy\", _ => new ArmenianOrdinalizer());\r\n        Register(\"az\", _ => new AzerbaijaniOrdinalizer());\r\n        Register(\"lb\", _ => new LuxembourgishOrdinalizer());\r\n        Register(\"hu\", _ => new HungarianOrdinalizer());\r\n        Register(\"ca\", _ => new CatalanOrdinalizer());\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Configuration/TimeOnlyToClockNotationConvertersRegistry.cs",
    "content": "#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass TimeOnlyToClockNotationConvertersRegistry : LocaliserRegistry<ITimeOnlyToClockNotationConverter>\r\n{\r\n    public TimeOnlyToClockNotationConvertersRegistry() : base(_ => new DefaultTimeOnlyToClockNotationConverter())\r\n    {\r\n        Register(\"pt-BR\", _ => new BrazilianPortugueseTimeOnlyToClockNotationConverter());\r\n        Register(\"fr\", _ => new FrTimeOnlyToClockNotationConverter());\r\n        Register(\"de\", _ => new GermanTimeOnlyToClockNotationConverter());\r\n        Register(\"es\", _ => new EsTimeOnlyToClockNotationConverter());\r\n        Register(\"lb\", _ => new LbTimeOnlyToClockNotationConverter());\r\n        Register(\"pt\", _ => new PortugueseTimeOnlyToClockNotationConverter());\r\n        Register(\"ca\", _ => new CaTimeOnlyToClockNotationConverter());\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Configuration/WordsToNumberConverterRegistry.cs",
    "content": "namespace Humanizer;\r\n\r\ninternal class WordsToNumberConverterRegistry : LocaliserRegistry<IWordsToNumberConverter>\r\n{\r\n    public WordsToNumberConverterRegistry()\r\n        : base(culture => culture.TwoLetterISOLanguageName == \"en\"\r\n            ? new EnglishWordsToNumberConverter()\r\n            : new DefaultWordsToNumberConverter(culture)) =>\r\n             Register(\"en\", _ => new EnglishWordsToNumberConverter());\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/DateHumanizeExtensions.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Humanizes DateTime into human readable sentence\r\n/// </summary>\r\npublic static class DateHumanizeExtensions\r\n{\r\n    /// <summary>\r\n    /// Turns the current or provided date into a human readable sentence\r\n    /// </summary>\r\n    /// <param name=\"input\">The date to be humanized</param>\r\n    /// <param name=\"utcDate\">Nullable boolean value indicating whether the date is in UTC or local. If null, current date is used with the same DateTimeKind of input</param>\r\n    /// <param name=\"dateToCompareAgainst\">Date to compare the input against. If null, current date is used as base</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <returns>distance of time in words</returns>\r\n    public static string Humanize(this DateTime input, bool? utcDate = null, DateTime? dateToCompareAgainst = null, CultureInfo? culture = null)\r\n    {\r\n        var comparisonBase = dateToCompareAgainst ?? DateTime.UtcNow;\r\n        utcDate ??= input.Kind != DateTimeKind.Local;\r\n        comparisonBase = utcDate.Value ? comparisonBase.ToUniversalTime() : comparisonBase.ToLocalTime();\r\n\r\n        return Configurator.DateTimeHumanizeStrategy.Humanize(input, comparisonBase, culture);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Turns the current or provided date into a human readable sentence, overload for the nullable DateTime, returning 'never' in case null\r\n    /// </summary>\r\n    /// <param name=\"input\">The date to be humanized</param>\r\n    /// <param name=\"utcDate\">Nullable boolean value indicating whether the date is in UTC or local. If null, current date is used with the same DateTimeKind of input</param>\r\n    /// <param name=\"dateToCompareAgainst\">Date to compare the input against. If null, current date is used as base</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <returns>distance of time in words</returns>\r\n    public static string Humanize(this DateTime? input, bool? utcDate = null, DateTime? dateToCompareAgainst = null, CultureInfo? culture = null)\r\n    {\r\n        if (input.HasValue)\r\n        {\r\n            return Humanize(input.Value, utcDate, dateToCompareAgainst, culture);\r\n        }\r\n\r\n        return Configurator\r\n            .GetFormatter(culture)\r\n            .DateHumanize_Never();\r\n    }\r\n\r\n    /// <summary>\r\n    /// Turns the current or provided date into a human readable sentence\r\n    /// </summary>\r\n    /// <param name=\"input\">The date to be humanized</param>\r\n    /// <param name=\"dateToCompareAgainst\">Date to compare the input against. If null, current date is used as base</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <returns>distance of time in words</returns>\r\n    public static string Humanize(this DateTimeOffset input, DateTimeOffset? dateToCompareAgainst = null, CultureInfo? culture = null)\r\n    {\r\n        var comparisonBase = dateToCompareAgainst ?? DateTimeOffset.UtcNow;\r\n\r\n        return Configurator.DateTimeOffsetHumanizeStrategy.Humanize(input, comparisonBase, culture);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Turns the current or provided date into a human readable sentence, overload for the nullable DateTimeOffset, returning 'never' in case null\r\n    /// </summary>\r\n    /// <param name=\"input\">The date to be humanized</param>\r\n    /// <param name=\"dateToCompareAgainst\">Date to compare the input against. If null, current date is used as base</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <returns>distance of time in words</returns>\r\n    public static string Humanize(this DateTimeOffset? input, DateTimeOffset? dateToCompareAgainst = null, CultureInfo? culture = null)\r\n    {\r\n        if (input.HasValue)\r\n        {\r\n            return Humanize(input.Value, dateToCompareAgainst, culture);\r\n        }\r\n\r\n        return Configurator\r\n            .GetFormatter(culture)\r\n            .DateHumanize_Never();\r\n    }\r\n\r\n#if NET6_0_OR_GREATER\r\n    /// <summary>\r\n    /// Turns the current or provided date into a human readable sentence\r\n    /// </summary>\r\n    /// <param name=\"input\">The date to be humanized</param>\r\n    /// <param name=\"dateToCompareAgainst\">Date to compare the input against. If null, current date is used as base</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <returns>distance of time in words</returns>\r\n    public static string Humanize(this DateOnly input, DateOnly? dateToCompareAgainst = null, CultureInfo? culture = null)\r\n    {\r\n        var comparisonBase = dateToCompareAgainst ?? DateOnly.FromDateTime(DateTime.UtcNow);\r\n        return Configurator.DateOnlyHumanizeStrategy.Humanize(input, comparisonBase, culture);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Turns the current or provided date into a human readable sentence, overload for the nullable DateTime, returning 'never' in case null\r\n    /// </summary>\r\n    /// <param name=\"input\">The date to be humanized</param>\r\n    /// <param name=\"dateToCompareAgainst\">Date to compare the input against. If null, current date is used as base</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <returns>distance of time in words</returns>\r\n    public static string Humanize(this DateOnly? input, DateOnly? dateToCompareAgainst = null, CultureInfo? culture = null)\r\n    {\r\n        if (input.HasValue)\r\n        {\r\n            return Humanize(input.Value, dateToCompareAgainst, culture);\r\n        }\r\n\r\n        return Configurator\r\n            .GetFormatter(culture)\r\n            .DateHumanize_Never();\r\n    }\r\n\r\n    /// <summary>\r\n    /// Turns the current or provided time into a human readable sentence\r\n    /// </summary>\r\n    /// <param name=\"input\">The date to be humanized</param>\r\n    /// <param name=\"useUtc\">If <paramref name=\"timeToCompareAgainst\"/> is null, used to determine if the current time is UTC or local. Defaults to UTC.</param>\r\n    /// <param name=\"timeToCompareAgainst\">Date to compare the input against. If null, current date is used as base</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <returns>distance of time in words</returns>\r\n    public static string Humanize(this TimeOnly input, TimeOnly? timeToCompareAgainst = null, bool useUtc = true, CultureInfo? culture = null)\r\n    {\r\n        var comparisonBase = timeToCompareAgainst ?? TimeOnly.FromDateTime(useUtc ? DateTime.UtcNow : DateTime.Now);\r\n\r\n        return Configurator.TimeOnlyHumanizeStrategy.Humanize(input, comparisonBase, culture);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Turns the current or provided time into a human readable sentence, overload for the nullable TimeOnly, returning 'never' in case null\r\n    /// </summary>\r\n    /// <param name=\"input\">The date to be humanized</param>\r\n    /// <param name=\"useUtc\">If <paramref name=\"timeToCompareAgainst\"/> is null, used to determine if the current time is UTC or local. Defaults to UTC.</param>\r\n    /// <param name=\"timeToCompareAgainst\">Time to compare the input against. If null, current date is used as base</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <returns>distance of time in words</returns>\r\n    public static string Humanize(this TimeOnly? input, TimeOnly? timeToCompareAgainst = null, bool useUtc = true, CultureInfo? culture = null)\r\n    {\r\n        if (input.HasValue)\r\n        {\r\n            return Humanize(input.Value, timeToCompareAgainst, useUtc, culture);\r\n        }\r\n\r\n        return Configurator\r\n            .GetFormatter(culture)\r\n            .DateHumanize_Never();\r\n    }\r\n\r\n#endif\r\n}"
  },
  {
    "path": "src/Humanizer/DateTimeHumanizeStrategy/DateTimeHumanizeAlgorithms.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Algorithms used to convert distance between two dates into words.\r\n/// </summary>\r\nstatic class DateTimeHumanizeAlgorithms\r\n{\r\n    /// <summary>\r\n    /// Returns localized &amp; humanized distance of time between two dates; given a specific precision.\r\n    /// </summary>\r\n    public static string PrecisionHumanize(DateTime input, DateTime comparisonBase, double precision, CultureInfo? culture)\r\n    {\r\n        var ts = new TimeSpan(Math.Abs(comparisonBase.Ticks - input.Ticks));\r\n        var tense = input > comparisonBase ? Tense.Future : Tense.Past;\r\n\r\n        return PrecisionHumanize(ts, tense, precision, culture);\r\n    }\r\n\r\n#if NET6_0_OR_GREATER\r\n    /// <summary>\r\n    /// Returns localized &amp; humanized distance of time between two dates; given a specific precision.\r\n    /// </summary>\r\n    public static string PrecisionHumanize(DateOnly input, DateOnly comparisonBase, double precision, CultureInfo? culture)\r\n    {\r\n        var diffDays = Math.Abs(comparisonBase.DayOfYear - input.DayOfYear);\r\n        var ts = new TimeSpan(diffDays, 0, 0, 0);\r\n        var tense = input > comparisonBase ? Tense.Future : Tense.Past;\r\n\r\n        return PrecisionHumanize(ts, tense, precision, culture);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Returns localized &amp; humanized distance of time between two times; given a specific precision.\r\n    /// </summary>\r\n    public static string PrecisionHumanize(TimeOnly input, TimeOnly comparisonBase, double precision, CultureInfo? culture)\r\n    {\r\n        var ts = new TimeSpan(Math.Abs(comparisonBase.Ticks - input.Ticks));\r\n        var tense = input > comparisonBase ? Tense.Future : Tense.Past;\r\n\r\n        return PrecisionHumanize(ts, tense, precision, culture);\r\n    }\r\n#endif\r\n    static string PrecisionHumanize(TimeSpan ts, Tense tense, double precision, CultureInfo? culture)\r\n    {\r\n        int seconds = ts.Seconds, minutes = ts.Minutes, hours = ts.Hours, days = ts.Days;\r\n        int years = 0, months = 0;\r\n\r\n        // start approximate from smaller units towards bigger ones\r\n        if (ts.Milliseconds >= 999 * precision)\r\n        {\r\n            seconds += 1;\r\n        }\r\n\r\n        if (seconds >= 59 * precision)\r\n        {\r\n            minutes += 1;\r\n        }\r\n\r\n        if (minutes >= 59 * precision)\r\n        {\r\n            hours += 1;\r\n        }\r\n\r\n        if (hours >= 23 * precision)\r\n        {\r\n            days += 1;\r\n        }\r\n\r\n        // month calculation\r\n        if (days >= 30 * precision & days <= 31)\r\n        {\r\n            months = 1;\r\n        }\r\n\r\n        if (days > 31 && days < 365 * precision)\r\n        {\r\n            var factor = Convert.ToInt32(Math.Floor((double)days / 30));\r\n            var maxMonths = Convert.ToInt32(Math.Ceiling((double)days / 30));\r\n            months = days >= 30 * (factor + precision) ? maxMonths : maxMonths - 1;\r\n        }\r\n\r\n        // year calculation\r\n        if (days >= 365 * precision && days <= 366)\r\n        {\r\n            years = 1;\r\n        }\r\n\r\n        if (days > 365)\r\n        {\r\n            var factor = Convert.ToInt32(Math.Floor((double)days / 365));\r\n            var maxMonths = Convert.ToInt32(Math.Ceiling((double)days / 365));\r\n            years = days >= 365 * (factor + precision) ? maxMonths : maxMonths - 1;\r\n        }\r\n\r\n        // start computing result from larger units to smaller ones\r\n        var formatter = Configurator.GetFormatter(culture);\r\n        if (years > 0)\r\n        {\r\n            return formatter.DateHumanize(TimeUnit.Year, tense, years);\r\n        }\r\n\r\n        if (months > 0)\r\n        {\r\n            return formatter.DateHumanize(TimeUnit.Month, tense, months);\r\n        }\r\n\r\n        if (days > 0)\r\n        {\r\n            return formatter.DateHumanize(TimeUnit.Day, tense, days);\r\n        }\r\n\r\n        if (hours > 0)\r\n        {\r\n            return formatter.DateHumanize(TimeUnit.Hour, tense, hours);\r\n        }\r\n\r\n        if (minutes > 0)\r\n        {\r\n            return formatter.DateHumanize(TimeUnit.Minute, tense, minutes);\r\n        }\r\n\r\n        if (seconds > 0)\r\n        {\r\n            return formatter.DateHumanize(TimeUnit.Second, tense, seconds);\r\n        }\r\n\r\n        return formatter.DateHumanize(TimeUnit.Millisecond, tense, 0);\r\n    }\r\n\r\n    // http://stackoverflow.com/questions/11/how-do-i-calculate-relative-time\r\n    /// <summary>\r\n    /// Calculates the distance of time in words between two provided dates\r\n    /// </summary>\r\n    public static string DefaultHumanize(DateTime input, DateTime comparisonBase, CultureInfo? culture)\r\n    {\r\n        var tense = input > comparisonBase ? Tense.Future : Tense.Past;\r\n        var ts = new TimeSpan(Math.Abs(comparisonBase.Ticks - input.Ticks));\r\n\r\n        var sameMonth = comparisonBase.Date.AddMonths(tense == Tense.Future ? 1 : -1) == input.Date;\r\n\r\n        var days = Math.Abs((input.Date - comparisonBase.Date).Days);\r\n\r\n        return DefaultHumanize(ts, sameMonth, days, tense, culture);\r\n    }\r\n\r\n#if NET6_0_OR_GREATER\r\n    /// <summary>\r\n    /// Calculates the distance of time in words between two provided dates\r\n    /// </summary>\r\n    public static string DefaultHumanize(DateOnly input, DateOnly comparisonBase, CultureInfo? culture)\r\n    {\r\n        var tense = input > comparisonBase ? Tense.Future : Tense.Past;\r\n        var diffDays = Math.Abs(comparisonBase.DayNumber - input.DayNumber);\r\n        var ts = new TimeSpan(diffDays, 0, 0, 0);\r\n\r\n        var sameMonth = comparisonBase.AddMonths(tense == Tense.Future ? 1 : -1) == input;\r\n\r\n        var days = Math.Abs(input.DayNumber - comparisonBase.DayNumber);\r\n\r\n        return DefaultHumanize(ts, sameMonth, days, tense, culture);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Calculates the distance of time in words between two provided times\r\n    /// </summary>\r\n    public static string DefaultHumanize(TimeOnly input, TimeOnly comparisonBase, CultureInfo? culture)\r\n    {\r\n        var tense = input > comparisonBase ? Tense.Future : Tense.Past;\r\n        var ts = new TimeSpan(Math.Abs(comparisonBase.Ticks - input.Ticks));\r\n\r\n        return DefaultHumanize(ts, true, 0, tense, culture);\r\n    }\r\n#endif\r\n\r\n    static string DefaultHumanize(TimeSpan ts, bool sameMonth, int days, Tense tense, CultureInfo? culture)\r\n    {\r\n        var formatter = Configurator.GetFormatter(culture);\r\n\r\n        if (ts.TotalMilliseconds < 500)\r\n        {\r\n            return formatter.DateHumanize(TimeUnit.Millisecond, tense, 0);\r\n        }\r\n\r\n        if (ts.TotalSeconds < 60)\r\n        {\r\n            return formatter.DateHumanize(TimeUnit.Second, tense, ts.Seconds);\r\n        }\r\n\r\n        if (ts.TotalSeconds < 120)\r\n        {\r\n            return formatter.DateHumanize(TimeUnit.Minute, tense, 1);\r\n        }\r\n\r\n        if (ts.TotalMinutes < 60)\r\n        {\r\n            return formatter.DateHumanize(TimeUnit.Minute, tense, ts.Minutes);\r\n        }\r\n\r\n        if (ts.TotalMinutes < 90)\r\n        {\r\n            return formatter.DateHumanize(TimeUnit.Hour, tense, 1);\r\n        }\r\n\r\n        if (ts.TotalHours < 24)\r\n        {\r\n            return formatter.DateHumanize(TimeUnit.Hour, tense, ts.Hours);\r\n        }\r\n\r\n        if (ts.TotalHours < 48)\r\n        {\r\n            return formatter.DateHumanize(TimeUnit.Day, tense, days);\r\n        }\r\n\r\n        if (ts.TotalDays < 28)\r\n        {\r\n            return formatter.DateHumanize(TimeUnit.Day, tense, ts.Days);\r\n        }\r\n\r\n        if (ts.TotalDays is >= 28 and < 30)\r\n        {\r\n            if (sameMonth)\r\n            {\r\n                return formatter.DateHumanize(TimeUnit.Month, tense, 1);\r\n            }\r\n\r\n            return formatter.DateHumanize(TimeUnit.Day, tense, ts.Days);\r\n        }\r\n\r\n        if (ts.TotalDays < 345)\r\n        {\r\n            var months = Convert.ToInt32(Math.Floor(ts.TotalDays / 29.5));\r\n            return formatter.DateHumanize(TimeUnit.Month, tense, months);\r\n        }\r\n\r\n        var years = Convert.ToInt32(Math.Floor(ts.TotalDays / 365));\r\n        if (years == 0)\r\n        {\r\n            years = 1;\r\n        }\r\n\r\n        return formatter.DateHumanize(TimeUnit.Year, tense, years);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/DateTimeHumanizeStrategy/DefaultDateOnlyHumanizeStrategy.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// The default 'distance of time' -> words calculator.\r\n/// </summary>\r\npublic class DefaultDateOnlyHumanizeStrategy : IDateOnlyHumanizeStrategy\r\n{\r\n    /// <summary>\r\n    /// Calculates the distance of time in words between two provided dates\r\n    /// </summary>\r\n    public string Humanize(DateOnly input, DateOnly comparisonBase, CultureInfo? culture) =>\r\n        DateTimeHumanizeAlgorithms.DefaultHumanize(input, comparisonBase, culture);\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/DateTimeHumanizeStrategy/DefaultDateTimeHumanizeStrategy.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// The default 'distance of time' -> words calculator.\r\n/// </summary>\r\npublic class DefaultDateTimeHumanizeStrategy : IDateTimeHumanizeStrategy\r\n{\r\n    /// <summary>\r\n    /// Calculates the distance of time in words between two provided dates\r\n    /// </summary>\r\n    public string Humanize(DateTime input, DateTime comparisonBase, CultureInfo? culture) =>\r\n        DateTimeHumanizeAlgorithms.DefaultHumanize(input, comparisonBase, culture);\r\n}"
  },
  {
    "path": "src/Humanizer/DateTimeHumanizeStrategy/DefaultDateTimeOffsetHumanizeStrategy.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// The default 'distance of time' -> words calculator.\r\n/// </summary>\r\npublic class DefaultDateTimeOffsetHumanizeStrategy : IDateTimeOffsetHumanizeStrategy\r\n{\r\n    /// <summary>\r\n    /// Calculates the distance of time in words between two provided dates\r\n    /// </summary>\r\n    public string Humanize(DateTimeOffset input, DateTimeOffset comparisonBase, CultureInfo? culture) =>\r\n        DateTimeHumanizeAlgorithms.DefaultHumanize(input.UtcDateTime, comparisonBase.UtcDateTime, culture);\r\n}"
  },
  {
    "path": "src/Humanizer/DateTimeHumanizeStrategy/DefaultTimeOnlyHumanizeStrategy.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// The default 'distance of time' -> words calculator.\r\n/// </summary>\r\npublic class DefaultTimeOnlyHumanizeStrategy : ITimeOnlyHumanizeStrategy\r\n{\r\n    /// <summary>\r\n    /// Calculates the distance of time in words between two provided times\r\n    /// </summary>\r\n    public string Humanize(TimeOnly input, TimeOnly comparisonBase, CultureInfo? culture) =>\r\n        DateTimeHumanizeAlgorithms.DefaultHumanize(input, comparisonBase, culture);\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/DateTimeHumanizeStrategy/IDateOnlyHumanizeStrategy.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// Implement this interface to create a new strategy for DateOnly.Humanize and hook it in the Configurator.DateOnlyHumanizeStrategy\r\n/// </summary>\r\npublic interface IDateOnlyHumanizeStrategy\r\n{\r\n    /// <summary>\r\n    /// Calculates the distance of time in words between two provided dates used for DateOnly.Humanize\r\n    /// </summary>\r\n    string Humanize(DateOnly input, DateOnly comparisonBase, CultureInfo? culture);\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/DateTimeHumanizeStrategy/IDateTimeHumanizeStrategy.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Implement this interface to create a new strategy for DateTime.Humanize and hook it in the Configurator.DateTimeHumanizeStrategy\r\n/// </summary>\r\npublic interface IDateTimeHumanizeStrategy\r\n{\r\n    /// <summary>\r\n    /// Calculates the distance of time in words between two provided dates used for DateTime.Humanize\r\n    /// </summary>\r\n    string Humanize(DateTime input, DateTime comparisonBase, CultureInfo? culture);\r\n}"
  },
  {
    "path": "src/Humanizer/DateTimeHumanizeStrategy/IDateTimeOffsetHumanizeStrategy.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Implement this interface to create a new strategy for DateTime.Humanize and hook it in the Configurator.DateTimeOffsetHumanizeStrategy\r\n/// </summary>\r\npublic interface IDateTimeOffsetHumanizeStrategy\r\n{\r\n    /// <summary>\r\n    /// Calculates the distance of time in words between two provided dates used for DateTimeOffset.Humanize\r\n    /// </summary>\r\n    string Humanize(DateTimeOffset input, DateTimeOffset comparisonBase, CultureInfo? culture);\r\n}"
  },
  {
    "path": "src/Humanizer/DateTimeHumanizeStrategy/ITimeOnlyHumanizeStrategy.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// Implement this interface to create a new strategy for TimeOnly.Humanize and hook it in the Configurator.TimeOnlyHumanizeStrategy\r\n/// </summary>\r\npublic interface ITimeOnlyHumanizeStrategy\r\n{\r\n    /// <summary>\r\n    /// Calculates the distance of time in words between two provided dates used for TimeOnly.Humanize\r\n    /// </summary>\r\n    string Humanize(TimeOnly input, TimeOnly comparisonBase, CultureInfo? culture);\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/DateTimeHumanizeStrategy/PrecisionDateOnlyHumanizeStrategy.cs",
    "content": "#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// Precision-based calculator for distance between two times\r\n/// </summary>\r\n/// <remarks>\r\n/// Constructs a precision-based calculator for distance of time with default precision 0.75.\r\n/// </remarks>\r\n/// <param name=\"precision\">precision of approximation, if not provided  0.75 will be used as a default precision.</param>\r\npublic class PrecisionDateOnlyHumanizeStrategy(double precision = .75) : IDateOnlyHumanizeStrategy\r\n{\r\n    readonly double precision = precision;\r\n\r\n    /// <summary>\r\n    /// Returns localized &amp; humanized distance of time between two dates; given a specific precision.\r\n    /// </summary>\r\n    public string Humanize(DateOnly input, DateOnly comparisonBase, CultureInfo? culture) =>\r\n        DateTimeHumanizeAlgorithms.PrecisionHumanize(input, comparisonBase, precision, culture);\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/DateTimeHumanizeStrategy/PrecisionDateTimeHumanizeStrategy.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Precision-based calculator for distance between two times\r\n/// </summary>\r\n/// <remarks>\r\n/// Constructs a precision-based calculator for distance of time with default precision 0.75.\r\n/// </remarks>\r\n/// <param name=\"precision\">precision of approximation, if not provided  0.75 will be used as a default precision.</param>\r\npublic class PrecisionDateTimeHumanizeStrategy(double precision = .75) : IDateTimeHumanizeStrategy\r\n{\r\n    readonly double precision = precision;\r\n\r\n    /// <summary>\r\n    /// Returns localized &amp; humanized distance of time between two dates; given a specific precision.\r\n    /// </summary>\r\n    public string Humanize(DateTime input, DateTime comparisonBase, CultureInfo? culture) =>\r\n        DateTimeHumanizeAlgorithms.PrecisionHumanize(input, comparisonBase, precision, culture);\r\n}"
  },
  {
    "path": "src/Humanizer/DateTimeHumanizeStrategy/PrecisionDateTimeOffsetHumanizeStrategy.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Precision-based calculator for distance between two times\r\n/// </summary>\r\n/// <remarks>\r\n/// Constructs a precision-based calculator for distance of time with default precision 0.75.\r\n/// </remarks>\r\n/// <param name=\"precision\">precision of approximation, if not provided  0.75 will be used as a default precision.</param>\r\npublic class PrecisionDateTimeOffsetHumanizeStrategy(double precision = .75) : IDateTimeOffsetHumanizeStrategy\r\n{\r\n    readonly double precision = precision;\r\n\r\n    /// <summary>\r\n    /// Returns localized &amp; humanized distance of time between two dates; given a specific precision.\r\n    /// </summary>\r\n    public string Humanize(DateTimeOffset input, DateTimeOffset comparisonBase, CultureInfo? culture) =>\r\n        DateTimeHumanizeAlgorithms.PrecisionHumanize(input.UtcDateTime, comparisonBase.UtcDateTime, precision, culture);\r\n}"
  },
  {
    "path": "src/Humanizer/DateTimeHumanizeStrategy/PrecisionTimeOnlyHumanizeStrategy.cs",
    "content": "#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// Precision-based calculator for distance between two times\r\n/// </summary>\r\n/// <remarks>\r\n/// Constructs a precision-based calculator for distance of time with default precision 0.75.\r\n/// </remarks>\r\n/// <param name=\"precision\">precision of approximation, if not provided  0.75 will be used as a default precision.</param>\r\npublic class PrecisionTimeOnlyHumanizeStrategy(double precision = .75) : ITimeOnlyHumanizeStrategy\r\n{\r\n    readonly double precision = precision;\r\n\r\n    /// <summary>\r\n    /// Returns localized &amp; humanized distance of time between two dates; given a specific precision.\r\n    /// </summary>\r\n    public string Humanize(TimeOnly input, TimeOnly comparisonBase, CultureInfo? culture) =>\r\n        DateTimeHumanizeAlgorithms.PrecisionHumanize(input, comparisonBase, precision, culture);\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/DateToOrdinalWordsExtensions.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Humanizes DateTime into human readable sentence\r\n/// </summary>\r\npublic static class DateToOrdinalWordsExtensions\r\n{\r\n    /// <summary>\r\n    /// Converts a <see cref=\"DateTime\"/> to its ordinal words representation (e.g., \"1st of January, 2023\").\r\n    /// </summary>\r\n    /// <param name=\"input\">The date to be converted to ordinal words.</param>\r\n    /// <returns>\r\n    /// A string containing the date expressed in ordinal words format, culture-specific.\r\n    /// For English: \"1st of January, 2023\", \"22nd of December, 2020\", etc.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// The format and style of ordinal words depends on the current culture.\r\n    /// Uses the configured date-to-ordinal-words converter for conversion.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// new DateTime(2023, 1, 1).ToOrdinalWords() => \"1st of January, 2023\" (in en-US culture)\r\n    /// new DateTime(2020, 12, 22).ToOrdinalWords() => \"22nd of December, 2020\" (in en-US culture)\r\n    /// </code>\r\n    /// </example>\r\n    public static string ToOrdinalWords(this DateTime input) =>\r\n        Configurator.DateToOrdinalWordsConverter.Convert(input);\r\n\r\n    /// <summary>\r\n    /// Converts a <see cref=\"DateTime\"/> to its ordinal words representation using the specified grammatical case.\r\n    /// </summary>\r\n    /// <param name=\"input\">The date to be converted to ordinal words.</param>\r\n    /// <param name=\"grammaticalCase\">\r\n    /// The grammatical case to use for the output words (e.g., Nominative, Genitive, etc.).\r\n    /// This is particularly important for languages with case systems like Russian, Polish, etc.\r\n    /// </param>\r\n    /// <returns>\r\n    /// A string containing the date expressed in ordinal words format in the specified grammatical case.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// The grammatical case parameter is primarily used by languages that have case systems.\r\n    /// For languages without grammatical cases (like English), this parameter has no effect.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// // In Russian culture:\r\n    /// date.ToOrdinalWords(GrammaticalCase.Nominative) => different form than\r\n    /// date.ToOrdinalWords(GrammaticalCase.Genitive)\r\n    /// </code>\r\n    /// </example>\r\n    public static string ToOrdinalWords(this DateTime input, GrammaticalCase grammaticalCase) =>\r\n        Configurator.DateToOrdinalWordsConverter.Convert(input, grammaticalCase);\r\n\r\n#if NET6_0_OR_GREATER\r\n    /// <summary>\r\n    /// Converts a <see cref=\"DateOnly\"/> to its ordinal words representation (e.g., \"1st of January, 2023\").\r\n    /// </summary>\r\n    /// <param name=\"input\">The date to be converted to ordinal words.</param>\r\n    /// <returns>\r\n    /// A string containing the date expressed in ordinal words format, culture-specific.\r\n    /// For English: \"1st of January, 2023\", \"22nd of December, 2020\", etc.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// The format and style of ordinal words depends on the current culture.\r\n    /// Uses the configured date-only-to-ordinal-words converter for conversion.\r\n    /// This method is available only on .NET 6.0 and later.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// new DateOnly(2023, 1, 1).ToOrdinalWords() => \"1st of January, 2023\" (in en-US culture)\r\n    /// new DateOnly(2020, 12, 22).ToOrdinalWords() => \"22nd of December, 2020\" (in en-US culture)\r\n    /// </code>\r\n    /// </example>\r\n    public static string ToOrdinalWords(this DateOnly input) =>\r\n        Configurator.DateOnlyToOrdinalWordsConverter.Convert(input);\r\n\r\n    /// <summary>\r\n    /// Converts a <see cref=\"DateOnly\"/> to its ordinal words representation using the specified grammatical case.\r\n    /// </summary>\r\n    /// <param name=\"input\">The date to be converted to ordinal words.</param>\r\n    /// <param name=\"grammaticalCase\">\r\n    /// The grammatical case to use for the output words (e.g., Nominative, Genitive, etc.).\r\n    /// This is particularly important for languages with case systems like Russian, Polish, etc.\r\n    /// </param>\r\n    /// <returns>\r\n    /// A string containing the date expressed in ordinal words format in the specified grammatical case.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// The grammatical case parameter is primarily used by languages that have case systems.\r\n    /// For languages without grammatical cases (like English), this parameter has no effect.\r\n    /// This method is available only on .NET 6.0 and later.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// // In Russian culture:\r\n    /// date.ToOrdinalWords(GrammaticalCase.Nominative) => different form than\r\n    /// date.ToOrdinalWords(GrammaticalCase.Genitive)\r\n    /// </code>\r\n    /// </example>\r\n    public static string ToOrdinalWords(this DateOnly input, GrammaticalCase grammaticalCase) =>\r\n        Configurator.DateOnlyToOrdinalWordsConverter.Convert(input, grammaticalCase);\r\n#endif\r\n}"
  },
  {
    "path": "src/Humanizer/EnumCache.cs",
    "content": "using System.ComponentModel.DataAnnotations;\r\n\r\nnamespace Humanizer;\r\n\r\nstatic class EnumCache<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] T>\r\n    where T : struct, Enum\r\n{\r\n    [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)]\r\n    static readonly Type TypeOfT = typeof(T);\r\n    static readonly (T Zero, FrozenDictionary<T, string> Humanized, FrozenDictionary<string, T> Dehumanized, FrozenSet<T> Values, bool IsBitFieldEnum) Info = CreateInfo();\r\n\r\n    private static (T Zero, FrozenDictionary<T, string> Humanized, FrozenDictionary<string, T> Dehumanized, FrozenSet<T> Values, bool IsBitFieldEnum) CreateInfo()\r\n    {\r\n        var valuesArray = Enum.GetValues<T>();\r\n        var zero = (T)Convert.ChangeType(Enum.ToObject(TypeOfT, 0), TypeOfT);\r\n        var count = valuesArray.Length;\r\n        var humanized = new Dictionary<T, string>(count);\r\n        var dehumanized = new Dictionary<string, T>(count, StringComparer.OrdinalIgnoreCase);\r\n        foreach (var value in valuesArray)\r\n        {\r\n            var description = GetDescription(value);\r\n            humanized[value] = description;\r\n            dehumanized[description] = value;\r\n        }\r\n\r\n        var isBitFieldEnum = TypeOfT.GetCustomAttribute<FlagsAttribute>() != null;\r\n        return (\r\n            zero,\r\n            humanized.ToFrozenDictionary(),\r\n            dehumanized.ToFrozenDictionary(StringComparer.OrdinalIgnoreCase),\r\n            valuesArray.ToFrozenSet(),\r\n            isBitFieldEnum);\r\n    }\r\n\r\n    public static (T Zero, FrozenDictionary<T, string> Humanized, FrozenSet<T> Values) GetInfo() =>\r\n        (Info.Zero, Info.Humanized, Info.Values);\r\n\r\n    public static FrozenDictionary<string, T> GetDehumanized() =>\r\n        Info.Dehumanized;\r\n\r\n    public static bool TreatAsFlags(T input)\r\n    {\r\n        if (!Info.IsBitFieldEnum)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        return !Enum.IsDefined(TypeOfT, input);\r\n    }\r\n\r\n    static string GetDescription(T input)\r\n    {\r\n#if NET5_0_OR_GREATER\r\n        var caseName = Enum.GetName(input)!;\r\n#else\r\n        var caseName = Enum.GetName(TypeOfT, input)!;\r\n#endif\r\n        var member = TypeOfT.GetField(caseName)!;\r\n\r\n        if (TryGetDescription(member, out var description))\r\n        {\r\n            return description;\r\n        }\r\n\r\n        return caseName.Humanize();\r\n    }\r\n\r\n    [UnconditionalSuppressMessage(\"Trimming\", \"IL2072\", Justification = \"Reflection over attribute properties is intentional and documented.\")]\r\n    static bool TryGetDescription(MemberInfo member, [NotNullWhen(true)] out string? description)\r\n    {\r\n        var displayAttribute = member.GetCustomAttribute<DisplayAttribute>();\r\n        if (displayAttribute != null)\r\n        {\r\n            description = displayAttribute.GetDescription() ?? displayAttribute.GetName();\r\n\r\n            return description != null;\r\n        }\r\n\r\n        foreach (var attr in member.GetCustomAttributes())\r\n        {\r\n#pragma warning disable IL2072 // Target parameter argument does not satisfy 'DynamicallyAccessedMembersAttribute' in call to target method. The return value of the source method does not have matching annotations.\r\n            var attrType = attr.GetType();\r\n            foreach (var property in attrType.GetRuntimeProperties())\r\n#pragma warning restore IL2072\r\n            {\r\n                if (property.PropertyType == typeof(string) &&\r\n                    Configurator.EnumDescriptionPropertyLocator(property))\r\n                {\r\n                    description = (string)property.GetValue(attr, null)!;\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n\r\n        description = null;\r\n        return false;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/EnumDehumanizeExtensions.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Contains extension methods for dehumanizing Enum string values.\r\n/// </summary>\r\npublic static class EnumDehumanizeExtensions\r\n{\r\n    /// <summary>\r\n    /// Converts a humanized string back to its original enum value by matching it against enum member names \r\n    /// and their humanized representations (including <see cref=\"System.ComponentModel.DescriptionAttribute\"/> values).\r\n    /// </summary>\r\n    /// <typeparam name=\"TTargetEnum\">The enum type to convert to. Must be a struct and implement <see cref=\"Enum\"/>.</typeparam>\r\n    /// <param name=\"input\">The humanized string to be converted back to an enum value. Must not be null.</param>\r\n    /// <returns>\r\n    /// The enum value that matches the input string.\r\n    /// </returns>\r\n    /// <exception cref=\"ArgumentException\">Thrown when <typeparamref name=\"TTargetEnum\"/> is not an enum type.</exception>\r\n    /// <exception cref=\"NoMatchFoundException\">\r\n    /// Thrown when no enum member matches the input string (including checking member names, \r\n    /// humanized names, and description attributes).\r\n    /// </exception>\r\n    /// <remarks>\r\n    /// The method attempts to match the input string against:\r\n    /// 1. The exact enum member name\r\n    /// 2. The humanized version of the enum member name\r\n    /// 3. Any <see cref=\"System.ComponentModel.DescriptionAttribute\"/> value on the enum member\r\n    /// Matching is case-sensitive.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// enum UserType { AnonymousUser, RegisteredUser }\r\n    /// \"Anonymous user\".DehumanizeTo&lt;UserType&gt;() => UserType.AnonymousUser\r\n    /// \"Registered user\".DehumanizeTo&lt;UserType&gt;() => UserType.RegisteredUser\r\n    /// \"AnonymousUser\".DehumanizeTo&lt;UserType&gt;() => UserType.AnonymousUser\r\n    /// </code>\r\n    /// </example>\r\n    public static TTargetEnum DehumanizeTo<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] TTargetEnum>(this string input)\r\n        where TTargetEnum : struct, Enum =>\r\n        DehumanizeToPrivate<TTargetEnum>(input, OnNoMatch.ThrowsException)!.Value;\r\n\r\n    /// <summary>\r\n    /// Converts a humanized string back to its original enum value with configurable behavior when no match is found.\r\n    /// </summary>\r\n    /// <typeparam name=\"TTargetEnum\">The enum type to convert to. Must be a struct and implement <see cref=\"Enum\"/>.</typeparam>\r\n    /// <param name=\"input\">The humanized string to be converted back to an enum value. Must not be null.</param>\r\n    /// <param name=\"onNoMatch\">\r\n    /// Specifies what to do when no matching enum member is found.\r\n    /// Default is <see cref=\"OnNoMatch.ThrowsException\"/>.\r\n    /// </param>\r\n    /// <returns>\r\n    /// The enum value that matches the input string, or null if no match is found and \r\n    /// <paramref name=\"onNoMatch\"/> is set to <see cref=\"OnNoMatch.ReturnsNull\"/>.\r\n    /// </returns>\r\n    /// <exception cref=\"ArgumentException\">Thrown when <typeparamref name=\"TTargetEnum\"/> is not an enum type.</exception>\r\n    /// <exception cref=\"NoMatchFoundException\">\r\n    /// Thrown when no enum member matches the input string and <paramref name=\"onNoMatch\"/> is set to \r\n    /// <see cref=\"OnNoMatch.ThrowsException\"/>.\r\n    /// </exception>\r\n    /// <remarks>\r\n    /// This overload provides more control over error handling compared to the parameterless version.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// enum UserType { AnonymousUser, RegisteredUser }\r\n    /// \"Anonymous user\".DehumanizeTo&lt;UserType&gt;() => UserType.AnonymousUser\r\n    /// \"Invalid\".DehumanizeTo&lt;UserType&gt;(OnNoMatch.ReturnsNull) => null\r\n    /// \"Invalid\".DehumanizeTo&lt;UserType&gt;(OnNoMatch.ThrowsException) => throws NoMatchFoundException\r\n    /// </code>\r\n    /// </example>\r\n    public static TTargetEnum? DehumanizeTo<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] TTargetEnum>(this string input, OnNoMatch onNoMatch = OnNoMatch.ThrowsException)\r\n        where TTargetEnum : struct, Enum =>\r\n        DehumanizeToPrivate<TTargetEnum>(input, onNoMatch);\r\n\r\n#if NET6_0_OR_GREATER\r\n    [UnconditionalSuppressMessage(\"Trimming\", \"IL2026\", Justification = \"The method is only used by DehumanizeTo which already has RequiresUnreferencedCode\")]\r\n    [UnconditionalSuppressMessage(\"Trimming\", \"IL2111\", Justification = \"The method is only used by DehumanizeTo which already has RequiresUnreferencedCode\")]\r\n    [UnconditionalSuppressMessage(\"AOT\", \"IL3050\", Justification = \"The method is only used by DehumanizeTo which already has RequiresDynamicCode\")]\r\n#endif\r\n    static MethodInfo GetDehumanizeToMethodInfo() =>\r\n        typeof(EnumDehumanizeExtensions).GetMethod(\"DehumanizeTo\", [typeof(string), typeof(OnNoMatch)])!;\r\n\r\n    static readonly Lazy<MethodInfo> DehumanizeToMethod = new(GetDehumanizeToMethodInfo);\r\n\r\n    /// <summary>\r\n    /// Converts a humanized string back to its original enum value using runtime type information.\r\n    /// This is a non-generic overload that accepts the target enum type as a <see cref=\"Type\"/> parameter.\r\n    /// </summary>\r\n    /// <param name=\"input\">The humanized string to be converted back to an enum value. Must not be null.</param>\r\n    /// <param name=\"targetEnum\">\r\n    /// The <see cref=\"Type\"/> of the target enum. Must be an enum type.\r\n    /// </param>\r\n    /// <param name=\"onNoMatch\">\r\n    /// Specifies what to do when no matching enum member is found.\r\n    /// Default is <see cref=\"OnNoMatch.ThrowsException\"/>.\r\n    /// </param>\r\n    /// <returns>\r\n    /// The enum value (as <see cref=\"Enum\"/>) that matches the input string.\r\n    /// </returns>\r\n    /// <exception cref=\"NoMatchFoundException\">\r\n    /// Thrown when no enum member matches the input string and <paramref name=\"onNoMatch\"/> is set to \r\n    /// <see cref=\"OnNoMatch.ThrowsException\"/>.\r\n    /// </exception>\r\n    /// <exception cref=\"ArgumentException\">Thrown when <paramref name=\"targetEnum\"/> is not an enum type.</exception>\r\n    /// <remarks>\r\n    /// This method uses reflection and is less type-safe than the generic overload. Use the generic \r\n    /// <see cref=\"DehumanizeTo{TTargetEnum}(string, OnNoMatch)\"/> method when the target enum type is known at compile time.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// enum UserType { AnonymousUser, RegisteredUser }\r\n    /// \"Anonymous user\".DehumanizeTo(typeof(UserType)) => UserType.AnonymousUser (as Enum)\r\n    /// </code>\r\n    /// </example>\r\n#if NET6_0_OR_GREATER\r\n    [RequiresDynamicCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    [RequiresUnreferencedCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    [DynamicDependency(DynamicallyAccessedMemberTypes.PublicMethods, typeof(EnumDehumanizeExtensions))]\r\n#endif\r\n    public static Enum DehumanizeTo(this string input, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] Type targetEnum, OnNoMatch onNoMatch = OnNoMatch.ThrowsException)\r\n    {\r\n        var genericMethod = DehumanizeToMethod.Value.MakeGenericMethod(targetEnum);\r\n        try\r\n        {\r\n            return (Enum)genericMethod.Invoke(null, [input, onNoMatch])!;\r\n        }\r\n        catch (TargetInvocationException exception)\r\n        {\r\n            throw exception.InnerException!;\r\n        }\r\n    }\r\n\r\n    static T? DehumanizeToPrivate<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] T>(string input, OnNoMatch onNoMatch)\r\n        where T : struct, Enum\r\n    {\r\n        var dehumanized = EnumCache<T>.GetDehumanized();\r\n        if (dehumanized.TryGetValue(input, out var value))\r\n        {\r\n            return value;\r\n        }\r\n\r\n        if (onNoMatch != OnNoMatch.ThrowsException)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        throw new NoMatchFoundException($\"Couldn't find any enum member that matches the string '{input}'\");\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/EnumHumanizeExtensions.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Contains extension methods for humanizing Enums\r\n/// </summary>\r\npublic static class EnumHumanizeExtensions\r\n{\r\n    /// <summary>\r\n    /// Converts an enum value to a human-readable string by intelligently formatting the enum member name\r\n    /// and respecting any <see cref=\"System.ComponentModel.DescriptionAttribute\"/> applied to the member.\r\n    /// </summary>\r\n    /// <typeparam name=\"T\">The enum type. Must be a struct and implement <see cref=\"Enum\"/>.</typeparam>\r\n    /// <param name=\"input\">The enum value to be humanized.</param>\r\n    /// <returns>\r\n    /// A human-readable string representation of the enum value.\r\n    /// If the enum has the <see cref=\"FlagsAttribute\"/> and multiple flags are set, returns a humanized,\r\n    /// comma-separated list of the flag values.\r\n    /// If a <see cref=\"System.ComponentModel.DescriptionAttribute\"/> is present on the enum member, its value is returned.\r\n    /// Otherwise, the enum member name is humanized (e.g., \"AnonymousUser\" becomes \"Anonymous user\").\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// For flags enums, only non-zero flags are included in the output, and each flag is humanized individually.\r\n    /// The humanization process converts PascalCase to space-separated text with appropriate capitalization.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// enum UserType { AnonymousUser, RegisteredUser }\r\n    /// UserType.AnonymousUser.Humanize() => \"Anonymous user\"\r\n    /// \r\n    /// [Flags]\r\n    /// enum Permission { None = 0, Read = 1, Write = 2, Delete = 4 }\r\n    /// (Permission.Read | Permission.Write).Humanize() => \"Read, Write\"\r\n    /// \r\n    /// enum Status \r\n    /// { \r\n    ///     [Description(\"Currently active\")]\r\n    ///     Active \r\n    /// }\r\n    /// Status.Active.Humanize() => \"Currently active\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Humanize<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] T>(this T input)\r\n        where T : struct, Enum\r\n    {\r\n        var (zero, humanized, values) = EnumCache<T>.GetInfo();\r\n        if (EnumCache<T>.TreatAsFlags(input))\r\n        {\r\n            // Avoid LINQ allocations by manually iterating and building the list\r\n            List<string>? flagValues = null;\r\n            foreach (var value in values)\r\n            {\r\n                if (value.CompareTo(zero) != 0 && input.HasFlag(value))\r\n                {\r\n                    flagValues ??= new List<string>();\r\n                    flagValues.Add(humanized[value]);\r\n                }\r\n            }\r\n\r\n            return flagValues?.Humanize() ?? string.Empty;\r\n        }\r\n\r\n        return humanized[input];\r\n    }\r\n\r\n\r\n    /// <summary>\r\n    /// Converts an enum value to a human-readable string with the specified letter casing applied.\r\n    /// Respects any <see cref=\"System.ComponentModel.DescriptionAttribute\"/> applied to the enum member.\r\n    /// </summary>\r\n    /// <typeparam name=\"T\">The enum type. Must be a struct and implement <see cref=\"Enum\"/>.</typeparam>\r\n    /// <param name=\"input\">The enum value to be humanized.</param>\r\n    /// <param name=\"casing\">The desired letter casing to apply to the humanized enum value.</param>\r\n    /// <returns>\r\n    /// A human-readable string representation of the enum value with the specified casing applied.\r\n    /// If a <see cref=\"System.ComponentModel.DescriptionAttribute\"/> is present, its value is used and then cased.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// This is a convenience method that combines <see cref=\"Humanize{T}(T)\"/> with <see cref=\"CasingExtensions.ApplyCase\"/>.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// enum UserType { AnonymousUser, RegisteredUser }\r\n    /// UserType.AnonymousUser.Humanize(LetterCasing.AllCaps) => \"ANONYMOUS USER\"\r\n    /// UserType.AnonymousUser.Humanize(LetterCasing.Title) => \"Anonymous User\"\r\n    /// UserType.AnonymousUser.Humanize(LetterCasing.LowerCase) => \"anonymous user\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Humanize<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] T>(this T input, LetterCasing casing)\r\n        where T : struct, Enum\r\n    {\r\n        var humanizedEnum = Humanize(input);\r\n\r\n        return humanizedEnum.ApplyCase(casing);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/FluentDate/In.Months.cs",
    "content": "﻿namespace Humanizer;\r\n\r\npublic partial class In\r\n{\r\n    /// <summary>\r\n    /// Returns 1st of January of the current year\r\n    /// </summary>\r\n    public static DateTime January\r\n        => new(DateTime.UtcNow.Year, 1, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of January of the year passed in\r\n    /// </summary>\r\n    public static DateTime JanuaryOf(int year)\r\n        => new(year, 1, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of February of the current year\r\n    /// </summary>\r\n    public static DateTime February\r\n        => new(DateTime.UtcNow.Year, 2, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of February of the year passed in\r\n    /// </summary>\r\n    public static DateTime FebruaryOf(int year)\r\n        => new(year, 2, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of March of the current year\r\n    /// </summary>\r\n    public static DateTime March\r\n        => new(DateTime.UtcNow.Year, 3, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of March of the year passed in\r\n    /// </summary>\r\n    public static DateTime MarchOf(int year)\r\n        => new(year, 3, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of April of the current year\r\n    /// </summary>\r\n    public static DateTime April\r\n        => new(DateTime.UtcNow.Year, 4, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of April of the year passed in\r\n    /// </summary>\r\n    public static DateTime AprilOf(int year)\r\n        => new(year, 4, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of May of the current year\r\n    /// </summary>\r\n    public static DateTime May\r\n        => new(DateTime.UtcNow.Year, 5, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of May of the year passed in\r\n    /// </summary>\r\n    public static DateTime MayOf(int year)\r\n        => new(year, 5, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of June of the current year\r\n    /// </summary>\r\n    public static DateTime June\r\n        => new(DateTime.UtcNow.Year, 6, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of June of the year passed in\r\n    /// </summary>\r\n    public static DateTime JuneOf(int year)\r\n        => new(year, 6, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of July of the current year\r\n    /// </summary>\r\n    public static DateTime July\r\n        => new(DateTime.UtcNow.Year, 7, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of July of the year passed in\r\n    /// </summary>\r\n    public static DateTime JulyOf(int year)\r\n        => new(year, 7, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of August of the current year\r\n    /// </summary>\r\n    public static DateTime August\r\n        => new(DateTime.UtcNow.Year, 8, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of August of the year passed in\r\n    /// </summary>\r\n    public static DateTime AugustOf(int year)\r\n        => new(year, 8, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of September of the current year\r\n    /// </summary>\r\n    public static DateTime September\r\n        => new(DateTime.UtcNow.Year, 9, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of September of the year passed in\r\n    /// </summary>\r\n    public static DateTime SeptemberOf(int year)\r\n        => new(year, 9, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of October of the current year\r\n    /// </summary>\r\n    public static DateTime October\r\n        => new(DateTime.UtcNow.Year, 10, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of October of the year passed in\r\n    /// </summary>\r\n    public static DateTime OctoberOf(int year)\r\n        => new(year, 10, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of November of the current year\r\n    /// </summary>\r\n    public static DateTime November\r\n        => new(DateTime.UtcNow.Year, 11, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of November of the year passed in\r\n    /// </summary>\r\n    public static DateTime NovemberOf(int year)\r\n        => new(year, 11, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of December of the current year\r\n    /// </summary>\r\n    public static DateTime December\r\n        => new(DateTime.UtcNow.Year, 12, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of December of the year passed in\r\n    /// </summary>\r\n    public static DateTime DecemberOf(int year)\r\n        => new(year, 12, 1);\r\n\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/FluentDate/In.Months.tt",
    "content": "﻿<#@ template debug=\"true\" hostSpecific=\"true\" #>\n<#@ output extension=\".cs\" #>\n<#@ Assembly Name=\"System.Core\" #>\n<#@ Assembly Name=\"System.Windows.Forms\" #>\n<#@ import namespace=\"System\" #>\nnamespace Humanizer;\n\npublic partial class In\n{\n<#var now = DateTime.Now;\nfor (var i = 0; i < 12; i++){\n    var monthName = new DateTime(now.Year, i + 1, 1).ToString(\"MMMM\");\n#>\n    /// <summary>\n    /// Returns 1st of <#= monthName #> of the current year\n    /// </summary>\n    public static DateTime <#= monthName #>\n        => new(DateTime.UtcNow.Year, <#= i + 1 #>, 1);\n\n    /// <summary>\n    /// Returns 1st of <#= monthName #> of the year passed in\n    /// </summary>\n    public static DateTime <#= monthName#>Of(int year)\n        => new(year, <#= i + 1 #>, 1);\n\n<#}\n\n#>\n}\n"
  },
  {
    "path": "src/Humanizer/FluentDate/In.SomeTimeFrom.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// </summary>\r\npublic partial class In\r\n{\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class One\r\n    {\r\n        /// <summary>\r\n        /// 1 seconds from now\r\n        /// </summary>\r\n        public static DateTime Second\r\n            => DateTime.UtcNow.AddSeconds(1);\r\n\r\n        /// <summary>\r\n        /// 1 seconds from the provided date\r\n        /// </summary>\r\n        public static DateTime SecondFrom(DateTime date)\r\n            => date.AddSeconds(1);\r\n\r\n        /// <summary>\r\n        /// 1 minutes from now\r\n        /// </summary>\r\n        public static DateTime Minute\r\n            => DateTime.UtcNow.AddMinutes(1);\r\n\r\n        /// <summary>\r\n        /// 1 minutes from the provided date\r\n        /// </summary>\r\n        public static DateTime MinuteFrom(DateTime date)\r\n            => date.AddMinutes(1);\r\n\r\n        /// <summary>\r\n        /// 1 hours from now\r\n        /// </summary>\r\n        public static DateTime Hour\r\n            => DateTime.UtcNow.AddHours(1);\r\n\r\n        /// <summary>\r\n        /// 1 hours from the provided date\r\n        /// </summary>\r\n        public static DateTime HourFrom(DateTime date)\r\n            => date.AddHours(1);\r\n\r\n        /// <summary>\r\n        /// 1 days from now\r\n        /// </summary>\r\n        public static DateTime Day\r\n            => DateTime.UtcNow.AddDays(1);\r\n\r\n        /// <summary>\r\n        /// 1 days from the provided date\r\n        /// </summary>\r\n        public static DateTime DayFrom(DateTime date)\r\n            => date.AddDays(1);\r\n\r\n        /// <summary>\r\n        /// 1 weeks from now\r\n        /// </summary>\r\n        public static DateTime Week\r\n            => DateTime.UtcNow.AddDays(7);\r\n\r\n        /// <summary>\r\n        /// 1 weeks from the provided date\r\n        /// </summary>\r\n        public static DateTime WeekFrom(DateTime date)\r\n            => date.AddDays(7);\r\n\r\n        /// <summary>\r\n        /// 1 months from now\r\n        /// </summary>\r\n        public static DateTime Month\r\n            => DateTime.UtcNow.AddMonths(1);\r\n\r\n        /// <summary>\r\n        /// 1 months from the provided date\r\n        /// </summary>\r\n        public static DateTime MonthFrom(DateTime date)\r\n            => date.AddMonths(1);\r\n\r\n        /// <summary>\r\n        /// 1 years from now\r\n        /// </summary>\r\n        public static DateTime Year\r\n            => DateTime.UtcNow.AddYears(1);\r\n\r\n        /// <summary>\r\n        /// 1 years from the provided date\r\n        /// </summary>\r\n        public static DateTime YearFrom(DateTime date)\r\n            => date.AddYears(1);\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Two\r\n    {\r\n        /// <summary>\r\n        /// 2 seconds from now\r\n        /// </summary>\r\n        public static DateTime Seconds\r\n            => DateTime.UtcNow.AddSeconds(2);\r\n\r\n        /// <summary>\r\n        /// 2 seconds from the provided date\r\n        /// </summary>\r\n        public static DateTime SecondsFrom(DateTime date)\r\n            => date.AddSeconds(2);\r\n\r\n        /// <summary>\r\n        /// 2 minutes from now\r\n        /// </summary>\r\n        public static DateTime Minutes\r\n            => DateTime.UtcNow.AddMinutes(2);\r\n\r\n        /// <summary>\r\n        /// 2 minutes from the provided date\r\n        /// </summary>\r\n        public static DateTime MinutesFrom(DateTime date)\r\n            => date.AddMinutes(2);\r\n\r\n        /// <summary>\r\n        /// 2 hours from now\r\n        /// </summary>\r\n        public static DateTime Hours\r\n            => DateTime.UtcNow.AddHours(2);\r\n\r\n        /// <summary>\r\n        /// 2 hours from the provided date\r\n        /// </summary>\r\n        public static DateTime HoursFrom(DateTime date)\r\n            => date.AddHours(2);\r\n\r\n        /// <summary>\r\n        /// 2 days from now\r\n        /// </summary>\r\n        public static DateTime Days\r\n            => DateTime.UtcNow.AddDays(2);\r\n\r\n        /// <summary>\r\n        /// 2 days from the provided date\r\n        /// </summary>\r\n        public static DateTime DaysFrom(DateTime date)\r\n            => date.AddDays(2);\r\n\r\n        /// <summary>\r\n        /// 2 weeks from now\r\n        /// </summary>\r\n        public static DateTime Weeks\r\n            => DateTime.UtcNow.AddDays(14);\r\n\r\n        /// <summary>\r\n        /// 2 weeks from the provided date\r\n        /// </summary>\r\n        public static DateTime WeeksFrom(DateTime date)\r\n            => date.AddDays(14);\r\n\r\n        /// <summary>\r\n        /// 2 months from now\r\n        /// </summary>\r\n        public static DateTime Months\r\n            => DateTime.UtcNow.AddMonths(2);\r\n\r\n        /// <summary>\r\n        /// 2 months from the provided date\r\n        /// </summary>\r\n        public static DateTime MonthsFrom(DateTime date)\r\n            => date.AddMonths(2);\r\n\r\n        /// <summary>\r\n        /// 2 years from now\r\n        /// </summary>\r\n        public static DateTime Years\r\n            => DateTime.UtcNow.AddYears(2);\r\n\r\n        /// <summary>\r\n        /// 2 years from the provided date\r\n        /// </summary>\r\n        public static DateTime YearsFrom(DateTime date)\r\n            => date.AddYears(2);\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Three\r\n    {\r\n        /// <summary>\r\n        /// 3 seconds from now\r\n        /// </summary>\r\n        public static DateTime Seconds\r\n            => DateTime.UtcNow.AddSeconds(3);\r\n\r\n        /// <summary>\r\n        /// 3 seconds from the provided date\r\n        /// </summary>\r\n        public static DateTime SecondsFrom(DateTime date)\r\n            => date.AddSeconds(3);\r\n\r\n        /// <summary>\r\n        /// 3 minutes from now\r\n        /// </summary>\r\n        public static DateTime Minutes\r\n            => DateTime.UtcNow.AddMinutes(3);\r\n\r\n        /// <summary>\r\n        /// 3 minutes from the provided date\r\n        /// </summary>\r\n        public static DateTime MinutesFrom(DateTime date)\r\n            => date.AddMinutes(3);\r\n\r\n        /// <summary>\r\n        /// 3 hours from now\r\n        /// </summary>\r\n        public static DateTime Hours\r\n            => DateTime.UtcNow.AddHours(3);\r\n\r\n        /// <summary>\r\n        /// 3 hours from the provided date\r\n        /// </summary>\r\n        public static DateTime HoursFrom(DateTime date)\r\n            => date.AddHours(3);\r\n\r\n        /// <summary>\r\n        /// 3 days from now\r\n        /// </summary>\r\n        public static DateTime Days\r\n            => DateTime.UtcNow.AddDays(3);\r\n\r\n        /// <summary>\r\n        /// 3 days from the provided date\r\n        /// </summary>\r\n        public static DateTime DaysFrom(DateTime date)\r\n            => date.AddDays(3);\r\n\r\n        /// <summary>\r\n        /// 3 weeks from now\r\n        /// </summary>\r\n        public static DateTime Weeks\r\n            => DateTime.UtcNow.AddDays(21);\r\n\r\n        /// <summary>\r\n        /// 3 weeks from the provided date\r\n        /// </summary>\r\n        public static DateTime WeeksFrom(DateTime date)\r\n            => date.AddDays(21);\r\n\r\n        /// <summary>\r\n        /// 3 months from now\r\n        /// </summary>\r\n        public static DateTime Months\r\n            => DateTime.UtcNow.AddMonths(3);\r\n\r\n        /// <summary>\r\n        /// 3 months from the provided date\r\n        /// </summary>\r\n        public static DateTime MonthsFrom(DateTime date)\r\n            => date.AddMonths(3);\r\n\r\n        /// <summary>\r\n        /// 3 years from now\r\n        /// </summary>\r\n        public static DateTime Years\r\n            => DateTime.UtcNow.AddYears(3);\r\n\r\n        /// <summary>\r\n        /// 3 years from the provided date\r\n        /// </summary>\r\n        public static DateTime YearsFrom(DateTime date)\r\n            => date.AddYears(3);\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Four\r\n    {\r\n        /// <summary>\r\n        /// 4 seconds from now\r\n        /// </summary>\r\n        public static DateTime Seconds\r\n            => DateTime.UtcNow.AddSeconds(4);\r\n\r\n        /// <summary>\r\n        /// 4 seconds from the provided date\r\n        /// </summary>\r\n        public static DateTime SecondsFrom(DateTime date)\r\n            => date.AddSeconds(4);\r\n\r\n        /// <summary>\r\n        /// 4 minutes from now\r\n        /// </summary>\r\n        public static DateTime Minutes\r\n            => DateTime.UtcNow.AddMinutes(4);\r\n\r\n        /// <summary>\r\n        /// 4 minutes from the provided date\r\n        /// </summary>\r\n        public static DateTime MinutesFrom(DateTime date)\r\n            => date.AddMinutes(4);\r\n\r\n        /// <summary>\r\n        /// 4 hours from now\r\n        /// </summary>\r\n        public static DateTime Hours\r\n            => DateTime.UtcNow.AddHours(4);\r\n\r\n        /// <summary>\r\n        /// 4 hours from the provided date\r\n        /// </summary>\r\n        public static DateTime HoursFrom(DateTime date)\r\n            => date.AddHours(4);\r\n\r\n        /// <summary>\r\n        /// 4 days from now\r\n        /// </summary>\r\n        public static DateTime Days\r\n            => DateTime.UtcNow.AddDays(4);\r\n\r\n        /// <summary>\r\n        /// 4 days from the provided date\r\n        /// </summary>\r\n        public static DateTime DaysFrom(DateTime date)\r\n            => date.AddDays(4);\r\n\r\n        /// <summary>\r\n        /// 4 weeks from now\r\n        /// </summary>\r\n        public static DateTime Weeks\r\n            => DateTime.UtcNow.AddDays(28);\r\n\r\n        /// <summary>\r\n        /// 4 weeks from the provided date\r\n        /// </summary>\r\n        public static DateTime WeeksFrom(DateTime date)\r\n            => date.AddDays(28);\r\n\r\n        /// <summary>\r\n        /// 4 months from now\r\n        /// </summary>\r\n        public static DateTime Months\r\n            => DateTime.UtcNow.AddMonths(4);\r\n\r\n        /// <summary>\r\n        /// 4 months from the provided date\r\n        /// </summary>\r\n        public static DateTime MonthsFrom(DateTime date)\r\n            => date.AddMonths(4);\r\n\r\n        /// <summary>\r\n        /// 4 years from now\r\n        /// </summary>\r\n        public static DateTime Years\r\n            => DateTime.UtcNow.AddYears(4);\r\n\r\n        /// <summary>\r\n        /// 4 years from the provided date\r\n        /// </summary>\r\n        public static DateTime YearsFrom(DateTime date)\r\n            => date.AddYears(4);\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Five\r\n    {\r\n        /// <summary>\r\n        /// 5 seconds from now\r\n        /// </summary>\r\n        public static DateTime Seconds\r\n            => DateTime.UtcNow.AddSeconds(5);\r\n\r\n        /// <summary>\r\n        /// 5 seconds from the provided date\r\n        /// </summary>\r\n        public static DateTime SecondsFrom(DateTime date)\r\n            => date.AddSeconds(5);\r\n\r\n        /// <summary>\r\n        /// 5 minutes from now\r\n        /// </summary>\r\n        public static DateTime Minutes\r\n            => DateTime.UtcNow.AddMinutes(5);\r\n\r\n        /// <summary>\r\n        /// 5 minutes from the provided date\r\n        /// </summary>\r\n        public static DateTime MinutesFrom(DateTime date)\r\n            => date.AddMinutes(5);\r\n\r\n        /// <summary>\r\n        /// 5 hours from now\r\n        /// </summary>\r\n        public static DateTime Hours\r\n            => DateTime.UtcNow.AddHours(5);\r\n\r\n        /// <summary>\r\n        /// 5 hours from the provided date\r\n        /// </summary>\r\n        public static DateTime HoursFrom(DateTime date)\r\n            => date.AddHours(5);\r\n\r\n        /// <summary>\r\n        /// 5 days from now\r\n        /// </summary>\r\n        public static DateTime Days\r\n            => DateTime.UtcNow.AddDays(5);\r\n\r\n        /// <summary>\r\n        /// 5 days from the provided date\r\n        /// </summary>\r\n        public static DateTime DaysFrom(DateTime date)\r\n            => date.AddDays(5);\r\n\r\n        /// <summary>\r\n        /// 5 weeks from now\r\n        /// </summary>\r\n        public static DateTime Weeks\r\n            => DateTime.UtcNow.AddDays(35);\r\n\r\n        /// <summary>\r\n        /// 5 weeks from the provided date\r\n        /// </summary>\r\n        public static DateTime WeeksFrom(DateTime date)\r\n            => date.AddDays(35);\r\n\r\n        /// <summary>\r\n        /// 5 months from now\r\n        /// </summary>\r\n        public static DateTime Months\r\n            => DateTime.UtcNow.AddMonths(5);\r\n\r\n        /// <summary>\r\n        /// 5 months from the provided date\r\n        /// </summary>\r\n        public static DateTime MonthsFrom(DateTime date)\r\n            => date.AddMonths(5);\r\n\r\n        /// <summary>\r\n        /// 5 years from now\r\n        /// </summary>\r\n        public static DateTime Years\r\n            => DateTime.UtcNow.AddYears(5);\r\n\r\n        /// <summary>\r\n        /// 5 years from the provided date\r\n        /// </summary>\r\n        public static DateTime YearsFrom(DateTime date)\r\n            => date.AddYears(5);\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Six\r\n    {\r\n        /// <summary>\r\n        /// 6 seconds from now\r\n        /// </summary>\r\n        public static DateTime Seconds\r\n            => DateTime.UtcNow.AddSeconds(6);\r\n\r\n        /// <summary>\r\n        /// 6 seconds from the provided date\r\n        /// </summary>\r\n        public static DateTime SecondsFrom(DateTime date)\r\n            => date.AddSeconds(6);\r\n\r\n        /// <summary>\r\n        /// 6 minutes from now\r\n        /// </summary>\r\n        public static DateTime Minutes\r\n            => DateTime.UtcNow.AddMinutes(6);\r\n\r\n        /// <summary>\r\n        /// 6 minutes from the provided date\r\n        /// </summary>\r\n        public static DateTime MinutesFrom(DateTime date)\r\n            => date.AddMinutes(6);\r\n\r\n        /// <summary>\r\n        /// 6 hours from now\r\n        /// </summary>\r\n        public static DateTime Hours\r\n            => DateTime.UtcNow.AddHours(6);\r\n\r\n        /// <summary>\r\n        /// 6 hours from the provided date\r\n        /// </summary>\r\n        public static DateTime HoursFrom(DateTime date)\r\n            => date.AddHours(6);\r\n\r\n        /// <summary>\r\n        /// 6 days from now\r\n        /// </summary>\r\n        public static DateTime Days\r\n            => DateTime.UtcNow.AddDays(6);\r\n\r\n        /// <summary>\r\n        /// 6 days from the provided date\r\n        /// </summary>\r\n        public static DateTime DaysFrom(DateTime date)\r\n            => date.AddDays(6);\r\n\r\n        /// <summary>\r\n        /// 6 weeks from now\r\n        /// </summary>\r\n        public static DateTime Weeks\r\n            => DateTime.UtcNow.AddDays(42);\r\n\r\n        /// <summary>\r\n        /// 6 weeks from the provided date\r\n        /// </summary>\r\n        public static DateTime WeeksFrom(DateTime date)\r\n            => date.AddDays(42);\r\n\r\n        /// <summary>\r\n        /// 6 months from now\r\n        /// </summary>\r\n        public static DateTime Months\r\n            => DateTime.UtcNow.AddMonths(6);\r\n\r\n        /// <summary>\r\n        /// 6 months from the provided date\r\n        /// </summary>\r\n        public static DateTime MonthsFrom(DateTime date)\r\n            => date.AddMonths(6);\r\n\r\n        /// <summary>\r\n        /// 6 years from now\r\n        /// </summary>\r\n        public static DateTime Years\r\n            => DateTime.UtcNow.AddYears(6);\r\n\r\n        /// <summary>\r\n        /// 6 years from the provided date\r\n        /// </summary>\r\n        public static DateTime YearsFrom(DateTime date)\r\n            => date.AddYears(6);\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Seven\r\n    {\r\n        /// <summary>\r\n        /// 7 seconds from now\r\n        /// </summary>\r\n        public static DateTime Seconds\r\n            => DateTime.UtcNow.AddSeconds(7);\r\n\r\n        /// <summary>\r\n        /// 7 seconds from the provided date\r\n        /// </summary>\r\n        public static DateTime SecondsFrom(DateTime date)\r\n            => date.AddSeconds(7);\r\n\r\n        /// <summary>\r\n        /// 7 minutes from now\r\n        /// </summary>\r\n        public static DateTime Minutes\r\n            => DateTime.UtcNow.AddMinutes(7);\r\n\r\n        /// <summary>\r\n        /// 7 minutes from the provided date\r\n        /// </summary>\r\n        public static DateTime MinutesFrom(DateTime date)\r\n            => date.AddMinutes(7);\r\n\r\n        /// <summary>\r\n        /// 7 hours from now\r\n        /// </summary>\r\n        public static DateTime Hours\r\n            => DateTime.UtcNow.AddHours(7);\r\n\r\n        /// <summary>\r\n        /// 7 hours from the provided date\r\n        /// </summary>\r\n        public static DateTime HoursFrom(DateTime date)\r\n            => date.AddHours(7);\r\n\r\n        /// <summary>\r\n        /// 7 days from now\r\n        /// </summary>\r\n        public static DateTime Days\r\n            => DateTime.UtcNow.AddDays(7);\r\n\r\n        /// <summary>\r\n        /// 7 days from the provided date\r\n        /// </summary>\r\n        public static DateTime DaysFrom(DateTime date)\r\n            => date.AddDays(7);\r\n\r\n        /// <summary>\r\n        /// 7 weeks from now\r\n        /// </summary>\r\n        public static DateTime Weeks\r\n            => DateTime.UtcNow.AddDays(49);\r\n\r\n        /// <summary>\r\n        /// 7 weeks from the provided date\r\n        /// </summary>\r\n        public static DateTime WeeksFrom(DateTime date)\r\n            => date.AddDays(49);\r\n\r\n        /// <summary>\r\n        /// 7 months from now\r\n        /// </summary>\r\n        public static DateTime Months\r\n            => DateTime.UtcNow.AddMonths(7);\r\n\r\n        /// <summary>\r\n        /// 7 months from the provided date\r\n        /// </summary>\r\n        public static DateTime MonthsFrom(DateTime date)\r\n            => date.AddMonths(7);\r\n\r\n        /// <summary>\r\n        /// 7 years from now\r\n        /// </summary>\r\n        public static DateTime Years\r\n            => DateTime.UtcNow.AddYears(7);\r\n\r\n        /// <summary>\r\n        /// 7 years from the provided date\r\n        /// </summary>\r\n        public static DateTime YearsFrom(DateTime date)\r\n            => date.AddYears(7);\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Eight\r\n    {\r\n        /// <summary>\r\n        /// 8 seconds from now\r\n        /// </summary>\r\n        public static DateTime Seconds\r\n            => DateTime.UtcNow.AddSeconds(8);\r\n\r\n        /// <summary>\r\n        /// 8 seconds from the provided date\r\n        /// </summary>\r\n        public static DateTime SecondsFrom(DateTime date)\r\n            => date.AddSeconds(8);\r\n\r\n        /// <summary>\r\n        /// 8 minutes from now\r\n        /// </summary>\r\n        public static DateTime Minutes\r\n            => DateTime.UtcNow.AddMinutes(8);\r\n\r\n        /// <summary>\r\n        /// 8 minutes from the provided date\r\n        /// </summary>\r\n        public static DateTime MinutesFrom(DateTime date)\r\n            => date.AddMinutes(8);\r\n\r\n        /// <summary>\r\n        /// 8 hours from now\r\n        /// </summary>\r\n        public static DateTime Hours\r\n            => DateTime.UtcNow.AddHours(8);\r\n\r\n        /// <summary>\r\n        /// 8 hours from the provided date\r\n        /// </summary>\r\n        public static DateTime HoursFrom(DateTime date)\r\n            => date.AddHours(8);\r\n\r\n        /// <summary>\r\n        /// 8 days from now\r\n        /// </summary>\r\n        public static DateTime Days\r\n            => DateTime.UtcNow.AddDays(8);\r\n\r\n        /// <summary>\r\n        /// 8 days from the provided date\r\n        /// </summary>\r\n        public static DateTime DaysFrom(DateTime date)\r\n            => date.AddDays(8);\r\n\r\n        /// <summary>\r\n        /// 8 weeks from now\r\n        /// </summary>\r\n        public static DateTime Weeks\r\n            => DateTime.UtcNow.AddDays(56);\r\n\r\n        /// <summary>\r\n        /// 8 weeks from the provided date\r\n        /// </summary>\r\n        public static DateTime WeeksFrom(DateTime date)\r\n            => date.AddDays(56);\r\n\r\n        /// <summary>\r\n        /// 8 months from now\r\n        /// </summary>\r\n        public static DateTime Months\r\n            => DateTime.UtcNow.AddMonths(8);\r\n\r\n        /// <summary>\r\n        /// 8 months from the provided date\r\n        /// </summary>\r\n        public static DateTime MonthsFrom(DateTime date)\r\n            => date.AddMonths(8);\r\n\r\n        /// <summary>\r\n        /// 8 years from now\r\n        /// </summary>\r\n        public static DateTime Years\r\n            => DateTime.UtcNow.AddYears(8);\r\n\r\n        /// <summary>\r\n        /// 8 years from the provided date\r\n        /// </summary>\r\n        public static DateTime YearsFrom(DateTime date)\r\n            => date.AddYears(8);\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Nine\r\n    {\r\n        /// <summary>\r\n        /// 9 seconds from now\r\n        /// </summary>\r\n        public static DateTime Seconds\r\n            => DateTime.UtcNow.AddSeconds(9);\r\n\r\n        /// <summary>\r\n        /// 9 seconds from the provided date\r\n        /// </summary>\r\n        public static DateTime SecondsFrom(DateTime date)\r\n            => date.AddSeconds(9);\r\n\r\n        /// <summary>\r\n        /// 9 minutes from now\r\n        /// </summary>\r\n        public static DateTime Minutes\r\n            => DateTime.UtcNow.AddMinutes(9);\r\n\r\n        /// <summary>\r\n        /// 9 minutes from the provided date\r\n        /// </summary>\r\n        public static DateTime MinutesFrom(DateTime date)\r\n            => date.AddMinutes(9);\r\n\r\n        /// <summary>\r\n        /// 9 hours from now\r\n        /// </summary>\r\n        public static DateTime Hours\r\n            => DateTime.UtcNow.AddHours(9);\r\n\r\n        /// <summary>\r\n        /// 9 hours from the provided date\r\n        /// </summary>\r\n        public static DateTime HoursFrom(DateTime date)\r\n            => date.AddHours(9);\r\n\r\n        /// <summary>\r\n        /// 9 days from now\r\n        /// </summary>\r\n        public static DateTime Days\r\n            => DateTime.UtcNow.AddDays(9);\r\n\r\n        /// <summary>\r\n        /// 9 days from the provided date\r\n        /// </summary>\r\n        public static DateTime DaysFrom(DateTime date)\r\n            => date.AddDays(9);\r\n\r\n        /// <summary>\r\n        /// 9 weeks from now\r\n        /// </summary>\r\n        public static DateTime Weeks\r\n            => DateTime.UtcNow.AddDays(63);\r\n\r\n        /// <summary>\r\n        /// 9 weeks from the provided date\r\n        /// </summary>\r\n        public static DateTime WeeksFrom(DateTime date)\r\n            => date.AddDays(63);\r\n\r\n        /// <summary>\r\n        /// 9 months from now\r\n        /// </summary>\r\n        public static DateTime Months\r\n            => DateTime.UtcNow.AddMonths(9);\r\n\r\n        /// <summary>\r\n        /// 9 months from the provided date\r\n        /// </summary>\r\n        public static DateTime MonthsFrom(DateTime date)\r\n            => date.AddMonths(9);\r\n\r\n        /// <summary>\r\n        /// 9 years from now\r\n        /// </summary>\r\n        public static DateTime Years\r\n            => DateTime.UtcNow.AddYears(9);\r\n\r\n        /// <summary>\r\n        /// 9 years from the provided date\r\n        /// </summary>\r\n        public static DateTime YearsFrom(DateTime date)\r\n            => date.AddYears(9);\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Ten\r\n    {\r\n        /// <summary>\r\n        /// 10 seconds from now\r\n        /// </summary>\r\n        public static DateTime Seconds\r\n            => DateTime.UtcNow.AddSeconds(10);\r\n\r\n        /// <summary>\r\n        /// 10 seconds from the provided date\r\n        /// </summary>\r\n        public static DateTime SecondsFrom(DateTime date)\r\n            => date.AddSeconds(10);\r\n\r\n        /// <summary>\r\n        /// 10 minutes from now\r\n        /// </summary>\r\n        public static DateTime Minutes\r\n            => DateTime.UtcNow.AddMinutes(10);\r\n\r\n        /// <summary>\r\n        /// 10 minutes from the provided date\r\n        /// </summary>\r\n        public static DateTime MinutesFrom(DateTime date)\r\n            => date.AddMinutes(10);\r\n\r\n        /// <summary>\r\n        /// 10 hours from now\r\n        /// </summary>\r\n        public static DateTime Hours\r\n            => DateTime.UtcNow.AddHours(10);\r\n\r\n        /// <summary>\r\n        /// 10 hours from the provided date\r\n        /// </summary>\r\n        public static DateTime HoursFrom(DateTime date)\r\n            => date.AddHours(10);\r\n\r\n        /// <summary>\r\n        /// 10 days from now\r\n        /// </summary>\r\n        public static DateTime Days\r\n            => DateTime.UtcNow.AddDays(10);\r\n\r\n        /// <summary>\r\n        /// 10 days from the provided date\r\n        /// </summary>\r\n        public static DateTime DaysFrom(DateTime date)\r\n            => date.AddDays(10);\r\n\r\n        /// <summary>\r\n        /// 10 weeks from now\r\n        /// </summary>\r\n        public static DateTime Weeks\r\n            => DateTime.UtcNow.AddDays(70);\r\n\r\n        /// <summary>\r\n        /// 10 weeks from the provided date\r\n        /// </summary>\r\n        public static DateTime WeeksFrom(DateTime date)\r\n            => date.AddDays(70);\r\n\r\n        /// <summary>\r\n        /// 10 months from now\r\n        /// </summary>\r\n        public static DateTime Months\r\n            => DateTime.UtcNow.AddMonths(10);\r\n\r\n        /// <summary>\r\n        /// 10 months from the provided date\r\n        /// </summary>\r\n        public static DateTime MonthsFrom(DateTime date)\r\n            => date.AddMonths(10);\r\n\r\n        /// <summary>\r\n        /// 10 years from now\r\n        /// </summary>\r\n        public static DateTime Years\r\n            => DateTime.UtcNow.AddYears(10);\r\n\r\n        /// <summary>\r\n        /// 10 years from the provided date\r\n        /// </summary>\r\n        public static DateTime YearsFrom(DateTime date)\r\n            => date.AddYears(10);\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/Humanizer/FluentDate/In.SomeTimeFrom.tt",
    "content": "﻿<#@ template debug=\"true\" hostSpecific=\"true\" culture=\"en-US\"#>\n<#@ output extension=\".cs\" #>\n<#@ Assembly Name=\"System.Core\" #>\n<#@ Assembly Name=\"System.Globalization\" #>\n<#@ Assembly Name=\"System.Windows.Forms\" #>\n<#@ assembly name=\"$(TargetPath)\" #>\n<#@ import namespace=\"Humanizer\" #>\nnamespace Humanizer;\n\n/// <summary>\n/// </summary>\npublic partial class In\n{\n<#for (var i = 1; i <= 10; i++){\n    var plural = i > 1 ? \"s\" : \"\";\n    var second = \"Second\" + plural;\n    var minute = \"Minute\" + plural;\n    var hour = \"Hour\" + plural;\n    var day = \"Day\" + plural;\n    var week = \"Week\" + plural;\n    var month = \"Month\" + plural;\n    var year = \"Year\" + plural;\n#>\n    /// <summary>\n    /// </summary>\n    public static class <#= i.ToWords().Dehumanize() #>\n    {\n        /// <summary>\n        /// <#= i #> seconds from now\n        /// </summary>\n        public static DateTime <#= second #>\n            => DateTime.UtcNow.AddSeconds(<#= i #>);\n\n        /// <summary>\n        /// <#= i #> seconds from the provided date\n        /// </summary>\n        public static DateTime <#= second #>From(DateTime date)\n            => date.AddSeconds(<#= i #>);\n\n        /// <summary>\n        /// <#= i #> minutes from now\n        /// </summary>\n        public static DateTime <#= minute #>\n            => DateTime.UtcNow.AddMinutes(<#= i #>);\n\n        /// <summary>\n        /// <#= i #> minutes from the provided date\n        /// </summary>\n        public static DateTime <#= minute #>From(DateTime date)\n            => date.AddMinutes(<#= i #>);\n\n        /// <summary>\n        /// <#= i #> hours from now\n        /// </summary>\n        public static DateTime <#= hour #>\n            => DateTime.UtcNow.AddHours(<#= i #>);\n\n        /// <summary>\n        /// <#= i #> hours from the provided date\n        /// </summary>\n        public static DateTime <#= hour #>From(DateTime date)\n            => date.AddHours(<#= i #>);\n\n        /// <summary>\n        /// <#= i #> days from now\n        /// </summary>\n        public static DateTime <#= day #>\n            => DateTime.UtcNow.AddDays(<#= i #>);\n\n        /// <summary>\n        /// <#= i #> days from the provided date\n        /// </summary>\n        public static DateTime <#= day #>From(DateTime date)\n            => date.AddDays(<#= i #>);\n\n        /// <summary>\n        /// <#= i #> weeks from now\n        /// </summary>\n        public static DateTime <#= week #>\n            => DateTime.UtcNow.AddDays(<#= i * 7 #>);\n\n        /// <summary>\n        /// <#= i #> weeks from the provided date\n        /// </summary>\n        public static DateTime <#= week #>From(DateTime date)\n            => date.AddDays(<#= i * 7 #>);\n\n        /// <summary>\n        /// <#= i #> months from now\n        /// </summary>\n        public static DateTime <#= month #>\n            => DateTime.UtcNow.AddMonths(<#= i #>);\n\n        /// <summary>\n        /// <#= i #> months from the provided date\n        /// </summary>\n        public static DateTime <#= month #>From(DateTime date)\n            => date.AddMonths(<#= i #>);\n\n        /// <summary>\n        /// <#= i #> years from now\n        /// </summary>\n        public static DateTime <#= year #>\n            => DateTime.UtcNow.AddYears(<#= i #>);\n\n        /// <summary>\n        /// <#= i #> years from the provided date\n        /// </summary>\n        public static DateTime <#= year #>From(DateTime date)\n            => date.AddYears(<#= i #>);\n    }\n\n<#}#>\n}"
  },
  {
    "path": "src/Humanizer/FluentDate/In.cs",
    "content": "﻿namespace Humanizer;\r\n\r\npublic partial class In\r\n{\r\n    /// <summary>\r\n    /// Returns the first of January of the provided year\r\n    /// </summary>\r\n    public static DateTime TheYear(int year) =>\r\n        new(year, 1, 1);\r\n}"
  },
  {
    "path": "src/Humanizer/FluentDate/InDate.Months.cs",
    "content": "﻿\r\n#if NET6_0_OR_GREATER\r\nnamespace Humanizer;\r\n\r\npublic partial class InDate\r\n{\r\n    /// <summary>\r\n    /// Returns 1st of January of the current year\r\n    /// </summary>\r\n    public static DateOnly January\r\n        => new(DateTime.UtcNow.Year, 1, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of January of the year passed in\r\n    /// </summary>\r\n    public static DateOnly JanuaryOf(int year)\r\n        => new(year, 1, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of February of the current year\r\n    /// </summary>\r\n    public static DateOnly February\r\n        => new(DateTime.UtcNow.Year, 2, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of February of the year passed in\r\n    /// </summary>\r\n    public static DateOnly FebruaryOf(int year)\r\n        => new(year, 2, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of March of the current year\r\n    /// </summary>\r\n    public static DateOnly March\r\n        => new(DateTime.UtcNow.Year, 3, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of March of the year passed in\r\n    /// </summary>\r\n    public static DateOnly MarchOf(int year)\r\n        => new(year, 3, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of April of the current year\r\n    /// </summary>\r\n    public static DateOnly April\r\n        => new(DateTime.UtcNow.Year, 4, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of April of the year passed in\r\n    /// </summary>\r\n    public static DateOnly AprilOf(int year)\r\n        => new(year, 4, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of May of the current year\r\n    /// </summary>\r\n    public static DateOnly May\r\n        => new(DateTime.UtcNow.Year, 5, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of May of the year passed in\r\n    /// </summary>\r\n    public static DateOnly MayOf(int year)\r\n        => new(year, 5, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of June of the current year\r\n    /// </summary>\r\n    public static DateOnly June\r\n        => new(DateTime.UtcNow.Year, 6, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of June of the year passed in\r\n    /// </summary>\r\n    public static DateOnly JuneOf(int year)\r\n        => new(year, 6, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of July of the current year\r\n    /// </summary>\r\n    public static DateOnly July\r\n        => new(DateTime.UtcNow.Year, 7, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of July of the year passed in\r\n    /// </summary>\r\n    public static DateOnly JulyOf(int year)\r\n        => new(year, 7, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of August of the current year\r\n    /// </summary>\r\n    public static DateOnly August\r\n        => new(DateTime.UtcNow.Year, 8, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of August of the year passed in\r\n    /// </summary>\r\n    public static DateOnly AugustOf(int year)\r\n        => new(year, 8, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of September of the current year\r\n    /// </summary>\r\n    public static DateOnly September\r\n        => new(DateTime.UtcNow.Year, 9, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of September of the year passed in\r\n    /// </summary>\r\n    public static DateOnly SeptemberOf(int year)\r\n        => new(year, 9, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of October of the current year\r\n    /// </summary>\r\n    public static DateOnly October\r\n        => new(DateTime.UtcNow.Year, 10, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of October of the year passed in\r\n    /// </summary>\r\n    public static DateOnly OctoberOf(int year)\r\n        => new(year, 10, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of November of the current year\r\n    /// </summary>\r\n    public static DateOnly November\r\n        => new(DateTime.UtcNow.Year, 11, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of November of the year passed in\r\n    /// </summary>\r\n    public static DateOnly NovemberOf(int year)\r\n        => new(year, 11, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of December of the current year\r\n    /// </summary>\r\n    public static DateOnly December\r\n        => new(DateTime.UtcNow.Year, 12, 1);\r\n\r\n    /// <summary>\r\n    /// Returns 1st of December of the year passed in\r\n    /// </summary>\r\n    public static DateOnly DecemberOf(int year)\r\n        => new(year, 12, 1);\r\n\r\n}\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/FluentDate/InDate.Months.tt",
    "content": "﻿<#@ template debug=\"true\" hostSpecific=\"true\" #>\n<#@ output extension=\".cs\" #>\n<#@ Assembly Name=\"System.Core\" #>\n<#@ Assembly Name=\"System.Windows.Forms\" #>\n<#@ import namespace=\"System\" #>\n#if NET6_0_OR_GREATER\nnamespace Humanizer;\n\npublic partial class InDate\n{\n<#var now = DateTime.Now;\nfor (var i = 0; i < 12; i++){\n    var monthName = new DateTime(now.Year, i + 1, 1).ToString(\"MMMM\");\n#>\n    /// <summary>\n    /// Returns 1st of <#= monthName #> of the current year\n    /// </summary>\n    public static DateOnly <#= monthName #>\n        => new(DateTime.UtcNow.Year, <#= i + 1 #>, 1);\n\n    /// <summary>\n    /// Returns 1st of <#= monthName #> of the year passed in\n    /// </summary>\n    public static DateOnly <#= monthName#>Of(int year)\n        => new(year, <#= i + 1 #>, 1);\n\n<#\n}\n\n#>\n}\n#endif"
  },
  {
    "path": "src/Humanizer/FluentDate/InDate.SomeTimeFrom.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// </summary>\r\npublic partial class InDate\r\n{\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class One\r\n    {\r\n        /// <summary>\r\n        /// 1 days from now\r\n        /// </summary>\r\n        public static DateOnly Day\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(1));\r\n\r\n        /// <summary>\r\n        /// 1 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DayFrom(DateOnly date)\r\n            => date.AddDays(1);\r\n\r\n        /// <summary>\r\n        /// 1 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DayFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(1));\r\n\r\n        /// <summary>\r\n        /// 1 weeks from now\r\n        /// </summary>\r\n        public static DateOnly Week\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(7));\r\n\r\n        /// <summary>\r\n        /// 1 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeekFrom(DateOnly date)\r\n            => date.AddDays(7);\r\n\r\n        /// <summary>\r\n        /// 1 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeekFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(7));\r\n\r\n        /// <summary>\r\n        /// 1 months from now\r\n        /// </summary>\r\n        public static DateOnly Month\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddMonths(1));\r\n\r\n        /// <summary>\r\n        /// 1 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthFrom(DateOnly date)\r\n            => date.AddMonths(1);\r\n\r\n        /// <summary>\r\n        /// 1 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddMonths(1));\r\n\r\n        /// <summary>\r\n        /// 1 years from now\r\n        /// </summary>\r\n        public static DateOnly Year\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddYears(1));\r\n\r\n        /// <summary>\r\n        /// 1 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearFrom(DateOnly date)\r\n            => date.AddYears(1);\r\n\r\n        /// <summary>\r\n        /// 1 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddYears(1));\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Two\r\n    {\r\n        /// <summary>\r\n        /// 2 days from now\r\n        /// </summary>\r\n        public static DateOnly Days\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(2));\r\n\r\n        /// <summary>\r\n        /// 2 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateOnly date)\r\n            => date.AddDays(2);\r\n\r\n        /// <summary>\r\n        /// 2 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(2));\r\n\r\n        /// <summary>\r\n        /// 2 weeks from now\r\n        /// </summary>\r\n        public static DateOnly Weeks\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(14));\r\n\r\n        /// <summary>\r\n        /// 2 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateOnly date)\r\n            => date.AddDays(14);\r\n\r\n        /// <summary>\r\n        /// 2 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(14));\r\n\r\n        /// <summary>\r\n        /// 2 months from now\r\n        /// </summary>\r\n        public static DateOnly Months\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddMonths(2));\r\n\r\n        /// <summary>\r\n        /// 2 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateOnly date)\r\n            => date.AddMonths(2);\r\n\r\n        /// <summary>\r\n        /// 2 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddMonths(2));\r\n\r\n        /// <summary>\r\n        /// 2 years from now\r\n        /// </summary>\r\n        public static DateOnly Years\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddYears(2));\r\n\r\n        /// <summary>\r\n        /// 2 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateOnly date)\r\n            => date.AddYears(2);\r\n\r\n        /// <summary>\r\n        /// 2 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddYears(2));\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Three\r\n    {\r\n        /// <summary>\r\n        /// 3 days from now\r\n        /// </summary>\r\n        public static DateOnly Days\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(3));\r\n\r\n        /// <summary>\r\n        /// 3 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateOnly date)\r\n            => date.AddDays(3);\r\n\r\n        /// <summary>\r\n        /// 3 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(3));\r\n\r\n        /// <summary>\r\n        /// 3 weeks from now\r\n        /// </summary>\r\n        public static DateOnly Weeks\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(21));\r\n\r\n        /// <summary>\r\n        /// 3 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateOnly date)\r\n            => date.AddDays(21);\r\n\r\n        /// <summary>\r\n        /// 3 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(21));\r\n\r\n        /// <summary>\r\n        /// 3 months from now\r\n        /// </summary>\r\n        public static DateOnly Months\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddMonths(3));\r\n\r\n        /// <summary>\r\n        /// 3 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateOnly date)\r\n            => date.AddMonths(3);\r\n\r\n        /// <summary>\r\n        /// 3 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddMonths(3));\r\n\r\n        /// <summary>\r\n        /// 3 years from now\r\n        /// </summary>\r\n        public static DateOnly Years\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddYears(3));\r\n\r\n        /// <summary>\r\n        /// 3 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateOnly date)\r\n            => date.AddYears(3);\r\n\r\n        /// <summary>\r\n        /// 3 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddYears(3));\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Four\r\n    {\r\n        /// <summary>\r\n        /// 4 days from now\r\n        /// </summary>\r\n        public static DateOnly Days\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(4));\r\n\r\n        /// <summary>\r\n        /// 4 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateOnly date)\r\n            => date.AddDays(4);\r\n\r\n        /// <summary>\r\n        /// 4 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(4));\r\n\r\n        /// <summary>\r\n        /// 4 weeks from now\r\n        /// </summary>\r\n        public static DateOnly Weeks\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(28));\r\n\r\n        /// <summary>\r\n        /// 4 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateOnly date)\r\n            => date.AddDays(28);\r\n\r\n        /// <summary>\r\n        /// 4 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(28));\r\n\r\n        /// <summary>\r\n        /// 4 months from now\r\n        /// </summary>\r\n        public static DateOnly Months\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddMonths(4));\r\n\r\n        /// <summary>\r\n        /// 4 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateOnly date)\r\n            => date.AddMonths(4);\r\n\r\n        /// <summary>\r\n        /// 4 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddMonths(4));\r\n\r\n        /// <summary>\r\n        /// 4 years from now\r\n        /// </summary>\r\n        public static DateOnly Years\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddYears(4));\r\n\r\n        /// <summary>\r\n        /// 4 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateOnly date)\r\n            => date.AddYears(4);\r\n\r\n        /// <summary>\r\n        /// 4 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddYears(4));\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Five\r\n    {\r\n        /// <summary>\r\n        /// 5 days from now\r\n        /// </summary>\r\n        public static DateOnly Days\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(5));\r\n\r\n        /// <summary>\r\n        /// 5 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateOnly date)\r\n            => date.AddDays(5);\r\n\r\n        /// <summary>\r\n        /// 5 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(5));\r\n\r\n        /// <summary>\r\n        /// 5 weeks from now\r\n        /// </summary>\r\n        public static DateOnly Weeks\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(35));\r\n\r\n        /// <summary>\r\n        /// 5 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateOnly date)\r\n            => date.AddDays(35);\r\n\r\n        /// <summary>\r\n        /// 5 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(35));\r\n\r\n        /// <summary>\r\n        /// 5 months from now\r\n        /// </summary>\r\n        public static DateOnly Months\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddMonths(5));\r\n\r\n        /// <summary>\r\n        /// 5 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateOnly date)\r\n            => date.AddMonths(5);\r\n\r\n        /// <summary>\r\n        /// 5 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddMonths(5));\r\n\r\n        /// <summary>\r\n        /// 5 years from now\r\n        /// </summary>\r\n        public static DateOnly Years\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddYears(5));\r\n\r\n        /// <summary>\r\n        /// 5 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateOnly date)\r\n            => date.AddYears(5);\r\n\r\n        /// <summary>\r\n        /// 5 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddYears(5));\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Six\r\n    {\r\n        /// <summary>\r\n        /// 6 days from now\r\n        /// </summary>\r\n        public static DateOnly Days\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(6));\r\n\r\n        /// <summary>\r\n        /// 6 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateOnly date)\r\n            => date.AddDays(6);\r\n\r\n        /// <summary>\r\n        /// 6 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(6));\r\n\r\n        /// <summary>\r\n        /// 6 weeks from now\r\n        /// </summary>\r\n        public static DateOnly Weeks\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(42));\r\n\r\n        /// <summary>\r\n        /// 6 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateOnly date)\r\n            => date.AddDays(42);\r\n\r\n        /// <summary>\r\n        /// 6 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(42));\r\n\r\n        /// <summary>\r\n        /// 6 months from now\r\n        /// </summary>\r\n        public static DateOnly Months\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddMonths(6));\r\n\r\n        /// <summary>\r\n        /// 6 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateOnly date)\r\n            => date.AddMonths(6);\r\n\r\n        /// <summary>\r\n        /// 6 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddMonths(6));\r\n\r\n        /// <summary>\r\n        /// 6 years from now\r\n        /// </summary>\r\n        public static DateOnly Years\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddYears(6));\r\n\r\n        /// <summary>\r\n        /// 6 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateOnly date)\r\n            => date.AddYears(6);\r\n\r\n        /// <summary>\r\n        /// 6 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddYears(6));\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Seven\r\n    {\r\n        /// <summary>\r\n        /// 7 days from now\r\n        /// </summary>\r\n        public static DateOnly Days\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(7));\r\n\r\n        /// <summary>\r\n        /// 7 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateOnly date)\r\n            => date.AddDays(7);\r\n\r\n        /// <summary>\r\n        /// 7 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(7));\r\n\r\n        /// <summary>\r\n        /// 7 weeks from now\r\n        /// </summary>\r\n        public static DateOnly Weeks\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(49));\r\n\r\n        /// <summary>\r\n        /// 7 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateOnly date)\r\n            => date.AddDays(49);\r\n\r\n        /// <summary>\r\n        /// 7 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(49));\r\n\r\n        /// <summary>\r\n        /// 7 months from now\r\n        /// </summary>\r\n        public static DateOnly Months\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddMonths(7));\r\n\r\n        /// <summary>\r\n        /// 7 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateOnly date)\r\n            => date.AddMonths(7);\r\n\r\n        /// <summary>\r\n        /// 7 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddMonths(7));\r\n\r\n        /// <summary>\r\n        /// 7 years from now\r\n        /// </summary>\r\n        public static DateOnly Years\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddYears(7));\r\n\r\n        /// <summary>\r\n        /// 7 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateOnly date)\r\n            => date.AddYears(7);\r\n\r\n        /// <summary>\r\n        /// 7 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddYears(7));\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Eight\r\n    {\r\n        /// <summary>\r\n        /// 8 days from now\r\n        /// </summary>\r\n        public static DateOnly Days\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(8));\r\n\r\n        /// <summary>\r\n        /// 8 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateOnly date)\r\n            => date.AddDays(8);\r\n\r\n        /// <summary>\r\n        /// 8 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(8));\r\n\r\n        /// <summary>\r\n        /// 8 weeks from now\r\n        /// </summary>\r\n        public static DateOnly Weeks\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(56));\r\n\r\n        /// <summary>\r\n        /// 8 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateOnly date)\r\n            => date.AddDays(56);\r\n\r\n        /// <summary>\r\n        /// 8 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(56));\r\n\r\n        /// <summary>\r\n        /// 8 months from now\r\n        /// </summary>\r\n        public static DateOnly Months\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddMonths(8));\r\n\r\n        /// <summary>\r\n        /// 8 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateOnly date)\r\n            => date.AddMonths(8);\r\n\r\n        /// <summary>\r\n        /// 8 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddMonths(8));\r\n\r\n        /// <summary>\r\n        /// 8 years from now\r\n        /// </summary>\r\n        public static DateOnly Years\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddYears(8));\r\n\r\n        /// <summary>\r\n        /// 8 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateOnly date)\r\n            => date.AddYears(8);\r\n\r\n        /// <summary>\r\n        /// 8 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddYears(8));\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Nine\r\n    {\r\n        /// <summary>\r\n        /// 9 days from now\r\n        /// </summary>\r\n        public static DateOnly Days\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(9));\r\n\r\n        /// <summary>\r\n        /// 9 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateOnly date)\r\n            => date.AddDays(9);\r\n\r\n        /// <summary>\r\n        /// 9 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(9));\r\n\r\n        /// <summary>\r\n        /// 9 weeks from now\r\n        /// </summary>\r\n        public static DateOnly Weeks\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(63));\r\n\r\n        /// <summary>\r\n        /// 9 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateOnly date)\r\n            => date.AddDays(63);\r\n\r\n        /// <summary>\r\n        /// 9 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(63));\r\n\r\n        /// <summary>\r\n        /// 9 months from now\r\n        /// </summary>\r\n        public static DateOnly Months\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddMonths(9));\r\n\r\n        /// <summary>\r\n        /// 9 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateOnly date)\r\n            => date.AddMonths(9);\r\n\r\n        /// <summary>\r\n        /// 9 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddMonths(9));\r\n\r\n        /// <summary>\r\n        /// 9 years from now\r\n        /// </summary>\r\n        public static DateOnly Years\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddYears(9));\r\n\r\n        /// <summary>\r\n        /// 9 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateOnly date)\r\n            => date.AddYears(9);\r\n\r\n        /// <summary>\r\n        /// 9 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddYears(9));\r\n    }\r\n\r\n    /// <summary>\r\n    /// </summary>\r\n    public static class Ten\r\n    {\r\n        /// <summary>\r\n        /// 10 days from now\r\n        /// </summary>\r\n        public static DateOnly Days\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(10));\r\n\r\n        /// <summary>\r\n        /// 10 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateOnly date)\r\n            => date.AddDays(10);\r\n\r\n        /// <summary>\r\n        /// 10 days from the provided date\r\n        /// </summary>\r\n        public static DateOnly DaysFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(10));\r\n\r\n        /// <summary>\r\n        /// 10 weeks from now\r\n        /// </summary>\r\n        public static DateOnly Weeks\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(70));\r\n\r\n        /// <summary>\r\n        /// 10 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateOnly date)\r\n            => date.AddDays(70);\r\n\r\n        /// <summary>\r\n        /// 10 weeks from the provided date\r\n        /// </summary>\r\n        public static DateOnly WeeksFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddDays(70));\r\n\r\n        /// <summary>\r\n        /// 10 months from now\r\n        /// </summary>\r\n        public static DateOnly Months\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddMonths(10));\r\n\r\n        /// <summary>\r\n        /// 10 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateOnly date)\r\n            => date.AddMonths(10);\r\n\r\n        /// <summary>\r\n        /// 10 months from the provided date\r\n        /// </summary>\r\n        public static DateOnly MonthsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddMonths(10));\r\n\r\n        /// <summary>\r\n        /// 10 years from now\r\n        /// </summary>\r\n        public static DateOnly Years\r\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddYears(10));\r\n\r\n        /// <summary>\r\n        /// 10 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateOnly date)\r\n            => date.AddYears(10);\r\n\r\n        /// <summary>\r\n        /// 10 years from the provided date\r\n        /// </summary>\r\n        public static DateOnly YearsFrom(DateTime date)\r\n            => DateOnly.FromDateTime(date.AddYears(10));\r\n    }\r\n\r\n}\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/FluentDate/InDate.SomeTimeFrom.tt",
    "content": "﻿<#@ template debug=\"true\" hostSpecific=\"true\" culture=\"en-US\"#>\n<#@ output extension=\".cs\" #>\n<#@ Assembly Name=\"System.Core\" #>\n<#@ Assembly Name=\"System.Globalization\" #>\n<#@ Assembly Name=\"System.Windows.Forms\" #>\n<#@ assembly name=\"$(TargetPath)\" #>\n<#@ import namespace=\"Humanizer\" #>\n#if NET6_0_OR_GREATER\nnamespace Humanizer;\n\n/// <summary>\n/// </summary>\npublic partial class InDate\n{\n<#for (var i = 1; i <= 10; i++){\n    var plural = i > 1 ? \"s\" : \"\";\n\n    var day = \"Day\" + plural;\n    var week = \"Week\" + plural;\n    var month = \"Month\" + plural;\n    var year = \"Year\" + plural;\n#>\n    /// <summary>\n    /// </summary>\n    public static class <#= i.ToWords().Dehumanize() #>\n    {\n        /// <summary>\n        /// <#= i #> days from now\n        /// </summary>\n        public static DateOnly <#= day #>\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(<#= i #>));\n\n        /// <summary>\n        /// <#= i #> days from the provided date\n        /// </summary>\n        public static DateOnly <#= day #>From(DateOnly date)\n            => date.AddDays(<#= i #>);\n\n        /// <summary>\n        /// <#= i #> days from the provided date\n        /// </summary>\n        public static DateOnly <#= day #>From(DateTime date)\n            => DateOnly.FromDateTime(date.AddDays(<#= i #>));\n\n        /// <summary>\n        /// <#= i #> weeks from now\n        /// </summary>\n        public static DateOnly <#= week #>\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddDays(<#= i * 7 #>));\n\n        /// <summary>\n        /// <#= i #> weeks from the provided date\n        /// </summary>\n        public static DateOnly <#= week #>From(DateOnly date)\n            => date.AddDays(<#= i * 7 #>);\n\n        /// <summary>\n        /// <#= i #> weeks from the provided date\n        /// </summary>\n        public static DateOnly <#= week #>From(DateTime date)\n            => DateOnly.FromDateTime(date.AddDays(<#= i * 7 #>));\n\n        /// <summary>\n        /// <#= i #> months from now\n        /// </summary>\n        public static DateOnly <#= month #>\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddMonths(<#= i #>));\n\n        /// <summary>\n        /// <#= i #> months from the provided date\n        /// </summary>\n        public static DateOnly <#= month #>From(DateOnly date)\n            => date.AddMonths(<#= i #>);\n\n        /// <summary>\n        /// <#= i #> months from the provided date\n        /// </summary>\n        public static DateOnly <#= month #>From(DateTime date)\n            => DateOnly.FromDateTime(date.AddMonths(<#= i #>));\n\n        /// <summary>\n        /// <#= i #> years from now\n        /// </summary>\n        public static DateOnly <#= year #>\n            => DateOnly.FromDateTime(DateTime.UtcNow.AddYears(<#= i #>));\n\n        /// <summary>\n        /// <#= i #> years from the provided date\n        /// </summary>\n        public static DateOnly <#= year #>From(DateOnly date)\n            => date.AddYears(<#= i #>);\n\n        /// <summary>\n        /// <#= i #> years from the provided date\n        /// </summary>\n        public static DateOnly <#= year #>From(DateTime date)\n            => DateOnly.FromDateTime(date.AddYears(<#= i #>));\n    }\n\n<#}#>\n}\n#endif"
  },
  {
    "path": "src/Humanizer/FluentDate/InDate.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\nnamespace Humanizer;\r\n\r\npublic partial class InDate\r\n{\r\n    /// <summary>\r\n    /// Returns the first of January of the provided year\r\n    /// </summary>\r\n    public static DateOnly TheYear(int year) =>\r\n        new(year, 1, 1);\r\n}\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/FluentDate/On.Days.cs",
    "content": "﻿namespace Humanizer;\r\n\r\npublic class On\r\n{\r\n    /// <summary>\r\n    /// Provides fluent date accessors for January\r\n    /// </summary>\r\n    public class January\r\n    {\r\n        /// <summary>\r\n        /// The nth day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The(int dayNumber)\r\n            => new(DateTime.Now.Year, 1, dayNumber);\r\n\r\n\r\n        /// <summary>\r\n        /// The 1st day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The1st\r\n            => new(DateTime.Now.Year, 1, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The2nd\r\n            => new(DateTime.Now.Year, 1, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The3rd\r\n            => new(DateTime.Now.Year, 1, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The4th\r\n            => new(DateTime.Now.Year, 1, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The5th\r\n            => new(DateTime.Now.Year, 1, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The6th\r\n            => new(DateTime.Now.Year, 1, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The7th\r\n            => new(DateTime.Now.Year, 1, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The8th\r\n            => new(DateTime.Now.Year, 1, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The9th\r\n            => new(DateTime.Now.Year, 1, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The10th\r\n            => new(DateTime.Now.Year, 1, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The11th\r\n            => new(DateTime.Now.Year, 1, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The12th\r\n            => new(DateTime.Now.Year, 1, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The13th\r\n            => new(DateTime.Now.Year, 1, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The14th\r\n            => new(DateTime.Now.Year, 1, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The15th\r\n            => new(DateTime.Now.Year, 1, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The16th\r\n            => new(DateTime.Now.Year, 1, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The17th\r\n            => new(DateTime.Now.Year, 1, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The18th\r\n            => new(DateTime.Now.Year, 1, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The19th\r\n            => new(DateTime.Now.Year, 1, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The20th\r\n            => new(DateTime.Now.Year, 1, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The21st\r\n            => new(DateTime.Now.Year, 1, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The22nd\r\n            => new(DateTime.Now.Year, 1, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The23rd\r\n            => new(DateTime.Now.Year, 1, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The24th\r\n            => new(DateTime.Now.Year, 1, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The25th\r\n            => new(DateTime.Now.Year, 1, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The26th\r\n            => new(DateTime.Now.Year, 1, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The27th\r\n            => new(DateTime.Now.Year, 1, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The28th\r\n            => new(DateTime.Now.Year, 1, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The29th\r\n            => new(DateTime.Now.Year, 1, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The30th\r\n            => new(DateTime.Now.Year, 1, 30);\r\n\r\n        /// <summary>\r\n        /// The 31st day of January of the current year\r\n        /// </summary>\r\n        public static DateTime The31st\r\n            => new(DateTime.Now.Year, 1, 31);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for February\r\n    /// </summary>\r\n    public class February\r\n    {\r\n        /// <summary>\r\n        /// The nth day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The(int dayNumber)\r\n            => new(DateTime.Now.Year, 2, dayNumber);\r\n\r\n\r\n        /// <summary>\r\n        /// The 1st day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The1st\r\n            => new(DateTime.Now.Year, 2, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The2nd\r\n            => new(DateTime.Now.Year, 2, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The3rd\r\n            => new(DateTime.Now.Year, 2, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The4th\r\n            => new(DateTime.Now.Year, 2, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The5th\r\n            => new(DateTime.Now.Year, 2, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The6th\r\n            => new(DateTime.Now.Year, 2, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The7th\r\n            => new(DateTime.Now.Year, 2, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The8th\r\n            => new(DateTime.Now.Year, 2, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The9th\r\n            => new(DateTime.Now.Year, 2, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The10th\r\n            => new(DateTime.Now.Year, 2, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The11th\r\n            => new(DateTime.Now.Year, 2, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The12th\r\n            => new(DateTime.Now.Year, 2, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The13th\r\n            => new(DateTime.Now.Year, 2, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The14th\r\n            => new(DateTime.Now.Year, 2, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The15th\r\n            => new(DateTime.Now.Year, 2, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The16th\r\n            => new(DateTime.Now.Year, 2, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The17th\r\n            => new(DateTime.Now.Year, 2, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The18th\r\n            => new(DateTime.Now.Year, 2, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The19th\r\n            => new(DateTime.Now.Year, 2, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The20th\r\n            => new(DateTime.Now.Year, 2, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The21st\r\n            => new(DateTime.Now.Year, 2, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The22nd\r\n            => new(DateTime.Now.Year, 2, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The23rd\r\n            => new(DateTime.Now.Year, 2, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The24th\r\n            => new(DateTime.Now.Year, 2, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The25th\r\n            => new(DateTime.Now.Year, 2, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The26th\r\n            => new(DateTime.Now.Year, 2, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The27th\r\n            => new(DateTime.Now.Year, 2, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The28th\r\n            => new(DateTime.Now.Year, 2, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of February of the current year\r\n        /// </summary>\r\n        public static DateTime The29th\r\n            => new(DateTime.Now.Year, 2, 29);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for March\r\n    /// </summary>\r\n    public class March\r\n    {\r\n        /// <summary>\r\n        /// The nth day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The(int dayNumber)\r\n            => new(DateTime.Now.Year, 3, dayNumber);\r\n\r\n\r\n        /// <summary>\r\n        /// The 1st day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The1st\r\n            => new(DateTime.Now.Year, 3, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The2nd\r\n            => new(DateTime.Now.Year, 3, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The3rd\r\n            => new(DateTime.Now.Year, 3, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The4th\r\n            => new(DateTime.Now.Year, 3, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The5th\r\n            => new(DateTime.Now.Year, 3, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The6th\r\n            => new(DateTime.Now.Year, 3, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The7th\r\n            => new(DateTime.Now.Year, 3, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The8th\r\n            => new(DateTime.Now.Year, 3, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The9th\r\n            => new(DateTime.Now.Year, 3, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The10th\r\n            => new(DateTime.Now.Year, 3, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The11th\r\n            => new(DateTime.Now.Year, 3, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The12th\r\n            => new(DateTime.Now.Year, 3, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The13th\r\n            => new(DateTime.Now.Year, 3, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The14th\r\n            => new(DateTime.Now.Year, 3, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The15th\r\n            => new(DateTime.Now.Year, 3, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The16th\r\n            => new(DateTime.Now.Year, 3, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The17th\r\n            => new(DateTime.Now.Year, 3, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The18th\r\n            => new(DateTime.Now.Year, 3, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The19th\r\n            => new(DateTime.Now.Year, 3, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The20th\r\n            => new(DateTime.Now.Year, 3, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The21st\r\n            => new(DateTime.Now.Year, 3, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The22nd\r\n            => new(DateTime.Now.Year, 3, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The23rd\r\n            => new(DateTime.Now.Year, 3, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The24th\r\n            => new(DateTime.Now.Year, 3, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The25th\r\n            => new(DateTime.Now.Year, 3, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The26th\r\n            => new(DateTime.Now.Year, 3, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The27th\r\n            => new(DateTime.Now.Year, 3, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The28th\r\n            => new(DateTime.Now.Year, 3, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The29th\r\n            => new(DateTime.Now.Year, 3, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The30th\r\n            => new(DateTime.Now.Year, 3, 30);\r\n\r\n        /// <summary>\r\n        /// The 31st day of March of the current year\r\n        /// </summary>\r\n        public static DateTime The31st\r\n            => new(DateTime.Now.Year, 3, 31);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for April\r\n    /// </summary>\r\n    public class April\r\n    {\r\n        /// <summary>\r\n        /// The nth day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The(int dayNumber)\r\n            => new(DateTime.Now.Year, 4, dayNumber);\r\n\r\n\r\n        /// <summary>\r\n        /// The 1st day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The1st\r\n            => new(DateTime.Now.Year, 4, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The2nd\r\n            => new(DateTime.Now.Year, 4, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The3rd\r\n            => new(DateTime.Now.Year, 4, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The4th\r\n            => new(DateTime.Now.Year, 4, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The5th\r\n            => new(DateTime.Now.Year, 4, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The6th\r\n            => new(DateTime.Now.Year, 4, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The7th\r\n            => new(DateTime.Now.Year, 4, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The8th\r\n            => new(DateTime.Now.Year, 4, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The9th\r\n            => new(DateTime.Now.Year, 4, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The10th\r\n            => new(DateTime.Now.Year, 4, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The11th\r\n            => new(DateTime.Now.Year, 4, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The12th\r\n            => new(DateTime.Now.Year, 4, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The13th\r\n            => new(DateTime.Now.Year, 4, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The14th\r\n            => new(DateTime.Now.Year, 4, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The15th\r\n            => new(DateTime.Now.Year, 4, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The16th\r\n            => new(DateTime.Now.Year, 4, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The17th\r\n            => new(DateTime.Now.Year, 4, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The18th\r\n            => new(DateTime.Now.Year, 4, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The19th\r\n            => new(DateTime.Now.Year, 4, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The20th\r\n            => new(DateTime.Now.Year, 4, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The21st\r\n            => new(DateTime.Now.Year, 4, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The22nd\r\n            => new(DateTime.Now.Year, 4, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The23rd\r\n            => new(DateTime.Now.Year, 4, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The24th\r\n            => new(DateTime.Now.Year, 4, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The25th\r\n            => new(DateTime.Now.Year, 4, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The26th\r\n            => new(DateTime.Now.Year, 4, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The27th\r\n            => new(DateTime.Now.Year, 4, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The28th\r\n            => new(DateTime.Now.Year, 4, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The29th\r\n            => new(DateTime.Now.Year, 4, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of April of the current year\r\n        /// </summary>\r\n        public static DateTime The30th\r\n            => new(DateTime.Now.Year, 4, 30);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for May\r\n    /// </summary>\r\n    public class May\r\n    {\r\n        /// <summary>\r\n        /// The nth day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The(int dayNumber)\r\n            => new(DateTime.Now.Year, 5, dayNumber);\r\n\r\n\r\n        /// <summary>\r\n        /// The 1st day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The1st\r\n            => new(DateTime.Now.Year, 5, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The2nd\r\n            => new(DateTime.Now.Year, 5, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The3rd\r\n            => new(DateTime.Now.Year, 5, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The4th\r\n            => new(DateTime.Now.Year, 5, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The5th\r\n            => new(DateTime.Now.Year, 5, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The6th\r\n            => new(DateTime.Now.Year, 5, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The7th\r\n            => new(DateTime.Now.Year, 5, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The8th\r\n            => new(DateTime.Now.Year, 5, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The9th\r\n            => new(DateTime.Now.Year, 5, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The10th\r\n            => new(DateTime.Now.Year, 5, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The11th\r\n            => new(DateTime.Now.Year, 5, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The12th\r\n            => new(DateTime.Now.Year, 5, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The13th\r\n            => new(DateTime.Now.Year, 5, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The14th\r\n            => new(DateTime.Now.Year, 5, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The15th\r\n            => new(DateTime.Now.Year, 5, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The16th\r\n            => new(DateTime.Now.Year, 5, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The17th\r\n            => new(DateTime.Now.Year, 5, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The18th\r\n            => new(DateTime.Now.Year, 5, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The19th\r\n            => new(DateTime.Now.Year, 5, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The20th\r\n            => new(DateTime.Now.Year, 5, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The21st\r\n            => new(DateTime.Now.Year, 5, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The22nd\r\n            => new(DateTime.Now.Year, 5, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The23rd\r\n            => new(DateTime.Now.Year, 5, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The24th\r\n            => new(DateTime.Now.Year, 5, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The25th\r\n            => new(DateTime.Now.Year, 5, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The26th\r\n            => new(DateTime.Now.Year, 5, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The27th\r\n            => new(DateTime.Now.Year, 5, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The28th\r\n            => new(DateTime.Now.Year, 5, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The29th\r\n            => new(DateTime.Now.Year, 5, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The30th\r\n            => new(DateTime.Now.Year, 5, 30);\r\n\r\n        /// <summary>\r\n        /// The 31st day of May of the current year\r\n        /// </summary>\r\n        public static DateTime The31st\r\n            => new(DateTime.Now.Year, 5, 31);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for June\r\n    /// </summary>\r\n    public class June\r\n    {\r\n        /// <summary>\r\n        /// The nth day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The(int dayNumber)\r\n            => new(DateTime.Now.Year, 6, dayNumber);\r\n\r\n\r\n        /// <summary>\r\n        /// The 1st day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The1st\r\n            => new(DateTime.Now.Year, 6, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The2nd\r\n            => new(DateTime.Now.Year, 6, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The3rd\r\n            => new(DateTime.Now.Year, 6, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The4th\r\n            => new(DateTime.Now.Year, 6, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The5th\r\n            => new(DateTime.Now.Year, 6, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The6th\r\n            => new(DateTime.Now.Year, 6, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The7th\r\n            => new(DateTime.Now.Year, 6, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The8th\r\n            => new(DateTime.Now.Year, 6, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The9th\r\n            => new(DateTime.Now.Year, 6, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The10th\r\n            => new(DateTime.Now.Year, 6, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The11th\r\n            => new(DateTime.Now.Year, 6, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The12th\r\n            => new(DateTime.Now.Year, 6, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The13th\r\n            => new(DateTime.Now.Year, 6, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The14th\r\n            => new(DateTime.Now.Year, 6, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The15th\r\n            => new(DateTime.Now.Year, 6, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The16th\r\n            => new(DateTime.Now.Year, 6, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The17th\r\n            => new(DateTime.Now.Year, 6, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The18th\r\n            => new(DateTime.Now.Year, 6, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The19th\r\n            => new(DateTime.Now.Year, 6, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The20th\r\n            => new(DateTime.Now.Year, 6, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The21st\r\n            => new(DateTime.Now.Year, 6, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The22nd\r\n            => new(DateTime.Now.Year, 6, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The23rd\r\n            => new(DateTime.Now.Year, 6, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The24th\r\n            => new(DateTime.Now.Year, 6, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The25th\r\n            => new(DateTime.Now.Year, 6, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The26th\r\n            => new(DateTime.Now.Year, 6, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The27th\r\n            => new(DateTime.Now.Year, 6, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The28th\r\n            => new(DateTime.Now.Year, 6, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The29th\r\n            => new(DateTime.Now.Year, 6, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of June of the current year\r\n        /// </summary>\r\n        public static DateTime The30th\r\n            => new(DateTime.Now.Year, 6, 30);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for July\r\n    /// </summary>\r\n    public class July\r\n    {\r\n        /// <summary>\r\n        /// The nth day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The(int dayNumber)\r\n            => new(DateTime.Now.Year, 7, dayNumber);\r\n\r\n\r\n        /// <summary>\r\n        /// The 1st day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The1st\r\n            => new(DateTime.Now.Year, 7, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The2nd\r\n            => new(DateTime.Now.Year, 7, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The3rd\r\n            => new(DateTime.Now.Year, 7, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The4th\r\n            => new(DateTime.Now.Year, 7, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The5th\r\n            => new(DateTime.Now.Year, 7, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The6th\r\n            => new(DateTime.Now.Year, 7, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The7th\r\n            => new(DateTime.Now.Year, 7, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The8th\r\n            => new(DateTime.Now.Year, 7, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The9th\r\n            => new(DateTime.Now.Year, 7, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The10th\r\n            => new(DateTime.Now.Year, 7, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The11th\r\n            => new(DateTime.Now.Year, 7, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The12th\r\n            => new(DateTime.Now.Year, 7, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The13th\r\n            => new(DateTime.Now.Year, 7, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The14th\r\n            => new(DateTime.Now.Year, 7, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The15th\r\n            => new(DateTime.Now.Year, 7, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The16th\r\n            => new(DateTime.Now.Year, 7, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The17th\r\n            => new(DateTime.Now.Year, 7, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The18th\r\n            => new(DateTime.Now.Year, 7, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The19th\r\n            => new(DateTime.Now.Year, 7, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The20th\r\n            => new(DateTime.Now.Year, 7, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The21st\r\n            => new(DateTime.Now.Year, 7, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The22nd\r\n            => new(DateTime.Now.Year, 7, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The23rd\r\n            => new(DateTime.Now.Year, 7, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The24th\r\n            => new(DateTime.Now.Year, 7, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The25th\r\n            => new(DateTime.Now.Year, 7, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The26th\r\n            => new(DateTime.Now.Year, 7, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The27th\r\n            => new(DateTime.Now.Year, 7, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The28th\r\n            => new(DateTime.Now.Year, 7, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The29th\r\n            => new(DateTime.Now.Year, 7, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The30th\r\n            => new(DateTime.Now.Year, 7, 30);\r\n\r\n        /// <summary>\r\n        /// The 31st day of July of the current year\r\n        /// </summary>\r\n        public static DateTime The31st\r\n            => new(DateTime.Now.Year, 7, 31);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for August\r\n    /// </summary>\r\n    public class August\r\n    {\r\n        /// <summary>\r\n        /// The nth day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The(int dayNumber)\r\n            => new(DateTime.Now.Year, 8, dayNumber);\r\n\r\n\r\n        /// <summary>\r\n        /// The 1st day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The1st\r\n            => new(DateTime.Now.Year, 8, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The2nd\r\n            => new(DateTime.Now.Year, 8, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The3rd\r\n            => new(DateTime.Now.Year, 8, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The4th\r\n            => new(DateTime.Now.Year, 8, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The5th\r\n            => new(DateTime.Now.Year, 8, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The6th\r\n            => new(DateTime.Now.Year, 8, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The7th\r\n            => new(DateTime.Now.Year, 8, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The8th\r\n            => new(DateTime.Now.Year, 8, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The9th\r\n            => new(DateTime.Now.Year, 8, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The10th\r\n            => new(DateTime.Now.Year, 8, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The11th\r\n            => new(DateTime.Now.Year, 8, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The12th\r\n            => new(DateTime.Now.Year, 8, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The13th\r\n            => new(DateTime.Now.Year, 8, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The14th\r\n            => new(DateTime.Now.Year, 8, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The15th\r\n            => new(DateTime.Now.Year, 8, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The16th\r\n            => new(DateTime.Now.Year, 8, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The17th\r\n            => new(DateTime.Now.Year, 8, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The18th\r\n            => new(DateTime.Now.Year, 8, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The19th\r\n            => new(DateTime.Now.Year, 8, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The20th\r\n            => new(DateTime.Now.Year, 8, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The21st\r\n            => new(DateTime.Now.Year, 8, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The22nd\r\n            => new(DateTime.Now.Year, 8, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The23rd\r\n            => new(DateTime.Now.Year, 8, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The24th\r\n            => new(DateTime.Now.Year, 8, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The25th\r\n            => new(DateTime.Now.Year, 8, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The26th\r\n            => new(DateTime.Now.Year, 8, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The27th\r\n            => new(DateTime.Now.Year, 8, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The28th\r\n            => new(DateTime.Now.Year, 8, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The29th\r\n            => new(DateTime.Now.Year, 8, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The30th\r\n            => new(DateTime.Now.Year, 8, 30);\r\n\r\n        /// <summary>\r\n        /// The 31st day of August of the current year\r\n        /// </summary>\r\n        public static DateTime The31st\r\n            => new(DateTime.Now.Year, 8, 31);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for September\r\n    /// </summary>\r\n    public class September\r\n    {\r\n        /// <summary>\r\n        /// The nth day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The(int dayNumber)\r\n            => new(DateTime.Now.Year, 9, dayNumber);\r\n\r\n\r\n        /// <summary>\r\n        /// The 1st day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The1st\r\n            => new(DateTime.Now.Year, 9, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The2nd\r\n            => new(DateTime.Now.Year, 9, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The3rd\r\n            => new(DateTime.Now.Year, 9, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The4th\r\n            => new(DateTime.Now.Year, 9, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The5th\r\n            => new(DateTime.Now.Year, 9, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The6th\r\n            => new(DateTime.Now.Year, 9, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The7th\r\n            => new(DateTime.Now.Year, 9, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The8th\r\n            => new(DateTime.Now.Year, 9, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The9th\r\n            => new(DateTime.Now.Year, 9, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The10th\r\n            => new(DateTime.Now.Year, 9, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The11th\r\n            => new(DateTime.Now.Year, 9, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The12th\r\n            => new(DateTime.Now.Year, 9, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The13th\r\n            => new(DateTime.Now.Year, 9, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The14th\r\n            => new(DateTime.Now.Year, 9, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The15th\r\n            => new(DateTime.Now.Year, 9, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The16th\r\n            => new(DateTime.Now.Year, 9, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The17th\r\n            => new(DateTime.Now.Year, 9, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The18th\r\n            => new(DateTime.Now.Year, 9, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The19th\r\n            => new(DateTime.Now.Year, 9, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The20th\r\n            => new(DateTime.Now.Year, 9, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The21st\r\n            => new(DateTime.Now.Year, 9, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The22nd\r\n            => new(DateTime.Now.Year, 9, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The23rd\r\n            => new(DateTime.Now.Year, 9, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The24th\r\n            => new(DateTime.Now.Year, 9, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The25th\r\n            => new(DateTime.Now.Year, 9, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The26th\r\n            => new(DateTime.Now.Year, 9, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The27th\r\n            => new(DateTime.Now.Year, 9, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The28th\r\n            => new(DateTime.Now.Year, 9, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The29th\r\n            => new(DateTime.Now.Year, 9, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of September of the current year\r\n        /// </summary>\r\n        public static DateTime The30th\r\n            => new(DateTime.Now.Year, 9, 30);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for October\r\n    /// </summary>\r\n    public class October\r\n    {\r\n        /// <summary>\r\n        /// The nth day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The(int dayNumber)\r\n            => new(DateTime.Now.Year, 10, dayNumber);\r\n\r\n\r\n        /// <summary>\r\n        /// The 1st day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The1st\r\n            => new(DateTime.Now.Year, 10, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The2nd\r\n            => new(DateTime.Now.Year, 10, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The3rd\r\n            => new(DateTime.Now.Year, 10, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The4th\r\n            => new(DateTime.Now.Year, 10, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The5th\r\n            => new(DateTime.Now.Year, 10, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The6th\r\n            => new(DateTime.Now.Year, 10, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The7th\r\n            => new(DateTime.Now.Year, 10, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The8th\r\n            => new(DateTime.Now.Year, 10, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The9th\r\n            => new(DateTime.Now.Year, 10, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The10th\r\n            => new(DateTime.Now.Year, 10, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The11th\r\n            => new(DateTime.Now.Year, 10, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The12th\r\n            => new(DateTime.Now.Year, 10, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The13th\r\n            => new(DateTime.Now.Year, 10, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The14th\r\n            => new(DateTime.Now.Year, 10, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The15th\r\n            => new(DateTime.Now.Year, 10, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The16th\r\n            => new(DateTime.Now.Year, 10, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The17th\r\n            => new(DateTime.Now.Year, 10, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The18th\r\n            => new(DateTime.Now.Year, 10, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The19th\r\n            => new(DateTime.Now.Year, 10, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The20th\r\n            => new(DateTime.Now.Year, 10, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The21st\r\n            => new(DateTime.Now.Year, 10, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The22nd\r\n            => new(DateTime.Now.Year, 10, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The23rd\r\n            => new(DateTime.Now.Year, 10, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The24th\r\n            => new(DateTime.Now.Year, 10, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The25th\r\n            => new(DateTime.Now.Year, 10, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The26th\r\n            => new(DateTime.Now.Year, 10, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The27th\r\n            => new(DateTime.Now.Year, 10, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The28th\r\n            => new(DateTime.Now.Year, 10, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The29th\r\n            => new(DateTime.Now.Year, 10, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The30th\r\n            => new(DateTime.Now.Year, 10, 30);\r\n\r\n        /// <summary>\r\n        /// The 31st day of October of the current year\r\n        /// </summary>\r\n        public static DateTime The31st\r\n            => new(DateTime.Now.Year, 10, 31);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for November\r\n    /// </summary>\r\n    public class November\r\n    {\r\n        /// <summary>\r\n        /// The nth day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The(int dayNumber)\r\n            => new(DateTime.Now.Year, 11, dayNumber);\r\n\r\n\r\n        /// <summary>\r\n        /// The 1st day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The1st\r\n            => new(DateTime.Now.Year, 11, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The2nd\r\n            => new(DateTime.Now.Year, 11, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The3rd\r\n            => new(DateTime.Now.Year, 11, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The4th\r\n            => new(DateTime.Now.Year, 11, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The5th\r\n            => new(DateTime.Now.Year, 11, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The6th\r\n            => new(DateTime.Now.Year, 11, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The7th\r\n            => new(DateTime.Now.Year, 11, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The8th\r\n            => new(DateTime.Now.Year, 11, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The9th\r\n            => new(DateTime.Now.Year, 11, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The10th\r\n            => new(DateTime.Now.Year, 11, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The11th\r\n            => new(DateTime.Now.Year, 11, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The12th\r\n            => new(DateTime.Now.Year, 11, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The13th\r\n            => new(DateTime.Now.Year, 11, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The14th\r\n            => new(DateTime.Now.Year, 11, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The15th\r\n            => new(DateTime.Now.Year, 11, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The16th\r\n            => new(DateTime.Now.Year, 11, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The17th\r\n            => new(DateTime.Now.Year, 11, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The18th\r\n            => new(DateTime.Now.Year, 11, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The19th\r\n            => new(DateTime.Now.Year, 11, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The20th\r\n            => new(DateTime.Now.Year, 11, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The21st\r\n            => new(DateTime.Now.Year, 11, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The22nd\r\n            => new(DateTime.Now.Year, 11, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The23rd\r\n            => new(DateTime.Now.Year, 11, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The24th\r\n            => new(DateTime.Now.Year, 11, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The25th\r\n            => new(DateTime.Now.Year, 11, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The26th\r\n            => new(DateTime.Now.Year, 11, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The27th\r\n            => new(DateTime.Now.Year, 11, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The28th\r\n            => new(DateTime.Now.Year, 11, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The29th\r\n            => new(DateTime.Now.Year, 11, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of November of the current year\r\n        /// </summary>\r\n        public static DateTime The30th\r\n            => new(DateTime.Now.Year, 11, 30);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for December\r\n    /// </summary>\r\n    public class December\r\n    {\r\n        /// <summary>\r\n        /// The nth day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The(int dayNumber)\r\n            => new(DateTime.Now.Year, 12, dayNumber);\r\n\r\n\r\n        /// <summary>\r\n        /// The 1st day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The1st\r\n            => new(DateTime.Now.Year, 12, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The2nd\r\n            => new(DateTime.Now.Year, 12, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The3rd\r\n            => new(DateTime.Now.Year, 12, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The4th\r\n            => new(DateTime.Now.Year, 12, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The5th\r\n            => new(DateTime.Now.Year, 12, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The6th\r\n            => new(DateTime.Now.Year, 12, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The7th\r\n            => new(DateTime.Now.Year, 12, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The8th\r\n            => new(DateTime.Now.Year, 12, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The9th\r\n            => new(DateTime.Now.Year, 12, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The10th\r\n            => new(DateTime.Now.Year, 12, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The11th\r\n            => new(DateTime.Now.Year, 12, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The12th\r\n            => new(DateTime.Now.Year, 12, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The13th\r\n            => new(DateTime.Now.Year, 12, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The14th\r\n            => new(DateTime.Now.Year, 12, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The15th\r\n            => new(DateTime.Now.Year, 12, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The16th\r\n            => new(DateTime.Now.Year, 12, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The17th\r\n            => new(DateTime.Now.Year, 12, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The18th\r\n            => new(DateTime.Now.Year, 12, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The19th\r\n            => new(DateTime.Now.Year, 12, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The20th\r\n            => new(DateTime.Now.Year, 12, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The21st\r\n            => new(DateTime.Now.Year, 12, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The22nd\r\n            => new(DateTime.Now.Year, 12, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The23rd\r\n            => new(DateTime.Now.Year, 12, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The24th\r\n            => new(DateTime.Now.Year, 12, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The25th\r\n            => new(DateTime.Now.Year, 12, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The26th\r\n            => new(DateTime.Now.Year, 12, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The27th\r\n            => new(DateTime.Now.Year, 12, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The28th\r\n            => new(DateTime.Now.Year, 12, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The29th\r\n            => new(DateTime.Now.Year, 12, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The30th\r\n            => new(DateTime.Now.Year, 12, 30);\r\n\r\n        /// <summary>\r\n        /// The 31st day of December of the current year\r\n        /// </summary>\r\n        public static DateTime The31st\r\n            => new(DateTime.Now.Year, 12, 31);\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/FluentDate/On.Days.tt",
    "content": "﻿<#@ template debug=\"true\" hostSpecific=\"true\" #>\n<#@ output extension=\".cs\" #>\n<#@ Assembly Name=\"System.Core\" #>\n<#@ Assembly Name=\"System.Windows.Forms\" #>\n<#@ assembly name=\"$(TargetPath)\" #>\n<#@ import namespace=\"System\" #>\n<#@ import namespace=\"Humanizer\" #>\nnamespace Humanizer;\n\npublic class On\n{\n<#\nconst int leapYear = 2012;\nfor (var month = 1; month <= 12; month++)\n{\n    var firstDayOfMonth = new DateTime(leapYear, month, 1);\n    var monthName = firstDayOfMonth.ToString(\"MMMM\");#>\n    /// <summary>\n    /// Provides fluent date accessors for <#= monthName #>\n    /// </summary>\n    public class <#= monthName #>\n    {\n        /// <summary>\n        /// The nth day of <#= monthName #> of the current year\n        /// </summary>\n        public static DateTime The(int dayNumber)\n            => new(DateTime.Now.Year, <#= month #>, dayNumber);\n\n<#for (var day = 1; day <= DateTime.DaysInMonth(leapYear, month); day++)\n    {\n        var ordinalDay = day.Ordinalize();#>\n\n        /// <summary>\n        /// The <#= ordinalDay #> day of <#= monthName #> of the current year\n        /// </summary>\n        public static DateTime The<#= ordinalDay #>\n            => new(DateTime.Now.Year, <#= month #>, <#= day #>);\n<#}#>\n    }\n<#}#>\n}\n"
  },
  {
    "path": "src/Humanizer/FluentDate/OnDate.Days.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\nnamespace Humanizer;\r\n\r\npublic class OnDate\r\n{\r\n    /// <summary>\r\n    /// Provides fluent date accessors for January\r\n    /// </summary>\r\n    public class January\r\n    {\r\n        /// <summary>\r\n        /// The nth day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The(int dayNumber)\r\n            => new(DateTime.Now.Year, 1, dayNumber);\r\n\r\n        /// <summary>\r\n        /// The 1st day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The1st\r\n            => new(DateTime.Now.Year, 1, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The2nd\r\n            => new(DateTime.Now.Year, 1, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The3rd\r\n            => new(DateTime.Now.Year, 1, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The4th\r\n            => new(DateTime.Now.Year, 1, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The5th\r\n            => new(DateTime.Now.Year, 1, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The6th\r\n            => new(DateTime.Now.Year, 1, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The7th\r\n            => new(DateTime.Now.Year, 1, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The8th\r\n            => new(DateTime.Now.Year, 1, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The9th\r\n            => new(DateTime.Now.Year, 1, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The10th\r\n            => new(DateTime.Now.Year, 1, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The11th\r\n            => new(DateTime.Now.Year, 1, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The12th\r\n            => new(DateTime.Now.Year, 1, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The13th\r\n            => new(DateTime.Now.Year, 1, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The14th\r\n            => new(DateTime.Now.Year, 1, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The15th\r\n            => new(DateTime.Now.Year, 1, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The16th\r\n            => new(DateTime.Now.Year, 1, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The17th\r\n            => new(DateTime.Now.Year, 1, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The18th\r\n            => new(DateTime.Now.Year, 1, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The19th\r\n            => new(DateTime.Now.Year, 1, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The20th\r\n            => new(DateTime.Now.Year, 1, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The21st\r\n            => new(DateTime.Now.Year, 1, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The22nd\r\n            => new(DateTime.Now.Year, 1, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The23rd\r\n            => new(DateTime.Now.Year, 1, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The24th\r\n            => new(DateTime.Now.Year, 1, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The25th\r\n            => new(DateTime.Now.Year, 1, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The26th\r\n            => new(DateTime.Now.Year, 1, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The27th\r\n            => new(DateTime.Now.Year, 1, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The28th\r\n            => new(DateTime.Now.Year, 1, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The29th\r\n            => new(DateTime.Now.Year, 1, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The30th\r\n            => new(DateTime.Now.Year, 1, 30);\r\n\r\n        /// <summary>\r\n        /// The 31st day of January of the current year\r\n        /// </summary>\r\n        public static DateOnly The31st\r\n            => new(DateTime.Now.Year, 1, 31);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for February\r\n    /// </summary>\r\n    public class February\r\n    {\r\n        /// <summary>\r\n        /// The nth day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The(int dayNumber)\r\n            => new(DateTime.Now.Year, 2, dayNumber);\r\n\r\n        /// <summary>\r\n        /// The 1st day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The1st\r\n            => new(DateTime.Now.Year, 2, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The2nd\r\n            => new(DateTime.Now.Year, 2, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The3rd\r\n            => new(DateTime.Now.Year, 2, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The4th\r\n            => new(DateTime.Now.Year, 2, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The5th\r\n            => new(DateTime.Now.Year, 2, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The6th\r\n            => new(DateTime.Now.Year, 2, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The7th\r\n            => new(DateTime.Now.Year, 2, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The8th\r\n            => new(DateTime.Now.Year, 2, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The9th\r\n            => new(DateTime.Now.Year, 2, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The10th\r\n            => new(DateTime.Now.Year, 2, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The11th\r\n            => new(DateTime.Now.Year, 2, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The12th\r\n            => new(DateTime.Now.Year, 2, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The13th\r\n            => new(DateTime.Now.Year, 2, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The14th\r\n            => new(DateTime.Now.Year, 2, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The15th\r\n            => new(DateTime.Now.Year, 2, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The16th\r\n            => new(DateTime.Now.Year, 2, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The17th\r\n            => new(DateTime.Now.Year, 2, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The18th\r\n            => new(DateTime.Now.Year, 2, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The19th\r\n            => new(DateTime.Now.Year, 2, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The20th\r\n            => new(DateTime.Now.Year, 2, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The21st\r\n            => new(DateTime.Now.Year, 2, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The22nd\r\n            => new(DateTime.Now.Year, 2, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The23rd\r\n            => new(DateTime.Now.Year, 2, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The24th\r\n            => new(DateTime.Now.Year, 2, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The25th\r\n            => new(DateTime.Now.Year, 2, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The26th\r\n            => new(DateTime.Now.Year, 2, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The27th\r\n            => new(DateTime.Now.Year, 2, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The28th\r\n            => new(DateTime.Now.Year, 2, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of February of the current year\r\n        /// </summary>\r\n        public static DateOnly The29th\r\n            => new(DateTime.Now.Year, 2, 29);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for March\r\n    /// </summary>\r\n    public class March\r\n    {\r\n        /// <summary>\r\n        /// The nth day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The(int dayNumber)\r\n            => new(DateTime.Now.Year, 3, dayNumber);\r\n\r\n        /// <summary>\r\n        /// The 1st day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The1st\r\n            => new(DateTime.Now.Year, 3, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The2nd\r\n            => new(DateTime.Now.Year, 3, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The3rd\r\n            => new(DateTime.Now.Year, 3, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The4th\r\n            => new(DateTime.Now.Year, 3, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The5th\r\n            => new(DateTime.Now.Year, 3, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The6th\r\n            => new(DateTime.Now.Year, 3, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The7th\r\n            => new(DateTime.Now.Year, 3, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The8th\r\n            => new(DateTime.Now.Year, 3, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The9th\r\n            => new(DateTime.Now.Year, 3, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The10th\r\n            => new(DateTime.Now.Year, 3, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The11th\r\n            => new(DateTime.Now.Year, 3, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The12th\r\n            => new(DateTime.Now.Year, 3, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The13th\r\n            => new(DateTime.Now.Year, 3, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The14th\r\n            => new(DateTime.Now.Year, 3, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The15th\r\n            => new(DateTime.Now.Year, 3, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The16th\r\n            => new(DateTime.Now.Year, 3, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The17th\r\n            => new(DateTime.Now.Year, 3, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The18th\r\n            => new(DateTime.Now.Year, 3, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The19th\r\n            => new(DateTime.Now.Year, 3, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The20th\r\n            => new(DateTime.Now.Year, 3, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The21st\r\n            => new(DateTime.Now.Year, 3, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The22nd\r\n            => new(DateTime.Now.Year, 3, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The23rd\r\n            => new(DateTime.Now.Year, 3, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The24th\r\n            => new(DateTime.Now.Year, 3, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The25th\r\n            => new(DateTime.Now.Year, 3, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The26th\r\n            => new(DateTime.Now.Year, 3, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The27th\r\n            => new(DateTime.Now.Year, 3, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The28th\r\n            => new(DateTime.Now.Year, 3, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The29th\r\n            => new(DateTime.Now.Year, 3, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The30th\r\n            => new(DateTime.Now.Year, 3, 30);\r\n\r\n        /// <summary>\r\n        /// The 31st day of March of the current year\r\n        /// </summary>\r\n        public static DateOnly The31st\r\n            => new(DateTime.Now.Year, 3, 31);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for April\r\n    /// </summary>\r\n    public class April\r\n    {\r\n        /// <summary>\r\n        /// The nth day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The(int dayNumber)\r\n            => new(DateTime.Now.Year, 4, dayNumber);\r\n\r\n        /// <summary>\r\n        /// The 1st day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The1st\r\n            => new(DateTime.Now.Year, 4, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The2nd\r\n            => new(DateTime.Now.Year, 4, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The3rd\r\n            => new(DateTime.Now.Year, 4, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The4th\r\n            => new(DateTime.Now.Year, 4, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The5th\r\n            => new(DateTime.Now.Year, 4, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The6th\r\n            => new(DateTime.Now.Year, 4, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The7th\r\n            => new(DateTime.Now.Year, 4, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The8th\r\n            => new(DateTime.Now.Year, 4, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The9th\r\n            => new(DateTime.Now.Year, 4, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The10th\r\n            => new(DateTime.Now.Year, 4, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The11th\r\n            => new(DateTime.Now.Year, 4, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The12th\r\n            => new(DateTime.Now.Year, 4, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The13th\r\n            => new(DateTime.Now.Year, 4, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The14th\r\n            => new(DateTime.Now.Year, 4, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The15th\r\n            => new(DateTime.Now.Year, 4, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The16th\r\n            => new(DateTime.Now.Year, 4, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The17th\r\n            => new(DateTime.Now.Year, 4, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The18th\r\n            => new(DateTime.Now.Year, 4, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The19th\r\n            => new(DateTime.Now.Year, 4, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The20th\r\n            => new(DateTime.Now.Year, 4, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The21st\r\n            => new(DateTime.Now.Year, 4, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The22nd\r\n            => new(DateTime.Now.Year, 4, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The23rd\r\n            => new(DateTime.Now.Year, 4, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The24th\r\n            => new(DateTime.Now.Year, 4, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The25th\r\n            => new(DateTime.Now.Year, 4, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The26th\r\n            => new(DateTime.Now.Year, 4, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The27th\r\n            => new(DateTime.Now.Year, 4, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The28th\r\n            => new(DateTime.Now.Year, 4, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The29th\r\n            => new(DateTime.Now.Year, 4, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of April of the current year\r\n        /// </summary>\r\n        public static DateOnly The30th\r\n            => new(DateTime.Now.Year, 4, 30);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for May\r\n    /// </summary>\r\n    public class May\r\n    {\r\n        /// <summary>\r\n        /// The nth day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The(int dayNumber)\r\n            => new(DateTime.Now.Year, 5, dayNumber);\r\n\r\n        /// <summary>\r\n        /// The 1st day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The1st\r\n            => new(DateTime.Now.Year, 5, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The2nd\r\n            => new(DateTime.Now.Year, 5, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The3rd\r\n            => new(DateTime.Now.Year, 5, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The4th\r\n            => new(DateTime.Now.Year, 5, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The5th\r\n            => new(DateTime.Now.Year, 5, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The6th\r\n            => new(DateTime.Now.Year, 5, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The7th\r\n            => new(DateTime.Now.Year, 5, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The8th\r\n            => new(DateTime.Now.Year, 5, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The9th\r\n            => new(DateTime.Now.Year, 5, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The10th\r\n            => new(DateTime.Now.Year, 5, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The11th\r\n            => new(DateTime.Now.Year, 5, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The12th\r\n            => new(DateTime.Now.Year, 5, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The13th\r\n            => new(DateTime.Now.Year, 5, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The14th\r\n            => new(DateTime.Now.Year, 5, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The15th\r\n            => new(DateTime.Now.Year, 5, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The16th\r\n            => new(DateTime.Now.Year, 5, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The17th\r\n            => new(DateTime.Now.Year, 5, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The18th\r\n            => new(DateTime.Now.Year, 5, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The19th\r\n            => new(DateTime.Now.Year, 5, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The20th\r\n            => new(DateTime.Now.Year, 5, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The21st\r\n            => new(DateTime.Now.Year, 5, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The22nd\r\n            => new(DateTime.Now.Year, 5, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The23rd\r\n            => new(DateTime.Now.Year, 5, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The24th\r\n            => new(DateTime.Now.Year, 5, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The25th\r\n            => new(DateTime.Now.Year, 5, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The26th\r\n            => new(DateTime.Now.Year, 5, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The27th\r\n            => new(DateTime.Now.Year, 5, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The28th\r\n            => new(DateTime.Now.Year, 5, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The29th\r\n            => new(DateTime.Now.Year, 5, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The30th\r\n            => new(DateTime.Now.Year, 5, 30);\r\n\r\n        /// <summary>\r\n        /// The 31st day of May of the current year\r\n        /// </summary>\r\n        public static DateOnly The31st\r\n            => new(DateTime.Now.Year, 5, 31);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for June\r\n    /// </summary>\r\n    public class June\r\n    {\r\n        /// <summary>\r\n        /// The nth day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The(int dayNumber)\r\n            => new(DateTime.Now.Year, 6, dayNumber);\r\n\r\n        /// <summary>\r\n        /// The 1st day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The1st\r\n            => new(DateTime.Now.Year, 6, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The2nd\r\n            => new(DateTime.Now.Year, 6, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The3rd\r\n            => new(DateTime.Now.Year, 6, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The4th\r\n            => new(DateTime.Now.Year, 6, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The5th\r\n            => new(DateTime.Now.Year, 6, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The6th\r\n            => new(DateTime.Now.Year, 6, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The7th\r\n            => new(DateTime.Now.Year, 6, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The8th\r\n            => new(DateTime.Now.Year, 6, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The9th\r\n            => new(DateTime.Now.Year, 6, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The10th\r\n            => new(DateTime.Now.Year, 6, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The11th\r\n            => new(DateTime.Now.Year, 6, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The12th\r\n            => new(DateTime.Now.Year, 6, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The13th\r\n            => new(DateTime.Now.Year, 6, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The14th\r\n            => new(DateTime.Now.Year, 6, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The15th\r\n            => new(DateTime.Now.Year, 6, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The16th\r\n            => new(DateTime.Now.Year, 6, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The17th\r\n            => new(DateTime.Now.Year, 6, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The18th\r\n            => new(DateTime.Now.Year, 6, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The19th\r\n            => new(DateTime.Now.Year, 6, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The20th\r\n            => new(DateTime.Now.Year, 6, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The21st\r\n            => new(DateTime.Now.Year, 6, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The22nd\r\n            => new(DateTime.Now.Year, 6, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The23rd\r\n            => new(DateTime.Now.Year, 6, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The24th\r\n            => new(DateTime.Now.Year, 6, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The25th\r\n            => new(DateTime.Now.Year, 6, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The26th\r\n            => new(DateTime.Now.Year, 6, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The27th\r\n            => new(DateTime.Now.Year, 6, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The28th\r\n            => new(DateTime.Now.Year, 6, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The29th\r\n            => new(DateTime.Now.Year, 6, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of June of the current year\r\n        /// </summary>\r\n        public static DateOnly The30th\r\n            => new(DateTime.Now.Year, 6, 30);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for July\r\n    /// </summary>\r\n    public class July\r\n    {\r\n        /// <summary>\r\n        /// The nth day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The(int dayNumber)\r\n            => new(DateTime.Now.Year, 7, dayNumber);\r\n\r\n        /// <summary>\r\n        /// The 1st day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The1st\r\n            => new(DateTime.Now.Year, 7, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The2nd\r\n            => new(DateTime.Now.Year, 7, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The3rd\r\n            => new(DateTime.Now.Year, 7, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The4th\r\n            => new(DateTime.Now.Year, 7, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The5th\r\n            => new(DateTime.Now.Year, 7, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The6th\r\n            => new(DateTime.Now.Year, 7, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The7th\r\n            => new(DateTime.Now.Year, 7, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The8th\r\n            => new(DateTime.Now.Year, 7, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The9th\r\n            => new(DateTime.Now.Year, 7, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The10th\r\n            => new(DateTime.Now.Year, 7, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The11th\r\n            => new(DateTime.Now.Year, 7, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The12th\r\n            => new(DateTime.Now.Year, 7, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The13th\r\n            => new(DateTime.Now.Year, 7, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The14th\r\n            => new(DateTime.Now.Year, 7, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The15th\r\n            => new(DateTime.Now.Year, 7, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The16th\r\n            => new(DateTime.Now.Year, 7, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The17th\r\n            => new(DateTime.Now.Year, 7, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The18th\r\n            => new(DateTime.Now.Year, 7, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The19th\r\n            => new(DateTime.Now.Year, 7, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The20th\r\n            => new(DateTime.Now.Year, 7, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The21st\r\n            => new(DateTime.Now.Year, 7, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The22nd\r\n            => new(DateTime.Now.Year, 7, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The23rd\r\n            => new(DateTime.Now.Year, 7, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The24th\r\n            => new(DateTime.Now.Year, 7, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The25th\r\n            => new(DateTime.Now.Year, 7, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The26th\r\n            => new(DateTime.Now.Year, 7, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The27th\r\n            => new(DateTime.Now.Year, 7, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The28th\r\n            => new(DateTime.Now.Year, 7, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The29th\r\n            => new(DateTime.Now.Year, 7, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The30th\r\n            => new(DateTime.Now.Year, 7, 30);\r\n\r\n        /// <summary>\r\n        /// The 31st day of July of the current year\r\n        /// </summary>\r\n        public static DateOnly The31st\r\n            => new(DateTime.Now.Year, 7, 31);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for August\r\n    /// </summary>\r\n    public class August\r\n    {\r\n        /// <summary>\r\n        /// The nth day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The(int dayNumber)\r\n            => new(DateTime.Now.Year, 8, dayNumber);\r\n\r\n        /// <summary>\r\n        /// The 1st day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The1st\r\n            => new(DateTime.Now.Year, 8, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The2nd\r\n            => new(DateTime.Now.Year, 8, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The3rd\r\n            => new(DateTime.Now.Year, 8, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The4th\r\n            => new(DateTime.Now.Year, 8, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The5th\r\n            => new(DateTime.Now.Year, 8, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The6th\r\n            => new(DateTime.Now.Year, 8, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The7th\r\n            => new(DateTime.Now.Year, 8, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The8th\r\n            => new(DateTime.Now.Year, 8, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The9th\r\n            => new(DateTime.Now.Year, 8, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The10th\r\n            => new(DateTime.Now.Year, 8, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The11th\r\n            => new(DateTime.Now.Year, 8, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The12th\r\n            => new(DateTime.Now.Year, 8, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The13th\r\n            => new(DateTime.Now.Year, 8, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The14th\r\n            => new(DateTime.Now.Year, 8, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The15th\r\n            => new(DateTime.Now.Year, 8, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The16th\r\n            => new(DateTime.Now.Year, 8, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The17th\r\n            => new(DateTime.Now.Year, 8, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The18th\r\n            => new(DateTime.Now.Year, 8, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The19th\r\n            => new(DateTime.Now.Year, 8, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The20th\r\n            => new(DateTime.Now.Year, 8, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The21st\r\n            => new(DateTime.Now.Year, 8, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The22nd\r\n            => new(DateTime.Now.Year, 8, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The23rd\r\n            => new(DateTime.Now.Year, 8, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The24th\r\n            => new(DateTime.Now.Year, 8, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The25th\r\n            => new(DateTime.Now.Year, 8, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The26th\r\n            => new(DateTime.Now.Year, 8, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The27th\r\n            => new(DateTime.Now.Year, 8, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The28th\r\n            => new(DateTime.Now.Year, 8, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The29th\r\n            => new(DateTime.Now.Year, 8, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The30th\r\n            => new(DateTime.Now.Year, 8, 30);\r\n\r\n        /// <summary>\r\n        /// The 31st day of August of the current year\r\n        /// </summary>\r\n        public static DateOnly The31st\r\n            => new(DateTime.Now.Year, 8, 31);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for September\r\n    /// </summary>\r\n    public class September\r\n    {\r\n        /// <summary>\r\n        /// The nth day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The(int dayNumber)\r\n            => new(DateTime.Now.Year, 9, dayNumber);\r\n\r\n        /// <summary>\r\n        /// The 1st day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The1st\r\n            => new(DateTime.Now.Year, 9, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The2nd\r\n            => new(DateTime.Now.Year, 9, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The3rd\r\n            => new(DateTime.Now.Year, 9, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The4th\r\n            => new(DateTime.Now.Year, 9, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The5th\r\n            => new(DateTime.Now.Year, 9, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The6th\r\n            => new(DateTime.Now.Year, 9, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The7th\r\n            => new(DateTime.Now.Year, 9, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The8th\r\n            => new(DateTime.Now.Year, 9, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The9th\r\n            => new(DateTime.Now.Year, 9, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The10th\r\n            => new(DateTime.Now.Year, 9, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The11th\r\n            => new(DateTime.Now.Year, 9, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The12th\r\n            => new(DateTime.Now.Year, 9, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The13th\r\n            => new(DateTime.Now.Year, 9, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The14th\r\n            => new(DateTime.Now.Year, 9, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The15th\r\n            => new(DateTime.Now.Year, 9, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The16th\r\n            => new(DateTime.Now.Year, 9, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The17th\r\n            => new(DateTime.Now.Year, 9, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The18th\r\n            => new(DateTime.Now.Year, 9, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The19th\r\n            => new(DateTime.Now.Year, 9, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The20th\r\n            => new(DateTime.Now.Year, 9, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The21st\r\n            => new(DateTime.Now.Year, 9, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The22nd\r\n            => new(DateTime.Now.Year, 9, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The23rd\r\n            => new(DateTime.Now.Year, 9, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The24th\r\n            => new(DateTime.Now.Year, 9, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The25th\r\n            => new(DateTime.Now.Year, 9, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The26th\r\n            => new(DateTime.Now.Year, 9, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The27th\r\n            => new(DateTime.Now.Year, 9, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The28th\r\n            => new(DateTime.Now.Year, 9, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The29th\r\n            => new(DateTime.Now.Year, 9, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of September of the current year\r\n        /// </summary>\r\n        public static DateOnly The30th\r\n            => new(DateTime.Now.Year, 9, 30);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for October\r\n    /// </summary>\r\n    public class October\r\n    {\r\n        /// <summary>\r\n        /// The nth day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The(int dayNumber)\r\n            => new(DateTime.Now.Year, 10, dayNumber);\r\n\r\n        /// <summary>\r\n        /// The 1st day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The1st\r\n            => new(DateTime.Now.Year, 10, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The2nd\r\n            => new(DateTime.Now.Year, 10, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The3rd\r\n            => new(DateTime.Now.Year, 10, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The4th\r\n            => new(DateTime.Now.Year, 10, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The5th\r\n            => new(DateTime.Now.Year, 10, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The6th\r\n            => new(DateTime.Now.Year, 10, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The7th\r\n            => new(DateTime.Now.Year, 10, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The8th\r\n            => new(DateTime.Now.Year, 10, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The9th\r\n            => new(DateTime.Now.Year, 10, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The10th\r\n            => new(DateTime.Now.Year, 10, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The11th\r\n            => new(DateTime.Now.Year, 10, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The12th\r\n            => new(DateTime.Now.Year, 10, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The13th\r\n            => new(DateTime.Now.Year, 10, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The14th\r\n            => new(DateTime.Now.Year, 10, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The15th\r\n            => new(DateTime.Now.Year, 10, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The16th\r\n            => new(DateTime.Now.Year, 10, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The17th\r\n            => new(DateTime.Now.Year, 10, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The18th\r\n            => new(DateTime.Now.Year, 10, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The19th\r\n            => new(DateTime.Now.Year, 10, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The20th\r\n            => new(DateTime.Now.Year, 10, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The21st\r\n            => new(DateTime.Now.Year, 10, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The22nd\r\n            => new(DateTime.Now.Year, 10, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The23rd\r\n            => new(DateTime.Now.Year, 10, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The24th\r\n            => new(DateTime.Now.Year, 10, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The25th\r\n            => new(DateTime.Now.Year, 10, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The26th\r\n            => new(DateTime.Now.Year, 10, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The27th\r\n            => new(DateTime.Now.Year, 10, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The28th\r\n            => new(DateTime.Now.Year, 10, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The29th\r\n            => new(DateTime.Now.Year, 10, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The30th\r\n            => new(DateTime.Now.Year, 10, 30);\r\n\r\n        /// <summary>\r\n        /// The 31st day of October of the current year\r\n        /// </summary>\r\n        public static DateOnly The31st\r\n            => new(DateTime.Now.Year, 10, 31);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for November\r\n    /// </summary>\r\n    public class November\r\n    {\r\n        /// <summary>\r\n        /// The nth day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The(int dayNumber)\r\n            => new(DateTime.Now.Year, 11, dayNumber);\r\n\r\n        /// <summary>\r\n        /// The 1st day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The1st\r\n            => new(DateTime.Now.Year, 11, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The2nd\r\n            => new(DateTime.Now.Year, 11, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The3rd\r\n            => new(DateTime.Now.Year, 11, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The4th\r\n            => new(DateTime.Now.Year, 11, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The5th\r\n            => new(DateTime.Now.Year, 11, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The6th\r\n            => new(DateTime.Now.Year, 11, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The7th\r\n            => new(DateTime.Now.Year, 11, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The8th\r\n            => new(DateTime.Now.Year, 11, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The9th\r\n            => new(DateTime.Now.Year, 11, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The10th\r\n            => new(DateTime.Now.Year, 11, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The11th\r\n            => new(DateTime.Now.Year, 11, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The12th\r\n            => new(DateTime.Now.Year, 11, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The13th\r\n            => new(DateTime.Now.Year, 11, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The14th\r\n            => new(DateTime.Now.Year, 11, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The15th\r\n            => new(DateTime.Now.Year, 11, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The16th\r\n            => new(DateTime.Now.Year, 11, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The17th\r\n            => new(DateTime.Now.Year, 11, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The18th\r\n            => new(DateTime.Now.Year, 11, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The19th\r\n            => new(DateTime.Now.Year, 11, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The20th\r\n            => new(DateTime.Now.Year, 11, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The21st\r\n            => new(DateTime.Now.Year, 11, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The22nd\r\n            => new(DateTime.Now.Year, 11, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The23rd\r\n            => new(DateTime.Now.Year, 11, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The24th\r\n            => new(DateTime.Now.Year, 11, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The25th\r\n            => new(DateTime.Now.Year, 11, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The26th\r\n            => new(DateTime.Now.Year, 11, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The27th\r\n            => new(DateTime.Now.Year, 11, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The28th\r\n            => new(DateTime.Now.Year, 11, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The29th\r\n            => new(DateTime.Now.Year, 11, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of November of the current year\r\n        /// </summary>\r\n        public static DateOnly The30th\r\n            => new(DateTime.Now.Year, 11, 30);\r\n    }\r\n    /// <summary>\r\n    /// Provides fluent date accessors for December\r\n    /// </summary>\r\n    public class December\r\n    {\r\n        /// <summary>\r\n        /// The nth day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The(int dayNumber)\r\n            => new(DateTime.Now.Year, 12, dayNumber);\r\n\r\n        /// <summary>\r\n        /// The 1st day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The1st\r\n            => new(DateTime.Now.Year, 12, 1);\r\n\r\n        /// <summary>\r\n        /// The 2nd day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The2nd\r\n            => new(DateTime.Now.Year, 12, 2);\r\n\r\n        /// <summary>\r\n        /// The 3rd day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The3rd\r\n            => new(DateTime.Now.Year, 12, 3);\r\n\r\n        /// <summary>\r\n        /// The 4th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The4th\r\n            => new(DateTime.Now.Year, 12, 4);\r\n\r\n        /// <summary>\r\n        /// The 5th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The5th\r\n            => new(DateTime.Now.Year, 12, 5);\r\n\r\n        /// <summary>\r\n        /// The 6th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The6th\r\n            => new(DateTime.Now.Year, 12, 6);\r\n\r\n        /// <summary>\r\n        /// The 7th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The7th\r\n            => new(DateTime.Now.Year, 12, 7);\r\n\r\n        /// <summary>\r\n        /// The 8th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The8th\r\n            => new(DateTime.Now.Year, 12, 8);\r\n\r\n        /// <summary>\r\n        /// The 9th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The9th\r\n            => new(DateTime.Now.Year, 12, 9);\r\n\r\n        /// <summary>\r\n        /// The 10th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The10th\r\n            => new(DateTime.Now.Year, 12, 10);\r\n\r\n        /// <summary>\r\n        /// The 11th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The11th\r\n            => new(DateTime.Now.Year, 12, 11);\r\n\r\n        /// <summary>\r\n        /// The 12th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The12th\r\n            => new(DateTime.Now.Year, 12, 12);\r\n\r\n        /// <summary>\r\n        /// The 13th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The13th\r\n            => new(DateTime.Now.Year, 12, 13);\r\n\r\n        /// <summary>\r\n        /// The 14th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The14th\r\n            => new(DateTime.Now.Year, 12, 14);\r\n\r\n        /// <summary>\r\n        /// The 15th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The15th\r\n            => new(DateTime.Now.Year, 12, 15);\r\n\r\n        /// <summary>\r\n        /// The 16th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The16th\r\n            => new(DateTime.Now.Year, 12, 16);\r\n\r\n        /// <summary>\r\n        /// The 17th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The17th\r\n            => new(DateTime.Now.Year, 12, 17);\r\n\r\n        /// <summary>\r\n        /// The 18th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The18th\r\n            => new(DateTime.Now.Year, 12, 18);\r\n\r\n        /// <summary>\r\n        /// The 19th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The19th\r\n            => new(DateTime.Now.Year, 12, 19);\r\n\r\n        /// <summary>\r\n        /// The 20th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The20th\r\n            => new(DateTime.Now.Year, 12, 20);\r\n\r\n        /// <summary>\r\n        /// The 21st day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The21st\r\n            => new(DateTime.Now.Year, 12, 21);\r\n\r\n        /// <summary>\r\n        /// The 22nd day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The22nd\r\n            => new(DateTime.Now.Year, 12, 22);\r\n\r\n        /// <summary>\r\n        /// The 23rd day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The23rd\r\n            => new(DateTime.Now.Year, 12, 23);\r\n\r\n        /// <summary>\r\n        /// The 24th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The24th\r\n            => new(DateTime.Now.Year, 12, 24);\r\n\r\n        /// <summary>\r\n        /// The 25th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The25th\r\n            => new(DateTime.Now.Year, 12, 25);\r\n\r\n        /// <summary>\r\n        /// The 26th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The26th\r\n            => new(DateTime.Now.Year, 12, 26);\r\n\r\n        /// <summary>\r\n        /// The 27th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The27th\r\n            => new(DateTime.Now.Year, 12, 27);\r\n\r\n        /// <summary>\r\n        /// The 28th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The28th\r\n            => new(DateTime.Now.Year, 12, 28);\r\n\r\n        /// <summary>\r\n        /// The 29th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The29th\r\n            => new(DateTime.Now.Year, 12, 29);\r\n\r\n        /// <summary>\r\n        /// The 30th day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The30th\r\n            => new(DateTime.Now.Year, 12, 30);\r\n\r\n        /// <summary>\r\n        /// The 31st day of December of the current year\r\n        /// </summary>\r\n        public static DateOnly The31st\r\n            => new(DateTime.Now.Year, 12, 31);\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/FluentDate/OnDate.Days.tt",
    "content": "﻿<#@ template debug=\"true\" hostSpecific=\"true\" #>\n<#@ output extension=\".cs\" #>\n<#@ Assembly Name=\"System.Core\" #>\n<#@ Assembly Name=\"System.Windows.Forms\" #>\n<#@ assembly name=\"$(TargetPath)\" #>\n<#@ import namespace=\"System\" #>\n<#@ import namespace=\"Humanizer\" #>\n#if NET6_0_OR_GREATER\nnamespace Humanizer;\n\npublic class OnDate\n{\n<#\nconst int leapYear = 2012;\nfor (var month = 1; month <= 12; month++)\n{\n    var firstDayOfMonth = new DateTime(leapYear, month, 1);\n    var monthName = firstDayOfMonth.ToString(\"MMMM\");#>\n    /// <summary>\n    /// Provides fluent date accessors for <#= monthName #>\n    /// </summary>\n    public class <#= monthName #>\n    {\n        /// <summary>\n        /// The nth day of <#= monthName #> of the current year\n        /// </summary>\n        public static DateOnly The(int dayNumber)\n            => new(DateTime.Now.Year, <#= month #>, dayNumber);\n<#for (var day = 1; day <= DateTime.DaysInMonth(leapYear, month); day++)\n    {\n        var ordinalDay = day.Ordinalize();#>\n\n        /// <summary>\n        /// The <#= ordinalDay #> day of <#= monthName #> of the current year\n        /// </summary>\n        public static DateOnly The<#= ordinalDay #>\n            => new(DateTime.Now.Year, <#= month #>, <#= day #>);\n<#}#>\n    }\n<#}#>\n}\n\n#endif"
  },
  {
    "path": "src/Humanizer/FluentDate/PrepositionsExtensions.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// <see cref=\"DateTime\"/> extensions related to spatial or temporal relations\r\n/// </summary>\r\npublic static class PrepositionsExtensions\r\n{\r\n    /// <summary>\r\n    /// Returns a new <see cref=\"DateTime\"/> with the specified hour and, optionally\r\n    /// provided minutes, seconds, and milliseconds.\r\n    /// </summary>\r\n    public static DateTime At(this DateTime date, int hour, int min = 0, int second = 0, int millisecond = 0) =>\r\n        new(date.Year, date.Month, date.Day, hour, min, second, millisecond);\r\n\r\n    /// <summary>\r\n    /// Returns a new instance of DateTime based on the provided date where the time is set to midnight\r\n    /// </summary>\r\n    public static DateTime AtMidnight(this DateTime date) =>\r\n        date.At(0);\r\n\r\n    /// <summary>\r\n    /// Returns a new instance of DateTime based on the provided date where the time is set to noon\r\n    /// </summary>\r\n    public static DateTime AtNoon(this DateTime date) =>\r\n        date.At(12);\r\n\r\n    /// <summary>\r\n    /// Returns a new instance of DateTime based on the provided date where the year is set to the provided year\r\n    /// </summary>\r\n    public static DateTime In(this DateTime date, int year) =>\r\n        new(year, date.Month, date.Day, date.Hour, date.Minute, date.Second, date.Millisecond);\r\n}"
  },
  {
    "path": "src/Humanizer/GlobalUsings.cs",
    "content": "global using System;\r\nglobal using System.Buffers;\r\nglobal using System.Collections.Concurrent;\r\nglobal using System.Collections.Frozen;\r\nglobal using System.Globalization;\r\nglobal using System.Reflection;\r\nglobal using System.Text;\r\nglobal using System.Text.RegularExpressions;\r\nglobal using System.Diagnostics.CodeAnalysis;\r\nglobal using System.Linq;"
  },
  {
    "path": "src/Humanizer/GrammaticalCase.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Options for specifying the desired grammatical case for the output words\r\n/// </summary>\r\npublic enum GrammaticalCase\r\n{\r\n    /// <summary>\r\n    /// Indicates the subject of a finite verb\r\n    /// </summary>\r\n    Nominative,\r\n    /// <summary>\r\n    /// Indicates the possessor of another noun\r\n    /// </summary>\r\n    Genitive,\r\n    /// <summary>\r\n    /// Indicates the indirect object of a verb\r\n    /// </summary>\r\n    Dative,\r\n    /// <summary>\r\n    /// Indicates the direct object of a verb\r\n    /// </summary>\r\n    Accusative,\r\n    /// <summary>\r\n    /// Indicates an object used in performing an action\r\n    /// </summary>\r\n    Instrumental,\r\n    /// <summary>\r\n    /// Indicates the object of a preposition\r\n    /// </summary>\r\n    Prepositional,\r\n}"
  },
  {
    "path": "src/Humanizer/GrammaticalGender.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Options for specifying the desired grammatical gender for the output words\r\n/// </summary>\r\npublic enum GrammaticalGender\r\n{\r\n    /// <summary>\r\n    /// Indicates masculine grammatical gender\r\n    /// </summary>\r\n    Masculine,\r\n    /// <summary>\r\n    /// Indicates feminine grammatical gender\r\n    /// </summary>\r\n    Feminine,\r\n    /// <summary>\r\n    /// Indicates neuter grammatical gender\r\n    /// </summary>\r\n    Neuter\r\n}"
  },
  {
    "path": "src/Humanizer/HeadingExtensions.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Style for the cardinal direction humanization\r\n/// </summary>\r\npublic enum HeadingStyle\r\n{\r\n    /// <summary>\r\n    /// Returns an abbreviated format\r\n    /// </summary>\r\n    Abbreviated,\r\n\r\n    /// <summary>\r\n    /// Returns the full format\r\n    /// </summary>\r\n    Full\r\n}\r\n\r\n/// <summary>\r\n/// Contains extensions to transform a number indicating a heading into the\r\n/// textual representation of the heading.\r\n/// </summary>\r\npublic static class HeadingExtensions\r\n{\r\n    internal static readonly string[] Headings = [\"N\", \"NNE\", \"NE\", \"ENE\", \"E\", \"ESE\", \"SE\", \"SSE\", \"S\", \"SSW\", \"SW\", \"WSW\", \"W\", \"WNW\", \"NW\", \"NNW\"];\r\n    internal static readonly string[] HeadingsShort = [\"N_Short\", \"NNE_Short\", \"NE_Short\", \"ENE_Short\", \"E_Short\", \"ESE_Short\", \"SE_Short\", \"SSE_Short\", \"S_Short\", \"SSW_Short\", \"SW_Short\", \"WSW_Short\", \"W_Short\", \"WNW_Short\", \"NW_Short\", \"NNW_Short\"];\r\n    internal static readonly char[] HeadingArrows = ['↑', '↗', '→', '↘', '↓', '↙', '←', '↖'];\r\n\r\n    // https://stackoverflow.com/a/7490772/1720761\r\n    /// <summary>\r\n    /// Returns a textual representation of the heading.\r\n    ///\r\n    /// This representation has a maximum deviation of 11.25 degrees.\r\n    /// </summary>\r\n    /// <returns>A textual representation of the heading</returns>\r\n    /// <param name=\"heading\">The heading value</param>\r\n    /// <param name=\"style\">Whether to return a short result or not. <see cref=\"HeadingStyle\"/></param>\r\n    /// <param name=\"culture\">The culture to return the textual representation in</param>\r\n    public static string ToHeading(this double heading, HeadingStyle style = HeadingStyle.Abbreviated, CultureInfo? culture = null)\r\n    {\r\n        var val = (int)(heading / 22.5 + .5);\r\n\r\n        var headingsIndex = val % 16;\r\n\r\n        return Resources.GetResource(\r\n            style == HeadingStyle.Abbreviated ? HeadingsShort[headingsIndex] : Headings[headingsIndex],\r\n            culture);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Returns a char arrow indicating the heading.\r\n    ///\r\n    /// This representation has a maximum deviation of 22.5 degrees.\r\n    /// </summary>\r\n    /// <returns>The heading arrow.</returns>\r\n    public static char ToHeadingArrow(this double heading)\r\n    {\r\n        var val = (int)(heading / 45 + .5);\r\n\r\n        return HeadingArrows[val % 8];\r\n    }\r\n\r\n    /// <summary>\r\n    /// Returns a heading based on the short textual representation of the heading.\r\n    /// </summary>\r\n    /// <param name=\"heading\">The short textual representation of a heading</param>\r\n    /// <returns>The heading. -1 if the heading could not be parsed.</returns>\r\n    public static double FromAbbreviatedHeading(this string heading) =>\r\n        heading.FromAbbreviatedHeading(null);\r\n\r\n    /// <summary>\r\n    /// Returns a heading based on the short textual representation of the heading.\r\n    /// </summary>\r\n    /// <param name=\"heading\">The short textual representation of a heading</param>\r\n    /// <param name=\"culture\">The culture of the heading</param>\r\n    /// <returns>The heading. -1 if the heading could not be parsed.</returns>\r\n    public static double FromAbbreviatedHeading(this string heading, CultureInfo? culture = null)\r\n    {\r\n        ArgumentNullException.ThrowIfNull(heading);\r\n\r\n        culture ??= CultureInfo.CurrentCulture;\r\n\r\n        var upperCaseHeading = culture.TextInfo.ToUpper(heading);\r\n        for (var index = 0; index < HeadingsShort.Length; ++index)\r\n        {\r\n            var localizedShortHeading = Resources.GetResource(HeadingsShort[index], culture);\r\n            if (culture.CompareInfo.Compare(upperCaseHeading, localizedShortHeading) == 0)\r\n            {\r\n                return index * 22.5;\r\n            }\r\n        }\r\n\r\n        return -1;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Returns a heading based on the heading arrow.\r\n    /// </summary>\r\n    public static double FromHeadingArrow(this char heading)\r\n    {\r\n        var index = Array.IndexOf(HeadingArrows, heading);\r\n\r\n        if (index == -1)\r\n        {\r\n            return -1;\r\n        }\r\n\r\n        return index * 45.0;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Returns a heading based on the heading arrow.\r\n    /// </summary>\r\n    public static double FromHeadingArrow(this string heading)\r\n    {\r\n        ArgumentNullException.ThrowIfNull(heading);\r\n\r\n        if (heading.Length != 1)\r\n        {\r\n            return -1;\r\n        }\r\n\r\n        return heading[0]\r\n            .FromHeadingArrow();\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Humanizer.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\r\n  <PropertyGroup>\r\n    <TargetFrameworks>net10.0;net8.0;net48;netstandard2.0</TargetFrameworks>\r\n    <Description>A micro-framework that turns your normal strings, type names, enum fields, date fields, etc, into a human friendly format</Description>\r\n    <Product>Humanizer</Product>\r\n  </PropertyGroup> \r\n  \r\n  <ItemGroup>\r\n    <PackageReference Include=\"Polyfill\" PrivateAssets=\"all\" />\r\n    <PackageReference Include=\"System.Collections.Immutable\" Condition=\"'$(TargetFramework)' == 'netstandard2.0' or $(TargetFrameworkIdentifier) == '.NETFramework'\" />    \r\n    <PackageReference Include=\"System.Memory\" Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework'\" />\r\n    <PackageReference Include=\"System.ComponentModel.Annotations\"  Condition=\"'$(TargetFramework)' == 'netstandard2.0' or $(TargetFrameworkIdentifier) == '.NETFramework'\" />\r\n  </ItemGroup>\r\n  \r\n  <ItemGroup>\r\n    <None Update=\"FluentDate\\InDate.Months.tt\">\r\n      <LastGenOutput>InDate.Months.cs</LastGenOutput>\r\n      <Generator>TextTemplatingFileGenerator</Generator>\r\n    </None>\r\n    <None Update=\"FluentDate\\OnDate.Days.tt\" Generator=\"TextTemplatingFileGenerator\" LastGenOutput=\"OnDate.Days.cs\" />\r\n    <Compile Update=\"FluentDate\\OnDate.Days.cs\" DesignTime=\"True\" AutoGen=\"True\" DependentUpon=\"OnDate.Days.tt\" />\r\n    \r\n    <None Update=\"FluentDate\\On.Days.tt\">\r\n      <Generator>TextTemplatingFileGenerator</Generator>\r\n      <LastGenOutput>On.Days.cs</LastGenOutput>\r\n    </None>\r\n    <Compile Update=\"FluentDate\\On.Days.cs\" DesignTime=\"True\" AutoGen=\"True\">\r\n      <DependentUpon>On.Days.tt</DependentUpon>\r\n    </Compile>\r\n\r\n    <None Update=\"FluentDate\\In.Months.tt\">\r\n      <Generator>TextTemplatingFileGenerator</Generator>\r\n      <LastGenOutput>In.Months.cs</LastGenOutput>\r\n    </None>\r\n    <Compile Update=\"FluentDate\\In.Months.cs\" DesignTime=\"True\" AutoGen=\"True\">\r\n      <DependentUpon>In.Months.tt</DependentUpon>\r\n    </Compile>\r\n    \r\n    <None Update=\"FluentDate\\InDate.Months.tt\" Generator=\"TextTemplatingFileGenerator\" LastGenOutput=\"InDate.Months.cs\" />\r\n    <Compile Update=\"FluentDate\\InDate.Months.cs\" DesignTime=\"True\" AutoGen=\"True\" DependentUpon=\"InDate.Months.tt\" />\r\n\r\n    <None Update=\"FluentDate\\In.SomeTimeFrom.tt\" Generator=\"TextTemplatingFileGenerator\" LastGenOutput=\"In.SomeTimeFrom.cs\" />\r\n    <Compile Update=\"FluentDate\\In.SomeTimeFrom.cs\" DesignTime=\"True\" AutoGen=\"True\" DependentUpon=\"In.SomeTimeFrom.tt\" />\r\n\r\n    <None Update=\"FluentDate\\InDate.SomeTimeFrom.tt\" Generator=\"TextTemplatingFileGenerator\" LastGenOutput=\"InDate.SomeTimeFrom.cs\" />\r\n    <Compile Update=\"FluentDate\\InDate.SomeTimeFrom.cs\" DesignTime=\"True\" AutoGen=\"True\" DependentUpon=\"InDate.SomeTimeFrom.tt\" />\r\n    \r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <InternalsVisibleTo Include=\"Humanizer.Tests\" />\r\n    <InternalsVisibleTo Include=\"Benchmarks\" />\r\n  </ItemGroup>\r\n  \r\n  <ItemGroup>\r\n    <!-- Reference the analyzer project to ensure it builds first and its outputs are available for packing -->\r\n    <ProjectReference Include=\"..\\Humanizer.Analyzers\\Humanizer.Analyzers.csproj\" ReferenceOutputAssembly=\"false\" />\r\n  </ItemGroup>\r\n  \r\n  <Target Name=\"BuildAnalyzerVariants\">\r\n    <MSBuild\r\n      Projects=\"$(MSBuildThisFileDirectory)..\\Humanizer.Analyzers\\Humanizer.Analyzers.csproj\"\r\n      Targets=\"Restore;Rebuild\"\r\n      RemoveProperties=\"TargetFramework;TargetFrameworks;RuntimeIdentifier;SelfContained\"\r\n      Properties=\"Configuration=$(Configuration);TargetFramework=netstandard2.0;TargetFrameworks=;RoslynVersion=4.8;AnalyzerVariant=roslyn4.8\" />\r\n    <MSBuild\r\n      Projects=\"$(MSBuildThisFileDirectory)..\\Humanizer.Analyzers\\Humanizer.Analyzers.csproj\"\r\n      Targets=\"Restore;Rebuild\"\r\n      RemoveProperties=\"TargetFramework;TargetFrameworks;RuntimeIdentifier;SelfContained\"\r\n      Properties=\"Configuration=$(Configuration);TargetFramework=netstandard2.0;TargetFrameworks=;RoslynVersion=4.14;AnalyzerVariant=roslyn4.14\" />\r\n  </Target>\r\n\r\n  <Target Name=\"PackNuSpecs\" DependsOnTargets=\"GetBuildVersion;Build;BuildAnalyzerVariants;_InitializeNuspecRepositoryInformationProperties\">\r\n    <ItemGroup>\r\n      <NuspecFiles Include=\"$(MSBuildThisFileDirectory)..\\..\\NuSpecs\\*.nuspec\" />\r\n    </ItemGroup>\r\n    <PropertyGroup>\r\n      <NoWarn>$(NoWarn);NU5128</NoWarn>\r\n      <IncludeBuildOutput>false</IncludeBuildOutput>\r\n      <SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>\r\n      <PackageOutputPath Condition=\" '$(Configuration)' == '' \">$(MSBuildThisFileDirectory)..\\..\\artifacts\\$(Configuration)\\</PackageOutputPath>      \r\n      <NuspecBasePath>$(MSBuildThisFileDirectory)..\\</NuspecBasePath>\r\n      <NuspecProperties>version=$(NuGetPackageVersion);RepositoryType=git;RepositoryCommit=$(GitCommitId);RepositoryUrl=https://github.com/Humanizr/Humanizer</NuspecProperties>\r\n    </PropertyGroup>\r\n        \r\n    <Message Importance=\"High\" Text=\"Packing %(NuspecFiles.Identity) → v$(NuGetPackageVersion)\" />\r\n    \r\n    <PackTask PackItem=\"$(MSBuildProjectFullPath)\" TargetFrameworks=\"$(TargetFrameworks)\" PackageId=\"$(PackageId)\" PackageVersion=\"$(NuGetPackageVersion)\" Title=\"$(Product)\" Authors=\"$(Authors)\" Description=\"$(Description)\" DevelopmentDependency=\"$(DevelopmentDependency)\" Copyright=\"$(Copyright)\" RequireLicenseAcceptance=\"$(PackageRequireLicenseAcceptance)\" RestoreOutputPath=\"$(RestoreOutputPath)\" LicenseUrl=\"$(PackageLicenseUrl)\" ProjectUrl=\"$(PackageProjectUrl)\" IconUrl=\"$(PackageIconUrl)\" Tags=\"$(PackageTags)\" ReleaseNotes=\"$(PackageReleaseNotes)\" AssemblyName=\"$(AssemblyName)\" PackageOutputPath=\"$(PackageOutputPath)\" IsTool=\"$(IsTool)\" IncludeSymbols=\"$(IncludeSymbols)\" IncludeSource=\"$(IncludeSource)\" InstallPackageToOutputPath=\"$(InstallPackageToOutputPath)\" OutputFileNamesWithoutVersion=\"$(OutputFileNamesWithoutVersion)\" RepositoryUrl=\"$(RepositoryUrl)\" RepositoryType=\"$(RepositoryType)\" RepositoryBranch=\"$(RepositoryBranch)\" RepositoryCommit=\"$(RepositoryCommit)\" NoPackageAnalysis=\"$(NoPackageAnalysis)\" NuspecFile=\"%(NuspecFiles.Identity)\" NuspecBasePath=\"$(NuspecBasePath)\" NuspecProperties=\"$(NuspecProperties)\" SymbolPackageFormat=\"$(SymbolPackageFormat)\" MinClientVersion=\"$(MinClientVersion)\" Serviceable=\"$(Serviceable)\" ContinuePackingAfterGeneratingNuspec=\"true\" NoDefaultExcludes=\"$(NoDefaultExcludes)\" NuspecOutputPath=\"$(NuspecOutputPath)\" IncludeBuildOutput=\"$(IncludeBuildOutput)\" NoWarn=\"$(NoWarn)\" TreatWarningsAsErrors=\"$(TreatWarningsAsErrors)\" WarningsAsErrors=\"$(WarningsAsErrors)\" WarningsNotAsErrors=\"$(WarningsNotAsErrors)\" PackageLicenseExpression=\"$(PackageLicenseExpression)\" PackageLicenseFile=\"$(PackageLicenseFile)\" PackageLicenseExpressionVersion=\"$(PackageLicenseExpressionVersion)\" Readme=\"$(Readme)\" Deterministic=\"$(Deterministic)\" PackageIcon=\"$(PackageIcon)\" />\r\n  </Target>\r\n</Project>\r\n"
  },
  {
    "path": "src/Humanizer/Inflections/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 Scott Kirkland\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "src/Humanizer/Inflections/Vocabularies.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Container for registered Vocabularies.  At present, only a single vocabulary is supported: Default.\r\n/// </summary>\r\npublic static class Vocabularies\r\n{\r\n    static readonly Lazy<Vocabulary> Instance = new(BuildDefault, LazyThreadSafetyMode.PublicationOnly);\r\n\r\n    /// <summary>\r\n    /// The default vocabulary used for singular/plural irregularities.\r\n    /// Rules can be added to this vocabulary and will be picked up by called to Singularize() and Pluralize().\r\n    /// At this time, multiple vocabularies and removing existing rules are not supported.\r\n    /// </summary>\r\n    public static Vocabulary Default => Instance.Value;\r\n\r\n    static Vocabulary BuildDefault()\r\n    {\r\n        var _default = new Vocabulary();\r\n\r\n        _default.AddPlural(\"$\", \"s\");\r\n        _default.AddPlural(\"s$\", \"s\");\r\n        _default.AddPlural(\"(ax|test)is$\", \"$1es\");\r\n        _default.AddPlural(\"(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)us$\", \"$1i\");\r\n        _default.AddPlural(\"(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)$\", \"$1es\");\r\n        _default.AddPlural(\"(buffal|tomat|volcan|ech|embarg|her|mosquit|potat|torped|vet)o$\", \"$1oes\");\r\n        _default.AddPlural(\"([dti])um$\", \"$1a\");\r\n        _default.AddPlural(\"sis$\", \"ses\");\r\n        _default.AddPlural(\"(?:([^f])fe|([lr])f)$\", \"$1$2ves\");\r\n        _default.AddPlural(\"(hive)$\", \"$1s\");\r\n        _default.AddPlural(\"([^aeiouy]|qu)y$\", \"$1ies\");\r\n        _default.AddPlural(\"(x|ch|ss|sh)$\", \"$1es\");\r\n        _default.AddPlural(\"(matr|vert|ind|d)(ix|ex)$\", \"$1ices\");\r\n        _default.AddPlural(\"(^[m|l])ouse$\", \"$1ice\");\r\n        _default.AddPlural(\"^(ox)$\", \"$1en\");\r\n        _default.AddPlural(\"(quiz)$\", \"$1zes\");\r\n        _default.AddPlural(\"(buz|blit|walt)z$\", \"$1zes\");\r\n        _default.AddPlural(\"(hoo|lea|loa|thie)f$\", \"$1ves\");\r\n        _default.AddPlural(\"(alumn|alg|larv|vertebr)a$\", \"$1ae\");\r\n        _default.AddPlural(\"(criteri|phenomen)on$\", \"$1a\");\r\n\r\n        _default.AddSingular(\"s$\", \"\");\r\n        _default.AddSingular(\"(n)ews$\", \"$1ews\");\r\n        _default.AddSingular(\"([dti])a$\", \"$1um\");\r\n        _default.AddSingular(\"(analy|ba|diagno|parenthe|progno|synop|the|ellip|empha|neuro|oa|paraly)ses$\", \"$1sis\");\r\n        _default.AddSingular(\"([^f])ves$\", \"$1fe\");\r\n        _default.AddSingular(\"(hive)s$\", \"$1\");\r\n        _default.AddSingular(\"(tive)s$\", \"$1\");\r\n        _default.AddSingular(\"([lr]|hoo|lea|loa|thie)ves$\", \"$1f\");\r\n        _default.AddSingular(\"(^zomb)?([^aeiouy]|qu)ies$\", \"$2y\");\r\n        _default.AddSingular(\"(s)eries$\", \"$1eries\");\r\n        _default.AddSingular(\"(m)ovies$\", \"$1ovie\");\r\n        _default.AddSingular(\"(x|ch|ss|sh)es$\", \"$1\");\r\n        _default.AddSingular(\"(^[m|l])ice$\", \"$1ouse\");\r\n        _default.AddSingular(\"(?<!^[a-z])(o)es$\", \"$1\");\r\n        _default.AddSingular(\"(shoe)s$\", \"$1\");\r\n        _default.AddSingular(\"(cris|ax|test)es$\", \"$1is\");\r\n        _default.AddSingular(\"(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)i$\", \"$1us\");\r\n        _default.AddSingular(\"(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)es$\", \"$1\");\r\n        _default.AddSingular(\"^(ox)en\", \"$1\");\r\n        _default.AddSingular(\"(matr|d)ices$\", \"$1ix\");\r\n        _default.AddSingular(\"(vert|ind)ices$\", \"$1ex\");\r\n        _default.AddSingular(\"(quiz)zes$\", \"$1\");\r\n        _default.AddSingular(\"(buz|blit|walt)zes$\", \"$1z\");\r\n        _default.AddSingular(\"(alumn|alg|larv|vertebr)ae$\", \"$1a\");\r\n        _default.AddSingular(\"(criteri|phenomen)a$\", \"$1on\");\r\n        _default.AddSingular(\"([b|r|c]ook|room|smooth)ies$\", \"$1ie\");\r\n\r\n        _default.AddIrregular(\"person\", \"people\");\r\n        _default.AddIrregular(\"man\", \"men\");\r\n        _default.AddIrregular(\"human\", \"humans\");\r\n        _default.AddIrregular(\"child\", \"children\");\r\n        _default.AddIrregular(\"sex\", \"sexes\");\r\n        _default.AddIrregular(\"glove\", \"gloves\");\r\n        _default.AddIrregular(\"move\", \"moves\");\r\n        _default.AddIrregular(\"goose\", \"geese\");\r\n        _default.AddIrregular(\"wave\", \"waves\");\r\n        _default.AddIrregular(\"foot\", \"feet\");\r\n        _default.AddIrregular(\"tooth\", \"teeth\");\r\n        _default.AddIrregular(\"curriculum\", \"curricula\");\r\n        _default.AddIrregular(\"database\", \"databases\");\r\n        _default.AddIrregular(\"zombie\", \"zombies\");\r\n        _default.AddIrregular(\"personnel\", \"personnel\");\r\n        _default.AddIrregular(\"cache\", \"caches\");\r\n        _default.AddIrregular(\"ex\", \"exes\", matchEnding: false);\r\n        _default.AddIrregular(\"is\", \"are\", matchEnding: false);\r\n        _default.AddIrregular(\"was\", \"were\", matchEnding: false);\r\n        _default.AddIrregular(\"that\", \"those\", matchEnding: false);\r\n        _default.AddIrregular(\"this\", \"these\", matchEnding: false);\r\n        _default.AddIrregular(\"bus\", \"buses\", matchEnding: false);\r\n        _default.AddIrregular(\"die\", \"dice\", matchEnding: false);\r\n        _default.AddIrregular(\"tie\", \"ties\", matchEnding: false);\r\n        _default.AddIrregular(\"lens\", \"lenses\");\r\n        _default.AddIrregular(\"clove\", \"cloves\");\r\n        _default.AddIrregular(\"valve\", \"valves\");\r\n        _default.AddIrregular(\"explosive\", \"explosives\");\r\n\r\n        _default.AddUncountable(\"staff\");\r\n        _default.AddUncountable(\"training\");\r\n        _default.AddUncountable(\"equipment\");\r\n        _default.AddUncountable(\"information\");\r\n        _default.AddUncountable(\"corn\");\r\n        _default.AddUncountable(\"milk\");\r\n        _default.AddUncountable(\"rice\");\r\n        _default.AddUncountable(\"money\");\r\n        _default.AddUncountable(\"species\");\r\n        _default.AddUncountable(\"series\");\r\n        _default.AddUncountable(\"fish\");\r\n        _default.AddUncountable(\"sheep\");\r\n        _default.AddUncountable(\"deer\");\r\n        _default.AddUncountable(\"aircraft\");\r\n        _default.AddUncountable(\"oz\");\r\n        _default.AddUncountable(\"tsp\");\r\n        _default.AddUncountable(\"tbsp\");\r\n        _default.AddUncountable(\"ml\");\r\n        _default.AddUncountable(\"l\");\r\n        _default.AddUncountable(\"water\");\r\n        _default.AddUncountable(\"waters\");\r\n        _default.AddUncountable(\"semen\");\r\n        _default.AddUncountable(\"sperm\");\r\n        _default.AddUncountable(\"bison\");\r\n        _default.AddUncountable(\"grass\");\r\n        _default.AddUncountable(\"hair\");\r\n        _default.AddUncountable(\"mud\");\r\n        _default.AddUncountable(\"elk\");\r\n        _default.AddUncountable(\"luggage\");\r\n        _default.AddUncountable(\"moose\");\r\n        _default.AddUncountable(\"offspring\");\r\n        _default.AddUncountable(\"salmon\");\r\n        _default.AddUncountable(\"shrimp\");\r\n        _default.AddUncountable(\"someone\");\r\n        _default.AddUncountable(\"swine\");\r\n        _default.AddUncountable(\"trout\");\r\n        _default.AddUncountable(\"tuna\");\r\n        _default.AddUncountable(\"corps\");\r\n        _default.AddUncountable(\"scissors\");\r\n        _default.AddUncountable(\"means\");\r\n        _default.AddUncountable(\"mail\");\r\n        _default.AddUncountable(\"pliers\");\r\n        _default.AddUncountable(\"sheers\");\r\n        _default.AddUncountable(\"clothes\");\r\n        _default.AddUncountable(\"apparatus\");\r\n        _default.AddUncountable(\"chassis\");\r\n        _default.AddUncountable(\"debris\");\r\n\r\n        //Fix 1132\r\n        _default.AddUncountable(\"metadata\");\r\n\r\n        return _default;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Inflections/Vocabulary.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// A container for exceptions to simple pluralization/singularization rules.\r\n/// Vocabularies.Default contains an extensive list of rules for US English.\r\n/// At this time, multiple vocabularies and removing existing rules are not supported.\r\n/// </summary>\r\npublic partial class Vocabulary\r\n{\r\n    internal Vocabulary()\r\n    {\r\n    }\r\n\r\n    readonly List<Rule> plurals = [];\r\n    readonly List<Rule> singulars = [];\r\n    readonly HashSet<string> uncountables = new(StringComparer.CurrentCultureIgnoreCase);\r\n\r\n    private const string LetterSPattern = \"^([sS])[sS]*$\";\r\n\r\n#if NET7_0_OR_GREATER\r\n    [GeneratedRegex(LetterSPattern)]\r\n    private static partial Regex LetterSRegexGenerated();\r\n    \r\n    private static Regex LetterSRegex() => LetterSRegexGenerated();\r\n#else\r\n    private static readonly Regex LetterSRegexField = new(LetterSPattern, RegexOptions.Compiled);\r\n\r\n    private static Regex LetterSRegex() => LetterSRegexField;\r\n#endif\r\n\r\n    /// <summary>\r\n    /// Adds a word to the vocabulary which cannot easily be pluralized/singularized by RegEx, e.g. \"person\" and \"people\".\r\n    /// </summary>\r\n    /// <param name=\"singular\">The singular form of the irregular word, e.g. \"person\".</param>\r\n    /// <param name=\"plural\">The plural form of the irregular word, e.g. \"people\".</param>\r\n    /// <param name=\"matchEnding\">True to match these words on their own as well as at the end of longer words. False, otherwise.</param>\r\n    public void AddIrregular(string singular, string plural, bool matchEnding = true)\r\n    {\r\n        if (matchEnding)\r\n        {\r\n            var singularSubstring = singular[1..];\r\n            var pluralSubString = plural[1..];\r\n            AddPlural($\"({singular[0]}){singularSubstring}$\", $\"$1{pluralSubString}\");\r\n            AddSingular($\"({plural[0]}){pluralSubString}$\", $\"$1{singularSubstring}\");\r\n        }\r\n        else\r\n        {\r\n            AddPlural($\"^{singular}$\", plural);\r\n            AddSingular($\"^{plural}$\", singular);\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Adds an uncountable word to the vocabulary, e.g. \"fish\".  Will be ignored when plurality is changed.\r\n    /// </summary>\r\n    /// <param name=\"word\">Word to be added to the list of uncountables.</param>\r\n    public void AddUncountable(string word) =>\r\n        uncountables.Add(word);\r\n\r\n    /// <summary>\r\n    /// Adds a rule to the vocabulary that does not follow trivial rules for pluralization, e.g. \"bus\" -> \"buses\"\r\n    /// </summary>\r\n    /// <param name=\"rule\">RegEx to be matched, case insensitive, e.g. \"(bus)es$\"</param>\r\n    /// <param name=\"replacement\">RegEx replacement  e.g. \"$1\"</param>\r\n    public void AddPlural(string rule, string replacement) =>\r\n        plurals.Add(new(rule, replacement));\r\n\r\n    /// <summary>\r\n    /// Adds a rule to the vocabulary that does not follow trivial rules for singularization, e.g. \"vertices/indices -> \"vertex/index\"\r\n    /// </summary>\r\n    /// <param name=\"rule\">RegEx to be matched, case insensitive, e.g. \"\"(vert|ind)ices$\"\"</param>\r\n    /// <param name=\"replacement\">RegEx replacement  e.g. \"$1ex\"</param>\r\n    public void AddSingular(string rule, string replacement) =>\r\n        singulars.Add(new(rule, replacement));\r\n\r\n    /// <summary>\r\n    /// Pluralizes the provided input considering irregular words\r\n    /// </summary>\r\n    /// <param name=\"word\">Word to be pluralized</param>\r\n    /// <param name=\"inputIsKnownToBeSingular\">Normally you call Pluralize on singular words; but if you're unsure call it with false</param>\r\n    [return: NotNullIfNotNull(nameof(word))]\r\n    public string? Pluralize(string? word, bool inputIsKnownToBeSingular = true)\r\n    {\r\n        if (word == null)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        var s = LetterS(word);\r\n        if (s != null)\r\n        {\r\n            return s + \"s\";\r\n        }\r\n\r\n        var result = ApplyRules(plurals, word, false);\r\n\r\n        if (inputIsKnownToBeSingular)\r\n        {\r\n            return result ?? word;\r\n        }\r\n\r\n        var asSingular = ApplyRules(singulars, word, false);\r\n        var asSingularAsPlural = ApplyRules(plurals, asSingular, false);\r\n        if (asSingular != null &&\r\n            asSingular != word &&\r\n            asSingular + \"s\" != word &&\r\n            asSingularAsPlural == word &&\r\n            result != word)\r\n        {\r\n            return word;\r\n        }\r\n\r\n        return result!;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Singularizes the provided input considering irregular words\r\n    /// </summary>\r\n    /// <param name=\"word\">Word to be singularized</param>\r\n    /// <param name=\"inputIsKnownToBePlural\">Normally you call Singularize on plural words; but if you're unsure call it with false</param>\r\n    /// <param name=\"skipSimpleWords\">Skip singularizing single words that have an 's' on the end</param>\r\n    [return: NotNullIfNotNull(nameof(word))]\r\n    public string? Singularize(string? word, bool inputIsKnownToBePlural = true, bool skipSimpleWords = false)\r\n    {\r\n        if (word == null)\r\n        {\r\n            return null;\r\n        }\r\n        var s = LetterS(word);\r\n        if (s != null)\r\n        {\r\n            return s;\r\n        }\r\n\r\n        var result = ApplyRules(singulars, word, skipSimpleWords);\r\n\r\n        if (inputIsKnownToBePlural)\r\n        {\r\n            return result ?? word;\r\n        }\r\n\r\n        // the Plurality is unknown so we should check all possibilities\r\n        var asPlural = ApplyRules(plurals, word, false);\r\n        if (asPlural == word ||\r\n            word + \"s\" == asPlural)\r\n        {\r\n            return result ?? word;\r\n        }\r\n\r\n        var asPluralAsSingular = ApplyRules(singulars, asPlural, false);\r\n        if (asPluralAsSingular != word ||\r\n            result == word)\r\n        {\r\n            return result ?? word;\r\n        }\r\n\r\n        return word;\r\n    }\r\n\r\n    string? ApplyRules(IList<Rule> rules, string? word, bool skipFirstRule)\r\n    {\r\n        if (word == null)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        if (word.Length < 1)\r\n        {\r\n            return word;\r\n        }\r\n\r\n        if (IsUncountable(word))\r\n        {\r\n            return word;\r\n        }\r\n\r\n        var result = word;\r\n        var end = skipFirstRule ? 1 : 0;\r\n        for (var i = rules.Count - 1; i >= end; i--)\r\n        {\r\n            if ((result = rules[i].Apply(word)) != null)\r\n            {\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (result == null)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        return MatchUpperCase(word, result);\r\n    }\r\n\r\n    bool IsUncountable(string word) =>\r\n        uncountables.Contains(word);\r\n\r\n    static string MatchUpperCase(string word, string replacement) =>\r\n        char.IsUpper(word[0]) &&\r\n        char.IsLower(replacement[0]) ? StringHumanizeExtensions.Concat(char.ToUpper(replacement[0]), replacement.AsSpan(1)) : replacement;\r\n\r\n    /// <summary>\r\n    /// If the word is the letter s, singular or plural, return the letter s singular\r\n    /// </summary>\r\n    static string? LetterS(string word)\r\n    {\r\n        var s = LetterSRegex().Match(word);\r\n        return s.Groups.Count > 1 ? s.Groups[1].Value : null;\r\n    }\r\n\r\n    class Rule(string pattern, string replacement)\r\n    {\r\n        readonly Regex regex = new(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);\r\n\r\n        public string? Apply(string word)\r\n        {\r\n            if (!regex.IsMatch(word))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            return regex.Replace(word, replacement);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/InflectorExtensions.cs",
    "content": "//The Inflector class was cloned from Inflector (https://github.com/srkirkland/Inflector)\r\n\r\n//The MIT License (MIT)\r\n\r\n//Copyright (c) 2013 Scott Kirkland\r\n\r\n//Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n//this software and associated documentation files (the \"Software\"), to deal in\r\n//the Software without restriction, including without limitation the rights to\r\n//use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n//the Software, and to permit persons to whom the Software is furnished to do so,\r\n//subject to the following conditions:\r\n\r\n//The above copyright notice and this permission notice shall be included in all\r\n//copies or substantial portions of the Software.\r\n\r\n//THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n//FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n//COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n//IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n//CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\nnamespace Humanizer;\r\n\r\npublic static partial class InflectorExtensions\r\n{\r\n    private const string PascalizePattern = @\"(?:[ _-]+|^)(.)\";\r\n    private const string UnderscorePattern1 = @\"([\\p{Lu}]+)([\\p{Lu}][\\p{Ll}])\";\r\n    private const string UnderscorePattern2 = @\"([\\p{Ll}\\d])([\\p{Lu}])\";\r\n    private const string UnderscorePattern3 = @\"[-\\s]\";\r\n\r\n#if NET7_0_OR_GREATER\r\n    [GeneratedRegex(PascalizePattern)]\r\n    private static partial Regex PascalizeRegexGenerated();\r\n    \r\n    private static Regex PascalizeRegex() => PascalizeRegexGenerated();\r\n\r\n    [GeneratedRegex(UnderscorePattern1)]\r\n    private static partial Regex UnderscoreRegex1Generated();\r\n    \r\n    private static Regex UnderscoreRegex1() => UnderscoreRegex1Generated();\r\n\r\n    [GeneratedRegex(UnderscorePattern2)]\r\n    private static partial Regex UnderscoreRegex2Generated();\r\n    \r\n    private static Regex UnderscoreRegex2() => UnderscoreRegex2Generated();\r\n\r\n    [GeneratedRegex(UnderscorePattern3)]\r\n    private static partial Regex UnderscoreRegex3Generated();\r\n    \r\n    private static Regex UnderscoreRegex3() => UnderscoreRegex3Generated();\r\n#else\r\n    private static readonly Regex PascalizeRegexField = new(PascalizePattern, RegexOptions.Compiled);\r\n    private static Regex PascalizeRegex() => PascalizeRegexField;\r\n\r\n    private static readonly Regex UnderscoreRegex1Field = new(UnderscorePattern1, RegexOptions.Compiled);\r\n    private static Regex UnderscoreRegex1() => UnderscoreRegex1Field;\r\n\r\n    private static readonly Regex UnderscoreRegex2Field = new(UnderscorePattern2, RegexOptions.Compiled);\r\n    private static Regex UnderscoreRegex2() => UnderscoreRegex2Field;\r\n\r\n    private static readonly Regex UnderscoreRegex3Field = new(UnderscorePattern3, RegexOptions.Compiled);\r\n    private static Regex UnderscoreRegex3() => UnderscoreRegex3Field;\r\n#endif\r\n\r\n    /// <summary>\r\n    /// Converts a singular word to its plural form, handling both regular and irregular pluralizations.\r\n    /// </summary>\r\n    /// <param name=\"word\">The word to be pluralized. Can be null.</param>\r\n    /// <param name=\"inputIsKnownToBeSingular\">\r\n    /// Indicates whether the input is known to be in singular form. \r\n    /// Set to true (default) if you're certain the word is singular.\r\n    /// Set to false if the word might already be plural, in which case the method will check and avoid double-pluralization.\r\n    /// </param>\r\n    /// <returns>\r\n    /// The plural form of the word, or null if the input was null.\r\n    /// Handles irregular plurals (e.g., \"person\" → \"people\", \"child\" → \"children\") and regular plurals (e.g., \"cat\" → \"cats\").\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// Uses the default vocabulary which includes English pluralization rules and common irregular forms.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"person\".Pluralize() => \"people\"\r\n    /// \"cat\".Pluralize() => \"cats\"\r\n    /// \"box\".Pluralize() => \"boxes\"\r\n    /// \"man\".Pluralize() => \"men\"\r\n    /// \"cats\".Pluralize(inputIsKnownToBeSingular: false) => \"cats\" (avoids double pluralization)\r\n    /// </code>\r\n    /// </example>\r\n    [return: NotNullIfNotNull(nameof(word))]\r\n    public static string? Pluralize(this string? word, bool inputIsKnownToBeSingular = true) =>\r\n        Vocabularies.Default.Pluralize(word, inputIsKnownToBeSingular);\r\n\r\n    /// <summary>\r\n    /// Converts a plural word to its singular form, handling both regular and irregular singularizations.\r\n    /// </summary>\r\n    /// <param name=\"word\">The word to be singularized. Must not be null.</param>\r\n    /// <param name=\"inputIsKnownToBePlural\">\r\n    /// Indicates whether the input is known to be in plural form.\r\n    /// Set to true (default) if you're certain the word is plural.\r\n    /// Set to false if the word might already be singular, in which case the method will check and avoid incorrect singularization.\r\n    /// </param>\r\n    /// <param name=\"skipSimpleWords\">\r\n    /// When true, skips singularization of simple words that just end in 's'.\r\n    /// This helps avoid incorrectly singularizing words like \"ross\" to \"ros\".\r\n    /// </param>\r\n    /// <returns>\r\n    /// The singular form of the word.\r\n    /// Handles irregular singulars (e.g., \"people\" → \"person\", \"children\" → \"child\") and regular singulars (e.g., \"cats\" → \"cat\").\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// Uses the default vocabulary which includes English singularization rules and common irregular forms.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"people\".Singularize() => \"person\"\r\n    /// \"cats\".Singularize() => \"cat\"\r\n    /// \"boxes\".Singularize() => \"box\"\r\n    /// \"men\".Singularize() => \"man\"\r\n    /// \"person\".Singularize(inputIsKnownToBePlural: false) => \"person\" (avoids incorrect singularization)\r\n    /// </code>\r\n    /// </example>\r\n    public static string Singularize(this string word, bool inputIsKnownToBePlural = true, bool skipSimpleWords = false) =>\r\n        Vocabularies.Default.Singularize(word, inputIsKnownToBePlural, skipSimpleWords);\r\n\r\n    /// <summary>\r\n    /// Converts a string to title case by humanizing it first and then applying title casing.\r\n    /// Each word in the result will start with an uppercase letter.\r\n    /// </summary>\r\n    /// <param name=\"input\">The string to be converted to title case. Must not be null.</param>\r\n    /// <returns>\r\n    /// A humanized string with each word capitalized (title case).\r\n    /// If humanization produces an empty string, returns the original input unchanged.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// This method first humanizes the input (breaking up PascalCase, underscores, etc.) and then applies title casing.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"some_title\".Titleize() => \"Some Title\"\r\n    /// \"someTitle\".Titleize() => \"Some Title\"\r\n    /// \"some-package_name\".Titleize() => \"Some Package Name\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Titleize(this string input)\r\n    {\r\n        var humanized = input.Humanize();\r\n        // If humanization returns empty string (no recognized letters), preserve original input\r\n        return humanized.Length == 0 ? input : humanized.ApplyCase(LetterCasing.Title);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Converts a string to PascalCase (UpperCamelCase) by capitalizing the first letter of each word\r\n    /// and removing spaces, underscores, and dashes.\r\n    /// </summary>\r\n    /// <param name=\"input\">The string to be pascalized. Must not be null.</param>\r\n    /// <returns>\r\n    /// A PascalCase version of the input where each word starts with an uppercase letter and \r\n    /// spaces, underscores, and dashes are removed.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// PascalCase (also known as UpperCamelCase) is commonly used for class names and type names in .NET.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"some_property_name\".Pascalize() => \"SomePropertyName\"\r\n    /// \"some property name\".Pascalize() => \"SomePropertyName\"\r\n    /// \"some-property-name\".Pascalize() => \"SomePropertyName\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Pascalize(this string input) =>\r\n        PascalizeRegex().Replace(input, match => match\r\n            .Groups[1]\r\n            .Value.ToUpper());\r\n\r\n    /// <summary>\r\n    /// Converts a string to camelCase (lowerCamelCase) by capitalizing the first letter of each word\r\n    /// except the first word, and removing spaces, underscores, and dashes.\r\n    /// </summary>\r\n    /// <param name=\"input\">The string to be camelized. Must not be null.</param>\r\n    /// <returns>\r\n    /// A camelCase version of the input where the first word starts with a lowercase letter,\r\n    /// subsequent words start with uppercase letters, and spaces, underscores, and dashes are removed.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// camelCase is the same as PascalCase except the first character is lowercase.\r\n    /// It's commonly used for variable and method parameter names in .NET.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"some_property_name\".Camelize() => \"somePropertyName\"\r\n    /// \"some property name\".Camelize() => \"somePropertyName\"\r\n    /// \"SomePropertyName\".Camelize() => \"somePropertyName\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Camelize(this string input)\r\n    {\r\n        var word = input.Pascalize();\r\n        return word.Length > 0\r\n            ? StringHumanizeExtensions.Concat(\r\n                char.ToLower(word[0]),\r\n                word.AsSpan(1))\r\n            : word;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Converts a string to lowercase and separates words with underscores, transforming \r\n    /// PascalCase, camelCase, and spaces into underscore_case.\r\n    /// </summary>\r\n    /// <param name=\"input\">The string to be underscored. Must not be null.</param>\r\n    /// <returns>\r\n    /// A lowercase string with words separated by underscores instead of spaces, case changes, or dashes.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// This transformation is commonly used for database column names, file names, and URL slugs in some conventions.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"SomePropertyName\".Underscore() => \"some_property_name\"\r\n    /// \"somePropertyName\".Underscore() => \"some_property_name\"\r\n    /// \"some-property-name\".Underscore() => \"some_property_name\"\r\n    /// \"some property name\".Underscore() => \"some_property_name\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Underscore(this string input) =>\r\n        UnderscoreRegex3()\r\n            .Replace(\r\n                UnderscoreRegex2().Replace(\r\n                    UnderscoreRegex1().Replace(input, \"$1_$2\"), \"$1_$2\"), \"_\")\r\n            .ToLower();\r\n\r\n    /// <summary>\r\n    /// Replaces all underscores in the string with dashes (hyphens).\r\n    /// </summary>\r\n    /// <param name=\"underscoredWord\">The string containing underscores to be replaced with dashes. Must not be null.</param>\r\n    /// <returns>\r\n    /// A string with all underscores replaced by dashes.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// This is typically used after calling <see cref=\"Underscore\"/> to convert from underscore_case to dash-case (kebab-case).\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"some_property_name\".Dasherize() => \"some-property-name\"\r\n    /// \"some_longer_property_name\".Dasherize() => \"some-longer-property-name\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Dasherize(this string underscoredWord) =>\r\n        underscoredWord.Replace('_', '-');\r\n\r\n    /// <summary>\r\n    /// Replaces all underscores in the string with hyphens. This is an alias for <see cref=\"Dasherize\"/>.\r\n    /// </summary>\r\n    /// <param name=\"underscoredWord\">The string containing underscores to be replaced with hyphens. Must not be null.</param>\r\n    /// <returns>\r\n    /// A string with all underscores replaced by hyphens.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// This method is functionally identical to <see cref=\"Dasherize\"/> and is provided for API clarity.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"some_property_name\".Hyphenate() => \"some-property-name\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Hyphenate(this string underscoredWord) =>\r\n        Dasherize(underscoredWord);\r\n\r\n    /// <summary>\r\n    /// Converts a string to kebab-case (lowercase words separated by hyphens), transforming\r\n    /// PascalCase, camelCase, spaces, and underscores into hyphenated lowercase text.\r\n    /// </summary>\r\n    /// <param name=\"input\">The string to be converted to kebab-case. Must not be null.</param>\r\n    /// <returns>\r\n    /// A lowercase string with words separated by hyphens.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// Kebab-case is commonly used for CSS class names, HTML attributes, and URL slugs.\r\n    /// This is equivalent to calling <see cref=\"Underscore\"/> followed by <see cref=\"Dasherize\"/>.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"SomePropertyName\".Kebaberize() => \"some-property-name\"\r\n    /// \"somePropertyName\".Kebaberize() => \"some-property-name\"\r\n    /// \"some property name\".Kebaberize() => \"some-property-name\"\r\n    /// \"some_property_name\".Kebaberize() => \"some-property-name\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Kebaberize(this string input) =>\r\n        Underscore(input)\r\n            .Dasherize();\r\n}"
  },
  {
    "path": "src/Humanizer/LetterCasing.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Options for specifying the desired letter casing for the output string\r\n/// </summary>\r\npublic enum LetterCasing\r\n{\r\n    /// <summary>\r\n    /// SomeString -> Some String\r\n    /// </summary>\r\n    Title,\r\n    /// <summary>\r\n    /// SomeString -> SOME STRING\r\n    /// </summary>\r\n    AllCaps,\r\n    /// <summary>\r\n    /// SomeString -> some string\r\n    /// </summary>\r\n    LowerCase,\r\n    /// <summary>\r\n    /// SomeString -> Some string\r\n    /// </summary>\r\n    Sentence,\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/CollectionFormatters/DefaultCollectionFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass DefaultCollectionFormatter(string defaultSeparator) : ICollectionFormatter\r\n{\r\n    protected string DefaultSeparator = defaultSeparator;\r\n\r\n    public virtual string Humanize<T>(IEnumerable<T> collection) =>\r\n        Humanize(collection, o => o?.ToString(), DefaultSeparator);\r\n\r\n    public virtual string Humanize<T>(IEnumerable<T> collection, Func<T, string?> objectFormatter) =>\r\n        Humanize(collection, objectFormatter, DefaultSeparator);\r\n\r\n    public string Humanize<T>(IEnumerable<T> collection, Func<T, object?> objectFormatter) =>\r\n        Humanize(collection, objectFormatter, DefaultSeparator);\r\n\r\n    public virtual string Humanize<T>(IEnumerable<T> collection, string separator) =>\r\n        Humanize(collection, o => o?.ToString(), separator);\r\n\r\n    public virtual string Humanize<T>(IEnumerable<T> collection, Func<T, string?> objectFormatter, string separator)\r\n    {\r\n        ArgumentNullException.ThrowIfNull(collection);\r\n\r\n        ArgumentNullException.ThrowIfNull(objectFormatter);\r\n\r\n        return HumanizeDisplayStrings(\r\n            collection.Select(objectFormatter),\r\n            separator);\r\n    }\r\n\r\n    public string Humanize<T>(IEnumerable<T> collection, Func<T, object?> objectFormatter, string separator)\r\n    {\r\n        ArgumentNullException.ThrowIfNull(collection);\r\n\r\n        ArgumentNullException.ThrowIfNull(objectFormatter);\r\n\r\n        return HumanizeDisplayStrings(\r\n            collection\r\n                .Select(objectFormatter)\r\n                .Select(o => o?.ToString()),\r\n            separator);\r\n    }\r\n\r\n    string HumanizeDisplayStrings(IEnumerable<string?> strings, string separator)\r\n    {\r\n        // Try to avoid ToArray for small known collections\r\n        var itemsArray = strings\r\n            .Select(item => item == null ? string.Empty : item.Trim())\r\n            .Where(item => !string.IsNullOrWhiteSpace(item))\r\n            .ToArray();\r\n\r\n        var count = itemsArray.Length;\r\n\r\n        if (count == 0)\r\n        {\r\n            return \"\";\r\n        }\r\n\r\n        if (count == 1)\r\n        {\r\n            return itemsArray[0];\r\n        }\r\n\r\n        var conjunctionFormat = GetConjunctionFormatString(count);\r\n        if (conjunctionFormat == \"{0} {1} {2}\")\r\n        {\r\n            // Fast path: avoid string.Format for default format\r\n            return string.Concat(\r\n                string.Join(\", \", itemsArray, 0, itemsArray.Length - 1),\r\n                \" \",\r\n                separator,\r\n                \" \",\r\n                itemsArray[^1]);\r\n        }\r\n\r\n        return string.Format(conjunctionFormat,\r\n            string.Join(\", \", itemsArray, 0, itemsArray.Length - 1),\r\n            separator,\r\n            itemsArray[^1]);\r\n    }\r\n\r\n    protected virtual string GetConjunctionFormatString(int itemCount) => \"{0} {1} {2}\";\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/CollectionFormatters/ICollectionFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// An interface you should implement to localize Humanize for collections\r\n/// </summary>\r\npublic interface ICollectionFormatter\r\n{\r\n    /// <summary>\r\n    /// Formats the collection for display, calling ToString() on each object.\r\n    /// </summary>\r\n    string Humanize<T>(IEnumerable<T> collection);\r\n\r\n    /// <summary>\r\n    /// Formats the collection for display, calling <paramref name=\"objectFormatter\"/> on each element.\r\n    /// </summary>\r\n    string Humanize<T>(IEnumerable<T> collection, Func<T, string?> objectFormatter);\r\n\r\n    /// <summary>\r\n    /// Formats the collection for display, calling <paramref name=\"objectFormatter\"/> on each element.\r\n    /// </summary>\r\n    string Humanize<T>(IEnumerable<T> collection, Func<T, object?> objectFormatter);\r\n\r\n    /// <summary>\r\n    /// Formats the collection for display, calling ToString() on each object\r\n    /// and using <paramref name=\"separator\"/> before the final item.\r\n    /// </summary>\r\n    string Humanize<T>(IEnumerable<T> collection, string separator);\r\n\r\n    /// <summary>\r\n    /// Formats the collection for display, calling <paramref name=\"objectFormatter\"/> on each element.\r\n    /// and using <paramref name=\"separator\"/> before the final item.\r\n    /// </summary>\r\n    string Humanize<T>(IEnumerable<T> collection, Func<T, string?> objectFormatter, string separator);\r\n\r\n    /// <summary>\r\n    /// Formats the collection for display, calling <paramref name=\"objectFormatter\"/> on each element.\r\n    /// and using <paramref name=\"separator\"/> before the final item.\r\n    /// </summary>\r\n    string Humanize<T>(IEnumerable<T> collection, Func<T, object?> objectFormatter, string separator);\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/CollectionFormatters/OxfordStyleCollectionFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass OxfordStyleCollectionFormatter() :\r\n    DefaultCollectionFormatter(\"and\")\r\n{\r\n    protected override string GetConjunctionFormatString(int itemCount) => itemCount > 2 ? \"{0}, {1} {2}\" : \"{0} {1} {2}\";\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/DataUnit.cs",
    "content": "﻿namespace Humanizer;\r\n\r\npublic enum DataUnit\r\n{\r\n    Bit,\r\n    Byte,\r\n    Kilobyte,\r\n    Megabyte,\r\n    Gigabyte,\r\n    Terabyte\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/DateToOrdinalWords/CaDateOnlyToOrdinalWordsConverter.cs",
    "content": "#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass CaDateOnlyToOrdinalWordsConverter : DefaultDateOnlyToOrdinalWordConverter\r\n{\r\n    public override string Convert(DateOnly date)\r\n    {\r\n        var equivalentDateTime = date.ToDateTime(TimeOnly.MinValue);\r\n        return Configurator.DateToOrdinalWordsConverter.Convert(equivalentDateTime);\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/DateToOrdinalWords/CaDateToOrdinalWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass CaDateToOrdinalWordsConverter : DefaultDateToOrdinalWordConverter\r\n{\r\n    public override string Convert(DateTime date) =>\r\n        date.ToString(\"d MMMM 'de' yyyy\");\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/DateToOrdinalWords/DefaultDateOnlyToOrdinalWordConverter.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass DefaultDateOnlyToOrdinalWordConverter : IDateOnlyToOrdinalWordConverter\r\n{\r\n    public virtual string Convert(DateOnly date) =>\r\n        date.Day.Ordinalize() + date.ToString(\" MMMM yyyy\");\r\n\r\n    public virtual string Convert(DateOnly date, GrammaticalCase grammaticalCase) =>\r\n        Convert(date);\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/DateToOrdinalWords/DefaultDateToOrdinalWordConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass DefaultDateToOrdinalWordConverter : IDateToOrdinalWordConverter\r\n{\r\n    public virtual string Convert(DateTime date) =>\r\n        date.Day.Ordinalize() + date.ToString(\" MMMM yyyy\");\r\n\r\n    public virtual string Convert(DateTime date, GrammaticalCase grammaticalCase) =>\r\n        Convert(date);\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/DateToOrdinalWords/EsDateOnlyToOrdinalWordsConverter.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass EsDateOnlyToOrdinalWordsConverter : DefaultDateOnlyToOrdinalWordConverter\r\n{\r\n    public override string Convert(DateOnly date)\r\n    {\r\n        var equivalentDateTime = date.ToDateTime(TimeOnly.MinValue);\r\n        return Configurator.DateToOrdinalWordsConverter.Convert(equivalentDateTime);\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/DateToOrdinalWords/EsDateToOrdinalWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass EsDateToOrdinalWordsConverter : DefaultDateToOrdinalWordConverter\r\n{\r\n    public override string Convert(DateTime date) =>\r\n        date.ToString(\"d 'de' MMMM 'de' yyyy\");\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/DateToOrdinalWords/FrDateOnlyToOrdinalWordsConverter.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass FrDateOnlyToOrdinalWordsConverter : DefaultDateOnlyToOrdinalWordConverter\r\n{\r\n    public override string Convert(DateOnly date)\r\n    {\r\n        var day = date.Day > 1 ? date.Day.ToString() : date.Day.Ordinalize();\r\n        return day + date.ToString(\" MMMM yyyy\");\r\n    }\r\n}\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/DateToOrdinalWords/FrDateToOrdinalWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass FrDateToOrdinalWordsConverter : DefaultDateToOrdinalWordConverter\r\n{\r\n    public override string Convert(DateTime date)\r\n    {\r\n        var day = date.Day > 1 ? date.Day.ToString() : date.Day.Ordinalize();\r\n        return day + date.ToString(\" MMMM yyyy\");\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/DateToOrdinalWords/IDateOnlyToOrdinalWordConverter.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// The interface used to localise the ToOrdinalWords method.\r\n/// </summary>\r\npublic interface IDateOnlyToOrdinalWordConverter\r\n{\r\n    /// <summary>\r\n    /// Converts the date to Ordinal Words\r\n    /// </summary>\r\n    string Convert(DateOnly date);\r\n\r\n    /// <summary>\r\n    /// Converts the date to Ordinal Words using the provided grammatical case\r\n    /// </summary>\r\n    string Convert(DateOnly date, GrammaticalCase grammaticalCase);\r\n}\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/DateToOrdinalWords/IDateToOrdinalWordConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// The interface used to localise the ToOrdinalWords method.\r\n/// </summary>\r\npublic interface IDateToOrdinalWordConverter\r\n{\r\n    /// <summary>\r\n    /// Converts the date to Ordinal Words\r\n    /// </summary>\r\n    string Convert(DateTime date);\r\n\r\n    /// <summary>\r\n    /// Converts the date to Ordinal Words using the provided grammatical case\r\n    /// </summary>\r\n    string Convert(DateTime date, GrammaticalCase grammaticalCase);\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/DateToOrdinalWords/LtDateOnlyToOrdinalWordsConverter.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass LtDateOnlyToOrdinalWordsConverter : IDateOnlyToOrdinalWordConverter\r\n{\r\n    public string Convert(DateOnly date) =>\r\n        date.ToString(\"yyyy 'm.' MMMM d 'd.'\");\r\n\r\n    public string Convert(DateOnly date, GrammaticalCase grammaticalCase) =>\r\n        Convert(date);\r\n}\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/DateToOrdinalWords/LtDateToOrdinalWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass LtDateToOrdinalWordsConverter : IDateToOrdinalWordConverter\r\n{\r\n    public string Convert(DateTime date) =>\r\n        date.ToString(\"yyyy 'm.' MMMM d 'd.'\");\r\n\r\n    public string Convert(DateTime date, GrammaticalCase grammaticalCase) =>\r\n        Convert(date);\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/DateToOrdinalWords/UsDateOnlyToOrdinalWordsConverter.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass UsDateOnlyToOrdinalWordsConverter : DefaultDateOnlyToOrdinalWordConverter\r\n{\r\n    public override string Convert(DateOnly date) =>\r\n        date.ToString(\"MMMM \") + date.Day.Ordinalize() + date.ToString(\", yyyy\");\r\n}\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/DateToOrdinalWords/UsDateToOrdinalWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass UsDateToOrdinalWordsConverter : DefaultDateToOrdinalWordConverter\r\n{\r\n    public override string Convert(DateTime date) =>\r\n        date.ToString(\"MMMM \") + date.Day.Ordinalize() + date.ToString(\", yyyy\");\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/ArabicFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass ArabicFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    const string DualPostfix = \"_Dual\";\r\n    const string PluralPostfix = \"_Plural\";\r\n\r\n    protected override string GetResourceKey(string resourceKey, int number)\r\n    {\r\n        //In Arabic pluralization 2 entities gets a different word.\r\n        if (number == 2)\r\n        {\r\n            return resourceKey + DualPostfix;\r\n        }\r\n\r\n        //In Arabic pluralization entities where the count is between 3 and 10 gets a different word.\r\n        if (number is >= 3 and <= 10)\r\n        {\r\n            return resourceKey + PluralPostfix;\r\n        }\r\n\r\n        return resourceKey;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/BulgarianFormatter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass BulgarianFormatter(CultureInfo culture)\r\n    : DefaultFormatter(culture)\r\n{\r\n    protected override string NumberToWords(TimeUnit unit, int number, CultureInfo culture) =>\r\n        number.ToWords(GetUnitGender(unit), culture);\r\n\r\n    static GrammaticalGender GetUnitGender(TimeUnit unit) =>\r\n        unit switch\r\n        {\r\n            TimeUnit.Hour or TimeUnit.Day or TimeUnit.Month => GrammaticalGender.Masculine,\r\n            _ => GrammaticalGender.Feminine\r\n        };\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/CatalanFormatter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass CatalanFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    protected override string Format(TimeUnit unit, string resourceKey, int number, bool toWords = false)\r\n    {\r\n        var resolvedKey = GetResourceKey(resourceKey, number);\r\n        var resourceString = Resources.GetResource(resolvedKey, Culture);\r\n\r\n        var gender = unit switch\r\n        {\r\n            TimeUnit.Hour or TimeUnit.Week => GrammaticalGender.Feminine,\r\n            _ => GrammaticalGender.Masculine\r\n        };\r\n\r\n        return string.Format(resourceString, toWords ? number.ToWords(gender, Culture) : number);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/CroatianFormatter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass CroatianFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    const string PaucalPostfix = \"_Paucal\";\r\n\r\n    protected override string GetResourceKey(string resourceKey, int number)\r\n    {\r\n        var mod10 = number % 10;\r\n        if (mod10 is > 1 and < 5 && number != 12 && number != 13 && number != 14)\r\n        {\r\n            return resourceKey + PaucalPostfix;\r\n        }\r\n\r\n        return resourceKey;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/CzechSlovakPolishFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass CzechSlovakPolishFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    const string PaucalPostfix = \"_Paucal\";\r\n\r\n    protected override string GetResourceKey(string resourceKey, int number)\r\n    {\r\n        if (number is > 1 and < 5)\r\n        {\r\n            return resourceKey + PaucalPostfix;\r\n        }\r\n\r\n        return resourceKey;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/DefaultFormatter.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Default implementation of IFormatter interface.\r\n/// </summary>\r\npublic class DefaultFormatter(CultureInfo culture) : IFormatter\r\n{\r\n    protected CultureInfo Culture { get; } = culture;\r\n\r\n    public DefaultFormatter(string localeCode)\r\n        : this(new CultureInfo(localeCode))\r\n    {\r\n    }\r\n\r\n    public virtual string DateHumanize_Now() =>\r\n        GetResourceForDate(TimeUnit.Millisecond, Tense.Past, 0);\r\n\r\n    public virtual string DateHumanize_Never() =>\r\n        Format(ResourceKeys.DateHumanize.Never);\r\n\r\n    /// <summary>\r\n    /// Returns the string representation of the provided DateTime\r\n    /// </summary>\r\n    public virtual string DateHumanize(TimeUnit timeUnit, Tense timeUnitTense, int unit) =>\r\n        GetResourceForDate(timeUnit, timeUnitTense, unit);\r\n\r\n    /// <summary>\r\n    /// 0 seconds\r\n    /// </summary>\r\n    /// <returns>Returns 0 seconds as the string representation of Zero TimeSpan</returns>\r\n    public virtual string TimeSpanHumanize_Zero() =>\r\n        GetResourceForTimeSpan(TimeUnit.Millisecond, 0, true);\r\n\r\n    /// <summary>\r\n    /// Returns the string representation of the provided TimeSpan\r\n    /// </summary>\r\n    /// <param name=\"timeUnit\">A time unit to represent.</param>\r\n    /// <exception cref=\"System.ArgumentOutOfRangeException\">Is thrown when timeUnit is larger than TimeUnit.Week</exception>\r\n    public virtual string TimeSpanHumanize(TimeUnit timeUnit, int unit, bool toWords = false) =>\r\n        GetResourceForTimeSpan(timeUnit, unit, toWords);\r\n\r\n    /// <inheritdoc/>\r\n    public virtual string TimeSpanHumanize_Age()\r\n    {\r\n        if (Resources.TryGetResource(\"TimeSpanHumanize_Age\", Culture, out var ageFormat))\r\n        {\r\n            return ageFormat;\r\n        }\r\n\r\n        return \"{0}\";\r\n    }\r\n\r\n    /// <inheritdoc cref=\"IFormatter.DataUnitHumanize(DataUnit, double, bool)\"/>\r\n    public virtual string DataUnitHumanize(DataUnit dataUnit, double count, bool toSymbol = true)\r\n    {\r\n        var resourceKey = (toSymbol, dataUnit) switch\r\n        {\r\n            (true, DataUnit.Bit) => \"DataUnit_BitSymbol\",\r\n            (true, DataUnit.Byte) => \"DataUnit_ByteSymbol\",\r\n            (true, DataUnit.Kilobyte) => \"DataUnit_KilobyteSymbol\",\r\n            (true, DataUnit.Megabyte) => \"DataUnit_MegabyteSymbol\",\r\n            (true, DataUnit.Gigabyte) => \"DataUnit_GigabyteSymbol\",\r\n            (true, DataUnit.Terabyte) => \"DataUnit_TerabyteSymbol\",\r\n            (true, _) => $\"DataUnit_{dataUnit}Symbol\",\r\n\r\n            (false, DataUnit.Bit) => \"DataUnit_Bit\",\r\n            (false, DataUnit.Byte) => \"DataUnit_Byte\",\r\n            (false, DataUnit.Kilobyte) => \"DataUnit_Kilobyte\",\r\n            (false, DataUnit.Megabyte) => \"DataUnit_Megabyte\",\r\n            (false, DataUnit.Gigabyte) => \"DataUnit_Gigabyte\",\r\n            (false, DataUnit.Terabyte) => \"DataUnit_Terabyte\",\r\n            (false, _) => $\"DataUnit_{dataUnit}\",\r\n        };\r\n\r\n        var resourceValue = Format(resourceKey);\r\n\r\n        if (!toSymbol && count > 1)\r\n        {\r\n            resourceValue += \"s\";\r\n        }\r\n\r\n        return resourceValue;\r\n    }\r\n\r\n    /// <inheritdoc />\r\n    public virtual string TimeUnitHumanize(TimeUnit timeUnit)\r\n    {\r\n        var resourceKey = ResourceKeys.TimeUnitSymbol.GetResourceKey(timeUnit);\r\n        return Format(resourceKey);\r\n    }\r\n\r\n    string GetResourceForDate(TimeUnit unit, Tense timeUnitTense, int count)\r\n    {\r\n        var resourceKey = ResourceKeys.DateHumanize.GetResourceKey(unit, timeUnitTense: timeUnitTense, count: count);\r\n        return count == 1 ? Format(resourceKey) : Format(unit, resourceKey, count);\r\n    }\r\n\r\n    string GetResourceForTimeSpan(TimeUnit unit, int count, bool toWords = false)\r\n    {\r\n        var resourceKey = ResourceKeys.TimeSpanHumanize.GetResourceKey(unit, count, toWords);\r\n        return count == 1 ? Format(resourceKey + (toWords ? \"_Words\" : \"\")) : Format(unit, resourceKey, count, toWords);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Formats the specified resource key.\r\n    /// </summary>\r\n    /// <param name=\"resourceKey\">The resource key.</param>\r\n    /// <exception cref=\"ArgumentException\">If the resource not exists on the specified culture.</exception>\r\n    protected virtual string Format(string resourceKey)\r\n    {\r\n        var resolvedKey = GetResourceKey(resourceKey);\r\n        return Resources.GetResource(resolvedKey, Culture);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Formats the specified resource key.\r\n    /// </summary>\r\n    /// <param name=\"unit\"></param>\r\n    /// <param name=\"resourceKey\">The resource key.</param>\r\n    /// <param name=\"number\">The number.</param>\r\n    /// <param name=\"toWords\"></param>\r\n    /// <exception cref=\"ArgumentException\">If the resource not exists on the specified culture.</exception>\r\n    protected virtual string Format(TimeUnit unit, string resourceKey, int number, bool toWords = false)\r\n    {\r\n        var resolvedKey = GetResourceKey(resourceKey, number);\r\n        var resourceString = Resources.GetResource(resolvedKey, Culture);\r\n\r\n        return string.Format(resourceString, toWords ? NumberToWords(unit, number, Culture) : number);\r\n    }\r\n\r\n    protected virtual string NumberToWords(TimeUnit unit, int number, CultureInfo culture) =>\r\n        number.ToWords(culture);\r\n\r\n    /// <summary>\r\n    /// Override this method if your locale has complex rules around multiple units; e.g. Arabic, Russian\r\n    /// </summary>\r\n    /// <param name=\"resourceKey\">The resource key that's being in formatting</param>\r\n    /// <param name=\"number\">The number of the units being used in formatting</param>\r\n    protected virtual string GetResourceKey(string resourceKey, int number) =>\r\n        resourceKey;\r\n\r\n    protected virtual string GetResourceKey(string resourceKey) =>\r\n        resourceKey;\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/FrenchFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass FrenchFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    const string DualPostfix = \"_Dual\";\r\n\r\n    protected override string GetResourceKey(string resourceKey, int number)\r\n    {\r\n        if (number == 2 && resourceKey is \"DateHumanize_MultipleDaysAgo\" or \"DateHumanize_MultipleDaysFromNow\")\r\n        {\r\n            return resourceKey + DualPostfix;\r\n        }\r\n\r\n        if (number == 0 && resourceKey.StartsWith(\"TimeSpanHumanize_Multiple\"))\r\n        {\r\n            return resourceKey + \"_Singular\";\r\n        }\r\n\r\n        return resourceKey;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/GermanFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass GermanFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    /// <inheritdoc />\r\n    public override string DataUnitHumanize(DataUnit dataUnit, double count, bool toSymbol = true) =>\r\n        base.DataUnitHumanize(dataUnit, count, toSymbol).TrimEnd('s');\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/HebrewFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass HebrewFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    const string DualPostfix = \"_Dual\";\r\n    const string PluralPostfix = \"_Plural\";\r\n\r\n    protected override string GetResourceKey(string resourceKey, int number)\r\n    {\r\n        //In Hebrew pluralization 2 entities gets a different word.\r\n        if (number == 2)\r\n        {\r\n            return resourceKey + DualPostfix;\r\n        }\r\n\r\n        //In Hebrew pluralization entities where the count is between 3 and 10 gets a different word.\r\n        //See http://lib.cet.ac.il/pages/item.asp?item=21585 for explanation\r\n        if (number is >= 3 and <= 10)\r\n        {\r\n            return resourceKey + PluralPostfix;\r\n        }\r\n\r\n        return resourceKey;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/IFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Implement this interface if your language has complex rules around dealing with numbers.\r\n/// For example in Romanian \"5 days\" is \"5 zile\", while \"24 days\" is \"24 de zile\" and\r\n/// in Arabic 2 days is يومين not 2 يوم\r\n/// </summary>\r\npublic interface IFormatter\r\n{\r\n    string DateHumanize_Now();\r\n\r\n    string DateHumanize_Never();\r\n\r\n    /// <summary>\r\n    /// Returns the string representation of the provided DateTime\r\n    /// </summary>\r\n    string DateHumanize(TimeUnit timeUnit, Tense timeUnitTense, int unit);\r\n\r\n    /// <summary>\r\n    /// 0 seconds\r\n    /// </summary>\r\n    /// <returns>Returns 0 seconds as the string representation of Zero TimeSpan</returns>\r\n    string TimeSpanHumanize_Zero();\r\n\r\n    /// <summary>\r\n    /// Returns the string representation of the provided TimeSpan\r\n    /// </summary>\r\n    string TimeSpanHumanize(TimeUnit timeUnit, int unit, bool toWords = false);\r\n\r\n    /// <summary>\r\n    /// Returns the age format that converts a humanized TimeSpan string to an age expression.\r\n    /// For instance, in English that format adds the \" old\" suffix, so that \"40 years\" becomes \"40 years old\".\r\n    /// </summary>\r\n    /// <returns>Age format</returns>\r\n    string TimeSpanHumanize_Age();\r\n\r\n    /// <summary>\r\n    /// Returns the string representation of the provided DataUnit, either as a symbol or full word\r\n    /// </summary>\r\n    /// <param name=\"dataUnit\">Data unit</param>\r\n    /// <param name=\"count\">Number of said units, to adjust for singular/plural forms</param>\r\n    /// <param name=\"toSymbol\">Indicates whether the data unit should be expressed as symbol or full word</param>\r\n    /// <returns>String representation of the provided DataUnit</returns>\r\n    string DataUnitHumanize(DataUnit dataUnit, double count, bool toSymbol = true);\r\n\r\n    /// <summary>\r\n    /// Returns the symbol for the given TimeUnit\r\n    /// </summary>\r\n    /// <param name=\"timeUnit\">Time unit</param>\r\n    /// <returns>String representation of the provided TimeUnit</returns>\r\n    string TimeUnitHumanize(TimeUnit timeUnit);\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/IcelandicFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass IcelandicFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    public override string DataUnitHumanize(DataUnit dataUnit, double count, bool toSymbol = true) =>\r\n        base.DataUnitHumanize(dataUnit, count, toSymbol).TrimEnd('s');\r\n\r\n    protected override string NumberToWords(TimeUnit unit, int number, CultureInfo culture) =>\r\n        number.ToWords(GetUnitGender(unit), culture);\r\n\r\n    static GrammaticalGender GetUnitGender(TimeUnit unit) =>\r\n        unit switch\r\n        {\r\n            TimeUnit.Day or TimeUnit.Month => GrammaticalGender.Masculine,\r\n            TimeUnit.Year => GrammaticalGender.Neuter,\r\n            _ => GrammaticalGender.Feminine\r\n        };\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/LithuanianFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass LithuanianFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    private static readonly HashSet<string> KeysWithoutNumberForms = [\"TimeSpanHumanize_Zero\", \"DateHumanize_Now\"];\r\n\r\n    protected override string GetResourceKey(string resourceKey, int number)\r\n    {\r\n        if (KeysWithoutNumberForms.Contains(resourceKey))\r\n        {\r\n            return resourceKey;\r\n        }\r\n\r\n        var grammaticalNumber = LithuanianNumberFormDetector.Detect(number);\r\n        var suffix = GetSuffix(grammaticalNumber);\r\n        return resourceKey + suffix;\r\n    }\r\n\r\n    static string GetSuffix(LithuanianNumberForm form)\r\n    {\r\n        if (form == LithuanianNumberForm.Singular)\r\n        {\r\n            return \"_Singular\";\r\n        }\r\n\r\n        if (form == LithuanianNumberForm.GenitivePlural)\r\n        {\r\n            return \"_Plural\";\r\n        }\r\n\r\n        return \"\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/LuxembourgishFormatter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass LuxembourgishFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    const string DualPostfix = \"_Dual\";\r\n\r\n    // https://lb.wikipedia.org/wiki/Eifeler_Reegel\r\n    const char EifelerRuleSuffix = 'n';\r\n#if NET8_0_OR_GREATER\r\n    static readonly SearchValues<char> EifelerRuleCharacters = SearchValues.Create(\"unitedzohay\");\r\n#else\r\n    const string EifelerRuleCharacters = \"unitedzohay\";\r\n#endif\r\n\r\n    public override string DataUnitHumanize(DataUnit dataUnit, double count, bool toSymbol = true) =>\r\n        base\r\n            .DataUnitHumanize(dataUnit, count, toSymbol)\r\n            .TrimEnd('s');\r\n\r\n    public static string ApplyEifelerRule(string word)\r\n        => word.TrimEnd(EifelerRuleSuffix);\r\n\r\n    public static string CheckForAndApplyEifelerRule(string word, string nextWord)\r\n        => DoesEifelerRuleApply(nextWord.AsSpan())\r\n            ? word.TrimEnd(EifelerRuleSuffix)\r\n            : word;\r\n\r\n    public static bool DoesEifelerRuleApply(CharSpan nextWord)\r\n        => !nextWord.IsWhiteSpace()\r\n           && !EifelerRuleCharacters.Contains(nextWord[0]);\r\n\r\n    protected override string Format(TimeUnit unit, string resourceKey, int number, bool toWords = false)\r\n    {\r\n        var resourceString = Resources.GetResource(GetResourceKey(resourceKey, number), Culture);\r\n        var numberAsWord = number.ToWords(GetUnitGender(unit), Culture);\r\n\r\n        return string.Format(resourceString,\r\n            toWords ? numberAsWord : number,\r\n            DoesEifelerRuleApply(numberAsWord.AsSpan()) ? \"\" : EifelerRuleSuffix);\r\n    }\r\n\r\n    protected override string GetResourceKey(string resourceKey, int number)\r\n    {\r\n        if (number == 2 &&\r\n            resourceKey is \"DateHumanize_MultipleDaysAgo\" or \"DateHumanize_MultipleDaysFromNow\")\r\n        {\r\n            return resourceKey + DualPostfix;\r\n        }\r\n\r\n        return resourceKey;\r\n    }\r\n\r\n    static GrammaticalGender GetUnitGender(TimeUnit unit) =>\r\n        unit switch\r\n        {\r\n            TimeUnit.Day or TimeUnit.Month or TimeUnit.Year => GrammaticalGender.Masculine,\r\n            _ => GrammaticalGender.Feminine\r\n        };\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/MalteseFormatter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass MalteseFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    protected override string GetResourceKey(string resourceKey, int number)\r\n    {\r\n        if (number != 2)\r\n        {\r\n            return resourceKey;\r\n        }\r\n\r\n        return resourceKey switch\r\n        {\r\n            \"DateHumanize_MultipleDaysAgo\" => \"DateHumanize_MultipleDaysAgo_Dual\",\r\n            \"DateHumanize_MultipleDaysFromNow\" => \"DateHumanize_MultipleDaysFromNow_Dual\",\r\n            \"DateHumanize_MultipleHoursAgo\" => \"DateHumanize_MultipleHoursAgo_Dual\",\r\n            \"DateHumanize_MultipleHoursFromNow\" => \"DateHumanize_MultipleHoursFromNow_Dual\",\r\n            \"DateHumanize_MultipleMonthsAgo\" => \"DateHumanize_MultipleMonthsAgo_Dual\",\r\n            \"DateHumanize_MultipleMonthsFromNow\" => \"DateHumanize_MultipleMonthsFromNow_Dual\",\r\n            \"DateHumanize_MultipleYearsAgo\" => \"DateHumanize_MultipleYearsAgo_Dual\",\r\n            \"DateHumanize_MultipleYearsFromNow\" => \"DateHumanize_MultipleYearsFromNow_Dual\",\r\n            \"TimeSpanHumanize_MultipleDays\" => \"TimeSpanHumanize_MultipleDays_Dual\",\r\n            \"TimeSpanHumanize_MultipleYears\" => \"TimeSpanHumanize_MultipleYears_Dual\",\r\n            \"TimeSpanHumanize_MultipleMonths\" => \"TimeSpanHumanize_MultipleMonths_Dual\",\r\n            \"TimeSpanHumanize_MultipleHours\" => \"TimeSpanHumanize_MultipleHours_Dual\",\r\n            \"TimeSpanHumanize_MultipleWeeks\" => \"TimeSpanHumanize_MultipleWeeks_Dual\",\r\n            _ => resourceKey,\r\n        };\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/RomanianFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass RomanianFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    const int PrepositionIndicatingDecimals = 2;\r\n    const int MaxNumeralWithNoPreposition = 19;\r\n    const int MinNumeralWithNoPreposition = 1;\r\n    const string UnitPreposition = \" de\";\r\n\r\n    static readonly double Divider = Math.Pow(10, PrepositionIndicatingDecimals);\r\n\r\n    protected override string Format(TimeUnit unit, string resourceKey, int number, bool toWords = false)\r\n    {\r\n        var format = Resources.GetResource(GetResourceKey(resourceKey, number), Culture);\r\n        var preposition = ShouldUsePreposition(number)\r\n            ? UnitPreposition\r\n            : string.Empty;\r\n\r\n        return string.Format(format, number, preposition);\r\n    }\r\n\r\n    static bool ShouldUsePreposition(int number)\r\n    {\r\n        var prepositionIndicatingNumeral = Math.Abs(number % Divider);\r\n        return prepositionIndicatingNumeral is < MinNumeralWithNoPreposition or > MaxNumeralWithNoPreposition;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/RussianFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass RussianFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    /// <inheritdoc />\r\n    public override string DataUnitHumanize(DataUnit dataUnit, double count, bool toSymbol = true) =>\r\n        base.DataUnitHumanize(dataUnit, count, toSymbol).TrimEnd('s');\r\n    protected override string GetResourceKey(string resourceKey, int number)\r\n    {\r\n        var grammaticalNumber = RussianGrammaticalNumberDetector.Detect(number);\r\n        return grammaticalNumber switch\r\n        {\r\n            RussianGrammaticalNumber.Singular => resourceKey + \"_Singular\",\r\n            RussianGrammaticalNumber.Paucal => resourceKey + \"_Paucal\",\r\n            _ => resourceKey\r\n        };\r\n    }\r\n\r\n    protected override string NumberToWords(TimeUnit unit, int number, CultureInfo culture) =>\r\n        number.ToWords(GetUnitGender(unit), culture);\r\n\r\n\r\n    static GrammaticalGender GetUnitGender(TimeUnit unit) =>\r\n        unit switch\r\n        {\r\n            TimeUnit.Hour or TimeUnit.Day or TimeUnit.Month or TimeUnit.Year => GrammaticalGender.Masculine,\r\n            _ => GrammaticalGender.Feminine\r\n        };\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/SerbianFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass SerbianFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    const string PaucalPostfix = \"_Paucal\";\r\n\r\n    protected override string GetResourceKey(string resourceKey, int number)\r\n    {\r\n        var mod10 = number % 10;\r\n        if (mod10 is > 1 and < 5)\r\n        {\r\n            return resourceKey + PaucalPostfix;\r\n        }\r\n\r\n        return resourceKey;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/SlovenianFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass SlovenianFormatter(CultureInfo culture) :\r\n    DefaultFormatter(culture)\r\n{\r\n    const string DualPostfix = \"_Dual\";\r\n    const string TrialQuadralPostfix = \"_Paucal\";\r\n\r\n    protected override string GetResourceKey(string resourceKey, int number)\r\n    {\r\n        if (number == 2)\r\n        {\r\n            return resourceKey + DualPostfix;\r\n        }\r\n\r\n        // When the count is three or four some words have a different form when counting in Slovenian language\r\n        if (number is 3 or 4)\r\n        {\r\n            return resourceKey + TrialQuadralPostfix;\r\n        }\r\n\r\n        return resourceKey;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Formatters/UkrainianFormatter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass UkrainianFormatter(CultureInfo culture)\r\n    : DefaultFormatter(culture)\r\n{\r\n    protected override string GetResourceKey(string resourceKey, int number)\r\n    {\r\n        var grammaticalNumber = RussianGrammaticalNumberDetector.Detect(number);\r\n        return grammaticalNumber switch\r\n        {\r\n            RussianGrammaticalNumber.Singular => resourceKey + \"_Singular\",\r\n            RussianGrammaticalNumber.Paucal => resourceKey + \"_Paucal\",\r\n            _ => resourceKey\r\n        };\r\n    }\r\n\r\n    protected override string NumberToWords(TimeUnit unit, int number, CultureInfo culture) =>\r\n        number.ToWords(GetUnitGender(unit), culture);\r\n\r\n    static GrammaticalGender GetUnitGender(TimeUnit unit) =>\r\n        unit switch\r\n        {\r\n            TimeUnit.Day or TimeUnit.Week or TimeUnit.Month or TimeUnit.Year => GrammaticalGender.Masculine,\r\n            _ => GrammaticalGender.Feminine\r\n        };\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/GrammaticalNumber/LithuanianNumberForm.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nenum LithuanianNumberForm\r\n{\r\n    Singular,\r\n    Plural,\r\n    GenitivePlural\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/GrammaticalNumber/LithuanianNumberFormDetector.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nstatic class LithuanianNumberFormDetector\r\n{\r\n    public static LithuanianNumberForm Detect(long number)\r\n    {\r\n        var tens = number % 100 / 10;\r\n        var units = number % 10;\r\n\r\n        if (tens == 1 || units == 0) // 10-19, 20, 30, 40 ... 100, 110 ..\r\n        {\r\n            return LithuanianNumberForm.GenitivePlural;\r\n        }\r\n\r\n        if (units == 1) // 1, 21, 31, 41 ... 91, 101, 121 ...\r\n        {\r\n            return LithuanianNumberForm.Singular;\r\n        }\r\n\r\n        // 2-9, 22-29, 32 ...\r\n        return LithuanianNumberForm.Plural;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/GrammaticalNumber/RussianGrammaticalNumber.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nenum RussianGrammaticalNumber\r\n{\r\n    Singular,\r\n    Paucal,\r\n    Plural\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/GrammaticalNumber/RussianGrammaticalNumberDetector.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nstatic class RussianGrammaticalNumberDetector\r\n{\r\n    public static RussianGrammaticalNumber Detect(long number)\r\n    {\r\n        var tens = number % 100 / 10;\r\n        if (tens != 1)\r\n        {\r\n            var unity = number % 10;\r\n\r\n            if (unity == 1) // 1, 21, 31, 41 ... 91, 101, 121 ...\r\n            {\r\n                return RussianGrammaticalNumber.Singular;\r\n            }\r\n\r\n            if (unity is > 1 and < 5) // 2, 3, 4, 22, 23, 24 ...\r\n            {\r\n                return RussianGrammaticalNumber.Paucal;\r\n            }\r\n        }\r\n\r\n        return RussianGrammaticalNumber.Plural;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/AfrikaansNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass AfrikaansNumberToWordsConverter :\r\n    GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"nul\", \"een\", \"twee\", \"drie\", \"vier\", \"vyf\", \"ses\", \"sewe\", \"agt\", \"nege\", \"tien\", \"elf\", \"twaalf\", \"dertien\", \"veertien\", \"vyftien\", \"sestien\", \"sewentien\", \"agtien\", \"negentien\"];\r\n    static readonly string[] TensMap = [\"nul\", \"tien\", \"twintig\", \"dertig\", \"veertig\", \"vyftig\", \"sestig\", \"sewentig\", \"tagtig\", \"negentig\"];\r\n\r\n    static readonly FrozenDictionary<int, string> OrdinalExceptions = new Dictionary<int, string>\r\n    {\r\n        {\r\n            0, \"nulste\"\r\n        },\r\n        {\r\n            1, \"eerste\"\r\n        },\r\n        {\r\n            3, \"derde\"\r\n        },\r\n        {\r\n            7, \"sewende\"\r\n        },\r\n        {\r\n            8, \"agste\"\r\n        },\r\n        {\r\n            9, \"negende\"\r\n        },\r\n        {\r\n            10, \"tiende\"\r\n        },\r\n        {\r\n            14, \"veertiende\"\r\n        },\r\n        {\r\n            17, \"sewentiende\"\r\n        },\r\n        {\r\n            19, \"negentiende\"\r\n        }\r\n    }.ToFrozenDictionary();\r\n\r\n    public override string Convert(long number)\r\n    {\r\n        if (number is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        return Convert((int)number, false);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number) =>\r\n        Convert(number, true);\r\n\r\n    string Convert(int number, bool isOrdinal)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return GetUnitValue(0, isOrdinal);\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"minus {Convert(-number)}\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number / 1000000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000000)} miljard\");\r\n            number %= 1000000000;\r\n        }\r\n\r\n        if (number / 1000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000)} miljoen\");\r\n            number %= 1000000;\r\n        }\r\n\r\n        if (number / 1000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000)} duisend\");\r\n            number %= 1000;\r\n        }\r\n\r\n        if (number / 100 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 100)} honderd\");\r\n            number %= 100;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            //if (parts.Count != 0)\r\n            //    parts.Add(\"en\");\r\n\r\n            if (number < 20)\r\n            {\r\n                if (parts.Count > 0)\r\n                {\r\n                    parts.Add(\"en\");\r\n                }\r\n\r\n                parts.Add(GetUnitValue(number, isOrdinal));\r\n            }\r\n            else\r\n            {\r\n                var lastPartValue = number / 10 * 10;\r\n                var lastPart = TensMap[number / 10];\r\n                if (number % 10 > 0)\r\n                {\r\n                    lastPart = $\"{GetUnitValue(number % 10, false)} en {(isOrdinal ? GetUnitValue(lastPartValue, true) : lastPart)}\";\r\n                }\r\n                else if (number % 10 == 0)\r\n                {\r\n                    lastPart = $\"{(parts.Count > 0 ? \"en \" : \"\")}{lastPart}{(isOrdinal ? \"ste\" : \"\")}\";\r\n                }\r\n                else if (isOrdinal)\r\n                {\r\n                    lastPart = lastPart.TrimEnd('~') + \"ste\";\r\n                }\r\n\r\n                parts.Add(lastPart);\r\n            }\r\n        }\r\n        else if (isOrdinal)\r\n        {\r\n            parts[^1] += \"ste\";\r\n        }\r\n\r\n        var toWords = string.Join(\" \", parts);\r\n\r\n        if (isOrdinal)\r\n        {\r\n            toWords = RemoveOnePrefix(toWords);\r\n        }\r\n\r\n        return toWords;\r\n    }\r\n\r\n    static string GetUnitValue(int number, bool isOrdinal)\r\n    {\r\n        if (isOrdinal)\r\n        {\r\n            if (ExceptionNumbersToWords(number, out var exceptionString))\r\n            {\r\n                return exceptionString;\r\n            }\r\n\r\n            if (number > 19)\r\n            {\r\n                return TensMap[number / 10] + \"ste\";\r\n            }\r\n\r\n            return UnitsMap[number] + \"de\";\r\n        }\r\n\r\n        return UnitsMap[number];\r\n    }\r\n\r\n    static string RemoveOnePrefix(string toWords)\r\n    {\r\n        // one hundred => hundredth\r\n        if (toWords.StartsWith(\"een\", StringComparison.Ordinal) &&\r\n            !toWords.StartsWith(\"een en\", StringComparison.Ordinal))\r\n        {\r\n            toWords = toWords[4..];\r\n        }\r\n\r\n        return toWords;\r\n    }\r\n\r\n    static bool ExceptionNumbersToWords(int number, [NotNullWhen(true)] out string? words) =>\r\n        OrdinalExceptions.TryGetValue(number, out words);\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/ArabicNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass ArabicNumberToWordsConverter :\r\n    GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] Groups = [\"مئة\", \"ألف\", \"مليون\", \"مليار\", \"تريليون\", \"كوادريليون\", \"كوينتليون\", \"سكستيليون\"];\r\n    static readonly string[] AppendedGroups = [\"\", \"ألفاً\", \"مليوناً\", \"ملياراً\", \"تريليوناً\", \"كوادريليوناً\", \"كوينتليوناً\", \"سكستيليوناً\"];\r\n    static readonly string[] PluralGroups = [\"\", \"آلاف\", \"ملايين\", \"مليارات\", \"تريليونات\", \"كوادريليونات\", \"كوينتليونات\", \"سكستيليونات\"];\r\n    static readonly string[] OnesGroup = [\"\", \"واحد\", \"اثنان\", \"ثلاثة\", \"أربعة\", \"خمسة\", \"ستة\", \"سبعة\", \"ثمانية\", \"تسعة\", \"عشرة\", \"أحد عشر\", \"اثنا عشر\", \"ثلاثة عشر\", \"أربعة عشر\", \"خمسة عشر\", \"ستة عشر\", \"سبعة عشر\", \"ثمانية عشر\", \"تسعة عشر\"];\r\n    static readonly string[] TensGroup = [\"\", \"عشرة\", \"عشرون\", \"ثلاثون\", \"أربعون\", \"خمسون\", \"ستون\", \"سبعون\", \"ثمانون\", \"تسعون\"];\r\n    static readonly string[] HundredsGroup = [\"\", \"مئة\", \"مئتان\", \"ثلاث مئة\", \"أربع مئة\", \"خمس مئة\", \"ست مئة\", \"سبع مئة\", \"ثمان مئة\", \"تسع مئة\"];\r\n    static readonly string[] AppendedTwos = [\"مئتان\", \"ألفان\", \"مليونان\", \"ملياران\", \"تريليونان\", \"كوادريليونان\", \"كوينتليونان\", \"سكستيليونلن\"];\r\n    static readonly string[] Twos = [\"مئتان\", \"ألفان\", \"مليونان\", \"ملياران\", \"تريليونان\", \"كوادريليونان\", \"كوينتليونان\", \"سكستيليونان\"];\r\n\r\n    static readonly string[] FeminineOnesGroup = [\"\", \"واحدة\", \"اثنتان\", \"ثلاث\", \"أربع\", \"خمس\", \"ست\", \"سبع\", \"ثمان\", \"تسع\", \"عشر\", \"إحدى عشرة\", \"اثنتا عشرة\", \"ثلاث عشرة\", \"أربع عشرة\", \"خمس عشرة\", \"ست عشرة\", \"سبع عشرة\", \"ثمان عشرة\", \"تسع عشرة\"];\r\n\r\n    public override string Convert(long number, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return \"صفر\";\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"سالب {Convert(-number, gender)}\";\r\n        }\r\n\r\n        var result = string.Empty;\r\n        var groupLevel = 0;\r\n\r\n        while (number >= 1)\r\n        {\r\n            var groupNumber = number % 1000;\r\n            number /= 1000;\r\n\r\n            var tens = groupNumber % 100;\r\n            var hundreds = groupNumber / 100;\r\n            var process = string.Empty;\r\n\r\n            if (hundreds > 0)\r\n            {\r\n                if (tens == 0 && hundreds == 2)\r\n                {\r\n                    process = AppendedTwos[0];\r\n                }\r\n                else\r\n                {\r\n                    process = HundredsGroup[hundreds];\r\n                }\r\n            }\r\n\r\n            if (tens > 0)\r\n            {\r\n                if (tens < 20)\r\n                {\r\n                    if (tens == 2 && hundreds == 0 && groupLevel > 0)\r\n                    {\r\n                        if (number is 2000 or 2000000 or 2000000000)\r\n                        {\r\n                            process = AppendedTwos[groupLevel];\r\n                        }\r\n                        else\r\n                        {\r\n                            process = Twos[groupLevel];\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        if (process != string.Empty)\r\n                        {\r\n                            process += \" و \";\r\n                        }\r\n\r\n                        if (tens == 1 && groupLevel > 0 && hundreds == 0)\r\n                        {\r\n                            process += \" \";\r\n                        }\r\n                        else\r\n                        {\r\n                            process += gender == GrammaticalGender.Feminine && groupLevel == 0 ? FeminineOnesGroup[tens] : OnesGroup[tens];\r\n                        }\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    var ones = tens % 10;\r\n                    tens /= 10;\r\n\r\n                    if (ones > 0)\r\n                    {\r\n                        if (process != string.Empty)\r\n                        {\r\n                            process += \" و \";\r\n                        }\r\n\r\n                        process += gender == GrammaticalGender.Feminine ? FeminineOnesGroup[ones] : OnesGroup[ones];\r\n                    }\r\n\r\n                    if (process != string.Empty)\r\n                    {\r\n                        process += \" و \";\r\n                    }\r\n\r\n                    process += TensGroup[tens];\r\n                }\r\n            }\r\n\r\n            if (process != string.Empty)\r\n            {\r\n                if (groupLevel > 0)\r\n                {\r\n                    if (result != string.Empty)\r\n                    {\r\n                        result = $\"و {result}\";\r\n                    }\r\n\r\n                    if (groupNumber != 2)\r\n                    {\r\n                        if (groupNumber % 100 != 1)\r\n                        {\r\n                            if (groupNumber is >= 3 and <= 10)\r\n                            {\r\n                                result = $\"{PluralGroups[groupLevel]} {result}\";\r\n                            }\r\n                            else\r\n                            {\r\n                                result = $\"{(result != string.Empty ? AppendedGroups[groupLevel] : Groups[groupLevel])} {result}\";\r\n                            }\r\n                        }\r\n                        else\r\n                        {\r\n                            result = $\"{Groups[groupLevel]} {result}\";\r\n                        }\r\n                    }\r\n                }\r\n\r\n                result = $\"{process} {result}\";\r\n            }\r\n\r\n            groupLevel++;\r\n        }\r\n\r\n        return result.Trim();\r\n    }\r\n\r\n    static readonly Dictionary<string, string> OrdinalExceptions = new()\r\n    {\r\n        {\r\n            \"واحد\", \"الحادي\"\r\n        },\r\n        {\r\n            \"أحد\", \"الحادي\"\r\n        },\r\n        {\r\n            \"اثنان\", \"الثاني\"\r\n        },\r\n        {\r\n            \"اثنا\", \"الثاني\"\r\n        },\r\n        {\r\n            \"ثلاثة\", \"الثالث\"\r\n        },\r\n        {\r\n            \"أربعة\", \"الرابع\"\r\n        },\r\n        {\r\n            \"خمسة\", \"الخامس\"\r\n        },\r\n        {\r\n            \"ستة\", \"السادس\"\r\n        },\r\n        {\r\n            \"سبعة\", \"السابع\"\r\n        },\r\n        {\r\n            \"ثمانية\", \"الثامن\"\r\n        },\r\n        {\r\n            \"تسعة\", \"التاسع\"\r\n        },\r\n        {\r\n            \"عشرة\", \"العاشر\"\r\n        },\r\n    };\r\n\r\n    static readonly Dictionary<string, string> FeminineOrdinalExceptions = new()\r\n    {\r\n        {\r\n            \"واحدة\", \"الحادية\"\r\n        },\r\n        {\r\n            \"إحدى\", \"الحادية\"\r\n        },\r\n        {\r\n            \"اثنتان\", \"الثانية\"\r\n        },\r\n        {\r\n            \"اثنتا\", \"الثانية\"\r\n        },\r\n        {\r\n            \"ثلاث\", \"الثالثة\"\r\n        },\r\n        {\r\n            \"أربع\", \"الرابعة\"\r\n        },\r\n        {\r\n            \"خمس\", \"الخامسة\"\r\n        },\r\n        {\r\n            \"ست\", \"السادسة\"\r\n        },\r\n        {\r\n            \"سبع\", \"السابعة\"\r\n        },\r\n        {\r\n            \"ثمان\", \"الثامنة\"\r\n        },\r\n        {\r\n            \"تسع\", \"التاسعة\"\r\n        },\r\n        {\r\n            \"عشر\", \"العاشرة\"\r\n        },\r\n    };\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return \"الصفر\";\r\n        }\r\n\r\n        var beforeOneHundredNumber = number % 100;\r\n        var overTensPart = number / 100 * 100;\r\n        var beforeOneHundredWord = string.Empty;\r\n        var overTensWord = string.Empty;\r\n\r\n        if (beforeOneHundredNumber > 0)\r\n        {\r\n            beforeOneHundredWord = Convert(beforeOneHundredNumber, gender);\r\n            beforeOneHundredWord = ParseNumber(beforeOneHundredWord, beforeOneHundredNumber, gender);\r\n        }\r\n\r\n        if (overTensPart > 0)\r\n        {\r\n            overTensWord = Convert(overTensPart);\r\n            overTensWord = ParseNumber(overTensWord, overTensPart, gender);\r\n        }\r\n\r\n        var word = beforeOneHundredWord +\r\n                   (overTensPart > 0\r\n                       ? (string.IsNullOrWhiteSpace(beforeOneHundredWord) ? string.Empty : \" بعد \") + overTensWord\r\n                       : string.Empty);\r\n        return word.Trim();\r\n    }\r\n\r\n    static string ParseNumber(string word, int number, GrammaticalGender gender)\r\n    {\r\n        if (number == 1)\r\n        {\r\n            return gender == GrammaticalGender.Feminine ? \"الأولى\" : \"الأول\";\r\n        }\r\n\r\n        if (number <= 10)\r\n        {\r\n            var ordinals = gender == GrammaticalGender.Feminine ? FeminineOrdinalExceptions : OrdinalExceptions;\r\n            foreach (var kv in ordinals.Where(kv => word.EndsWith(kv.Key)))\r\n            {\r\n                // replace word with exception\r\n                return StringHumanizeExtensions.Concat(\r\n                    word.AsSpan(0, word.Length - kv.Key.Length),\r\n                    kv.Value.AsSpan());\r\n            }\r\n        }\r\n        else if (number is > 10 and < 100)\r\n        {\r\n            var parts = word.Split(' ');\r\n            var newParts = new string[parts.Length];\r\n            var count = 0;\r\n\r\n            foreach (var part in parts)\r\n            {\r\n                var newPart = part;\r\n                var oldPart = part;\r\n\r\n                var ordinals = gender == GrammaticalGender.Feminine ? FeminineOrdinalExceptions : OrdinalExceptions;\r\n                foreach (var kv in ordinals.Where(kv => oldPart.EndsWith(kv.Key)))\r\n                {\r\n                    // replace word with exception\r\n                    newPart = StringHumanizeExtensions.Concat(\r\n                        oldPart.AsSpan(0, oldPart.Length - kv.Key.Length),\r\n                        kv.Value.AsSpan());\r\n                }\r\n\r\n                if (number > 19 && newPart == oldPart && oldPart.Length > 1)\r\n                {\r\n                    newPart = \"ال\" + oldPart;\r\n                }\r\n\r\n                newParts[count++] = newPart;\r\n            }\r\n\r\n            word = string.Join(\" \", newParts);\r\n        }\r\n        else\r\n        {\r\n            word = \"ال\" + word;\r\n        }\r\n\r\n        return word;\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/ArmenianNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass ArmenianNumberToWordsConverter :\r\n    GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"զրո\", \"մեկ\", \"երկու\", \"երեք\", \"չորս\", \"հինգ\", \"վեց\", \"յոթ\", \"ութ\", \"ինը\", \"տաս\", \"տասնմեկ\", \"տասներկու\", \"տասներեք\", \"տասնչորս\", \"տասնհինգ\", \"տասնվեց\", \"տասնյոթ\", \"տասնութ\", \"տասնինը\"];\r\n    static readonly string[] TensMap = [\"զրո\", \"տաս\", \"քսան\", \"երեսուն\", \"քառասուն\", \"հիսուն\", \"վաթսուն\", \"յոթանասուն\", \"ութսուն\", \"իննսուն\"];\r\n\r\n    static readonly FrozenDictionary<long, string> OrdinalExceptions = new Dictionary<long, string>\r\n    {\r\n        {\r\n            0, \"զրոյական\"\r\n        },\r\n        {\r\n            1, \"առաջին\"\r\n        },\r\n        {\r\n            2, \"երկրորդ\"\r\n        },\r\n        {\r\n            3, \"երրորդ\"\r\n        },\r\n        {\r\n            4, \"չորրորդ\"\r\n        }\r\n    }.ToFrozenDictionary();\r\n\r\n    public override string Convert(long number) =>\r\n        ConvertImpl(number, false);\r\n\r\n    public override string ConvertToOrdinal(int number)\r\n    {\r\n        if (ExceptionNumbersToWords(number, out var exceptionString))\r\n        {\r\n            return exceptionString;\r\n        }\r\n\r\n        return ConvertImpl(number, true);\r\n    }\r\n\r\n    string ConvertImpl(long number, bool isOrdinal)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return GetUnitValue(0, isOrdinal);\r\n        }\r\n\r\n        if (number == long.MinValue)\r\n        {\r\n            return \"մինուս ինը քվինտիլիոն \" +\r\n                   \"երկու հարյուր քսաներեք կվադրիլիոն \" +\r\n                   \"երեք հարյուր յոթանասուներկու տրիլիոն \" +\r\n                   \"երեսունվեց միլիարդ \" +\r\n                   \"ութ հարյուր հիսունչորս միլիոն \" +\r\n                   \"յոթ հարյուր յոթանասունհինգ հազար \" +\r\n                   \"ութ հարյուր ութ\";\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"մինուս {ConvertImpl(-number, isOrdinal)}\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number / 1000000000000000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000000000000000)} քվինտիլիոն\");\r\n            number %= 1000000000000000000;\r\n        }\r\n\r\n        if (number / 1000000000000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000000000000)} կվադրիլիոն\");\r\n            number %= 1000000000000000;\r\n        }\r\n\r\n        if (number / 1000000000000 > 0)\r\n\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000000000)} տրիլիոն\");\r\n            number %= 1000000000000;\r\n        }\r\n\r\n        if (number / 1000000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000000)} միլիարդ\");\r\n            number %= 1000000000;\r\n        }\r\n\r\n        if (number / 1000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000)} միլիոն\");\r\n            number %= 1000000;\r\n        }\r\n\r\n        if (number / 1000 > 0)\r\n        {\r\n            if (number / 1000 == 1)\r\n            {\r\n                parts.Add(\"հազար\");\r\n            }\r\n            else\r\n            {\r\n                parts.Add($\"{Convert(number / 1000)} հազար\");\r\n            }\r\n\r\n            number %= 1000;\r\n        }\r\n\r\n        if (number / 100 > 0)\r\n        {\r\n            if (number / 100 == 1)\r\n            {\r\n                parts.Add(\"հարյուր\");\r\n            }\r\n            else\r\n            {\r\n                parts.Add($\"{Convert(number / 100)} հարյուր\");\r\n            }\r\n\r\n            number %= 100;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            if (number < 20)\r\n            {\r\n                parts.Add(GetUnitValue(number, isOrdinal));\r\n            }\r\n            else\r\n            {\r\n                var lastPart = TensMap[number / 10];\r\n                if (number % 10 > 0)\r\n                {\r\n                    lastPart += $\"{GetUnitValue(number % 10, isOrdinal)}\";\r\n                }\r\n                else if (isOrdinal)\r\n                {\r\n                    lastPart += \"երորդ\";\r\n                }\r\n\r\n                parts.Add(lastPart);\r\n            }\r\n        }\r\n        else if (isOrdinal)\r\n        {\r\n            parts[^1] += \"երորդ\";\r\n        }\r\n\r\n        var toWords = string.Join(\" \", parts);\r\n\r\n        //if (isOrdinal)\r\n        //{\r\n        //    toWords = RemoveOnePrefix(toWords);\r\n        //}\r\n\r\n        return toWords;\r\n    }\r\n\r\n    static string GetUnitValue(long number, bool isOrdinal)\r\n    {\r\n        if (isOrdinal)\r\n        {\r\n            return UnitsMap[number] + \"երորդ\";\r\n        }\r\n\r\n        return UnitsMap[number];\r\n    }\r\n\r\n    static bool ExceptionNumbersToWords(long number, [NotNullWhen(true)] out string? words) =>\r\n        OrdinalExceptions.TryGetValue(number, out words);\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/AzerbaijaniNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass AzerbaijaniNumberToWordsConverter :\r\n    GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"sıfır\", \"bir\", \"iki\", \"üç\", \"dörd\", \"beş\", \"altı\", \"yeddi\", \"səkkiz\", \"doqquz\"];\r\n    static readonly string[] TensMap = [\"sıfır\", \"on\", \"iyirmi\", \"otuz\", \"qırx\", \"əlli\", \"altmış\", \"yetmiş\", \"səksən\", \"doxsan\"];\r\n\r\n    static readonly FrozenDictionary<char, string> OrdinalSuffix = new Dictionary<char, string>\r\n    {\r\n        {\r\n            'ı', \"ıncı\"\r\n        },\r\n        {\r\n            'i', \"inci\"\r\n        },\r\n        {\r\n            'u', \"uncu\"\r\n        },\r\n        {\r\n            'ü', \"üncü\"\r\n        },\r\n        {\r\n            'o', \"uncu\"\r\n        },\r\n        {\r\n            'ö', \"üncü\"\r\n        },\r\n        {\r\n            'e', \"inci\"\r\n        },\r\n        {\r\n            'a', \"ıncı\"\r\n        },\r\n        {\r\n            'ə', \"inci\"\r\n        },\r\n    }.ToFrozenDictionary();\r\n\r\n    public override string Convert(long input)\r\n    {\r\n        if (input is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        var number = (int)input;\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[0];\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"mənfi {Convert(-number)}\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number / 1000000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000000)} milyard\");\r\n            number %= 1000000000;\r\n        }\r\n\r\n        if (number / 1000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000)} milyon\");\r\n            number %= 1000000;\r\n        }\r\n\r\n        var thousand = number / 1000;\r\n        if (thousand > 0)\r\n        {\r\n            parts.Add($\"{(thousand > 1 ? Convert(thousand) : \"\")} min\".Trim());\r\n            number %= 1000;\r\n        }\r\n\r\n        var hundred = number / 100;\r\n        if (hundred > 0)\r\n        {\r\n            parts.Add($\"{(hundred > 1 ? Convert(hundred) : \"\")} yüz\".Trim());\r\n            number %= 100;\r\n        }\r\n\r\n        if (number / 10 > 0)\r\n        {\r\n            parts.Add(TensMap[number / 10]);\r\n            number %= 10;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(UnitsMap[number]);\r\n        }\r\n\r\n        var toWords = string.Join(\" \", parts);\r\n\r\n        return toWords;\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number)\r\n    {\r\n        var word = Convert(number);\r\n        var wordSuffix = string.Empty;\r\n        var suffixFoundOnLastVowel = false;\r\n\r\n        for (var i = word.Length - 1; i >= 0; i--)\r\n        {\r\n            if (OrdinalSuffix.TryGetValue(word[i], out wordSuffix))\r\n            {\r\n                suffixFoundOnLastVowel = i == word.Length - 1;\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (word[^1] == 't')\r\n        {\r\n            word = StringHumanizeExtensions.Concat(word.AsSpan(0, word.Length - 1), 'd');\r\n        }\r\n\r\n        if (suffixFoundOnLastVowel)\r\n        {\r\n            word = word[..^1];\r\n        }\r\n\r\n        return $\"{word}{wordSuffix}\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/BanglaNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass BanglaNumberToWordsConverter :\r\n    GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap =\r\n    [\r\n        \"শূন্য\", \"এক\", \"দুই\", \"তিন\", \"চার\", \"পাঁচ\", \"ছয়\", \"সাত\", \"আট\", \"নয়\", \"দশ\",\r\n        \"এগারো\", \"বারো\", \"তেরো\", \"চোদ্দ\", \"পনেরো\", \"ষোল\", \"সতেরো\", \"আঠারো\", \"উনিশ\", \"বিশ\",\r\n        \"একুশ\", \"বাইশ\", \"তেইশ\", \"চব্বিশ\", \"পঁচিশ\", \"ছাব্বিশ\", \"সাতাশ\", \"আঠাশ\", \"উনতিরিশ\", \"তিরিশ\",\r\n        \"একতিরিশ\", \"বত্রিশ\", \"তেত্রিশ\", \"চৌঁতিরিশ\", \"পঁয়তিরিশ\", \"ছত্রিশ\", \"সাঁইতিরিশ\", \"আটতিরিশ\", \"উনচল্লিশ\", \"চল্লিশ\",\r\n        \"একচল্লিশ\", \"বিয়াল্লিশ\", \"তেতাল্লিশ\", \"চুয়াল্লিশ\", \"পঁয়তাল্লিশ\", \"ছেচাল্লিশ\", \"সাতচল্লিশ\", \"আটচল্লিশ\", \"উনপঞ্চাশ\", \"পঞ্চাশ\",\r\n        \"একান্ন\", \"বাহান্ন\", \"তিপ্পান্ন\", \"চুয়ান্ন\", \"পঞ্চান্ন\", \"ছাপ্পান্ন\", \"সাতান্ন\", \"আটান্ন\", \"উনষাট\", \"ষাট\",\r\n        \"একষট্টি\", \"বাষট্টি\", \"তেষট্টি\", \"চৌষট্টি\", \"পঁয়ষট্টি\", \"ছেষট্টি\", \"সাতষট্টি\", \"আটষট্টি\", \"উনসত্তর\", \"সত্তর\",\r\n        \"একাত্তর\", \"বাহাত্তর\", \"তিয়াত্তর\", \"চুয়াত্তর\", \"পঁচাত্তর\", \"ছিয়াত্তর\", \"সাতাত্তর\", \"আটাত্তর\", \"উনআশি\", \"আশি\",\r\n        \"একাশি\", \"বিরাশি\", \"তিরাশি\", \"চুরাশি\", \"পঁচাশি\", \"ছিয়াশি\", \"সাতাশি\", \"আটাশি\", \"উননব্বই\", \"নব্বই\",\r\n        \"একানব্বই\", \"বিরানব্বই\", \"তিরানব্বিই\", \"চুরানব্বই\", \"পঁচানব্বই\", \"ছিয়ানব্বই\", \"সাতানব্বই\", \"আটানব্বই\", \"নিরানব্বই\"\r\n    ];\r\n\r\n    static readonly string[] HundredsMap =\r\n    [\r\n        \"শূন্য\", \"একশ\", \"দুইশ\", \"তিনশ\", \"চারশ\", \"পাঁচশ\", \"ছয়শ\", \"সাতশ\", \"আটশ\", \"নয়শ\"\r\n    ];\r\n\r\n    static readonly FrozenDictionary<int, string> OrdinalExceptions = new Dictionary<int, string>\r\n    {\r\n        {\r\n            1, \"প্রথম\"\r\n        },\r\n        {\r\n            2, \"দ্বিতীয়\"\r\n        },\r\n        {\r\n            3, \"তৃতীয়\"\r\n        },\r\n        {\r\n            4, \"চতুর্থ\"\r\n        },\r\n        {\r\n            5, \"পঞ্চম\"\r\n        },\r\n        {\r\n            6, \"ষষ্ট\"\r\n        },\r\n        {\r\n            7, \"সপ্তম\"\r\n        },\r\n        {\r\n            8, \"অষ্টম\"\r\n        },\r\n        {\r\n            9, \"নবম\"\r\n        },\r\n        {\r\n            10, \"দশম\"\r\n        },\r\n        {\r\n            11, \"একাদশ\"\r\n        },\r\n        {\r\n            12, \"দ্বাদশ\"\r\n        },\r\n        {\r\n            13, \"ত্রয়োদশ\"\r\n        },\r\n        {\r\n            14, \"চতুর্দশ\"\r\n        },\r\n        {\r\n            15, \"পঞ্চদশ\"\r\n        },\r\n        {\r\n            16, \"ষোড়শ\"\r\n        },\r\n        {\r\n            17, \"সপ্তদশ\"\r\n        },\r\n        {\r\n            18, \"অষ্টাদশ\"\r\n        },\r\n        {\r\n            100, \"শত তম\"\r\n        },\r\n        {\r\n            1000, \"হাজার তম\"\r\n        },\r\n        {\r\n            100000, \"লক্ষ তম\"\r\n        },\r\n        {\r\n            10000000, \"কোটি তম\"\r\n        },\r\n    }.ToFrozenDictionary();\r\n\r\n    public override string ConvertToOrdinal(int number)\r\n    {\r\n        if (ExceptionNumbersToWords(number, out var exceptionString))\r\n        {\r\n            return exceptionString;\r\n        }\r\n\r\n        return Convert(number) + \" তম\";\r\n    }\r\n\r\n    public override string Convert(long input)\r\n    {\r\n        if (input is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        var number = (int)input;\r\n\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[0];\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"ঋণাত্মক {Convert(-number)}\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number / 10000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 10000000)} কোটি\");\r\n            number %= 10000000;\r\n        }\r\n\r\n        if (number / 100000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 100000)} লক্ষ\");\r\n            number %= 100000;\r\n        }\r\n\r\n        if (number / 1000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000)} হাজার\");\r\n            number %= 1000;\r\n        }\r\n\r\n        if (number / 100 > 0)\r\n        {\r\n            parts.Add($\"{HundredsMap[number / 100]}\");\r\n            number %= 100;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(UnitsMap[number]);\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    static bool ExceptionNumbersToWords(int number, [NotNullWhen(true)] out string? words) =>\r\n        OrdinalExceptions.TryGetValue(number, out words);\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/BrazilianPortugueseNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass BrazilianPortugueseNumberToWordsConverter :\r\n    GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"zero\", \"um\", \"dois\", \"três\", \"quatro\", \"cinco\", \"seis\", \"sete\", \"oito\", \"nove\", \"dez\", \"onze\", \"doze\", \"treze\", \"quatorze\", \"quinze\", \"dezesseis\", \"dezessete\", \"dezoito\", \"dezenove\"];\r\n    static readonly string[] TensMap = [\"zero\", \"dez\", \"vinte\", \"trinta\", \"quarenta\", \"cinquenta\", \"sessenta\", \"setenta\", \"oitenta\", \"noventa\"];\r\n    static readonly string[] HundredsMap = [\"zero\", \"cento\", \"duzentos\", \"trezentos\", \"quatrocentos\", \"quinhentos\", \"seiscentos\", \"setecentos\", \"oitocentos\", \"novecentos\"];\r\n\r\n    static readonly string[] OrdinalUnitsMap = [\"zero\", \"primeiro\", \"segundo\", \"terceiro\", \"quarto\", \"quinto\", \"sexto\", \"sétimo\", \"oitavo\", \"nono\"];\r\n    static readonly string[] OrdinalTensMap = [\"zero\", \"décimo\", \"vigésimo\", \"trigésimo\", \"quadragésimo\", \"quinquagésimo\", \"sexagésimo\", \"septuagésimo\", \"octogésimo\", \"nonagésimo\"];\r\n    static readonly string[] OrdinalHundredsMap = [\"zero\", \"centésimo\", \"ducentésimo\", \"trecentésimo\", \"quadringentésimo\", \"quingentésimo\", \"sexcentésimo\", \"septingentésimo\", \"octingentésimo\", \"noningentésimo\"];\r\n\r\n    public override string Convert(long input, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (input is > 999999999999 or < -999999999999)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        var number = input;\r\n\r\n        if (number == 0)\r\n        {\r\n            return \"zero\";\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"menos {Convert(Math.Abs(number), gender)}\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number / 1000000000 > 0)\r\n        {\r\n            // gender is not applied for billions\r\n            parts.Add(number / 1000000000 >= 2\r\n                ? $\"{Convert(number / 1000000000, GrammaticalGender.Masculine)} bilhões\"\r\n                : $\"{Convert(number / 1000000000, GrammaticalGender.Masculine)} bilhão\");\r\n\r\n            number %= 1000000000;\r\n        }\r\n\r\n        if (number / 1000000 > 0)\r\n        {\r\n            // gender is not applied for millions\r\n            parts.Add(number / 1000000 >= 2\r\n                ? $\"{Convert(number / 1000000, GrammaticalGender.Masculine)} milhões\"\r\n                : $\"{Convert(number / 1000000, GrammaticalGender.Masculine)} milhão\");\r\n\r\n            number %= 1000000;\r\n        }\r\n\r\n        if (number / 1000 > 0)\r\n        {\r\n            // gender is not applied for thousands\r\n            parts.Add(number / 1000 == 1 ? \"mil\" : $\"{Convert(number / 1000, GrammaticalGender.Masculine)} mil\");\r\n            number %= 1000;\r\n        }\r\n\r\n        if (number / 100 > 0)\r\n        {\r\n            if (number == 100)\r\n            {\r\n                parts.Add(parts.Count > 0 ? \"e cem\" : \"cem\");\r\n            }\r\n            else\r\n            {\r\n                // Gender is applied to hundreds starting from 200\r\n                parts.Add(ApplyGender(HundredsMap[number / 100], gender));\r\n            }\r\n\r\n            number %= 100;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            if (parts.Count != 0)\r\n            {\r\n                parts.Add(\"e\");\r\n            }\r\n\r\n            if (number < 20)\r\n            {\r\n                parts.Add(ApplyGender(UnitsMap[number], gender));\r\n            }\r\n            else\r\n            {\r\n                var lastPart = TensMap[number / 10];\r\n                if (number % 10 > 0)\r\n                {\r\n                    lastPart += $\" e {ApplyGender(UnitsMap[number % 10], gender)}\";\r\n                }\r\n\r\n                parts.Add(lastPart);\r\n            }\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender)\r\n    {\r\n        // N/A in Portuguese ordinal\r\n        if (number == 0)\r\n        {\r\n            return \"zero\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number / 1000000000 > 0)\r\n        {\r\n            parts.Add(number / 1000000000 == 1\r\n                ? ApplyOrdinalGender(\"bilionésimo\", gender)\r\n                : string.Format(\"{0} \" + ApplyOrdinalGender(\"bilionésimo\", gender), ConvertToOrdinal(number / 1000000000, gender)));\r\n\r\n            number %= 1000000000;\r\n        }\r\n\r\n        if (number / 1000000 > 0)\r\n        {\r\n            parts.Add(number / 1000000 == 1\r\n                ? ApplyOrdinalGender(\"milionésimo\", gender)\r\n                : string.Format(\"{0}\" + ApplyOrdinalGender(\"milionésimo\", gender), ConvertToOrdinal(number / 1000000000, gender)));\r\n\r\n            number %= 1000000;\r\n        }\r\n\r\n        if (number / 1000 > 0)\r\n        {\r\n            parts.Add(number / 1000 == 1\r\n                ? ApplyOrdinalGender(\"milésimo\", gender)\r\n                : string.Format(\"{0} \" + ApplyOrdinalGender(\"milésimo\", gender), ConvertToOrdinal(number / 1000, gender)));\r\n\r\n            number %= 1000;\r\n        }\r\n\r\n        if (number / 100 > 0)\r\n        {\r\n            parts.Add(ApplyOrdinalGender(OrdinalHundredsMap[number / 100], gender));\r\n            number %= 100;\r\n        }\r\n\r\n        if (number / 10 > 0)\r\n        {\r\n            parts.Add(ApplyOrdinalGender(OrdinalTensMap[number / 10], gender));\r\n            number %= 10;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(ApplyOrdinalGender(OrdinalUnitsMap[number], gender));\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    static string ApplyGender(string toWords, GrammaticalGender gender)\r\n    {\r\n        if (gender != GrammaticalGender.Feminine)\r\n        {\r\n            return toWords;\r\n        }\r\n\r\n        if (toWords.EndsWith(\"os\"))\r\n        {\r\n            return StringHumanizeExtensions.Concat(toWords.AsSpan(0, toWords.Length - 2), \"as\".AsSpan());\r\n        }\r\n\r\n        if (toWords.EndsWith(\"um\"))\r\n        {\r\n            return StringHumanizeExtensions.Concat(toWords.AsSpan(0, toWords.Length - 2), \"uma\".AsSpan());\r\n        }\r\n\r\n        if (toWords.EndsWith(\"dois\"))\r\n        {\r\n            return StringHumanizeExtensions.Concat(toWords.AsSpan(0, toWords.Length - 4), \"duas\".AsSpan());\r\n        }\r\n\r\n        return toWords;\r\n    }\r\n\r\n    static string ApplyOrdinalGender(string toWords, GrammaticalGender gender)\r\n    {\r\n        if (gender == GrammaticalGender.Feminine)\r\n        {\r\n            return StringHumanizeExtensions.Concat(\r\n                toWords.AsSpan().TrimEnd('o'),\r\n                'a');\r\n        }\r\n\r\n        return toWords;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/BulgarianNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass BulgarianNumberToWordsConverter() :\r\n    GenderedNumberToWordsConverter(GrammaticalGender.Neuter)\r\n{\r\n    static readonly string[] UnitsMap =\r\n    [\r\n        \"нула\", \"едно\", \"две\", \"три\", \"четири\", \"пет\", \"шест\", \"седем\", \"осем\", \"девет\", \"десет\", \"единадесет\",\r\n        \"дванадесет\", \"тринадесет\", \"четиринадесет\", \"петнадесет\", \"шестнадесет\", \"седемнадесет\", \"осемнадесет\",\r\n        \"деветнадесет\"\r\n    ];\r\n\r\n    static readonly string[] TensMap =\r\n    [\r\n        \"нула\", \"десет\", \"двадесет\", \"тридесет\", \"четиридесет\", \"петдесет\", \"шестдесет\", \"седемдесет\",\r\n        \"осемдесет\", \"деветдесет\"\r\n    ];\r\n\r\n    static readonly string[] HundredsMap =\r\n    [\r\n        \"нула\", \"сто\", \"двеста\", \"триста\", \"четиристотин\", \"петстотин\", \"шестстотин\", \"седемстотин\",\r\n        \"осемстотин\", \"деветстотин\"\r\n    ];\r\n\r\n    static readonly string[] HundredsOrdinalMap =\r\n    [\r\n        string.Empty, \"стот\", \"двестот\", \"тристот\", \"четиристот\", \"петстот\", \"шестстот\", \"седемстот\", \"осемстот\",\r\n        \"деветстот\"\r\n    ];\r\n\r\n    static readonly string[] UnitsOrdinal =\r\n    [\r\n        string.Empty, \"първ\", \"втор\", \"трет\", \"четвърт\", \"пет\", \"шест\", \"седм\", \"осм\", \"девeт\", \"десeт\",\r\n        \"единадесет\", \"дванадесет\", \"тринадесет\", \"четиринадесет\", \"петнадесет\", \"шестнадесет\", \"седемнадесет\",\r\n        \"осемнадесет\", \"деветнадесет\"\r\n    ];\r\n\r\n    public override string Convert(long input, GrammaticalGender gender, bool addAnd = true) =>\r\n        InnerConvert(input, gender, false);\r\n\r\n    public override string ConvertToOrdinal(int input, GrammaticalGender gender) =>\r\n        InnerConvert(input, gender, true);\r\n\r\n    static string InnerConvert(long input, GrammaticalGender gender, bool isOrdinal)\r\n    {\r\n        if (input == 0)\r\n        {\r\n            return isOrdinal ? OrdinalZero(gender) : \"нула\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n        if (input < 0)\r\n        {\r\n            parts.Add(\"минус\");\r\n            input = -input;\r\n        }\r\n\r\n        CollectParts(parts, ref input, isOrdinal, 1_000_000_000_000_000_000, GrammaticalGender.Masculine, \"квинтилион\", \"квадрилиона\", ToOrdinalOverAHundred(\"квинтилион\", gender));\r\n        CollectParts(parts, ref input, isOrdinal, 1_000_000_000_000_000, GrammaticalGender.Masculine, \"квадрилион\", \"квадрилиона\", ToOrdinalOverAHundred(\"квадрилион\", gender));\r\n        CollectParts(parts, ref input, isOrdinal, 1_000_000_000_000, GrammaticalGender.Masculine, \"трилион\", \"трилиона\", ToOrdinalOverAHundred(\"трилион\", gender));\r\n        CollectParts(parts, ref input, isOrdinal, 1_000_000_000, GrammaticalGender.Masculine, \"милиард\", \"милиарда\", ToOrdinalOverAHundred(\"милиард\", gender));\r\n        CollectParts(parts, ref input, isOrdinal, 1_000_000, GrammaticalGender.Masculine, \"милион\", \"милиона\", ToOrdinalOverAHundred(\"милион\", gender));\r\n        CollectParts(parts, ref input, isOrdinal, 1_000, GrammaticalGender.Feminine, \"хиляда\", \"хиляди\", ToOrdinalOverAHundred(\"хиляд\", gender));\r\n        CollectPartsUnderOneThousand(parts, ref input, isOrdinal, gender);\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    static void CollectParts(List<string> parts, ref long number, bool isOrdinal, long divisor, GrammaticalGender gender, string singular, string plural, string ordinal)\r\n    {\r\n        if (number < divisor)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var result = number / divisor;\r\n\r\n        if (parts.Count > 0)\r\n        {\r\n            parts.Add(\"и\");\r\n        }\r\n\r\n        CollectPartsUnderOneThousand(parts, ref result, false, gender);\r\n\r\n        number %= divisor;\r\n        if (number == 0 && isOrdinal)\r\n        {\r\n            parts.Add(ordinal);\r\n        }\r\n        else\r\n        {\r\n            parts.Add(result == 1 ? singular : plural);\r\n        }\r\n    }\r\n\r\n    static void CollectPartsUnderOneThousand(List<string> parts, ref long number, bool isOrdinal, GrammaticalGender gender)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (number >= 100)\r\n        {\r\n            var hundreds = number / 100;\r\n            number %= 100;\r\n            if (number == 0 && isOrdinal)\r\n            {\r\n                parts.Add(ToOrdinalOverAHundred(HundredsOrdinalMap[hundreds], gender));\r\n            }\r\n            else\r\n            {\r\n                parts.Add(HundredsMap[hundreds]);\r\n            }\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            var tens = number / 10;\r\n            number %= 10;\r\n            if (number == 0 && isOrdinal)\r\n            {\r\n                parts.Add(ToOrdinalUnitsAndTens(TensMap[tens], gender));\r\n            }\r\n            else\r\n            {\r\n                parts.Add(TensMap[tens]);\r\n            }\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            if (isOrdinal)\r\n            {\r\n                parts.Add(ToOrdinalUnitsAndTens(UnitsOrdinal[number], gender));\r\n            }\r\n            else\r\n            {\r\n                parts.Add(GetUnit(number, gender));\r\n            }\r\n        }\r\n\r\n        if (parts.Count > 1)\r\n        {\r\n            parts.Insert(parts.Count - 1, \"и\");\r\n        }\r\n    }\r\n\r\n    static string GetUnit(long number, GrammaticalGender gender) =>\r\n        (number, gender) switch\r\n        {\r\n            (1, GrammaticalGender.Masculine) => \"един\",\r\n            (1, GrammaticalGender.Feminine) => \"една\",\r\n            (2, GrammaticalGender.Masculine) => \"два\",\r\n            _ => UnitsMap[number],\r\n        };\r\n\r\n    static string OrdinalZero(GrammaticalGender gender) =>\r\n        gender switch\r\n        {\r\n            GrammaticalGender.Masculine => \"нулев\",\r\n            GrammaticalGender.Feminine => \"нулева\",\r\n            GrammaticalGender.Neuter => \"нулево\",\r\n            _ => throw new ArgumentOutOfRangeException(nameof(gender), gender, null)\r\n        };\r\n\r\n    static string ToOrdinalOverAHundred(string word, GrammaticalGender gender) =>\r\n        gender switch\r\n        {\r\n            GrammaticalGender.Masculine => $\"{word}ен\",\r\n            GrammaticalGender.Feminine => $\"{word}на\",\r\n            GrammaticalGender.Neuter => $\"{word}но\",\r\n            _ => throw new ArgumentOutOfRangeException(nameof(gender))\r\n        };\r\n\r\n    static string ToOrdinalUnitsAndTens(string word, GrammaticalGender gender) =>\r\n        gender switch\r\n        {\r\n            GrammaticalGender.Masculine => $\"{word}и\",\r\n            GrammaticalGender.Feminine => $\"{word}а\",\r\n            GrammaticalGender.Neuter => $\"{word}о\",\r\n            _ => throw new ArgumentOutOfRangeException(nameof(gender))\r\n        };\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/CatalanNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass CatalanNumberToWordsConverter : GenderedNumberToWordsConverter\r\n{\r\n    // Cardinal units\r\n    private static readonly string[] UnitsMasculine =\r\n    [\r\n        \"\", \"un\", \"dos\", \"tres\", \"quatre\", \"cinc\", \"sis\", \"set\", \"vuit\", \"nou\"\r\n    ];\r\n    private static readonly string[] UnitsFeminine =\r\n    [\r\n        \"\", \"una\", \"dues\", \"tres\", \"quatre\", \"cinc\", \"sis\", \"set\", \"vuit\", \"nou\"\r\n    ];\r\n\r\n    // Special cases for teens (10-19)\r\n    private static readonly string[] Teens =\r\n    [\r\n        \"deu\", \"onze\", \"dotze\", \"tretze\", \"catorze\", \"quinze\", \"setze\", \"disset\", \"divuit\", \"dinou\"\r\n    ];\r\n\r\n    // Decenas: exact tens and for composition\r\n    private static readonly string[] Tens =\r\n    [\r\n        \"\", \"deu\", \"vint\", \"trenta\", \"quaranta\", \"cinquanta\", \"seixanta\", \"setanta\", \"vuitanta\", \"noranta\"\r\n    ];\r\n\r\n    // Centenas (masculino y femenino)\r\n    private static readonly string[] HundredsMasculine =\r\n    [\r\n        \"\", \"cent\", \"dos-cents\", \"tres-cents\", \"quatre-cents\", \"cinc-cents\", \"sis-cents\", \"set-cents\", \"vuit-cents\", \"nou-cents\"\r\n    ];\r\n    private static readonly string[] HundredsFeminine =\r\n    [\r\n        \"\", \"cent\", \"dues-centes\", \"tres-centes\", \"quatre-centes\", \"cinc-centes\", \"sis-centes\", \"set-centes\", \"vuit-centes\", \"nou-centes\"\r\n    ];\r\n\r\n    static readonly string[] TupleMap =\r\n    [\r\n       \"zero vegades\", \"una vegada\", \"doble\", \"triple\", \"qüàdruple\", \"quíntuple\", \"sèxtuple\", \"sèptuple\", \"òctuple\",\r\n       \"nònuple\", \"dècuple\", \"undècuple\", \"duodècuple\", \"tercidecuple\"\r\n    ];\r\n\r\n    #region Convert\r\n    public override string Convert(long number, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return \"zero\";\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return \"menys \" + Convert(-number, gender);\r\n        }\r\n\r\n        if (number < 10)\r\n        {\r\n            return GetUnit((int)number, gender);\r\n        }\r\n\r\n        if (number < 20)\r\n        {\r\n            return Teens[number - 10];\r\n        }\r\n\r\n        if (number < 100)\r\n        {\r\n            return GetTens((int)number, gender);\r\n        }\r\n\r\n        if (number < 1000)\r\n        {\r\n            return GetHundreds((int)number, gender);\r\n        }\r\n\r\n        if (number < 1000000)\r\n        {\r\n            return GetThousands((int)number, gender);\r\n        }\r\n\r\n        if (number < 1000000000)\r\n        {\r\n            return GetMillions((int)number, gender);\r\n        }\r\n\r\n        throw new NotImplementedException(\"Nombres més grans de mil milions no estan implementats.\");\r\n    }\r\n\r\n    private static string GetUnit(int number, GrammaticalGender gender)\r\n        => gender == GrammaticalGender.Feminine ? UnitsFeminine[number] : UnitsMasculine[number];\r\n\r\n    private static string GetTens(int number, GrammaticalGender gender)\r\n    {\r\n        var tens = number / 10;\r\n        var units = number % 10;\r\n        if (number < 20)\r\n        {\r\n            return Teens[number - 10];\r\n        }\r\n\r\n        if (units == 0)\r\n        {\r\n            return Tens[tens];\r\n        }\r\n        // \"vint-i-un\", \"trenta-dos\"\r\n        var conjunction = tens == 2 ? \"-i-\" : \"-\";\r\n\r\n        var num = (units == 1) && gender == GrammaticalGender.Masculine\r\n            ? \"u\"\r\n            : GetUnit(units, gender);\r\n\r\n        return $\"{Tens[tens]}{conjunction}{num}\";\r\n    }\r\n\r\n    private static string GetHundreds(int number, GrammaticalGender gender)\r\n    {\r\n        var hundreds = number / 100;\r\n        var rest = number % 100;\r\n        var hundredPart = gender == GrammaticalGender.Feminine ? HundredsFeminine[hundreds] : HundredsMasculine[hundreds];\r\n\r\n        if (rest == 0)\r\n        {\r\n            return hundredPart;\r\n        }\r\n\r\n        var num = rest == 1 && gender == GrammaticalGender.Masculine\r\n            ? \"u\"\r\n            : (rest < 10 ? GetUnit(rest, gender) : GetTens(rest, gender));\r\n\r\n        return $\"{hundredPart} {num}\";\r\n    }\r\n\r\n    private string GetThousands(int number, GrammaticalGender gender)\r\n    {\r\n        var thousands = number / 1000;\r\n        var rest = number % 1000;\r\n        string thousandPart;\r\n        if (thousands == 1)\r\n        {\r\n            thousandPart = \"mil\";\r\n        }\r\n        else\r\n        {\r\n            thousandPart = $\"{Convert(thousands, gender)} mil\";\r\n        }\r\n\r\n        if (rest == 0)\r\n        {\r\n            return thousandPart;\r\n        }\r\n\r\n        var num = rest == 1 && gender == GrammaticalGender.Masculine\r\n            ? \"u\"\r\n            : Convert(rest, gender);\r\n\r\n        return $\"{thousandPart} {num}\";\r\n    }\r\n\r\n    private string GetMillions(int number, GrammaticalGender gender)\r\n    {\r\n        var millions = number / 1000000;\r\n        var rest = number % 1000000;\r\n        string millionPart;\r\n        if (millions == 1)\r\n        {\r\n            millionPart = \"un milió\";\r\n        }\r\n        else\r\n        {\r\n            millionPart = $\"{Convert(millions, GrammaticalGender.Masculine)} milions\";\r\n        }\r\n\r\n        if (rest == 0)\r\n        {\r\n            return millionPart;\r\n        }\r\n\r\n        var num = rest == 1 && gender == GrammaticalGender.Masculine\r\n            ? \"u\"\r\n            : Convert(rest, gender);\r\n\r\n        return $\"{millionPart} {num}\";\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ConvertToOrdinal\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender)\r\n    {\r\n        if (number < 0)\r\n        {\r\n            return \"menys \" + ConvertToOrdinal(-number, gender);\r\n        }\r\n\r\n        if (number == 0)\r\n        {\r\n            return \"zero\";\r\n        }\r\n\r\n        // Ordinales simples\r\n        string[] masc = [\"\", \"primer\", \"segon\", \"tercer\", \"quart\", \"cinquè\", \"sisè\", \"setè\", \"vuitè\", \"novè\", \"desè\", \"onzè\", \"dotzè\", \"tretzè\", \"catorzè\", \"quinzè\"];\r\n        string[] fem = [\"\", \"primera\", \"segona\", \"tercera\", \"quarta\", \"cinquena\", \"sisena\", \"setena\", \"vuitena\", \"novena\", \"desena\", \"onzena\", \"dotzena\", \"tretzena\", \"catorzena\", \"quinzena\"];\r\n\r\n        if (number < masc.Length)\r\n        {\r\n            return gender == GrammaticalGender.Feminine ? fem[number] : masc[number];\r\n        }\r\n\r\n        if (number < 100)\r\n        {\r\n            return GetOrdinalTens(number, gender);\r\n        }\r\n\r\n        if (number < 1000)\r\n        {\r\n            return GetOrdinalHundreds(number, gender);\r\n        }\r\n\r\n        if (number < 1000000)\r\n        {\r\n            return GetOrdinalThousands(number, gender);\r\n        }\r\n\r\n        if (number < 1000000000)\r\n        {\r\n            return GetOrdinalMillions(number, gender);\r\n        }\r\n\r\n        throw new NotImplementedException(\"Ordinal més gran de cent milions no implementat.\");\r\n    }\r\n\r\n    // Helpers\r\n\r\n    private static string GetOrdinalTens(int number, GrammaticalGender gender)\r\n    {\r\n        var dec = number / 10;\r\n        var rem = number % 10;\r\n        string[] tens = [\"\", \"\", \"vint\", \"trenta\", \"quaranta\", \"cinquanta\", \"seixanta\", \"setanta\", \"vuitanta\", \"noranta\"];\r\n\r\n        var ordSuf = gender == GrammaticalGender.Feminine ? \"ena\" : \"è\";\r\n\r\n        if (rem == 0)\r\n        {\r\n            var tensDec = tens[dec];\r\n            if (dec == 3 || dec == 6 || dec == 7 || dec == 8 || dec == 9)\r\n            {\r\n                tensDec = tensDec[..^1]; //\r\n            }\r\n\r\n            return tensDec + ordSuf;\r\n        }\r\n\r\n        var unitRoots = new[] { \"\", \"un\", \"dos\", \"tres\", \"quatr\", \"cinqu\", \"sis\", \"set\", \"vuit\", \"nov\" };\r\n        var num = $\"{unitRoots[rem]}{ordSuf}\";\r\n        if (rem == 1)\r\n        {\r\n            num = gender == GrammaticalGender.Feminine ? \"una\" : \"un\";\r\n        }\r\n\r\n        var conj = dec == 2 ? \"-i-\" : \"-\";\r\n        return $\"{tens[dec]}{conj}{num}\";\r\n    }\r\n\r\n    private string GetOrdinalHundreds(int number, GrammaticalGender gender)\r\n    {\r\n        var centenas = number / 100;\r\n        var rest = number % 100;\r\n\r\n        var hundred = gender == GrammaticalGender.Feminine\r\n            ? new[] { \"\", \"cent\", \"dues-centes\", \"tres-centes\", \"quatre-centes\", \"cinc-centes\", \"sis-centes\", \"set-centes\", \"vuit-centes\", \"nou-centes\" }[centenas]\r\n            : new[] { \"\", \"cent\", \"dos-cents\", \"tres-cents\", \"quatre-cents\", \"cinc-cents\", \"sis-cents\", \"set-cents\", \"vuit-cents\", \"nou-cents\" }[centenas];\r\n\r\n        if (rest == 0 && centenas == 1)\r\n        {\r\n            return $\"{hundred}{(gender == GrammaticalGender.Feminine ? \"ena\" : \"è\")}\";\r\n        }\r\n\r\n        if (rest == 0)\r\n        {\r\n            return hundred;\r\n        }\r\n\r\n        string? num;\r\n        if (centenas == 1 && rest % 10 != 0)\r\n        {\r\n            num = ConvertToOrdinal(rest, gender);\r\n        }\r\n        else\r\n        {\r\n            num = Convert(rest, gender);\r\n            if (gender == GrammaticalGender.Masculine && rest != 1 && rest % 10 == 1)\r\n            {\r\n                num += \"n\";\r\n            }\r\n        }\r\n\r\n        return $\"{hundred} {num}\";\r\n    }\r\n\r\n    private string GetOrdinalThousands(int number, GrammaticalGender gender)\r\n    {\r\n        var mils = number / 1000;\r\n        var rest = number % 1000;\r\n        var milStr = mils == 1 ? \"mil\" : $\"{Convert(mils, gender)} mil\";\r\n        if (rest == 0)\r\n        {\r\n            return milStr;\r\n        }\r\n\r\n        if (rest == 100)\r\n        {\r\n            return $\"{milStr} cent\";\r\n        }\r\n\r\n        var num = Convert(rest, gender);\r\n        if (gender == GrammaticalGender.Masculine && rest != 1 && rest % 10 == 1)\r\n        {\r\n            num += \"n\";\r\n        }\r\n\r\n        return $\"{milStr} {num}\";\r\n    }\r\n\r\n    private string GetOrdinalMillions(int number, GrammaticalGender gender)\r\n    {\r\n        var mills = number / 1000000;\r\n        var rest = number % 1000000;\r\n        var millsStr = mills == 1 ? \"un milió\" : $\"{Convert(mills, GrammaticalGender.Masculine)} milions\";\r\n        if (rest == 0)\r\n        {\r\n            return millsStr;\r\n        }\r\n\r\n        var num = Convert(rest, gender);\r\n        if (gender == GrammaticalGender.Masculine && rest != 1 && rest % 10 == 1)\r\n        {\r\n            num += \"n\";\r\n        }\r\n\r\n        return $\"{millsStr} {num}\";\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender, WordForm wordForm)\r\n    {\r\n        // ordinal (Ej: 1r, 1a, 2n, 2a, 11è, 11a, etc.)\r\n        if (wordForm == WordForm.Abbreviation)\r\n        {\r\n            if (number == 1)\r\n            {\r\n                return gender == GrammaticalGender.Feminine ? \"1a\" : \"1r\";\r\n            }\r\n\r\n            if (number == 2)\r\n            {\r\n                return gender == GrammaticalGender.Feminine ? \"2a\" : \"2n\";\r\n            }\r\n\r\n            if (number == 3)\r\n            {\r\n                return gender == GrammaticalGender.Feminine ? \"3a\" : \"3r\";\r\n            }\r\n\r\n            if (number == 22)\r\n            {\r\n                return gender == GrammaticalGender.Feminine ? \"22a\" : \"22n\";\r\n            }\r\n\r\n            if (number == 31)\r\n            {\r\n                return gender == GrammaticalGender.Feminine ? \"31a\" : \"31r\";\r\n            }\r\n\r\n            if (number == 11 || number == 100 || number == 999)\r\n            {\r\n                return number + (gender == GrammaticalGender.Feminine ? \"a\" : \"è\");\r\n            }\r\n\r\n            if (number == 101)\r\n            {\r\n                return gender == GrammaticalGender.Feminine ? \"101a\" : \"101r\";\r\n            }\r\n\r\n            if (number == 999)\r\n            {\r\n                return gender == GrammaticalGender.Feminine ? \"999a\" : \"999è\";\r\n            }\r\n            // Comportamiento genérico\r\n            if (gender == GrammaticalGender.Feminine)\r\n            {\r\n                return number + \"a\";\r\n            }\r\n\r\n            return number + (\r\n                (number % 10 == 1 || number % 10 == 3) ? \"r\" :\r\n                (number % 10 == 2 || number % 10 == 7) ? \"n\" :\r\n                \"è\"\r\n            );\r\n        }\r\n        return ConvertToOrdinal(number, gender);\r\n    }\r\n\r\n    #endregion\r\n\r\n    public override string ConvertToTuple(int number)\r\n    {\r\n        number = Math.Abs(number);\r\n\r\n        if (number < TupleMap.Length)\r\n        {\r\n            return TupleMap[number];\r\n        }\r\n\r\n        return Convert(number) + \" vegades\";\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/CentralKurdishNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass CentralKurdishNumberToWordsConverter : GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] KurdishHundredsMap = [\"سفر\", \"سەد\", \"دوو سەد\", \"سێ سەد\", \"چوار سەد\", \"پێنج سەد\", \"شەش سەد\", \"حەوت سەد\", \"هەشت سەد\", \"نۆ سەد\"];\r\n    static readonly string[] KurdishTensMap = [\"سفر\", \"دە\", \"بیست\", \"سی\", \"چل\", \"پەنجا\", \"شەست\", \"حەفتا\", \"هەشتا\", \"نەوەد\"];\r\n    static readonly string[] KurdishUnitsMap = [\"سفر\", \"یەک\", \"دوو\", \"سێ\", \"چوار\", \"پێنج\", \"شەش\", \"حەوت\", \"هەشت\", \"نۆ\", \"دە\", \"یازدە\", \"دوازدە\", \"سێزدە\", \"چواردە\", \"پازدە\", \"شازدە\", \"حەڤدە\", \"هەژدە\", \"نۆزدە\"];\r\n\r\n    public override string Convert(long number)\r\n    {\r\n        var largestNumber = Math.Pow(10, 15) * 1000 - 1;\r\n        if (number > largestNumber || number < -largestNumber)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"نێگەتیڤ {Convert(-number)}\";\r\n        }\r\n\r\n        if (number == 0)\r\n        {\r\n            return \"سفر\";\r\n        }\r\n\r\n        var kurdishGroupsMap = new Dictionary<long, Func<long, string>>\r\n        {\r\n            {\r\n                (long) Math.Pow(10, 15), n => $\"{Convert(n)} کوادریلیۆن\"\r\n            },\r\n            {\r\n                (long) Math.Pow(10, 12), n => $\"{Convert(n)} تریلیۆن\"\r\n            },\r\n            {\r\n                (long) Math.Pow(10, 9), n => $\"{Convert(n)} میلیارد\"\r\n            },\r\n            {\r\n                (long) Math.Pow(10, 6), n => $\"{Convert(n)} میلیۆن\"\r\n            },\r\n            {\r\n                (long) Math.Pow(10, 3), n => $\"{Convert(n)} هەزار\"\r\n            },\r\n            {\r\n                (long) Math.Pow(10, 2), n => KurdishHundredsMap[n]\r\n            }\r\n        };\r\n\r\n        var parts = new List<string>();\r\n        foreach (var group in kurdishGroupsMap.Keys)\r\n        {\r\n            if (number / group > 0)\r\n            {\r\n                parts.Add(kurdishGroupsMap[group](number / group));\r\n                number %= group;\r\n            }\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            parts.Add(KurdishTensMap[number / 10]);\r\n            number %= 10;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(KurdishUnitsMap[number]);\r\n        }\r\n\r\n        var sentence = string.Join(\" و \", parts);\r\n        if (sentence.StartsWith(\"یەک هەزار\"))\r\n        {\r\n            return sentence[\" یەک\".Length..];\r\n        }\r\n\r\n        return sentence;\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number)\r\n    {\r\n        var word = Convert(number);\r\n        return $\"{word}{(IsVowel(word[^1]) ? \"یەم\" : \"ەم\")}\";\r\n    }\r\n\r\n    static bool IsVowel(char c) =>\r\n        c is 'ا' or 'ێ' or 'ۆ' or 'ە' or 'ی';\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/ChineseNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass ChineseNumberToWordsConverter : GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"零\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"七\", \"八\", \"九\", \"十\"];\r\n\r\n    public override string Convert(long number) =>\r\n        Convert(number, false, IsSpecial(number));\r\n\r\n    public override string ConvertToOrdinal(int number) =>\r\n        Convert(number, true, IsSpecial(number));\r\n\r\n    static bool IsSpecial(long number) => number is > 10 and < 20;\r\n\r\n    static string Convert(long number, bool isOrdinal, bool isSpecial)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[0];\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"负 {Convert(-number, false, false)}\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number / 1000000000000 > 0)\r\n        {\r\n            var format = \"{0}兆\";\r\n            if (number % 1000000000000 < 100000000000 && number % 1000000000000 > 0)\r\n            {\r\n                format = \"{0}兆零\";\r\n            }\r\n\r\n            parts.Add(string.Format(format, Convert(number / 1000000000000, false, false)));\r\n            number %= 1000000000000;\r\n        }\r\n\r\n        if (number / 100000000 > 0)\r\n        {\r\n            var format = \"{0}亿\";\r\n            if (number % 100000000 < 10000000 && number % 100000000 > 0)\r\n            {\r\n                format = \"{0}亿零\";\r\n            }\r\n\r\n            parts.Add(string.Format(format, Convert(number / 100000000, false, false)));\r\n            number %= 100000000;\r\n        }\r\n\r\n        if (number / 10000 > 0)\r\n        {\r\n            var format = \"{0}万\";\r\n            if (number % 10000 < 1000 && number % 10000 > 0)\r\n            {\r\n                format = \"{0}万零\";\r\n            }\r\n\r\n            parts.Add(string.Format(format, Convert(number / 10000, false, false)));\r\n            number %= 10000;\r\n        }\r\n\r\n        if (number / 1000 > 0)\r\n        {\r\n            var format = \"{0}千\";\r\n            if (number % 1000 < 100 && number % 1000 > 0)\r\n            {\r\n                format = \"{0}千零\";\r\n            }\r\n\r\n            parts.Add(string.Format(format, Convert(number / 1000, false, false)));\r\n            number %= 1000;\r\n        }\r\n\r\n        if (number / 100 > 0)\r\n        {\r\n            var format = \"{0}百\";\r\n            if (number % 100 < 10 && number % 100 > 0)\r\n            {\r\n                format = \"{0}百零\";\r\n            }\r\n\r\n            parts.Add(string.Format(format, Convert(number / 100, false, false)));\r\n            number %= 100;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            if (number <= 10)\r\n            {\r\n                parts.Add(UnitsMap[number]);\r\n            }\r\n            else\r\n            {\r\n                var lastPart = $\"{UnitsMap[number / 10]}十\";\r\n                if (number % 10 > 0)\r\n                {\r\n                    lastPart += $\"{UnitsMap[number % 10]}\";\r\n                }\r\n\r\n                parts.Add(lastPart);\r\n            }\r\n        }\r\n\r\n        var toWords = string.Concat(parts);\r\n\r\n        if (isSpecial)\r\n        {\r\n            toWords = toWords[1..];\r\n        }\r\n\r\n        if (isOrdinal)\r\n        {\r\n            toWords = $\"第 {toWords}\";\r\n        }\r\n\r\n        return toWords;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/CroatianNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass CroatianNumberToWordsConverter(CultureInfo culture)\r\n    : GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap =\r\n    [\r\n        \"nula\",\r\n        \"jedan\",\r\n        \"dva\",\r\n        \"tri\",\r\n        \"četiri\",\r\n        \"pet\",\r\n        \"šest\",\r\n        \"sedam\",\r\n        \"osam\",\r\n        \"devet\",\r\n        \"deset\",\r\n        \"jedanaest\",\r\n        \"dvanaest\",\r\n        \"trinaest\",\r\n        \"četrnaest\",\r\n        \"petnaest\",\r\n        \"šesnaest\",\r\n        \"sedamnaest\",\r\n        \"osamnaest\",\r\n        \"devetnaest\"\r\n    ];\r\n\r\n    static readonly string[] TensMap =\r\n    [\r\n        \"nula\",\r\n        \"deset\",\r\n        \"dvadeset\",\r\n        \"trideset\",\r\n        \"četrdeset\",\r\n        \"pedeset\",\r\n        \"šezdeset\",\r\n        \"sedamdeset\",\r\n        \"osamdeset\",\r\n        \"devedeset\"\r\n    ];\r\n\r\n    public override string Convert(long number)\r\n    {\r\n        switch (number)\r\n        {\r\n            case 0: return \"nula\";\r\n            case < 0:\r\n                return number != long.MinValue\r\n                    ? $\"minus {Convert(-number)}\"\r\n                    : \"minus devet trilijuna dvjesto dvadeset tri bilijarde tristo sedamdeset dva bilijuna trideset šest milijardi osamsto pedeset četiri milijuna sedamsto sedamdeset pet tisuća osamsto osam\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        var quintillions = number / 1000000000000000000;\r\n        if (quintillions > 0)\r\n        {\r\n            var part = quintillions switch\r\n            {\r\n                1 => \"trilijun\",\r\n                _ => $\"{Convert(quintillions)} trilijuna\"\r\n            };\r\n\r\n            parts.Add(part);\r\n            number %= 1000000000000000000;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var quadrillions = number / 1000000000000000;\r\n        if (quadrillions > 0)\r\n        {\r\n            string part;\r\n            switch (quadrillions)\r\n            {\r\n                case 1:\r\n                    part = \"bilijarda\";\r\n                    break;\r\n                case 2:\r\n                    part = \"dvije bilijarde\";\r\n                    break;\r\n                case 3:\r\n                case 4:\r\n                    part = $\"{Convert(quadrillions)} bilijarde\";\r\n                    break;\r\n                default:\r\n                    {\r\n                        if (quadrillions % 100 is > 4 and < 21)\r\n                        {\r\n                            part = $\"{Convert(quadrillions)} bilijardi\";\r\n                            break;\r\n                        }\r\n\r\n                        part = (quadrillions % 10) switch\r\n                        {\r\n                            1 => $\"{Convert(quadrillions - 1)} jedna bilijarda\",\r\n                            2 => $\"{Convert(quadrillions - 2)} dvije bilijarde\",\r\n                            3 or 4 => $\"{Convert(quadrillions)} bilijarde\",\r\n                            _ => $\"{Convert(quadrillions)} bilijardi\",\r\n                        };\r\n                        break;\r\n                    }\r\n            }\r\n\r\n            parts.Add(part);\r\n            number %= 1000000000000000;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var trillions = number / 1000000000000;\r\n        if (trillions > 0)\r\n        {\r\n            string part;\r\n            switch (trillions)\r\n            {\r\n                case 1:\r\n                    part = \"bilijun\";\r\n                    break;\r\n                default:\r\n                    {\r\n                        if (trillions % 100 == 11 || trillions % 10 != 1)\r\n                        {\r\n                            part = $\"{Convert(trillions)} bilijuna\";\r\n                            break;\r\n                        }\r\n\r\n                        part = $\"{Convert(trillions)} bilijun\";\r\n                        break;\r\n                    }\r\n            }\r\n\r\n            parts.Add(part);\r\n            number %= 1000000000000;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var billions = number / 1000000000;\r\n        if (billions > 0)\r\n        {\r\n            string part;\r\n            switch (billions)\r\n            {\r\n                case 1:\r\n                    part = \"milijarda\";\r\n                    break;\r\n                case 2:\r\n                    part = \"dvije milijarde\";\r\n                    break;\r\n                case 3:\r\n                case 4:\r\n                    part = $\"{Convert(billions)} milijarde\";\r\n                    break;\r\n                default:\r\n                    {\r\n                        if (billions % 100 is > 4 and < 21)\r\n                        {\r\n                            part = $\"{Convert(billions)} milijardi\";\r\n                            break;\r\n                        }\r\n\r\n                        part = (billions % 10) switch\r\n                        {\r\n                            1 => $\"{Convert(billions - 1)} jedna milijarda\",\r\n                            2 => $\"{Convert(billions - 2)} dvije milijarde\",\r\n                            3 or 4 => $\"{Convert(billions)} milijarde\",\r\n                            _ => $\"{Convert(billions)} milijardi\",\r\n                        };\r\n                        break;\r\n                    }\r\n            }\r\n\r\n            parts.Add(part);\r\n            number %= 1000000000;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var millions = number / 1000000;\r\n        if (millions > 0)\r\n        {\r\n            string part;\r\n            switch (millions)\r\n            {\r\n                case 1:\r\n                    part = \"milijun\";\r\n                    break;\r\n                default:\r\n                    {\r\n                        if (millions % 100 == 11 || millions % 10 != 1)\r\n                        {\r\n                            part = $\"{Convert(millions)} milijuna\";\r\n                            break;\r\n                        }\r\n\r\n                        part = $\"{Convert(millions)} milijun\";\r\n                        break;\r\n                    }\r\n            }\r\n\r\n            parts.Add(part);\r\n            number %= 1000000;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var thousands = number / 1000;\r\n        if (thousands > 0)\r\n        {\r\n            string part;\r\n            switch (thousands)\r\n            {\r\n                case 1:\r\n                    part = \"tisuću\";\r\n                    break;\r\n                case 2:\r\n                    part = \"dvije tisuće\";\r\n                    break;\r\n                case 3:\r\n                case 4:\r\n                    part = $\"{Convert(thousands)} tisuće\";\r\n                    break;\r\n                default:\r\n                    {\r\n                        if (thousands % 100 is > 4 and < 21)\r\n                        {\r\n                            part = $\"{Convert(thousands)} tisuća\";\r\n                            break;\r\n                        }\r\n\r\n                        part = (thousands % 10) switch\r\n                        {\r\n                            1 => $\"{Convert(thousands - 1)} jedna tisuća\",\r\n                            2 => $\"{Convert(thousands - 2)} dvije tisuće\",\r\n                            3 or 4 => $\"{Convert(thousands)} tisuće\",\r\n                            _ => $\"{Convert(thousands)} tisuća\",\r\n                        };\r\n                        break;\r\n                    }\r\n            }\r\n\r\n            parts.Add(part);\r\n            number %= 1000;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var hundreds = number / 100;\r\n        if (hundreds > 0)\r\n        {\r\n            var part = hundreds switch\r\n            {\r\n                1 => \"sto\",\r\n                2 => \"dvjesto\",\r\n                _ => $\"{Convert(hundreds)}sto\"\r\n            };\r\n\r\n            parts.Add(part);\r\n            number %= 100;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        switch (number)\r\n        {\r\n            case <= 0:\r\n                return string.Concat(parts);\r\n            case < 20:\r\n                parts.Add(UnitsMap[number]);\r\n                break;\r\n            default:\r\n                {\r\n                    parts.Add(TensMap[number / 10]);\r\n                    var units = number % 10;\r\n\r\n                    if (units > 0)\r\n                    {\r\n                        parts.Add($\" {UnitsMap[units]}\");\r\n                    }\r\n\r\n                    break;\r\n                }\r\n        }\r\n\r\n        return string.Concat(parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number) =>\r\n        //TODO: In progress\r\n        number.ToString(culture);\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/CzechNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass CzechNumberToWordsConverter(CultureInfo culture) :\r\n    GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] BillionsMap = [\"miliarda\", \"miliardy\", \"miliard\"];\r\n    static readonly string[] MillionsMap = [\"milion\", \"miliony\", \"milionů\"];\r\n    static readonly string[] ThousandsMap = [\"tisíc\", \"tisíce\", \"tisíc\"];\r\n    static readonly string[] HundredsMap = [\"nula\", \"sto\", \"dvě stě\", \"tři sta\", \"čtyři sta\", \"pět set\", \"šest set\", \"sedm set\", \"osm set\", \"devět set\"];\r\n    static readonly string[] TensMap = [\"nula\", \"deset\", \"dvacet\", \"třicet\", \"čtyřicet\", \"padesát\", \"šedesát\", \"sedmdesát\", \"osmdesát\", \"devadesát\"];\r\n    static readonly string[] UnitsMap = [\"nula\", \"jeden\", \"dva\", \"tři\", \"čtyři\", \"pět\", \"šest\", \"sedm\", \"osm\", \"devět\", \"deset\", \"jedenáct\", \"dvanáct\", \"třináct\", \"čtrnáct\", \"patnáct\", \"šestnáct\", \"sedmnáct\", \"osmnáct\", \"devatenáct\"];\r\n\r\n    static readonly string[] UnitsMasculineOverrideMap = [\"jeden\", \"dva\"];\r\n    static readonly string[] UnitsFeminineOverrideMap = [\"jedna\", \"dvě\"];\r\n    static readonly string[] UnitsNeuterOverride = [\"jedno\", \"dvě\"];\r\n    static readonly string[] UnitsIntraOverride = [\"jedna\", \"dva\"];\r\n\r\n    public override string Convert(long number, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return UnitByGender(number, gender);\r\n        }\r\n\r\n        var parts = new List<string>();\r\n        if (number < 0)\r\n        {\r\n            parts.Add(\"mínus\");\r\n            number = -number;\r\n        }\r\n\r\n        CollectThousandAndAbove(parts, ref number, 1_000_000_000, GrammaticalGender.Feminine, BillionsMap);\r\n        CollectThousandAndAbove(parts, ref number, 1_000_000, GrammaticalGender.Masculine, MillionsMap);\r\n        CollectThousandAndAbove(parts, ref number, 1_000, GrammaticalGender.Masculine, ThousandsMap);\r\n\r\n        CollectLessThanThousand(parts, number, gender);\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender) =>\r\n        number.ToString(culture);\r\n\r\n    static string UnitByGender(long number, GrammaticalGender? gender)\r\n    {\r\n        if (number != 1 && number != 2)\r\n        {\r\n            return UnitsMap[number];\r\n        }\r\n\r\n        return gender switch\r\n        {\r\n            GrammaticalGender.Masculine => UnitsMasculineOverrideMap[number - 1],\r\n            GrammaticalGender.Feminine => UnitsFeminineOverrideMap[number - 1],\r\n            GrammaticalGender.Neuter => UnitsNeuterOverride[number - 1],\r\n            null => UnitsIntraOverride[number - 1],\r\n            _ => throw new ArgumentOutOfRangeException(nameof(gender)),\r\n        };\r\n    }\r\n\r\n    static void CollectLessThanThousand(List<string> parts, long number, GrammaticalGender? gender)\r\n    {\r\n        if (number >= 100)\r\n        {\r\n            parts.Add(HundredsMap[number / 100]);\r\n            number %= 100;\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            parts.Add(TensMap[number / 10]);\r\n            number %= 10;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(UnitByGender(number, gender));\r\n        }\r\n    }\r\n\r\n    static void CollectThousandAndAbove(List<string> parts, ref long number, long divisor, GrammaticalGender gender, string[] map)\r\n    {\r\n        var n = number / divisor;\r\n\r\n        if (n <= 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        CollectLessThanThousand(parts, n, n < 19 ? gender : null);\r\n\r\n        var units = n % 1000;\r\n\r\n        if (units == 1)\r\n        {\r\n            parts.Add(map[0]);\r\n        }\r\n        else if (units is > 1 and < 5)\r\n        {\r\n            parts.Add(map[1]);\r\n        }\r\n        else\r\n        {\r\n            parts.Add(map[2]);\r\n        }\r\n\r\n        number %= divisor;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/DefaultNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Constructor.\r\n/// </summary>\r\n/// <param name=\"culture\">Culture to use.</param>\r\nclass DefaultNumberToWordsConverter(CultureInfo? culture) : GenderlessNumberToWordsConverter\r\n{\r\n    readonly CultureInfo? culture = culture;\r\n\r\n    /// <summary>\r\n    /// 3501.ToWords() -> \"three thousand five hundred and one\"\r\n    /// </summary>\r\n    /// <param name=\"number\">Number to be turned to words</param>\r\n    public override string Convert(long number) =>\r\n        number.ToString(culture);\r\n\r\n    /// <summary>\r\n    /// 1.ToOrdinalWords() -> \"first\"\r\n    /// </summary>\r\n    /// <param name=\"number\">Number to be turned to ordinal words</param>\r\n    public override string ConvertToOrdinal(int number) =>\r\n        number.ToString(culture);\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/DutchNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Dutch spelling of numbers is not really officially regulated.\r\n/// There are a few different rules that can be applied.\r\n/// Used the rules as stated here.\r\n/// http://www.beterspellen.nl/website/?pag=110\r\n/// </summary>\r\nclass DutchNumberToWordsConverter :\r\n    GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"nul\", \"een\", \"twee\", \"drie\", \"vier\", \"vijf\", \"zes\", \"zeven\", \"acht\", \"negen\", \"tien\", \"elf\", \"twaalf\", \"dertien\", \"veertien\", \"vijftien\", \"zestien\", \"zeventien\", \"achttien\", \"negentien\"];\r\n    static readonly string[] TensMap = [\"nul\", \"tien\", \"twintig\", \"dertig\", \"veertig\", \"vijftig\", \"zestig\", \"zeventig\", \"tachtig\", \"negentig\"];\r\n\r\n    class Fact\r\n    {\r\n        public long Value { get; set; }\r\n        public required string Name { get; set; }\r\n        public required string Prefix { get; set; }\r\n        public required string Postfix { get; set; }\r\n        public bool DisplayOneUnit { get; set; }\r\n    }\r\n\r\n    static readonly Fact[] Hunderds =\r\n    [\r\n        new()\r\n        {\r\n            Value = 1_000_000_000_000_000_000L,\r\n            Name = \"triljoen\",\r\n            Prefix = \" \",\r\n            Postfix = \" \",\r\n            DisplayOneUnit = true\r\n        },\r\n        new()\r\n        {\r\n            Value = 1_000_000_000_000_000L,\r\n            Name = \"biljard\",\r\n            Prefix = \" \",\r\n            Postfix = \" \",\r\n            DisplayOneUnit = true\r\n        },\r\n        new()\r\n        {\r\n            Value = 1_000_000_000_000L,\r\n            Name = \"biljoen\",\r\n            Prefix = \" \",\r\n            Postfix = \" \",\r\n            DisplayOneUnit = true\r\n        },\r\n        new()\r\n        {\r\n            Value = 1000000000,\r\n            Name = \"miljard\",\r\n            Prefix = \" \",\r\n            Postfix = \" \",\r\n            DisplayOneUnit = true\r\n        },\r\n        new()\r\n        {\r\n            Value = 1000000,\r\n            Name = \"miljoen\",\r\n            Prefix = \" \",\r\n            Postfix = \" \",\r\n            DisplayOneUnit = true\r\n        },\r\n        new()\r\n        {\r\n            Value = 1000,\r\n            Name = \"duizend\",\r\n            Prefix = \"\",\r\n            Postfix = \" \",\r\n            DisplayOneUnit = false\r\n        },\r\n        new()\r\n        {\r\n            Value = 100,\r\n            Name = \"honderd\",\r\n            Prefix = \"\",\r\n            Postfix = \"\",\r\n            DisplayOneUnit = false\r\n        }\r\n    ];\r\n\r\n    public override string Convert(long input)\r\n    {\r\n        var number = input;\r\n\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[0];\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"min {Convert(-number)}\";\r\n        }\r\n\r\n        var word = \"\";\r\n\r\n        foreach (var m in Hunderds)\r\n        {\r\n            var divided = number / m.Value;\r\n\r\n            if (divided <= 0)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            if (divided == 1 && !m.DisplayOneUnit)\r\n            {\r\n                word += m.Name;\r\n            }\r\n            else\r\n            {\r\n                word += Convert(divided) + m.Prefix + m.Name;\r\n            }\r\n\r\n            number %= m.Value;\r\n            if (number > 0)\r\n            {\r\n                word += m.Postfix;\r\n            }\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            if (number < 20)\r\n            {\r\n                word += UnitsMap[number];\r\n            }\r\n            else\r\n            {\r\n                var tens = TensMap[number / 10];\r\n                var unit = number % 10;\r\n                if (unit > 0)\r\n                {\r\n                    var units = UnitsMap[unit];\r\n                    var trema = units.EndsWith('e');\r\n                    word += units + (trema ? \"ën\" : \"en\") + tens;\r\n                }\r\n                else\r\n                {\r\n                    word += tens;\r\n                }\r\n            }\r\n        }\r\n\r\n        return word;\r\n    }\r\n\r\n    static readonly Dictionary<string, string> OrdinalExceptions = new()\r\n    {\r\n        {\r\n            \"een\", \"eerste\"\r\n        },\r\n        {\r\n            \"drie\", \"derde\"\r\n        },\r\n        {\r\n            \"miljoen\", \"miljoenste\"\r\n        },\r\n    };\r\n\r\n#if NET8_0_OR_GREATER\r\n    static readonly SearchValues<char> EndingCharForSte = SearchValues.Create(['t', 'g', 'd']);\r\n#else\r\n    static readonly char[] EndingCharForSte = ['t', 'g', 'd'];\r\n#endif\r\n\r\n    public override string ConvertToOrdinal(int number)\r\n    {\r\n        var word = Convert(number);\r\n\r\n        foreach (var kv in OrdinalExceptions.Where(kv => word.EndsWith(kv.Key)))\r\n        {\r\n            // replace word with exception\r\n            return StringHumanizeExtensions.Concat(word.AsSpan(0, word.Length - kv.Key.Length), kv.Value.AsSpan());\r\n        }\r\n\r\n        // achtste\r\n        // twintigste, dertigste, veertigste, ...\r\n        // honderdste, duizendste, ...\r\n#if NET8_0_OR_GREATER\r\n        if (word.AsSpan().LastIndexOfAny(EndingCharForSte) == word.Length - 1)\r\n#else\r\n        if (word.LastIndexOfAny(EndingCharForSte) == word.Length - 1)\r\n#endif\r\n        {\r\n            return word + \"ste\";\r\n        }\r\n\r\n        return word + \"de\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/EnglishNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass EnglishNumberToWordsConverter : GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"ten\", \"eleven\", \"twelve\", \"thirteen\", \"fourteen\", \"fifteen\", \"sixteen\", \"seventeen\", \"eighteen\", \"nineteen\"];\r\n    static readonly string[] UnitsMapTh = [\"zeroth\", \"first\", \"second\", \"third\", \"fourth\", \"fifth\", \"sixth\", \"seventh\", \"eighth\", \"ninth\", \"tenth\", \"eleventh\", \"twelfth\", \"thirteenth\", \"fourteenth\", \"fifteenth\", \"sixteenth\", \"seventeenth\", \"eighteenth\", \"nineteenth\"];\r\n    static readonly string[] TensMap = [\"zero\", \"ten\", \"twenty\", \"thirty\", \"forty\", \"fifty\", \"sixty\", \"seventy\", \"eighty\", \"ninety\"];\r\n\r\n    public override string Convert(long number) =>\r\n        Convert(number, false);\r\n\r\n    public override string Convert(long number, bool addAnd = true) =>\r\n        Convert(number, false, addAnd);\r\n\r\n    public override string ConvertToOrdinal(int number) =>\r\n        Convert(number, true);\r\n\r\n    string Convert(long number, bool isOrdinal, bool addAnd = true)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return GetUnitValue(0, isOrdinal);\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"minus {Convert(-number)}\";\r\n        }\r\n\r\n        var parts = new List<string>(20);\r\n\r\n        CollectParts(parts, ref number, isOrdinal, 1_000_000_000_000_000_000, \"quintillion\", \"quintillionth\");\r\n        CollectParts(parts, ref number, isOrdinal, 1_000_000_000_000_000, \"quadrillion\", \"quadrillionth\");\r\n        CollectParts(parts, ref number, isOrdinal, 1_000_000_000_000, \"trillion\", \"trillionth\");\r\n        CollectParts(parts, ref number, isOrdinal, 1_000_000_000, \"billion\", \"billionth\");\r\n        CollectParts(parts, ref number, isOrdinal, 1_000_000, \"million\", \"millionth\");\r\n        CollectParts(parts, ref number, isOrdinal, 1_000, \"thousand\", \"thousandth\");\r\n\r\n        CollectPartsUnderAThousand(parts, number, isOrdinal, addAnd);\r\n\r\n        if (isOrdinal && parts[0] == \"one\")\r\n        {\r\n            // one hundred => hundredth\r\n            parts.RemoveAt(0);\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    static void CollectParts(List<string> parts, ref long number, bool isOrdinal, long divisor, string word, string ordinal)\r\n    {\r\n        var result = number / divisor;\r\n        if (result == 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        CollectPartsUnderAThousand(parts, result);\r\n\r\n        number %= divisor;\r\n        parts.Add(number == 0 && isOrdinal ? ordinal : word);\r\n    }\r\n\r\n    static void CollectPartsUnderAThousand(List<string> parts, long number, bool isOrdinal = false, bool addAnd = true)\r\n    {\r\n        if (number >= 100)\r\n        {\r\n            parts.Add(GetUnitValue(number / 100, false));\r\n            number %= 100;\r\n            parts.Add(number == 0 && isOrdinal ? \"hundredth\" : \"hundred\");\r\n        }\r\n\r\n        if (number == 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (parts.Count > 0 && addAnd)\r\n        {\r\n            parts.Add(\"and\");\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            var tens = TensMap[number / 10];\r\n            var units = number % 10;\r\n            if (units == 0)\r\n            {\r\n                parts.Add(isOrdinal ? $\"{tens.TrimEnd('y')}ieth\" : tens);\r\n            }\r\n            else\r\n            {\r\n                parts.Add($\"{tens}-{GetUnitValue(units, isOrdinal)}\");\r\n            }\r\n        }\r\n        else\r\n        {\r\n            parts.Add(GetUnitValue(number, isOrdinal));\r\n        }\r\n    }\r\n\r\n    static string GetUnitValue(long number, bool isOrdinal) =>\r\n        isOrdinal ? UnitsMapTh[number] : UnitsMap[number];\r\n\r\n    public override string ConvertToTuple(int number) =>\r\n        number switch\r\n        {\r\n            1 => \"single\",\r\n            2 => \"double\",\r\n            3 => \"triple\",\r\n            4 => \"quadruple\",\r\n            5 => \"quintuple\",\r\n            6 => \"sextuple\",\r\n            7 => \"septuple\",\r\n            8 => \"octuple\",\r\n            9 => \"nonuple\",\r\n            10 => \"decuple\",\r\n            100 => \"centuple\",\r\n            1000 => \"milluple\",\r\n            _ => $\"{number}-tuple\"\r\n        };\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/FarsiNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass FarsiNumberToWordsConverter : GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] FarsiHundredsMap = [\"صفر\", \"صد\", \"دویست\", \"سیصد\", \"چهارصد\", \"پانصد\", \"ششصد\", \"هفتصد\", \"هشتصد\", \"نهصد\"];\r\n    static readonly string[] FarsiTensMap = [\"صفر\", \"ده\", \"بیست\", \"سی\", \"چهل\", \"پنجاه\", \"شصت\", \"هفتاد\", \"هشتاد\", \"نود\"];\r\n    static readonly string[] FarsiUnitsMap = [\"صفر\", \"یک\", \"دو\", \"سه\", \"چهار\", \"پنج\", \"شش\", \"هفت\", \"هشت\", \"نه\", \"ده\", \"یازده\", \"دوازده\", \"سیزده\", \"چهارده\", \"پانزده\", \"شانزده\", \"هفده\", \"هجده\", \"نوزده\"];\r\n\r\n    public override string Convert(long number)\r\n    {\r\n        if (number < 0)\r\n        {\r\n            return $\"منفی {Convert(-number)}\";\r\n        }\r\n\r\n        if (number == 0)\r\n        {\r\n            return \"صفر\";\r\n        }\r\n\r\n        var farsiGroupsMap = new Dictionary<long, Func<long, string>>\r\n        {\r\n            {\r\n                (long) Math.Pow(10, 18), n => $\"{Convert(n)} تریلیون\"\r\n            },\r\n            {\r\n                (long) Math.Pow(10, 15), n => $\"{Convert(n)} بیلیارد\"\r\n            },\r\n            {\r\n                (long) Math.Pow(10, 12), n => $\"{Convert(n)} بیلیون\"\r\n            },\r\n            {\r\n                (long) Math.Pow(10, 9), n => $\"{Convert(n)} میلیارد\"\r\n            },\r\n            {\r\n                (long) Math.Pow(10, 6), n => $\"{Convert(n)} میلیون\"\r\n            },\r\n            {\r\n                (long) Math.Pow(10, 3), n => $\"{Convert(n)} هزار\"\r\n            },\r\n            {\r\n                (long) Math.Pow(10, 2), n => FarsiHundredsMap[n]\r\n            }\r\n        };\r\n\r\n        var parts = new List<string>();\r\n        foreach (var group in farsiGroupsMap.Keys)\r\n        {\r\n            if (number / group > 0)\r\n            {\r\n                parts.Add(farsiGroupsMap[group](number / group));\r\n                number %= group;\r\n            }\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            parts.Add(FarsiTensMap[number / 10]);\r\n            number %= 10;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(FarsiUnitsMap[number]);\r\n        }\r\n\r\n        return string.Join(\" و \", parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number)\r\n    {\r\n        if (number == 1)\r\n        {\r\n            return \"اول\";\r\n        }\r\n\r\n        if (number == 3)\r\n        {\r\n            return \"سوم\";\r\n        }\r\n\r\n        if (number % 10 == 3 && number != 13)\r\n        {\r\n            return Convert(number / 10 * 10) + \" و سوم\";\r\n        }\r\n\r\n        var word = Convert(number);\r\n        return $\"{word}{(word.EndsWith('ی') ? \" ام\" : \"م\")}\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/FinnishNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass FinnishNumberToWordsConverter : GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"nolla\", \"yksi\", \"kaksi\", \"kolme\", \"neljä\", \"viisi\", \"kuusi\", \"seitsemän\", \"kahdeksan\", \"yhdeksän\", \"kymmenen\"];\r\n    static readonly string[] OrdinalUnitsMap = [\"nollas\", \"ensimmäinen\", \"toinen\", \"kolmas\", \"neljäs\", \"viides\", \"kuudes\", \"seitsemäs\", \"kahdeksas\", \"yhdeksäs\", \"kymmenes\"];\r\n\r\n    static readonly FrozenDictionary<int, string> OrdinalExceptions = new Dictionary<int, string>\r\n    {\r\n        {1, \"yhdes\" },\r\n        {2, \"kahdes\" }\r\n    }.ToFrozenDictionary();\r\n\r\n    public override string Convert(long input)\r\n    {\r\n        if (input is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        var number = (int)input;\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"miinus {Convert(-number)}\";\r\n        }\r\n\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[0];\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number / 1000000000 > 0)\r\n        {\r\n            parts.Add(number / 1000000000 == 1\r\n                ? \"miljardi \"\r\n                : $\"{Convert(number / 1000000000)}miljardia \");\r\n\r\n            number %= 1000000000;\r\n        }\r\n\r\n        if (number / 1000000 > 0)\r\n        {\r\n            parts.Add(number / 1000000 == 1\r\n                ? \"miljoona \"\r\n                : $\"{Convert(number / 1000000)}miljoonaa \");\r\n\r\n            number %= 1000000;\r\n        }\r\n\r\n        if (number / 1000 > 0)\r\n        {\r\n            parts.Add(number / 1000 == 1\r\n                ? \"tuhat \"\r\n                : $\"{Convert(number / 1000)}tuhatta \");\r\n\r\n            number %= 1000;\r\n        }\r\n\r\n        if (number / 100 > 0)\r\n        {\r\n            parts.Add(number / 100 == 1\r\n                ? \"sata\"\r\n                : $\"{Convert(number / 100)}sataa\");\r\n\r\n            number %= 100;\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            parts.Add($\"{Convert(number / 10)}kymmentä\");\r\n            number %= 10;\r\n        }\r\n        else if (number is > 10 and < 20)\r\n        {\r\n            parts.Add($\"{UnitsMap[number % 10]}toista\");\r\n        }\r\n\r\n        if (number is > 0 and <= 10)\r\n        {\r\n            parts.Add(UnitsMap[number]);\r\n        }\r\n\r\n        return string.Concat(parts).Trim();\r\n    }\r\n\r\n    static string GetOrdinalUnit(int number, bool useExceptions)\r\n    {\r\n        if (useExceptions && OrdinalExceptions.TryGetValue(number, out var unit))\r\n        {\r\n            return unit;\r\n        }\r\n\r\n        return OrdinalUnitsMap[number];\r\n    }\r\n\r\n    static string ToOrdinal(int number, bool useExceptions)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return OrdinalUnitsMap[0];\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number / 1000000000 > 0)\r\n        {\r\n            parts.Add($\"{(number / 1000000000 == 1 ? \"\" : ToOrdinal(number / 1000000000, true))}miljardis\");\r\n            number %= 1000000000;\r\n        }\r\n\r\n        if (number / 1000000 > 0)\r\n        {\r\n            parts.Add($\"{(number / 1000000 == 1 ? \"\" : ToOrdinal(number / 1000000, true))}miljoonas\");\r\n            number %= 1000000;\r\n        }\r\n\r\n        if (number / 1000 > 0)\r\n        {\r\n            parts.Add($\"{(number / 1000 == 1 ? \"\" : ToOrdinal(number / 1000, true))}tuhannes\");\r\n            number %= 1000;\r\n        }\r\n\r\n        if (number / 100 > 0)\r\n        {\r\n            parts.Add($\"{(number / 100 == 1 ? \"\" : ToOrdinal(number / 100, true))}sadas\");\r\n            number %= 100;\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            parts.Add($\"{ToOrdinal(number / 10, true)}kymmenes\");\r\n            number %= 10;\r\n        }\r\n        else if (number is > 10 and < 20)\r\n        {\r\n            parts.Add($\"{GetOrdinalUnit(number % 10, true)}toista\");\r\n        }\r\n\r\n        if (number is > 0 and <= 10)\r\n        {\r\n            parts.Add(GetOrdinalUnit(number, useExceptions));\r\n        }\r\n\r\n        return string.Concat(parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number) =>\r\n        ToOrdinal(number, false);\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/FrenchBelgianNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass FrenchBelgianNumberToWordsConverter : FrenchNumberToWordsConverterBase\r\n{\r\n    protected override void CollectPartsUnderAHundred(List<string> parts, ref long number, GrammaticalGender gender, bool pluralize)\r\n    {\r\n        if (number == 80)\r\n        {\r\n            parts.Add(pluralize ? \"quatre-vingts\" : \"quatre-vingt\");\r\n        }\r\n        else if (number == 81)\r\n        {\r\n            parts.Add(gender == GrammaticalGender.Feminine ? \"quatre-vingt-une\" : \"quatre-vingt-un\");\r\n        }\r\n        else\r\n        {\r\n            base.CollectPartsUnderAHundred(parts, ref number, gender, pluralize);\r\n        }\r\n    }\r\n\r\n    protected override string GetTens(long tens)\r\n    {\r\n        if (tens == 8)\r\n        {\r\n            return \"quatre-vingt\";\r\n        }\r\n\r\n        return base.GetTens(tens);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/FrenchNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass FrenchNumberToWordsConverter : FrenchNumberToWordsConverterBase\r\n{\r\n    protected override void CollectPartsUnderAHundred(List<string> parts, ref long number, GrammaticalGender gender, bool pluralize)\r\n    {\r\n        if (number == 71)\r\n        {\r\n            parts.Add(\"soixante et onze\");\r\n        }\r\n        else if (number == 80)\r\n        {\r\n            parts.Add(pluralize ? \"quatre-vingts\" : \"quatre-vingt\");\r\n        }\r\n        else if (number >= 70)\r\n        {\r\n            var @base = number < 80 ? 60 : 80;\r\n            var units = number - @base;\r\n            var tens = @base / 10;\r\n            parts.Add($\"{GetTens(tens)}-{GetUnits(units, gender)}\");\r\n        }\r\n        else\r\n        {\r\n            base.CollectPartsUnderAHundred(parts, ref number, gender, pluralize);\r\n        }\r\n    }\r\n\r\n    protected override string GetTens(long tens)\r\n    {\r\n        if (tens == 8)\r\n        {\r\n            return \"quatre-vingt\";\r\n        }\r\n\r\n        return base.GetTens(tens);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/FrenchNumberToWordsConverterBase.cs",
    "content": "namespace Humanizer;\r\n\r\nabstract class FrenchNumberToWordsConverterBase : GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"zéro\", \"un\", \"deux\", \"trois\", \"quatre\", \"cinq\", \"six\", \"sept\", \"huit\", \"neuf\", \"dix\", \"onze\", \"douze\", \"treize\", \"quatorze\", \"quinze\", \"seize\", \"dix-sept\", \"dix-huit\", \"dix-neuf\"];\r\n    static readonly string[] TensMap = [\"zéro\", \"dix\", \"vingt\", \"trente\", \"quarante\", \"cinquante\", \"soixante\", \"septante\", \"octante\", \"nonante\"];\r\n\r\n    public override string Convert(long number, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[0];\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number < 0)\r\n        {\r\n            parts.Add(\"moins\");\r\n            number = -number;\r\n        }\r\n\r\n        CollectParts(parts, ref number, 1000000000000000000, \"trillion\");\r\n        CollectParts(parts, ref number, 1000000000000000, \"billiard\");\r\n        CollectParts(parts, ref number, 1000000000000, \"billion\");\r\n        CollectParts(parts, ref number, 1000000000, \"milliard\");\r\n        CollectParts(parts, ref number, 1000000, \"million\");\r\n        CollectThousands(parts, ref number, 1000, \"mille\");\r\n\r\n        CollectPartsUnderAThousand(parts, number, gender, true);\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender)\r\n    {\r\n        if (number == 1)\r\n        {\r\n            return gender == GrammaticalGender.Feminine ? \"première\" : \"premier\";\r\n        }\r\n\r\n        var convertedNumber = Convert(number);\r\n\r\n        if (convertedNumber.EndsWith('s') && !convertedNumber.EndsWith(\"trois\"))\r\n        {\r\n            convertedNumber = convertedNumber.TrimEnd('s');\r\n        }\r\n        else if (convertedNumber.EndsWith(\"cinq\"))\r\n        {\r\n            convertedNumber += \"u\";\r\n        }\r\n        else if (convertedNumber.EndsWith(\"neuf\"))\r\n        {\r\n            convertedNumber = convertedNumber.TrimEnd('f') + \"v\";\r\n        }\r\n\r\n        if (convertedNumber.StartsWith(\"un \"))\r\n        {\r\n            convertedNumber = convertedNumber[3..];\r\n        }\r\n\r\n        if (number == 0)\r\n        {\r\n            convertedNumber += \"t\";\r\n        }\r\n\r\n        convertedNumber = convertedNumber.TrimEnd('e');\r\n        convertedNumber += \"ième\";\r\n        return convertedNumber;\r\n    }\r\n\r\n    protected static string GetUnits(long number, GrammaticalGender gender)\r\n    {\r\n        if (number == 1 && gender == GrammaticalGender.Feminine)\r\n        {\r\n            return \"une\";\r\n        }\r\n\r\n        return UnitsMap[number];\r\n    }\r\n\r\n    static void CollectHundreds(List<string> parts, ref long number, long d, string form, bool pluralize)\r\n    {\r\n        if (number < d)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var result = number / d;\r\n        if (result == 1)\r\n        {\r\n            parts.Add(form);\r\n        }\r\n        else\r\n        {\r\n            parts.Add(GetUnits(result, GrammaticalGender.Masculine));\r\n            if (number % d == 0 && pluralize)\r\n            {\r\n                parts.Add(form + \"s\");\r\n            }\r\n            else\r\n            {\r\n                parts.Add(form);\r\n            }\r\n        }\r\n\r\n        number %= d;\r\n    }\r\n\r\n    void CollectParts(List<string> parts, ref long number, long d, string form)\r\n    {\r\n        if (number < d)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var result = number / d;\r\n\r\n        CollectPartsUnderAThousand(parts, result, GrammaticalGender.Masculine, true);\r\n\r\n        if (result == 1)\r\n        {\r\n            parts.Add(form);\r\n        }\r\n        else\r\n        {\r\n            parts.Add(form + \"s\");\r\n        }\r\n\r\n        number %= d;\r\n    }\r\n\r\n    void CollectPartsUnderAThousand(List<string> parts, long number, GrammaticalGender gender, bool pluralize)\r\n    {\r\n        CollectHundreds(parts, ref number, 100, \"cent\", pluralize);\r\n\r\n        if (number > 0)\r\n        {\r\n            CollectPartsUnderAHundred(parts, ref number, gender, pluralize);\r\n        }\r\n    }\r\n\r\n    void CollectThousands(List<string> parts, ref long number, int d, string form)\r\n    {\r\n        if (number < d)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var result = number / d;\r\n        if (result > 1)\r\n        {\r\n            CollectPartsUnderAThousand(parts, result, GrammaticalGender.Masculine, false);\r\n        }\r\n\r\n        parts.Add(form);\r\n\r\n        number %= d;\r\n    }\r\n\r\n    protected virtual void CollectPartsUnderAHundred(List<string> parts, ref long number, GrammaticalGender gender, bool pluralize)\r\n    {\r\n        if (number < 20)\r\n        {\r\n            parts.Add(GetUnits(number, gender));\r\n        }\r\n        else\r\n        {\r\n            var units = number % 10;\r\n            var tens = GetTens(number / 10);\r\n            if (units == 0)\r\n            {\r\n                parts.Add(tens);\r\n            }\r\n            else if (units == 1)\r\n            {\r\n                parts.Add(tens);\r\n                parts.Add(\"et\");\r\n                parts.Add(GetUnits(1, gender));\r\n            }\r\n            else\r\n            {\r\n                parts.Add($\"{tens}-{GetUnits(units, gender)}\");\r\n            }\r\n        }\r\n    }\r\n\r\n    protected virtual string GetTens(long tens) =>\r\n        TensMap[tens];\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/FrenchSwissNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass FrenchSwissNumberToWordsConverter : FrenchNumberToWordsConverterBase;"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/GenderedNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nabstract class GenderedNumberToWordsConverter(GrammaticalGender defaultGender = GrammaticalGender.Masculine) : INumberToWordsConverter\r\n{\r\n    readonly GrammaticalGender defaultGender = defaultGender;\r\n\r\n    /// <inheritdoc/>\r\n    public string Convert(long number) =>\r\n        Convert(number, defaultGender);\r\n\r\n    /// <inheritdoc/>\r\n    public string Convert(long number, WordForm wordForm) =>\r\n        Convert(number, wordForm, defaultGender);\r\n\r\n    /// <inheritdoc/>\r\n    public string Convert(long number, bool addAnd) =>\r\n        Convert(number, defaultGender);\r\n\r\n    /// <inheritdoc/>\r\n    public string Convert(long number, bool addAnd, WordForm wordForm) =>\r\n        Convert(number, wordForm, defaultGender, addAnd);\r\n\r\n    /// <inheritdoc/>\r\n    public abstract string Convert(long number, GrammaticalGender gender, bool addAnd = true);\r\n\r\n    /// <inheritdoc/>\r\n    public virtual string Convert(long number, WordForm wordForm, GrammaticalGender gender, bool addAnd = true) =>\r\n        Convert(number, gender, addAnd);\r\n\r\n    /// <inheritdoc/>\r\n    public string ConvertToOrdinal(int number) =>\r\n        ConvertToOrdinal(number, defaultGender);\r\n\r\n    /// <inheritdoc/>\r\n    public abstract string ConvertToOrdinal(int number, GrammaticalGender gender);\r\n\r\n    /// <inheritdoc/>\r\n    public string ConvertToOrdinal(int number, WordForm wordForm) =>\r\n        ConvertToOrdinal(number, defaultGender, wordForm);\r\n\r\n    /// <inheritdoc/>\r\n    public virtual string ConvertToOrdinal(int number, GrammaticalGender gender, WordForm wordForm) =>\r\n        ConvertToOrdinal(number, gender);\r\n\r\n    /// <inheritdoc/>\r\n    public virtual string ConvertToTuple(int number) =>\r\n        Convert(number);\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/GenderlessNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nabstract class GenderlessNumberToWordsConverter : INumberToWordsConverter\r\n{\r\n    /// <inheritdoc/>\r\n    public abstract string Convert(long number);\r\n\r\n    public string Convert(long number, WordForm wordForm) =>\r\n        Convert(number);\r\n\r\n    public virtual string Convert(long number, bool addAnd) =>\r\n        Convert(number);\r\n\r\n    public string Convert(long number, bool addAnd, WordForm wordForm) =>\r\n        Convert(number, wordForm);\r\n\r\n    public virtual string Convert(long number, GrammaticalGender gender, bool addAnd = true) =>\r\n        Convert(number);\r\n\r\n    public virtual string Convert(long number, WordForm wordForm, GrammaticalGender gender, bool addAnd = true) =>\r\n        Convert(number, addAnd, wordForm);\r\n\r\n    public abstract string ConvertToOrdinal(int number);\r\n\r\n    public string ConvertToOrdinal(int number, GrammaticalGender gender) =>\r\n        ConvertToOrdinal(number);\r\n\r\n    public virtual string ConvertToOrdinal(int number, WordForm wordForm) =>\r\n        ConvertToOrdinal(number);\r\n\r\n    public virtual string ConvertToOrdinal(int number, GrammaticalGender gender, WordForm wordForm) =>\r\n        ConvertToOrdinal(number, wordForm);\r\n\r\n    public virtual string ConvertToTuple(int number) =>\r\n        Convert(number);\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/GermanNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass GermanNumberToWordsConverter : GermanNumberToWordsConverterBase;"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/GermanNumberToWordsConverterBase.cs",
    "content": "namespace Humanizer;\r\n\r\nabstract class GermanNumberToWordsConverterBase : GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"null\", \"ein\", \"zwei\", \"drei\", \"vier\", \"fünf\", \"sechs\", \"sieben\", \"acht\", \"neun\", \"zehn\", \"elf\", \"zwölf\", \"dreizehn\", \"vierzehn\", \"fünfzehn\", \"sechzehn\", \"siebzehn\", \"achtzehn\", \"neunzehn\"];\r\n    static readonly string[] TensMap = [\"null\", \"zehn\", \"zwanzig\", \"dreißig\", \"vierzig\", \"fünfzig\", \"sechzig\", \"siebzig\", \"achtzig\", \"neunzig\"];\r\n    static readonly string[] UnitsOrdinal = [string.Empty, \"ers\", \"zwei\", \"drit\", \"vier\", \"fünf\", \"sechs\", \"sieb\", \"ach\", \"neun\", \"zehn\", \"elf\", \"zwölf\", \"dreizehn\", \"vierzehn\", \"fünfzehn\", \"sechzehn\", \"siebzehn\", \"achtzehn\", \"neunzehn\"];\r\n    static readonly string[] HundredOrdinalSingular = [\"einhundert\"];\r\n    static readonly string[] HundredOrdinalPlural = [\"{0}hundert\"];\r\n    static readonly string[] ThousandOrdinalSingular = [\"eintausend\"];\r\n    static readonly string[] ThousandOrdinalPlural = [\"{0}tausend\"];\r\n    static readonly string[] MillionOrdinalSingular = [\"einmillion\", \"einemillion\"];\r\n    static readonly string[] MillionOrdinalPlural = [\"{0}million\", \"{0}millionen\"];\r\n    static readonly string[] BillionOrdinalSingular = [\"einmilliard\", \"einemilliarde\"];\r\n    static readonly string[] BillionOrdinalPlural = [\"{0}milliard\", \"{0}milliarden\"];\r\n\r\n    public override string Convert(long number, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[number];\r\n        }\r\n\r\n        var parts = new List<string>();\r\n        if (number < 0)\r\n        {\r\n            parts.Add(\"minus \");\r\n            number = -number;\r\n        }\r\n\r\n        CollectParts(parts, ref number, 1000000000000000000, true, \"{0} Trillionen\", \"eine Trillion\");\r\n        CollectParts(parts, ref number, 1000000000000000, true, \"{0} Billiarden\", \"eine Billiarde\");\r\n        CollectParts(parts, ref number, 1000000000000, true, \"{0} Billionen\", \"eine Billion\");\r\n        CollectParts(parts, ref number, 1000000000, true, \"{0} Milliarden\", \"eine Milliarde\");\r\n        CollectParts(parts, ref number, 1000000, true, \"{0} Millionen\", \"eine Million\");\r\n        CollectParts(parts, ref number, 1000, false, \"{0}tausend\", \"eintausend\");\r\n        CollectParts(parts, ref number, 100, false, \"{0}hundert\", \"einhundert\");\r\n\r\n        if (number > 0)\r\n        {\r\n            if (number < 20)\r\n            {\r\n                if (number == 1 && gender == GrammaticalGender.Feminine)\r\n                {\r\n                    parts.Add(\"eine\");\r\n                }\r\n                else if (number == 1)\r\n                {\r\n                    parts.Add($\"{UnitsMap[number]}s\");\r\n                }\r\n                else\r\n                {\r\n                    parts.Add(UnitsMap[number]);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                var units = number % 10;\r\n                if (units > 0)\r\n                {\r\n                    parts.Add($\"{UnitsMap[units]}und\");\r\n                }\r\n\r\n                parts.Add(GetTens(number / 10));\r\n            }\r\n        }\r\n\r\n        return string.Concat(parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[number] + GetEndingForGender(gender);\r\n        }\r\n\r\n        var parts = new List<string>();\r\n        if (number < 0)\r\n        {\r\n            parts.Add(\"minus \");\r\n            number = -number;\r\n        }\r\n\r\n        CollectOrdinalParts(parts, ref number, 1000000000, true, BillionOrdinalPlural, BillionOrdinalSingular);\r\n        CollectOrdinalParts(parts, ref number, 1000000, true, MillionOrdinalPlural, MillionOrdinalSingular);\r\n        CollectOrdinalParts(parts, ref number, 1000, false, ThousandOrdinalPlural, ThousandOrdinalSingular);\r\n        CollectOrdinalParts(parts, ref number, 100, false, HundredOrdinalPlural, HundredOrdinalSingular);\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(number < 20 ? UnitsOrdinal[number] : Convert(number));\r\n        }\r\n\r\n        if (number is 0 or >= 20)\r\n        {\r\n            parts.Add(\"s\");\r\n        }\r\n\r\n        parts.Add(GetEndingForGender(gender));\r\n\r\n        return string.Concat(parts);\r\n    }\r\n\r\n    void CollectParts(List<string> parts, ref long number, long divisor, bool addSpaceBeforeNextPart, string pluralFormat, string singular)\r\n    {\r\n        if (number / divisor > 0)\r\n        {\r\n            parts.Add(Part(pluralFormat, singular, number / divisor));\r\n            number %= divisor;\r\n            if (addSpaceBeforeNextPart && number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n    }\r\n\r\n    void CollectOrdinalParts(List<string> parts, ref int number, int divisor, bool evaluateNoRest, string[] pluralFormats, string[] singulars)\r\n    {\r\n        if (number / divisor > 0)\r\n        {\r\n            var noRest = evaluateNoRest ? NoRestIndex(number % divisor) : 0;\r\n            parts.Add(Part(pluralFormats[noRest], singulars[noRest], number / divisor));\r\n            number %= divisor;\r\n        }\r\n    }\r\n\r\n    string Part(string pluralFormat, string singular, long number)\r\n    {\r\n        if (number == 1)\r\n        {\r\n            return singular;\r\n        }\r\n\r\n        return string.Format(pluralFormat, Convert(number));\r\n    }\r\n\r\n    static int NoRestIndex(int number) =>\r\n        number == 0 ? 0 : 1;\r\n\r\n    static string GetEndingForGender(GrammaticalGender gender) =>\r\n        gender switch\r\n        {\r\n            GrammaticalGender.Masculine => \"ter\",\r\n            GrammaticalGender.Feminine => \"te\",\r\n            GrammaticalGender.Neuter => \"tes\",\r\n            _ => throw new ArgumentOutOfRangeException(nameof(gender))\r\n        };\r\n\r\n    protected virtual string GetTens(long tens) =>\r\n        TensMap[tens];\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/GermanSwissLiechtensteinNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass GermanSwissLiechtensteinNumberToWordsConverter : GermanNumberToWordsConverterBase\r\n{\r\n    protected override string GetTens(long tens)\r\n    {\r\n        if (tens == 3)\r\n        {\r\n            return \"dreissig\";\r\n        }\r\n\r\n        return base.GetTens(tens);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/GreekNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass GreekNumberToWordsConverter : GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitMap = [\"μηδέν\", \"ένα\", \"δύο\", \"τρία\", \"τέσσερα\", \"πέντε\", \"έξι\", \"επτά\", \"οκτώ\", \"εννέα\", \"δέκα\", \"έντεκα\", \"δώδεκα\"];\r\n    static readonly string[] UnitsMap = [\"μηδέν\", \"ένα\", \"δύο\", \"τρείς\", \"τέσσερις\", \"πέντε\", \"έξι\", \"επτά\", \"οκτώ\", \"εννέα\", \"δέκα\", \"έντεκα\", \"δώδεκα\"];\r\n    static readonly string[] TensMap = [\"\", \"δέκα\", \"είκοσι\", \"τριάντα\", \"σαράντα\", \"πενήντα\", \"εξήντα\", \"εβδομήντα\", \"ογδόντα\", \"ενενήντα\"];\r\n    static readonly string[] TensNoDiacriticsMap = [\"\", \"δεκα\", \"εικοσι\", \"τριαντα\", \"σαραντα\", \"πενηντα\", \"εξηντα\", \"εβδομηντα\", \"ογδοντα\", \"ενενηντα\"];\r\n    static readonly string[] HundredMap = [\"\", \"εκατό\", \"διακόσια\", \"τριακόσια\", \"τετρακόσια\", \"πεντακόσια\", \"εξακόσια\", \"επτακόσια\", \"οκτακόσια\", \"εννιακόσια\"];\r\n    static readonly string[] HundredsMap = [\"\", \"εκατόν\", \"διακόσιες\", \"τριακόσιες\", \"τετρακόσιες\", \"πεντακόσιες\", \"εξακόσιες\", \"επτακόσιες\", \"οκτακόσιες\", \"εννιακόσιες\"];\r\n\r\n    static readonly FrozenDictionary<long, string> ΟrdinalMap = new Dictionary<long, string>\r\n    {\r\n        {\r\n            0, string.Empty\r\n        },\r\n        {\r\n            1, \"πρώτος\"\r\n        },\r\n        {\r\n            2, \"δεύτερος\"\r\n        },\r\n        {\r\n            3, \"τρίτος\"\r\n        },\r\n        {\r\n            4, \"τέταρτος\"\r\n        },\r\n        {\r\n            5, \"πέμπτος\"\r\n        },\r\n        {\r\n            6, \"έκτος\"\r\n        },\r\n        {\r\n            7, \"έβδομος\"\r\n        },\r\n        {\r\n            8, \"όγδοος\"\r\n        },\r\n        {\r\n            9, \"ένατος\"\r\n        },\r\n        {\r\n            10, \"δέκατος\"\r\n        },\r\n        {\r\n            20, \"εικοστός\"\r\n        },\r\n        {\r\n            30, \"τριακοστός\"\r\n        },\r\n        {\r\n            40, \"τεσσαρακοστός\"\r\n        },\r\n        {\r\n            50, \"πεντηκοστός\"\r\n        },\r\n        {\r\n            60, \"εξηκοστός\"\r\n        },\r\n        {\r\n            70, \"εβδομηκοστός\"\r\n        },\r\n        {\r\n            80, \"ογδοηκοστός\"\r\n        },\r\n        {\r\n            90, \"ενενηκοστός\"\r\n        },\r\n        {\r\n            100, \"εκατοστός\"\r\n        },\r\n        {\r\n            200, \"διακοσιοστός\"\r\n        },\r\n        {\r\n            300, \"τριακοσιοστός\"\r\n        },\r\n        {\r\n            400, \"τετρακοσιστός\"\r\n        },\r\n        {\r\n            500, \"πεντακοσιοστός\"\r\n        },\r\n        {\r\n            600, \"εξακοσιοστός\"\r\n        },\r\n        {\r\n            700, \"εφτακοσιοστός\"\r\n        },\r\n        {\r\n            800, \"οχτακοσιοστός\"\r\n        },\r\n        {\r\n            900, \"εννιακοσιοστός\"\r\n        },\r\n        {\r\n            1000, \"χιλιοστός\"\r\n        }\r\n    }.ToFrozenDictionary();\r\n\r\n    public override string Convert(long number) =>\r\n        ConvertImpl(number, false);\r\n\r\n    public override string ConvertToOrdinal(int number)\r\n    {\r\n        if (number / 10 == 0)\r\n        {\r\n            return GetOneDigitOrdinal(number);\r\n        }\r\n\r\n        if (number / 10 > 0 && number / 10 < 10)\r\n        {\r\n            return GetTwoDigitOrdinal(number);\r\n\r\n        }\r\n\r\n        if (number / 100 > 0 && number / 100 < 10)\r\n        {\r\n            return GetThreeDigitOrdinal(number);\r\n        }\r\n\r\n        if (number / 1000 > 0 && number / 1000 < 10)\r\n        {\r\n            return GetFourDigitOrdinal(number);\r\n        }\r\n\r\n        return string.Empty;\r\n    }\r\n\r\n    static string GetOneDigitOrdinal(int number)\r\n    {\r\n        if (ΟrdinalMap.TryGetValue(number, out var output))\r\n        {\r\n            return output;\r\n        }\r\n\r\n        return string.Empty;\r\n    }\r\n\r\n    static string GetTwoDigitOrdinal(int number)\r\n    {\r\n        if (number == 11)\r\n        {\r\n            return \"ενδέκατος\";\r\n        }\r\n\r\n        if (number == 12)\r\n        {\r\n            return \"δωδέκατος\";\r\n        }\r\n\r\n        var decades = number / 10;\r\n\r\n        if (!ΟrdinalMap.TryGetValue(decades * 10, out var decadesString))\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        if (number - decades * 10 > 0)\r\n        {\r\n            return decadesString + \" \" + GetOneDigitOrdinal(number - decades * 10);\r\n        }\r\n\r\n        return decadesString;\r\n    }\r\n\r\n    static string GetThreeDigitOrdinal(int number)\r\n    {\r\n        var hundreds = number / 100;\r\n\r\n        if (!ΟrdinalMap.TryGetValue(hundreds * 100, out var hundredsString))\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        if (number - hundreds * 100 > 10)\r\n        {\r\n            return hundredsString + \" \" + GetTwoDigitOrdinal(number - hundreds * 100);\r\n        }\r\n\r\n        if (number - hundreds * 100 > 0)\r\n        {\r\n            return hundredsString + \" \" + GetOneDigitOrdinal(number - hundreds * 100);\r\n        }\r\n\r\n        return hundredsString;\r\n    }\r\n\r\n    static string GetFourDigitOrdinal(int number)\r\n    {\r\n        var thousands = number / 1000;\r\n\r\n        if (!ΟrdinalMap.TryGetValue(thousands * 1000, out var thousandsString))\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        if (number - thousands * 1000 > 100)\r\n        {\r\n            return thousandsString + \" \" + GetThreeDigitOrdinal(number - thousands * 1000);\r\n        }\r\n\r\n        if (number - thousands * 1000 > 10)\r\n        {\r\n            return thousandsString + \" \" + GetTwoDigitOrdinal(number - thousands * 1000);\r\n        }\r\n\r\n        if (number - thousands * 1000 > 0)\r\n        {\r\n            return thousandsString + \" \" + GetOneDigitOrdinal(number - thousands * 1000);\r\n        }\r\n\r\n        return thousandsString;\r\n    }\r\n\r\n    string ConvertImpl(long number, bool returnPluralized)\r\n    {\r\n        if (number < 13)\r\n        {\r\n            return ConvertIntB13(number, returnPluralized);\r\n        }\r\n\r\n        if (number < 100)\r\n        {\r\n            return ConvertIntBH(number, returnPluralized);\r\n        }\r\n\r\n        if (number < 1000)\r\n        {\r\n            return ConvertIntBT(number, returnPluralized);\r\n        }\r\n\r\n        if (number < 1000000)\r\n        {\r\n            return ConvertIntBM(number);\r\n        }\r\n\r\n        if (number < 1000000000)\r\n        {\r\n            return ConvertIntBB(number);\r\n        }\r\n\r\n        if (number < 1000000000000)\r\n        {\r\n            return ConvertIntBTR(number);\r\n        }\r\n\r\n        return \"\";\r\n    }\r\n\r\n    static string ConvertIntB13(long number, bool returnPluralized) =>\r\n        returnPluralized ? UnitsMap[number] : UnitMap[number];\r\n\r\n    string ConvertIntBH(long number, bool returnPluralized)\r\n    {\r\n        var result = number / 10 == 1 ? TensNoDiacriticsMap[number / 10] : TensMap[number / 10];\r\n\r\n        if (number % 10 != 0)\r\n        {\r\n            if (number / 10 != 1)\r\n            {\r\n                result += \" \";\r\n            }\r\n\r\n            result += ConvertImpl(number % 10, returnPluralized)\r\n                .ToLower();\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    string ConvertIntBT(long number, bool returnPluralized)\r\n    {\r\n        string result;\r\n\r\n        if (number / 100 == 1)\r\n        {\r\n            if (number % 100 == 0)\r\n            {\r\n                return HundredMap[number / 100];\r\n            }\r\n\r\n            result = HundredsMap[number / 100];\r\n        }\r\n        else\r\n        {\r\n            result = returnPluralized ? HundredsMap[number / 100] : HundredMap[number / 100];\r\n        }\r\n\r\n        if (number % 100 != 0)\r\n        {\r\n            result += $\" {ConvertImpl(number % 100, returnPluralized).ToLower()}\";\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    string ConvertIntBM(long number)\r\n    {\r\n        if (number / 1000 == 1)\r\n        {\r\n            if (number % 1000 == 0)\r\n            {\r\n                return \"χίλια\";\r\n            }\r\n\r\n            return $\"χίλια {ConvertImpl(number % 1000, false).ToLower()}\";\r\n        }\r\n\r\n        var result = $\"{ConvertImpl(number / 1000, true)} χιλιάδες\";\r\n\r\n        if (number % 1000 != 0)\r\n        {\r\n            result += $\" {ConvertImpl(number % 1000, false).ToLower()}\";\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    string ConvertIntBB(long number)\r\n    {\r\n        if (number / 1000000 == 1)\r\n        {\r\n            if (number % 1000000 == 0)\r\n            {\r\n                return \"ένα εκατομμύριο\";\r\n            }\r\n\r\n            return $\"ένα εκατομμύριο {ConvertImpl(number % 1000000, true).ToLower()}\";\r\n        }\r\n\r\n        var result = $\"{ConvertImpl(number / 1000000, false)} εκατομμύρια\";\r\n\r\n        if (number % 1000000 != 0)\r\n        {\r\n            result += $\" {ConvertImpl(number % 1000000, false).ToLower()}\";\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    string ConvertIntBTR(long number)\r\n    {\r\n        if (number / 1000000000 == 1)\r\n        {\r\n            if (number % 1000000000 == 0)\r\n            {\r\n                return \"ένα δισεκατομμύριο\";\r\n            }\r\n\r\n            return $\"ένα δισεκατομμύριο {ConvertImpl(number % 1000000000, true).ToLower()}\";\r\n        }\r\n\r\n        var result = $\"{ConvertImpl(number / 1000000000, false)} δισεκατομμύρια\";\r\n\r\n        if (number % 1000000000 != 0)\r\n        {\r\n            result += $\" {ConvertImpl(number % 1000000000, false).ToLower()}\";\r\n        }\r\n\r\n        return result;\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/HebrewNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass HebrewNumberToWordsConverter(CultureInfo culture) :\r\n    GenderedNumberToWordsConverter(GrammaticalGender.Feminine)\r\n{\r\n    static readonly string[] UnitsFeminine = [\"אפס\", \"אחת\", \"שתיים\", \"שלוש\", \"ארבע\", \"חמש\", \"שש\", \"שבע\", \"שמונה\", \"תשע\", \"עשר\"];\r\n    static readonly string[] UnitsMasculine = [\"אפס\", \"אחד\", \"שניים\", \"שלושה\", \"ארבעה\", \"חמישה\", \"שישה\", \"שבעה\", \"שמונה\", \"תשעה\", \"עשרה\"];\r\n    static readonly string[] TensUnit = [\"עשר\", \"עשרים\", \"שלושים\", \"ארבעים\", \"חמישים\", \"שישים\", \"שבעים\", \"שמונים\", \"תשעים\"];\r\n\r\n    [AttributeUsage(AttributeTargets.Field)]\r\n    class DescriptionAttribute(string description) :\r\n        Attribute\r\n    {\r\n        public string Description { get; set; } = description;\r\n    }\r\n\r\n    enum Group\r\n    {\r\n        Hundreds = 100,\r\n        Thousands = 1000,\r\n\r\n        [Description(\"מיליון\")]\r\n        Millions = 1000000,\r\n\r\n        [Description(\"מיליארד\")]\r\n        Billions = 1000000000\r\n    }\r\n\r\n    public override string Convert(long input, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (input is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        var number = (int)input;\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"מינוס {Convert(-number, gender)}\";\r\n        }\r\n\r\n        if (number == 0)\r\n        {\r\n            return UnitsFeminine[0];\r\n        }\r\n\r\n        var parts = new List<string>();\r\n        if (number >= (int)Group.Billions)\r\n        {\r\n            ToBigNumber(number, Group.Billions, parts);\r\n            number %= (int)Group.Billions;\r\n        }\r\n\r\n        if (number >= (int)Group.Millions)\r\n        {\r\n            ToBigNumber(number, Group.Millions, parts);\r\n            number %= (int)Group.Millions;\r\n        }\r\n\r\n        if (number >= (int)Group.Thousands)\r\n        {\r\n            ToThousands(number, parts);\r\n            number %= (int)Group.Thousands;\r\n        }\r\n\r\n        if (number >= (int)Group.Hundreds)\r\n        {\r\n            ToHundreds(number, parts);\r\n            number %= (int)Group.Hundreds;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            var appendAnd = parts.Count != 0;\r\n\r\n            if (number <= 10)\r\n            {\r\n                var unit = gender == GrammaticalGender.Masculine ? UnitsMasculine[number] : UnitsFeminine[number];\r\n                if (appendAnd)\r\n                {\r\n                    unit = \"ו\" + unit;\r\n                }\r\n\r\n                parts.Add(unit);\r\n            }\r\n            else if (number < 20)\r\n            {\r\n                var unit = Convert(number % 10, gender);\r\n                unit = unit.Replace(\"יי\", \"י\");\r\n                unit = $\"{unit} {(gender == GrammaticalGender.Masculine ? \"עשר\" : \"עשרה\")}\";\r\n                if (appendAnd)\r\n                {\r\n                    unit = \"ו\" + unit;\r\n                }\r\n\r\n                parts.Add(unit);\r\n            }\r\n            else\r\n            {\r\n                var tenUnit = TensUnit[number / 10 - 1];\r\n                if (number % 10 == 0)\r\n                {\r\n                    parts.Add(tenUnit);\r\n                }\r\n                else\r\n                {\r\n                    var unit = Convert(number % 10, gender);\r\n                    parts.Add($\"{tenUnit} ו{unit}\");\r\n                }\r\n            }\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender) =>\r\n        number.ToString(culture);\r\n\r\n    void ToBigNumber(int number, Group group, List<string> parts)\r\n    {\r\n        // Big numbers (million and above) always use the masculine form\r\n        // See https://www.safa-ivrit.org/dikduk/numbers.php\r\n\r\n        var digits = number / (int)group;\r\n        if (digits == 2)\r\n        {\r\n            parts.Add(\"שני\");\r\n        }\r\n        else if (digits > 2)\r\n        {\r\n            parts.Add(Convert(digits, GrammaticalGender.Masculine));\r\n        }\r\n\r\n        parts.Add(group.Humanize());\r\n    }\r\n\r\n    void ToThousands(int number, List<string> parts)\r\n    {\r\n        var thousands = number / (int)Group.Thousands;\r\n\r\n        if (thousands == 1)\r\n        {\r\n            parts.Add(\"אלף\");\r\n        }\r\n        else if (thousands == 2)\r\n        {\r\n            parts.Add(\"אלפיים\");\r\n        }\r\n        else if (thousands == 8)\r\n        {\r\n            parts.Add(\"שמונת אלפים\");\r\n        }\r\n        else if (thousands <= 10)\r\n        {\r\n            parts.Add(UnitsFeminine[thousands] + \"ת\" + \" אלפים\");\r\n        }\r\n        else\r\n        {\r\n            parts.Add(Convert(thousands) + \" אלף\");\r\n        }\r\n    }\r\n\r\n    static void ToHundreds(int number, List<string> parts)\r\n    {\r\n        // For hundreds, Hebrew is using the feminine form\r\n        // See https://www.safa-ivrit.org/dikduk/numbers.php\r\n\r\n        var hundreds = number / (int)Group.Hundreds;\r\n\r\n        if (hundreds == 1)\r\n        {\r\n            parts.Add(\"מאה\");\r\n        }\r\n        else if (hundreds == 2)\r\n        {\r\n            parts.Add(\"מאתיים\");\r\n        }\r\n        else\r\n        {\r\n            parts.Add(UnitsFeminine[hundreds] + \" מאות\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/HungarianNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass HungarianNumberToWordsConverter : GenderlessNumberToWordsConverter\r\n{\r\n    // Units\r\n    private static readonly string[] UnitsMap = [\"\", \"egy\", \"kettő\", \"három\", \"négy\", \"öt\", \"hat\", \"hét\", \"nyolc\", \"kilenc\"];\r\n    private static readonly string[] OrdinalUnitsMap = [\"\", \"első\", \"második\", \"harmadik\", \"negyedik\", \"ötödik\", \"hatodik\", \"hetedik\", \"nyolcadik\", \"kilencedik\"];\r\n\r\n    // Tens\r\n    private static readonly string[] TensMap = [\"\", \"tizen\", \"huszon\", \"harminc\", \"negyven\", \"ötven\", \"hatvan\", \"hetven\", \"nyolcvan\", \"kilencven\"];\r\n    private static readonly string[] OrdinalTensMap = [\"\", \"tizedik\", \"huszadik\", \"harmincadik\", \"negyvenedik\", \"ötvenedik\", \"hatvanadik\", \"hetvenedik\", \"nyolcvanadik\", \"kilencvenedik\"];\r\n\r\n    // Hundreds\r\n    private static readonly string[] HundredsMap = [\"\", \"száz\", \"kétszáz\", \"háromszáz\", \"négyszáz\", \"ötszáz\", \"hatszáz\", \"hétszáz\", \"nyolcszáz\", \"kilencszáz\"];\r\n\r\n    // Exceptional single numbers when used as ordinal numbers and the whole number is greater than 10\r\n    private static readonly Dictionary<long, string> OrdinalUnitsExceptions = new()\r\n    {\r\n        {\r\n            1, \"egyedik\"\r\n        },\r\n        {\r\n            2, \"kettedik\"\r\n        }\r\n    };\r\n\r\n    // Exceptional ten numbers when the number divided by 10 gives no remainder\r\n    private static readonly Dictionary<long, string> WholeTensExceptions = new()\r\n    {\r\n        {\r\n            10, \"tíz\"\r\n        },\r\n        {\r\n            20, \"húsz\"\r\n        }\r\n    };\r\n\r\n\r\n    public override string Convert(long number) => ConvertInternal(number, false);\r\n\r\n    public override string ConvertToOrdinal(int number) => ConvertInternal(number, true);\r\n\r\n    private static string ConvertInternal(long number, bool isOrdinal)\r\n    {\r\n        // Handle zero and negative numbers\r\n        switch (number)\r\n        {\r\n            case 0:\r\n                return isOrdinal ? \"nulladik\" : \"nulla\";\r\n            case < 0:\r\n                return $\"mínusz {ConvertInternal(-number, isOrdinal)}\";\r\n        }\r\n\r\n        var isLessThanTen = number < 10;\r\n        var parts = new List<string>(10);\r\n\r\n        CollectParts(parts, ref number, isOrdinal, isLessThanTen, 1_000_000_000_000_000_000, \"trillió\", \"trilliomodik\");\r\n        CollectParts(parts, ref number, isOrdinal, isLessThanTen, 1_000_000_000_000_000, \"billiárd\", \"billiárdodik\");\r\n        CollectParts(parts, ref number, isOrdinal, isLessThanTen, 1_000_000_000_000, \"billió\", \"billiomodik\");\r\n        CollectParts(parts, ref number, isOrdinal, isLessThanTen, 1_000_000_000, \"milliárd\", \"milliárdodik\");\r\n        CollectParts(parts, ref number, isOrdinal, isLessThanTen, 1_000_000, \"millió\", \"milliomodik\");\r\n\r\n        // All numbers above 2000 should be separated by dashes per thousands\r\n        if (2_000 <= number)\r\n        {\r\n            CollectParts(parts, ref number, isOrdinal, isLessThanTen, 1_000, \"ezer\", \"ezredik\");\r\n            var underAThousandPart = GetUnderAThousandPart(number, isOrdinal, false, isLessThanTen);\r\n            if (underAThousandPart != string.Empty)\r\n            {\r\n                parts.Add(underAThousandPart);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            // In hungarian there is no separator between one thousand and the rest of the numbers\r\n            var lastPart = 1_000 <= number ? GetOneThousandPart(ref number, isOrdinal) : \"\";\r\n            lastPart += GetUnderAThousandPart(number, isOrdinal, false, isLessThanTen);\r\n\r\n            if (lastPart != string.Empty)\r\n            {\r\n                parts.Add(lastPart);\r\n            }\r\n        }\r\n\r\n        return string.Join(\"-\", parts);\r\n    }\r\n\r\n    // Thousands part for numbers between 1000 and 1999\r\n    static string GetOneThousandPart(ref long number, bool isOrdinal)\r\n    {\r\n        const int divisor = 1_000;\r\n\r\n        var oneThousandPart = isOrdinal && number == divisor ? \"ezredik\" : \"ezer\";\r\n\r\n        number %= divisor;\r\n        return oneThousandPart;\r\n    }\r\n\r\n    private static void CollectParts(List<string> parts, ref long number, bool isOrdinal, bool isLessThanTen,\r\n        long divisor, string word,\r\n        string ordinal)\r\n    {\r\n        var result = number / divisor;\r\n        if (result == 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var prefixNumber = GetUnderAThousandPart(result, isOrdinal, true, isLessThanTen);\r\n\r\n        number %= divisor;\r\n        parts.Add(number == 0 && isOrdinal ? prefixNumber + ordinal : prefixNumber + word);\r\n    }\r\n\r\n    private static string GetUnderAThousandPart(long number, bool isOrdinal, bool isPrefix, bool originalLessThanTen)\r\n    {\r\n        var numberString = \"\";\r\n        if (100 <= number)\r\n        {\r\n            // Return hundred + \"adik\" if the number is exactly one of hundreds e.g.: századik, hétszázadik\r\n            if (isOrdinal && number % 100 == 0)\r\n            {\r\n                return HundredsMap[number / 100] + \"adik\";\r\n            }\r\n\r\n            numberString += HundredsMap[number / 100];\r\n            number %= 100;\r\n        }\r\n\r\n        if (10 <= number)\r\n        {\r\n            // Return an ordinal ten if the number is exactly one of tens\r\n            if (isOrdinal && number % 10 == 0)\r\n            {\r\n                return numberString + OrdinalTensMap[number / 10];\r\n            }\r\n\r\n            numberString += WholeTensExceptions.TryGetValue(number, out var value) ? value : TensMap[number / 10];\r\n            number %= 10;\r\n        }\r\n\r\n        if (isOrdinal && !isPrefix)\r\n        {\r\n            numberString += GetOrdinalOnes(number, originalLessThanTen);\r\n        }\r\n        else\r\n        {\r\n            numberString += isPrefix && number == 2 ? \"két\" : UnitsMap[number];\r\n        }\r\n\r\n        return numberString;\r\n    }\r\n\r\n    private static string GetOrdinalOnes(long number, bool lessThanTen)\r\n    {\r\n        if (lessThanTen)\r\n        {\r\n            return OrdinalUnitsMap[number];\r\n        }\r\n\r\n        return OrdinalUnitsExceptions.TryGetValue(number, out var value) ? value : OrdinalUnitsMap[number];\r\n    }\r\n\r\n    public override string ConvertToTuple(int number) =>\r\n        number switch\r\n        {\r\n            1 => \"szimpla\",\r\n            2 => \"dupla\",\r\n            3 => \"tripla\",\r\n            4 => \"kvadrupla\",\r\n            5 => \"pentapla\",\r\n            6 => \"hexapla\",\r\n            7 => \"heptapla\",\r\n            8 => \"octapla\",\r\n            9 => \"nonapla\",\r\n            10 => \"dekapla\",\r\n            100 => \"hektapla\",\r\n            1000 => \"kiliapla\",\r\n            _ => $\"{number}\"\r\n        };\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/INumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// An interface you should implement to localise ToWords and ToOrdinalWords methods\r\n/// </summary>\r\npublic interface INumberToWordsConverter\r\n{\r\n    /// <summary>\r\n    /// Converts the number to string using the locale's default grammatical gender\r\n    /// </summary>\r\n    string Convert(long number);\r\n\r\n    /// <summary>\r\n    /// Converts the number to a specific string form using the locale's default grammatical gender.\r\n    /// </summary>\r\n    string Convert(long number, WordForm wordForm);\r\n\r\n    /// <summary>\r\n    /// Converts the number to string using the locale's default grammatical gender with or without adding 'And'\r\n    /// </summary>\r\n    /// <param name=\"addAnd\">Specify with our without adding \"And\"</param>\r\n    string Convert(long number, bool addAnd);\r\n\r\n    /// <summary>\r\n    /// Converts the number to a specific string form using the locale's default grammatical gender with or without adding 'And'\r\n    /// </summary>\r\n    string Convert(long number, bool addAnd, WordForm wordForm);\r\n\r\n    /// <summary>\r\n    /// Converts the number to string using the provided grammatical gender\r\n    /// </summary>\r\n    string Convert(long number, GrammaticalGender gender, bool addAnd = true);\r\n\r\n    /// <summary>\r\n    /// Converts the number to a specific string form using the provided grammatical gender.\r\n    /// </summary>\r\n    string Convert(long number, WordForm wordForm, GrammaticalGender gender, bool addAnd = true);\r\n\r\n    /// <summary>\r\n    /// Converts the number to ordinal string using the locale's default grammatical gender\r\n    /// </summary>\r\n    string ConvertToOrdinal(int number);\r\n\r\n    /// <summary>\r\n    /// Converts the number to a specific ordinal string form using the locale's default grammatical gender.\r\n    /// </summary>\r\n    string ConvertToOrdinal(int number, WordForm wordForm);\r\n\r\n    /// <summary>\r\n    /// Converts the number to ordinal string using the provided grammatical gender\r\n    /// </summary>\r\n    string ConvertToOrdinal(int number, GrammaticalGender gender);\r\n\r\n    /// <summary>\r\n    /// Converts the number to a specific ordinal string form using the provided grammatical gender.\r\n    /// </summary>\r\n    string ConvertToOrdinal(int number, GrammaticalGender gender, WordForm wordForm);\r\n\r\n    /// <summary>\r\n    /// Converts integer to named tuple (e.g. 'single', 'double' etc.).\r\n    /// </summary>\r\n    string ConvertToTuple(int number);\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/IcelandicNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass IcelandicNumberToWordsConverter : GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"núll\", string.Empty, string.Empty, string.Empty, string.Empty, \"fimm\", \"sex\", \"sjö\", \"átta\", \"níu\", \"tíu\", \"ellefu\", \"tólf\", \"þrettán\", \"fjórtán\", \"fimmtán\", \"sextán\", \"sautján\", \"átján\", \"nítján\"];\r\n    static readonly string[] FeminineUnitsMap = [string.Empty, \"ein\", \"tvær\", \"þrjár\", \"fjórar\"];\r\n    static readonly string[] MasculineUnitsMap = [string.Empty, \"einn\", \"tveir\", \"þrír\", \"fjórir\"];\r\n    static readonly string[] NeuterUnitsMap = [string.Empty, \"eitt\", \"tvö\", \"þrjú\", \"fjögur\"];\r\n    static readonly string[] TensMap = [string.Empty, \"tíu\", \"tuttugu\", \"þrjátíu\", \"fjörutíu\", \"fimmtíu\", \"sextíu\", \"sjötíu\", \"áttatíu\", \"níutíu\"];\r\n    static readonly string[] UnitsOrdinalPrefixes = [\"núllt\", \"fyrst\", string.Empty, \"þriðj\", \"fjórð\", \"fimmt\", \"sjött\", \"sjöund\", \"áttund\", \"níund\", \"tíund\", \"elleft\", \"tólft\", \"þrettánd\", \"fjórtánd\", \"fimmtánd\", \"sextánd\", \"sautjánd\", \"átjánd\", \"nítjánd\"];\r\n    static readonly string[] TensOrdinalPrefixes = [string.Empty, \"tíund\", \"tuttugast\", \"þrítugast\", \"fertugast\", \"fimmtugast\", \"sextugast\", \"sjötugast\", \"áttugast\", \"nítugast\"];\r\n    const string AndSplit = \"og\";\r\n\r\n    class Fact\r\n    {\r\n        public long Power { get; set; }\r\n        public GrammaticalGender Gender { get; set; }\r\n        public required string Plural { get; set; }\r\n        public required string Single { get; set; }\r\n        public required string OrdinalPrefix { get; set; }\r\n    }\r\n\r\n    static readonly Dictionary<int, Fact> PowerOfTenMap = new()\r\n    {\r\n        {\r\n            0, new()\r\n            {\r\n                Power = 0,\r\n                Single = string.Empty,\r\n                Plural = string.Empty,\r\n                OrdinalPrefix = string.Empty,\r\n                Gender = GrammaticalGender.Neuter\r\n            }\r\n        },\r\n        {\r\n            2, new()\r\n            {\r\n                Power = 2,\r\n                Single = \"hundrað\",\r\n                Plural = \"hundruð\",\r\n                OrdinalPrefix = \"hundruðast\",\r\n                Gender = GrammaticalGender.Neuter\r\n            }\r\n        },\r\n        {\r\n            3, new()\r\n            {\r\n                Power = 1000,\r\n                Single = \"eitt þúsund\",\r\n                Plural = \"þúsund\",\r\n                OrdinalPrefix = \"þúsundast\",\r\n                Gender = GrammaticalGender.Neuter\r\n            }\r\n        },\r\n        {\r\n            6, new()\r\n            {\r\n                Power = 1000000,\r\n                Single = \"ein milljón\",\r\n                Plural = \"milljónir\",\r\n                OrdinalPrefix = \"milljónast\",\r\n                Gender = GrammaticalGender.Feminine\r\n            }\r\n        },\r\n        {\r\n            9, new()\r\n            {\r\n                Power = 1000000000,\r\n                Single = \"einn milljarður\",\r\n                Plural = \"milljarðar\",\r\n                OrdinalPrefix = \"milljarðast\",\r\n                Gender = GrammaticalGender.Masculine\r\n            }\r\n        },\r\n        {\r\n            12, new()\r\n            {\r\n                Power = 1000000000000,\r\n                Single = \"ein billjón\",\r\n                Plural = \"billjónir\",\r\n                OrdinalPrefix = \"billjónast\",\r\n                Gender = GrammaticalGender.Feminine\r\n            }\r\n        },\r\n        {\r\n            15, new()\r\n            {\r\n                Power = 1000000000000000,\r\n                Single = \"einn billjarður\",\r\n                Plural = \"billjarðar\",\r\n                OrdinalPrefix = \"billjarðast\",\r\n                Gender = GrammaticalGender.Masculine\r\n            }\r\n        },\r\n        {\r\n            18, new()\r\n            {\r\n                Power = 1000000000000000000,\r\n                Single = \"ein trilljón\",\r\n                Plural = \"trilljónir\",\r\n                OrdinalPrefix = \"trilljónast\",\r\n                Gender = GrammaticalGender.Feminine\r\n            }\r\n        }\r\n    };\r\n\r\n    static bool IsAndSplitNeeded(int number) =>\r\n        number <= 20 || number % 10 == 0 && number < 100 || number % 100 == 0;\r\n\r\n    static string GetOrdinalEnding(GrammaticalGender gender) =>\r\n        gender == GrammaticalGender.Masculine ? \"i\" : \"a\";\r\n\r\n    static void GetUnits(List<string?> builder, long number, GrammaticalGender gender)\r\n    {\r\n        if (number is > 0 and < 5)\r\n        {\r\n            var genderedForm = gender switch\r\n            {\r\n                GrammaticalGender.Masculine => MasculineUnitsMap[number],\r\n                GrammaticalGender.Neuter => NeuterUnitsMap[number],\r\n                GrammaticalGender.Feminine => FeminineUnitsMap[number],\r\n                _ => throw new ArgumentOutOfRangeException(nameof(gender))\r\n            };\r\n            builder.Add(genderedForm);\r\n        }\r\n        else\r\n        {\r\n            builder.Add(UnitsMap[number]);\r\n        }\r\n    }\r\n\r\n    static void CollectOrdinalParts(List<string?> builder, int threeDigitPart, Fact conversionRule, GrammaticalGender partGender, GrammaticalGender ordinalGender)\r\n    {\r\n        var hundreds = threeDigitPart / 100;\r\n        var hundredRemainder = threeDigitPart % 100;\r\n        var units = hundredRemainder % 10;\r\n        var decade = hundredRemainder / 10 * 10;\r\n        var hasThousand = conversionRule.Power > 100;\r\n\r\n        if (hundreds != 0)\r\n        {\r\n            GetUnits(builder, hundreds, GrammaticalGender.Neuter);\r\n            var hundredPrefix = hundreds == 1 ? PowerOfTenMap[2].Single : PowerOfTenMap[2].Plural;\r\n            if (hundredRemainder < 20 && false == hasThousand)\r\n            {\r\n                var genderedFormWithPostfix = partGender switch\r\n                {\r\n                    GrammaticalGender.Masculine => hundredPrefix + \"asti\",\r\n                    GrammaticalGender.Neuter => hundredPrefix + \"asta\",\r\n                    GrammaticalGender.Feminine => hundredPrefix + \"asta\",\r\n                    _ => throw new ArgumentOutOfRangeException(nameof(partGender))\r\n                };\r\n                builder.Add(genderedFormWithPostfix);\r\n            }\r\n            else\r\n            {\r\n                builder.Add(hundredPrefix);\r\n            }\r\n        }\r\n\r\n        if (decade >= 20)\r\n        {\r\n            if (units != 0)\r\n            {\r\n                builder.Add(CollectOrdinalPartsUnderAHundred(decade, partGender));\r\n                builder.Add(AndSplit);\r\n                builder.Add(CollectOrdinalPartsUnderAHundred(units, partGender));\r\n            }\r\n            else\r\n            {\r\n                if (hundreds != 0)\r\n                {\r\n                    builder.Add(AndSplit);\r\n                }\r\n\r\n                builder.Add(CollectOrdinalPartsUnderAHundred(decade, partGender));\r\n            }\r\n        }\r\n        else if (hundredRemainder != 0)\r\n        {\r\n            if (hundreds != 0)\r\n            {\r\n                builder.Add(AndSplit);\r\n            }\r\n\r\n            if (hasThousand)\r\n            {\r\n                GetUnits(builder, hundredRemainder, conversionRule.Gender);\r\n            }\r\n            else\r\n            {\r\n                builder.Add(CollectOrdinalPartsUnderAHundred(hundredRemainder, partGender));\r\n            }\r\n        }\r\n\r\n        if (hasThousand)\r\n        {\r\n            builder.Add(conversionRule.OrdinalPrefix + GetOrdinalEnding(ordinalGender));\r\n        }\r\n    }\r\n\r\n    static string? CollectOrdinalPartsUnderAHundred(int number, GrammaticalGender gender)\r\n    {\r\n        if (number is >= 0 and < 20)\r\n        {\r\n            if (number == 2)\r\n            {\r\n                return gender switch\r\n                {\r\n                    GrammaticalGender.Masculine => \"annar\",\r\n                    GrammaticalGender.Feminine => \"önnur\",\r\n                    GrammaticalGender.Neuter => \"annað\",\r\n                    _ => throw new ArgumentOutOfRangeException(nameof(gender))\r\n                };\r\n            }\r\n\r\n            return UnitsOrdinalPrefixes[number] + GetOrdinalEnding(gender);\r\n        }\r\n\r\n        if (number < 100 && number % 10 == 0)\r\n        {\r\n            return TensOrdinalPrefixes[number / 10] + GetOrdinalEnding(gender);\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    static void CollectParts(List<string?> parts, ref long number, ref bool needsAnd, Fact rule)\r\n    {\r\n        var remainder = number / rule.Power;\r\n        if (remainder > 0)\r\n        {\r\n            number %= rule.Power;\r\n            var prevLen = parts.Count;\r\n            CollectPart(parts, remainder, rule);\r\n            if (number == 0 && needsAnd && false == parts\r\n                    .Skip(prevLen)\r\n                    .Contains(AndSplit))\r\n            {\r\n                parts.Insert(prevLen, AndSplit);\r\n            }\r\n\r\n            needsAnd = true;\r\n        }\r\n    }\r\n\r\n    static void CollectPart(List<string?> parts, long number, Fact rule)\r\n    {\r\n        if (number == 1)\r\n        {\r\n            parts.Add(rule.Single);\r\n        }\r\n        else\r\n        {\r\n            CollectPartUnderOneThousand(parts, number, rule.Gender);\r\n            parts.Add(rule.Plural);\r\n        }\r\n    }\r\n\r\n    static void CollectPartUnderOneThousand(List<string?> builder, long number, GrammaticalGender gender)\r\n    {\r\n        var hundreds = number / 100;\r\n        var hundredRemainder = number % 100;\r\n        var units = hundredRemainder % 10;\r\n        var tens = hundredRemainder / 10;\r\n\r\n        if (hundreds != 0)\r\n        {\r\n            GetUnits(builder, hundreds, GrammaticalGender.Neuter);\r\n            builder.Add(hundreds == 1 ? PowerOfTenMap[2].Single : PowerOfTenMap[2].Plural);\r\n        }\r\n\r\n        if (tens >= 2)\r\n        {\r\n            if (units != 0)\r\n            {\r\n                builder.Add(TensMap[tens]);\r\n                builder.Add(AndSplit);\r\n                GetUnits(builder, units, gender);\r\n            }\r\n            else\r\n            {\r\n                if (hundreds != 0)\r\n                {\r\n                    builder.Add(AndSplit);\r\n                }\r\n\r\n                builder.Add(TensMap[tens]);\r\n\r\n            }\r\n        }\r\n        else if (hundredRemainder != 0)\r\n        {\r\n            if (hundreds != 0)\r\n            {\r\n                builder.Add(AndSplit);\r\n            }\r\n\r\n            GetUnits(builder, hundredRemainder, gender);\r\n        }\r\n    }\r\n\r\n    static void CollectOrdinal(List<string?> parts, ref int number, ref bool needsAnd, Fact rule, GrammaticalGender gender)\r\n    {\r\n        var remainder = number / rule.Power;\r\n        if (remainder > 0)\r\n        {\r\n            number %= (int)rule.Power;\r\n\r\n            // https://malfar.arnastofnun.is/grein/65658\r\n            if (number > 0 && (number > 19 || (number % 100 > 10 && number % 100 % 10 == 0)))\r\n            {\r\n                if (remainder == 1)\r\n                {\r\n                    parts.Add(rule.Single);\r\n                }\r\n                else\r\n                {\r\n                    CollectPartUnderOneThousand(parts, remainder, rule.Gender);\r\n                    if (rule.Power > 0)\r\n                    {\r\n                        parts.Add(rule.Plural);\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                var prevLen = parts.Count;\r\n                CollectOrdinalParts(parts, (int)remainder, rule, rule.Gender, gender);\r\n                if (number == 0 && needsAnd && false == parts\r\n                        .Skip(prevLen)\r\n                        .Contains(AndSplit))\r\n                {\r\n                    parts.Insert(prevLen, AndSplit);\r\n                }\r\n            }\r\n\r\n            needsAnd = true;\r\n        }\r\n    }\r\n\r\n    public override string Convert(long number, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[number];\r\n        }\r\n\r\n        var parts = new List<string?>();\r\n        if (number < 0)\r\n        {\r\n            parts.Add(\"mínus\");\r\n            number = -number;\r\n        }\r\n\r\n        var needsAnd = false;\r\n        CollectParts(parts, ref number, ref needsAnd, PowerOfTenMap[18]);\r\n        CollectParts(parts, ref number, ref needsAnd, PowerOfTenMap[15]);\r\n        CollectParts(parts, ref number, ref needsAnd, PowerOfTenMap[12]);\r\n        CollectParts(parts, ref number, ref needsAnd, PowerOfTenMap[9]);\r\n        CollectParts(parts, ref number, ref needsAnd, PowerOfTenMap[6]);\r\n        CollectParts(parts, ref number, ref needsAnd, PowerOfTenMap[3]);\r\n\r\n        if (number > 0)\r\n        {\r\n            if (needsAnd && IsAndSplitNeeded((int)number))\r\n            {\r\n                parts.Add(AndSplit);\r\n            }\r\n\r\n            CollectPartUnderOneThousand(parts, number, gender);\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return UnitsOrdinalPrefixes[number] + GetOrdinalEnding(gender);\r\n        }\r\n\r\n        var parts = new List<string?>();\r\n        var needsAnd = false;\r\n\r\n        CollectOrdinal(parts, ref number, ref needsAnd, PowerOfTenMap[12], gender);\r\n        CollectOrdinal(parts, ref number, ref needsAnd, PowerOfTenMap[9], gender);\r\n        CollectOrdinal(parts, ref number, ref needsAnd, PowerOfTenMap[6], gender);\r\n        CollectOrdinal(parts, ref number, ref needsAnd, PowerOfTenMap[3], gender);\r\n\r\n        if (number > 0)\r\n        {\r\n            if (needsAnd && IsAndSplitNeeded(number))\r\n            {\r\n                parts.Add(AndSplit);\r\n            }\r\n\r\n            CollectOrdinalParts(parts, number, PowerOfTenMap[0], gender, gender);\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/IndianNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass IndianNumberToWordsConverter : GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] Tillnineteen =\r\n    [\r\n        \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\",\r\n        \"nine\", \"ten\", \"eleven\", \"twelve\", \"thirteen\", \"fourteen\", \"fifteen\", \"sixteen\",\r\n        \"seventeen\", \"eighteen\", \"nineteen\"\r\n    ];\r\n\r\n    static readonly string[] Tens =\r\n    [\r\n        \"twenty\", \"thirty\", \"forty\", \"fifty\", \"sixty\", \"seventy\",\r\n        \"eighty\", \"ninety\"\r\n    ];\r\n\r\n    public override string Convert(long number) =>\r\n        NumberToText(number)\r\n            .Trim();\r\n\r\n    public override string ConvertToOrdinal(int number)\r\n    {\r\n        var result = NumberToText(number)\r\n            .Trim();\r\n        return result;\r\n    }\r\n\r\n    static string NumberToText(long number)\r\n    {\r\n        if (number < 0)\r\n        {\r\n            return \"(Negative) \" + NumberToText(-number);\r\n        }\r\n\r\n        if (number == 0)\r\n        {\r\n            return \"\";\r\n        }\r\n\r\n        if (number <= 19)\r\n        {\r\n            return Tillnineteen[number - 1] + \" \";\r\n        }\r\n\r\n        if (number <= 99)\r\n        {\r\n            return Tens[number / 10 - 2] + \" \" + NumberToText(number % 10);\r\n        }\r\n\r\n        if (number <= 199)\r\n        {\r\n            return (\"one hundred \" + (number % 100 > 0 ? \"and \" : \"\") + NumberToText(number % 100)).Trim();\r\n        }\r\n\r\n        if (number <= 999)\r\n        {\r\n            return NumberToText(number / 100) + \"hundred \" + (number % 100 > 0 ? \"and \" : \"\") + NumberToText(number % 100);\r\n        }\r\n\r\n        if (number <= 1999)\r\n        {\r\n            return \"one thousand \" + NumberToText(number % 1000);\r\n        }\r\n\r\n        if (number <= 99999)\r\n        {\r\n            return NumberToText(number / 1000) + \"thousand \" + NumberToText(number % 1000);\r\n        }\r\n\r\n        if (number <= 199999)\r\n        {\r\n            return (\"one lakh \" + NumberToText(number % 100000)).Trim();\r\n        }\r\n\r\n        if (number <= 9999999)\r\n        {\r\n            return NumberToText(number / 100000) + \"lakh \" + NumberToText(number % 100000);\r\n        }\r\n\r\n        if (number <= 19999999)\r\n        {\r\n            return \"one crore \" + NumberToText(number % 10000000);\r\n        }\r\n\r\n        return NumberToText(number / 10000000)\r\n            .Trim() + \" crore \" + NumberToText(number % 10000000);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/Italian/ItalianCardinalNumberCruncher.cs",
    "content": "namespace Humanizer;\r\n\r\nclass ItalianCardinalNumberCruncher(int number, GrammaticalGender gender)\r\n{\r\n    public string Convert()\r\n    {\r\n        // it's easier to treat zero as a completely distinct case\r\n        if (fullNumber == 0)\r\n        {\r\n            return \"zero\";\r\n        }\r\n\r\n        var words = string.Empty;\r\n\r\n        foreach (var part in threeDigitParts)\r\n        {\r\n            var partToString = GetNextPartConverter();\r\n\r\n            if (partToString != null)\r\n            {\r\n                words = partToString(part) + words;\r\n            }\r\n        }\r\n\r\n        // remove trailing spaces if there are only millions or billions\r\n        return words.TrimEnd();\r\n    }\r\n\r\n    readonly int fullNumber = number;\r\n    readonly List<int> threeDigitParts = SplitEveryThreeDigits(number);\r\n    readonly GrammaticalGender gender = gender;\r\n\r\n    protected ThreeDigitSets _nextSet = ThreeDigitSets.Units;\r\n\r\n    /// <summary>\r\n    /// Splits a number into a sequence of three-digits numbers, starting\r\n    /// from units, then thousands, millions, and so on.\r\n    /// </summary>\r\n    /// <param name=\"number\">The number to split.</param>\r\n    /// <returns>The sequence of three-digit numbers.</returns>\r\n    static List<int> SplitEveryThreeDigits(int number)\r\n    {\r\n        var parts = new List<int>();\r\n        var rest = number;\r\n\r\n        while (rest > 0)\r\n        {\r\n            var threeDigit = rest % 1000;\r\n\r\n            parts.Add(threeDigit);\r\n\r\n            rest /= 1000;\r\n        }\r\n\r\n        return parts;\r\n    }\r\n\r\n    /// <summary>\r\n    /// During number conversion to text, finds out the converter to use\r\n    /// for the next three-digit set.\r\n    /// </summary>\r\n    /// <returns>The next conversion function to use.</returns>\r\n    Func<int, string>? GetNextPartConverter()\r\n    {\r\n        Func<int, string>? converter;\r\n\r\n        switch (_nextSet)\r\n        {\r\n            case ThreeDigitSets.Units:\r\n                converter = UnitsConverter;\r\n                _nextSet = ThreeDigitSets.Thousands;\r\n                break;\r\n\r\n            case ThreeDigitSets.Thousands:\r\n                converter = ThousandsConverter;\r\n                _nextSet = ThreeDigitSets.Millions;\r\n                break;\r\n\r\n            case ThreeDigitSets.Millions:\r\n                converter = MillionsConverter;\r\n                _nextSet = ThreeDigitSets.Billions;\r\n                break;\r\n\r\n            case ThreeDigitSets.Billions:\r\n                converter = BillionsConverter;\r\n                _nextSet = ThreeDigitSets.More;\r\n                break;\r\n\r\n            case ThreeDigitSets.More:\r\n                converter = null;\r\n                break;\r\n\r\n            default:\r\n                throw new ArgumentOutOfRangeException(\"Unknow ThreeDigitSet: \" + _nextSet);\r\n        }\r\n\r\n        return converter;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Converts a three-digit set to text.\r\n    /// </summary>\r\n    /// <param name=\"number\">The three-digit set to convert.</param>\r\n    /// <param name=\"thisIsLastSet\">True if the current three-digit set is the last in the word.</param>\r\n    /// <returns>The same three-digit set expressed as text.</returns>\r\n    static string ThreeDigitSetConverter(int number, bool thisIsLastSet = false)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        // grab lowest two digits\r\n        var tensAndUnits = number % 100;\r\n        // grab third digit\r\n        var hundreds = number / 100;\r\n\r\n        // grab also first and second digits separately\r\n        var units = tensAndUnits % 10;\r\n        var tens = tensAndUnits / 10;\r\n\r\n        var words = string.Empty;\r\n\r\n        // append text for hundreds\r\n        words += HundredNumberToText[hundreds];\r\n\r\n        // append text for tens, only those from twenty upward\r\n        words += TensOver20NumberToText[tens];\r\n\r\n        if (tensAndUnits <= 9)\r\n        {\r\n            // simple case for units, under 10\r\n            words += UnitsNumberToText[tensAndUnits];\r\n        }\r\n        else if (tensAndUnits <= 19)\r\n        {\r\n            // special case for 'teens', from 10 to 19\r\n            words += TeensUnder20NumberToText[tensAndUnits - 10];\r\n        }\r\n        else\r\n        {\r\n            // just append units text, with some corner cases\r\n\r\n            // truncate tens last vowel before 'uno' (1) and 'otto' (8)\r\n            if (units is 1 or 8)\r\n            {\r\n                words = words[..^1];\r\n            }\r\n\r\n            // if this is the last set, an accent could be due\r\n            var unitsText = thisIsLastSet && units == 3 ? \"tré\" : UnitsNumberToText[units];\r\n\r\n            words += unitsText;\r\n        }\r\n\r\n        return words;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Converts a three-digit number, as units, to text.\r\n    /// </summary>\r\n    /// <param name=\"number\">The three-digit number, as units, to convert.</param>\r\n    /// <returns>The same three-digit number, as units, expressed as text.</returns>\r\n    string UnitsConverter(int number)\r\n    {\r\n        // being a unique case, it's easier to treat unity feminine gender as a completely distinct case\r\n        if (gender == GrammaticalGender.Feminine && fullNumber == 1)\r\n        {\r\n            return \"una\";\r\n        }\r\n\r\n        return ThreeDigitSetConverter(number, true);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Converts a thousands three-digit number to text.\r\n    /// </summary>\r\n    /// <param name=\"number\">The three-digit number, as thousands, to convert.</param>\r\n    /// <returns>The same three-digit number of thousands expressed as text.</returns>\r\n    static string ThousandsConverter(int number)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        if (number == 1)\r\n        {\r\n            return \"mille\";\r\n        }\r\n\r\n        return ThreeDigitSetConverter(number) + \"mila\";\r\n    }\r\n\r\n    /// <summary>\r\n    /// Converts a millions three-digit number to text.\r\n    /// </summary>\r\n    /// <param name=\"number\">The three-digit number, as millions, to convert.</param>\r\n    /// <returns>The same three-digit number of millions expressed as text.</returns>\r\n    static string MillionsConverter(int number)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        if (number == 1)\r\n        {\r\n            return \"un milione \";\r\n        }\r\n\r\n        return ThreeDigitSetConverter(number, true) + \" milioni \";\r\n    }\r\n\r\n    /// <summary>\r\n    /// Converts a billions three-digit number to text.\r\n    /// </summary>\r\n    /// <param name=\"number\">The three-digit number, as billions, to convert.</param>\r\n    /// <returns>The same three-digit number of billions expressed as text.</returns>\r\n    static string BillionsConverter(int number)\r\n    {\r\n        if (number == 1)\r\n        {\r\n            return \"un miliardo \";\r\n        }\r\n\r\n        return ThreeDigitSetConverter(number) + \" miliardi \";\r\n    }\r\n\r\n    /// <summary>\r\n    /// Lookup table converting units number to text. Index 1 for 1, index 2 for 2, up to index 9.\r\n    /// </summary>\r\n    static readonly string[] UnitsNumberToText =\r\n    [\r\n        string.Empty,\r\n        \"uno\",\r\n        \"due\",\r\n        \"tre\",\r\n        \"quattro\",\r\n        \"cinque\",\r\n        \"sei\",\r\n        \"sette\",\r\n        \"otto\",\r\n        \"nove\"\r\n    ];\r\n\r\n    /// <summary>\r\n    /// Lookup table converting tens number to text. Index 2 for 20, index 3 for 30, up to index 9 for 90.\r\n    /// </summary>\r\n    static readonly string[] TensOver20NumberToText =\r\n    [\r\n        string.Empty,\r\n        string.Empty,\r\n        \"venti\",\r\n        \"trenta\",\r\n        \"quaranta\",\r\n        \"cinquanta\",\r\n        \"sessanta\",\r\n        \"settanta\",\r\n        \"ottanta\",\r\n        \"novanta\"\r\n    ];\r\n\r\n    /// <summary>\r\n    /// Lookup table converting teens number to text. Index 0 for 10, index 1 for 11, up to index 9 for 19.\r\n    /// </summary>\r\n    static readonly string[] TeensUnder20NumberToText =\r\n    [\r\n        \"dieci\",\r\n        \"undici\",\r\n        \"dodici\",\r\n        \"tredici\",\r\n        \"quattordici\",\r\n        \"quindici\",\r\n        \"sedici\",\r\n        \"diciassette\",\r\n        \"diciotto\",\r\n        \"diciannove\"\r\n    ];\r\n\r\n    /// <summary>\r\n    /// Lookup table converting hundreds number to text. Index 0 for no hundreds, index 1 for 100, up to index 9.\r\n    /// </summary>\r\n    static readonly string[] HundredNumberToText =\r\n    [\r\n        string.Empty,\r\n        \"cento\",\r\n        \"duecento\",\r\n        \"trecento\",\r\n        \"quattrocento\",\r\n        \"cinquecento\",\r\n        \"seicento\",\r\n        \"settecento\",\r\n        \"ottocento\",\r\n        \"novecento\"\r\n    ];\r\n\r\n    /// <summary>\r\n    /// Enumerates sets of three-digits having distinct conversion to text.\r\n    /// </summary>\r\n    protected enum ThreeDigitSets\r\n    {\r\n        /// <summary>\r\n        /// Lowest three-digits set, from 1 to 999.\r\n        /// </summary>\r\n        Units,\r\n\r\n        /// <summary>\r\n        /// Three-digits set counting the thousands, from 1'000 to 999'000.\r\n        /// </summary>\r\n        Thousands,\r\n\r\n        /// <summary>\r\n        /// Three-digits set counting millions, from 1'000'000 to 999'000'000.\r\n        /// </summary>\r\n        Millions,\r\n\r\n        /// <summary>\r\n        /// Three-digits set counting billions, from 1'000'000'000 to 999'000'000'000.\r\n        /// </summary>\r\n        Billions,\r\n\r\n        /// <summary>\r\n        /// Three-digits set beyond 999 billions, from 1'000'000'000'000 onward.\r\n        /// </summary>\r\n        More\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/Italian/ItalianOrdinalNumberCruncher.cs",
    "content": "namespace Humanizer;\r\n\r\nclass ItalianOrdinalNumberCruncher(int number, GrammaticalGender gender)\r\n{\r\n    public string Convert()\r\n    {\r\n        // it's easier to treat zero as a completely distinct case\r\n        if (fullNumber == 0)\r\n        {\r\n            return \"zero\";\r\n        }\r\n\r\n        if (fullNumber <= 9)\r\n        {\r\n            // units ordinals, 1 to 9, are totally different than the rest: treat them as a distinct case\r\n            return UnitsUnder10NumberToText[fullNumber] + genderSuffix;\r\n        }\r\n\r\n        var cardinalCruncher = new ItalianCardinalNumberCruncher(fullNumber, gender);\r\n\r\n        var words = cardinalCruncher.Convert();\r\n\r\n        var tensAndUnits = fullNumber % 100;\r\n\r\n        if (tensAndUnits == 10)\r\n        {\r\n            // for numbers ending in 10, cardinal and ordinal endings are different, suffix doesn't work\r\n            words = words[..^LengthOf10AsCardinal] + \"decim\" + genderSuffix;\r\n        }\r\n        else\r\n        {\r\n            // truncate last vowel\r\n            words = words[..^1];\r\n\r\n            var units = fullNumber % 10;\r\n\r\n            // reintroduce *unaccented* last vowel in some corner cases\r\n            if (units == 3)\r\n            {\r\n                words += 'e';\r\n            }\r\n            else if (units == 6)\r\n            {\r\n                words += 'i';\r\n            }\r\n\r\n            var lowestThreeDigits = fullNumber % 1000;\r\n            var lowestSixDigits = fullNumber % 1000000;\r\n            var lowestNineDigits = fullNumber % 1000000000;\r\n\r\n            if (lowestNineDigits == 0)\r\n            {\r\n                // if exact billions, cardinal number words are joined\r\n                words = words.Replace(\" miliard\", \"miliard\");\r\n\r\n                // if 1 billion, numeral prefix is removed completely\r\n                if (fullNumber == 1000000000)\r\n                {\r\n                    words = words.Replace(\"un\", string.Empty);\r\n                }\r\n            }\r\n            else if (lowestSixDigits == 0)\r\n            {\r\n                // if exact millions, cardinal number words are joined\r\n                words = words.Replace(\" milion\", \"milion\");\r\n\r\n                // if 1 million, numeral prefix is removed completely\r\n                if (fullNumber == 1000000)\r\n                {\r\n                    words = words.Replace(\"un\", string.Empty);\r\n                }\r\n            }\r\n            else if (lowestThreeDigits == 0 && fullNumber > 1000)\r\n            {\r\n                // if exact thousands, double the final 'l', apart from 1000 already having that\r\n                words += 'l';\r\n            }\r\n\r\n            // append common ordinal suffix\r\n            words += \"esim\" + genderSuffix;\r\n        }\r\n\r\n        return words;\r\n    }\r\n\r\n    readonly int fullNumber = number;\r\n    readonly GrammaticalGender gender = gender;\r\n    readonly string genderSuffix = gender == GrammaticalGender.Feminine ? \"a\" : \"o\";\r\n\r\n    /// <summary>\r\n    /// Lookup table converting units number to text. Index 1 for 1, index 2 for 2, up to index 9.\r\n    /// </summary>\r\n    static readonly string[] UnitsUnder10NumberToText =\r\n    [\r\n        string.Empty,\r\n        \"prim\",\r\n        \"second\",\r\n        \"terz\",\r\n        \"quart\",\r\n        \"quint\",\r\n        \"sest\",\r\n        \"settim\",\r\n        \"ottav\",\r\n        \"non\"\r\n    ];\r\n\r\n    static readonly int LengthOf10AsCardinal = \"dieci\".Length;\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/ItalianNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass ItalianNumberToWordsConverter : GenderedNumberToWordsConverter\r\n{\r\n    public override string Convert(long input, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (input is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        var number = (int)input;\r\n\r\n        if (number < 0)\r\n        {\r\n            return \"meno \" + Convert(Math.Abs(number), gender);\r\n        }\r\n\r\n        var cruncher = new ItalianCardinalNumberCruncher(number, gender);\r\n\r\n        return cruncher.Convert();\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender)\r\n    {\r\n        var cruncher = new ItalianOrdinalNumberCruncher(number, gender);\r\n\r\n        return cruncher.Convert();\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/JapaneseNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass JapaneseNumberToWordsConverter : GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap1 = [\"\", \"\", \"二\", \"三\", \"四\", \"五\", \"六\", \"七\", \"八\", \"九\"];\r\n    static readonly string[] UnitsMap2 = [\"\", \"十\", \"百\", \"千\"];\r\n\r\n    static readonly string[] UnitsMap3 =\r\n    [\r\n        \"\", \"万\", \"億\", \"兆\", \"京\", \"垓\", \"𥝱\", \"穣\", \"溝\", \"澗\", \"正\", \"載\", \"極\",\r\n        \"恒河沙\", \"阿僧祇\", \"那由他\", \"不可思議\", \"無量大数\"\r\n    ];\r\n\r\n    public override string Convert(long number) =>\r\n        ConvertImpl(number, false);\r\n\r\n    public override string ConvertToOrdinal(int number) =>\r\n        ConvertImpl(number, true);\r\n\r\n    static string ConvertImpl(long number, bool isOrdinal)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return isOrdinal ? \"〇番目\" : \"〇\";\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"マイナス {ConvertImpl(-number, false)}\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n        var groupLevel = 0;\r\n        while (number > 0)\r\n        {\r\n            var groupNumber = number % 10000;\r\n            number /= 10000;\r\n\r\n            var n0 = groupNumber % 10;\r\n            var n1 = (groupNumber % 100 - groupNumber % 10) / 10;\r\n            var n2 = (groupNumber % 1000 - groupNumber % 100) / 100;\r\n            var n3 = (groupNumber - groupNumber % 1000) / 1000;\r\n\r\n            parts.Add(\r\n                UnitsMap1[n3] + (n3 == 0 ? \"\" : UnitsMap2[3])\r\n                              + UnitsMap1[n2] + (n2 == 0 ? \"\" : UnitsMap2[2])\r\n                              + UnitsMap1[n1] + (n1 == 0 ? \"\" : UnitsMap2[1])\r\n                              + (n0 == 1 ? \"一\" : UnitsMap1[n0])\r\n                              + (groupNumber == 0 ? \"\" : UnitsMap3[groupLevel])\r\n            );\r\n\r\n            groupLevel++;\r\n        }\r\n\r\n        parts.Reverse();\r\n        var toWords = string.Concat(parts);\r\n\r\n        if (isOrdinal)\r\n        {\r\n            toWords = $\"{toWords}番目\";\r\n        }\r\n\r\n        return toWords;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/KoreanNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass KoreanNumberToWordsConverter : GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap1 = [\"\", \"\", \"이\", \"삼\", \"사\", \"오\", \"육\", \"칠\", \"팔\", \"구\"];\r\n    static readonly string[] UnitsMap2 = [\"\", \"십\", \"백\", \"천\"];\r\n    static readonly string[] UnitsMap3 = [\"\", \"만\", \"억\", \"조\", \"경\", \"해\", \"자\", \"양\", \"구\", \"간\", \"정\", \"재\", \"극\", \"항하사\", \"아승기\", \"나유타\", \"불가사의\", \"무량대수\"];\r\n\r\n    static readonly FrozenDictionary<long, string> OrdinalExceptions = new Dictionary<long, string>\r\n    {\r\n        {\r\n            0, \"영번째\"\r\n        },\r\n        {\r\n            1, \"첫번째\"\r\n        },\r\n        {\r\n            2, \"두번째\"\r\n        },\r\n        {\r\n            3, \"세번째\"\r\n        },\r\n        {\r\n            4, \"네번째\"\r\n        },\r\n        {\r\n            5, \"다섯번째\"\r\n        },\r\n        {\r\n            6, \"여섯번째\"\r\n        },\r\n        {\r\n            7, \"일곱번째\"\r\n        },\r\n        {\r\n            8, \"여덟번째\"\r\n        },\r\n        {\r\n            9, \"아홉번째\"\r\n        },\r\n        {\r\n            10, \"열번째\"\r\n        },\r\n        {\r\n            11, \"열한번째\"\r\n        },\r\n        {\r\n            12, \"열두번째\"\r\n        },\r\n        {\r\n            13, \"열세번째\"\r\n        },\r\n        {\r\n            14, \"열네번째\"\r\n        },\r\n        {\r\n            15, \"열다섯번째\"\r\n        },\r\n        {\r\n            16, \"열여섯번째\"\r\n        },\r\n        {\r\n            17, \"열일곱번째\"\r\n        },\r\n        {\r\n            18, \"열여덟번째\"\r\n        },\r\n        {\r\n            19, \"열아홉째\"\r\n        },\r\n    }.ToFrozenDictionary();\r\n\r\n    public override string Convert(long number) =>\r\n        ConvertImpl(number, false);\r\n\r\n    public override string ConvertToOrdinal(int number) =>\r\n        ConvertImpl(number, true);\r\n\r\n    static string ConvertImpl(long number, bool isOrdinal)\r\n    {\r\n        if (isOrdinal && number < 20)\r\n        {\r\n            if (OrdinalExceptions.TryGetValue(number, out var words))\r\n            {\r\n                return words;\r\n            }\r\n        }\r\n\r\n        if (number == 0)\r\n        {\r\n            return \"영\";\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"마이너스 {ConvertImpl(-number, false)}\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n        var groupLevel = 0;\r\n        while (number > 0)\r\n        {\r\n            var groupNumber = number % 10000;\r\n            number /= 10000;\r\n\r\n            var n0 = groupNumber % 10;\r\n            var n1 = (groupNumber % 100 - groupNumber % 10) / 10;\r\n            var n2 = (groupNumber % 1000 - groupNumber % 100) / 100;\r\n            var n3 = (groupNumber - groupNumber % 1000) / 1000;\r\n\r\n            parts.Add(\r\n                UnitsMap1[n3] + (n3 == 0 ? \"\" : UnitsMap2[3])\r\n                              + UnitsMap1[n2] + (n2 == 0 ? \"\" : UnitsMap2[2])\r\n                              + UnitsMap1[n1] + (n1 == 0 ? \"\" : UnitsMap2[1])\r\n                              + (n0 == 1 ? \"일\" : UnitsMap1[n0])\r\n                              + (groupNumber == 0 ? \"\" : UnitsMap3[groupLevel])\r\n            );\r\n\r\n            groupLevel++;\r\n        }\r\n\r\n        parts.Reverse();\r\n        var toWords = string.Concat(parts);\r\n\r\n        if (isOrdinal)\r\n        {\r\n            toWords = $\"{toWords}번째\";\r\n        }\r\n\r\n        return toWords;\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/LatvianNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass LatvianNumberToWordsConverter : GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"nulle\", \"vien\", \"div\", \"trīs\", \"četr\", \"piec\", \"seš\", \"septiņ\", \"astoņ\", \"deviņ\", \"desmit\", \"vienpadsmit\", \"divpadsmit\", \"trīspadsmit\", \"četrpadsmit\", \"piecpadsmit\", \"sešpadsmit\", \"septiņpadsmit\", \"astoņpadsmit\", \"deviņpadsmit\"];\r\n    static readonly string[] TensMap = [\"nulle\", \"desmit\", \"divdesmit\", \"trīsdesmit\", \"četrdesmit\", \"piecdesmit\", \"sešdesmit\", \"septiņdesmit\", \"astoņdesmit\", \"deviņdesmit\"];\r\n    static readonly string[] HundredsMap = [\"nulle\", \"simt\", \"divsimt\", \"trīssimt\", \"četrsimt\", \"piecsimt\", \"sešsimt\", \"septiņsimt\", \"astoņsimt\", \"deviņsimt\"];\r\n    static readonly string[] UnitsOrdinal = [string.Empty, \"pirm\", \"otr\", \"treš\", \"ceturt\", \"piekt\", \"sest\", \"septīt\", \"astot\", \"devīt\", \"desmit\", \"vienpadsmit\", \"divpadsmit\", \"trīspadsmit\", \"četrpadsmit\", \"piecpadsmit\", \"sešpadsmit\", \"septiņpadsmit\", \"astoņpadsmit\", \"deviņpadsmit\", \"divdesmit\"];\r\n\r\n    public override string Convert(long input, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (input is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (input / 1000000 > 0)\r\n        {\r\n            string millionPart;\r\n            if (input == 1000000)\r\n            {\r\n                millionPart = \"miljons\";\r\n            }\r\n            else\r\n            {\r\n                millionPart = Convert(input / 1000000, GrammaticalGender.Masculine) + \" miljoni\";\r\n            }\r\n            input %= 1000000;\r\n            parts.Add(millionPart);\r\n        }\r\n\r\n        if (input / 1000 > 0)\r\n        {\r\n            string thousandsPart;\r\n            if (input == 1000)\r\n            {\r\n                thousandsPart = \"tūkstotis\";\r\n            }\r\n            else if (input is > 1000 and < 2000)\r\n            {\r\n                thousandsPart = \"tūkstoš\";\r\n            }\r\n            else\r\n            {\r\n                thousandsPart = Convert(input / 1000, GrammaticalGender.Masculine) + \" tūkstoši\";\r\n            }\r\n            parts.Add(thousandsPart);\r\n            input %= 1000;\r\n        }\r\n\r\n        if (input / 100 > 0)\r\n        {\r\n            string hundredsPart;\r\n            if (input == 100)\r\n            {\r\n                hundredsPart = parts.Contains(\"tūkstoš\") ? \"viens simts\" : \"simts\";\r\n            }\r\n            else if (input is > 100 and < 200)\r\n            {\r\n                hundredsPart = \"simtu\";\r\n            }\r\n            else\r\n            {\r\n                hundredsPart = Convert(input / 100, GrammaticalGender.Masculine) + \" simti\";\r\n            }\r\n            parts.Add(hundredsPart);\r\n            input %= 100;\r\n        }\r\n\r\n        if (input > 19)\r\n        {\r\n            var tensPart = TensMap[input / 10];\r\n            parts.Add(tensPart);\r\n            input %= 10;\r\n        }\r\n\r\n        if (input > 0)\r\n        {\r\n            parts.Add(UnitsMap[input] + GetCardinalEndingForGender(gender, input));\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int input, GrammaticalGender gender)\r\n    {\r\n        if (input == 0)\r\n        {\r\n            return \"nulle\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (input < 0)\r\n        {\r\n            parts.Add(\"mīnus\");\r\n            input = -input;\r\n        }\r\n\r\n        if (input / 1000000 > 0)\r\n        {\r\n            string millionPart;\r\n            if (input == 1000000)\r\n            {\r\n                millionPart = \"miljon\" + GetOrdinalEndingForGender(gender);\r\n            }\r\n            else\r\n            {\r\n                millionPart = Convert(input / 1000000, GrammaticalGender.Masculine) + \" miljon\" + GetOrdinalEndingForGender(gender);\r\n            }\r\n            input %= 1000000;\r\n            parts.Add(millionPart);\r\n        }\r\n\r\n        if (input / 1000 > 0)\r\n        {\r\n            string thousandsPart;\r\n            if (input % 1000 == 0)\r\n            {\r\n                if (input == 1000)\r\n                {\r\n                    thousandsPart = \"tūkstoš\" + GetOrdinalEndingForGender(gender);\r\n                }\r\n                else\r\n                {\r\n                    thousandsPart = Convert(input / 1000, GrammaticalGender.Masculine) + \" tūkstoš\" + GetOrdinalEndingForGender(gender);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                if (input is > 1000 and < 2000)\r\n                {\r\n                    thousandsPart = \"tūkstoš\";\r\n                }\r\n                else\r\n                {\r\n                    thousandsPart = Convert(input / 1000, GrammaticalGender.Masculine) + \" tūkstoši\";\r\n                }\r\n            }\r\n            parts.Add(thousandsPart);\r\n            input %= 1000;\r\n        }\r\n\r\n        if (input / 100 > 0)\r\n        {\r\n            string hundredsPart;\r\n            if (input % 100 == 0)\r\n            {\r\n                hundredsPart = HundredsMap[input / 100] + GetOrdinalEndingForGender(gender);\r\n            }\r\n            else\r\n            {\r\n                if (input is > 100 and < 200)\r\n                {\r\n                    hundredsPart = \"simtu\";\r\n                }\r\n                else\r\n                {\r\n                    hundredsPart = Convert(input / 100, GrammaticalGender.Masculine) + \" simti\";\r\n                }\r\n            }\r\n            parts.Add(hundredsPart);\r\n            input %= 100;\r\n        }\r\n\r\n        if (input > 19)\r\n        {\r\n            var tensPart = TensMap[input / 10];\r\n            if (input % 10 == 0)\r\n            {\r\n                tensPart += GetOrdinalEndingForGender(gender);\r\n            }\r\n            parts.Add(tensPart);\r\n            input %= 10;\r\n        }\r\n\r\n        if (input > 0)\r\n        {\r\n            parts.Add(UnitsOrdinal[input] + GetOrdinalEndingForGender(gender));\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    static string GetOrdinalEndingForGender(GrammaticalGender gender) =>\r\n        gender switch\r\n        {\r\n            GrammaticalGender.Masculine => \"ais\",\r\n            GrammaticalGender.Feminine => \"ā\",\r\n            _ => throw new ArgumentOutOfRangeException(nameof(gender))\r\n        };\r\n\r\n    static string GetCardinalEndingForGender(GrammaticalGender gender, long number)\r\n    {\r\n        switch (gender)\r\n        {\r\n            case GrammaticalGender.Masculine:\r\n                if (number == 1)\r\n                {\r\n                    return \"s\";\r\n                }\r\n\r\n                if (number != 3 && number < 10)\r\n                {\r\n                    return \"i\";\r\n                }\r\n\r\n                return \"\";\r\n            case GrammaticalGender.Feminine:\r\n                if (number == 1)\r\n                {\r\n                    return \"a\";\r\n                }\r\n\r\n                if (number != 3 && number < 10)\r\n                {\r\n                    return \"as\";\r\n                }\r\n\r\n                return \"\";\r\n            default:\r\n                throw new ArgumentOutOfRangeException(nameof(gender));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/LithuanianNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass LithuanianNumberToWordsConverter : GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"nulis\", \"vienas\", \"du\", \"trys\", \"keturi\", \"penki\", \"šeši\", \"septyni\", \"aštuoni\", \"devyni\", \"dešimt\", \"vienuolika\", \"dvylika\", \"trylika\", \"keturiolika\", \"penkiolika\", \"šešiolika\", \"septyniolika\", \"aštuoniolika\", \"devyniolika\"];\r\n    static readonly string[] TensMap = [string.Empty, \"dešimt\", \"dvidešimt\", \"trisdešimt\", \"keturiasdešimt\", \"penkiasdešimt\", \"šešiasdešimt\", \"septyniasdešimt\", \"aštuoniasdešimt\", \"devyniasdešimt\"];\r\n    static readonly string[] HundredsMap = [string.Empty, \"šimtas\", \"du šimtai\", \"trys šimtai\", \"keturi šimtai\", \"penki šimtai\", \"šeši šimtai\", \"septyni šimtai\", \"aštuoni šimtai\", \"devyni šimtai\"];\r\n\r\n    static readonly string[] OrdinalUnitsMap = [string.Empty, \"pirm\", \"antr\", \"treči\", \"ketvirt\", \"penkt\", \"šešt\", \"septint\", \"aštunt\", \"devint\", \"dešimt\", \"vienuolikt\", \"dvylikt\", \"trylikt\", \"keturiolikt\", \"penkiolikt\", \"šešiolikt\", \"septyniolikt\", \"aštuoniolikt\", \"devyniolikt\", \"dvidešimt\"];\r\n    static readonly string[] OrdinalTensMap = [string.Empty, \"dešimt\", \"dvidešimt\", \"trisdešimt\", \"keturiasdešimt\", \"penkiasdešimt\", \"šešiasdešimt\", \"septyniasdešimt\", \"aštuoniasdešimt\", \"devyniasdešimt\"];\r\n    static readonly string[] OrdinalHundredsMap = [string.Empty, \"šimt\", \"du šimt\", \"trys šimt\", \"keturi šimt\", \"penki šimt\", \"šeši šimt\", \"septyni šimt\", \"aštuoni šimt\", \"devyni šimt\"];\r\n\r\n    public override string Convert(long input, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (gender == GrammaticalGender.Neuter)\r\n        {\r\n            throw new NotSupportedException();\r\n        }\r\n\r\n        var parts = new List<string>();\r\n        var number = input;\r\n\r\n        HandleNegative(parts, ref number);\r\n        CollectParts(parts, ref number, 1000000000000000000, GrammaticalGender.Masculine, \"kvintilijonas\", \"kvintilijonai\", \"kvintilijonų\");\r\n        CollectParts(parts, ref number, 1000000000000000, GrammaticalGender.Masculine, \"kvadrilijonas\", \"kvadrilijonai\", \"kvadrilijonų\");\r\n        CollectParts(parts, ref number, 1000000000000, GrammaticalGender.Masculine, \"trilijonas\", \"trilijonai\", \"trilijonų\");\r\n        CollectParts(parts, ref number, 1000000000, GrammaticalGender.Masculine, \"milijardas\", \"milijardai\", \"milijardų\");\r\n        CollectParts(parts, ref number, 1000000, GrammaticalGender.Masculine, \"milijonas\", \"milijonai\", \"milijonų\");\r\n        CollectParts(parts, ref number, 1000, GrammaticalGender.Masculine, \"tūkstantis\", \"tūkstančiai\", \"tūkstančių\");\r\n        CollectPartsUnderOneThousand(parts, number, gender);\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int input, GrammaticalGender gender)\r\n    {\r\n        if (gender == GrammaticalGender.Neuter)\r\n        {\r\n            throw new NotSupportedException();\r\n        }\r\n\r\n        var parts = new List<string>();\r\n        var number = (long)input;\r\n\r\n        HandleNegative(parts, ref number);\r\n        CollectOrdinalParts(parts, ref number, 1000000000, GrammaticalGender.Masculine, \"milijard\" + GetOrdinalEndingForGender(gender), \"milijardas\", \"milijardai\", \"milijardų\");\r\n        CollectOrdinalParts(parts, ref number, 1000000, GrammaticalGender.Masculine, \"milijon\" + GetOrdinalEndingForGender(gender), \"milijonas\", \"milijonai\", \"milijonų\");\r\n        CollectOrdinalParts(parts, ref number, 1000, GrammaticalGender.Masculine, \"tūkstant\" + GetOrdinalEndingForGender(gender), \"tūkstantis\", \"tūkstančiai\", \"tūkstančių\");\r\n        CollectOrdinalPartsUnderOneThousand(parts, number, gender, true);\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    static void HandleNegative(List<string> parts, ref long number)\r\n    {\r\n        if (number < 0)\r\n        {\r\n            parts.Add(\"minus\");\r\n            number = -number;\r\n        }\r\n    }\r\n\r\n    static void CollectParts(List<string> parts, ref long number, long divisor,\r\n        GrammaticalGender gender, params string[] forms)\r\n    {\r\n        var result = number / divisor;\r\n        if (result == 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        number %= divisor;\r\n\r\n        if (result > 1)\r\n        {\r\n            CollectPartsUnderOneThousand(parts, result, gender);\r\n        }\r\n\r\n        parts.Add(ChooseForm(result, forms));\r\n    }\r\n\r\n    static void CollectOrdinalParts(List<string> parts, ref long number, long divisor,\r\n        GrammaticalGender gender, string ordinalForm, params string[] forms)\r\n    {\r\n        var result = number / divisor;\r\n        if (result == 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        number %= divisor;\r\n\r\n        if (result > 1)\r\n        {\r\n            CollectOrdinalPartsUnderOneThousand(parts, result, gender);\r\n        }\r\n\r\n        parts.Add(ChooseCardinalOrOrdinalForm(result, ordinalForm, forms, useOrdinalForm: number == 0));\r\n    }\r\n\r\n    static void CollectPartsUnderOneThousand(List<string> parts, long number, GrammaticalGender gender)\r\n    {\r\n        if (number >= 100)\r\n        {\r\n            var hundreds = number / 100;\r\n            number %= 100;\r\n            parts.Add(HundredsMap[hundreds]);\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            var tens = number / 10;\r\n            parts.Add(TensMap[tens]);\r\n            number %= 10;\r\n        }\r\n\r\n        if (number > 0 || parts.Count == 0)\r\n        {\r\n            parts.Add(GetCardinalNumberForGender(UnitsMap[number], gender));\r\n        }\r\n    }\r\n\r\n    static void CollectOrdinalPartsUnderOneThousand(List<string> parts, long number,\r\n        GrammaticalGender gender, bool lastNumber = false)\r\n    {\r\n        if (number >= 100)\r\n        {\r\n            var hundreds = number / 100;\r\n            number %= 100;\r\n\r\n            parts.Add(!lastNumber || number > 0\r\n                ? HundredsMap[hundreds]\r\n                : OrdinalHundredsMap[hundreds] + GetOrdinalEndingForGender(gender));\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            var tens = number / 10;\r\n            number %= 10;\r\n\r\n            parts.Add(!lastNumber || number > 0\r\n                ? TensMap[tens]\r\n                : OrdinalTensMap[tens] + GetOrdinalEndingForGender(gender));\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(!lastNumber\r\n                ? UnitsMap[number]\r\n                : OrdinalUnitsMap[number] + GetOrdinalEndingForGender(gender));\r\n        }\r\n        else if (number == 0 && parts.Count == 0)\r\n        {\r\n            parts.Add(gender == GrammaticalGender.Masculine ? \"nulinis\" : \"nulinė\");\r\n        }\r\n    }\r\n\r\n    static string ChooseForm(long number, string[] forms) =>\r\n        forms[GetFormIndex(number)];\r\n\r\n    static string ChooseCardinalOrOrdinalForm(long number, string ordinalForm, string[] cardinalForms,\r\n        bool useOrdinalForm = false)\r\n    {\r\n        if (useOrdinalForm)\r\n        {\r\n            return ordinalForm;\r\n        }\r\n\r\n        return ChooseForm(number, cardinalForms);\r\n    }\r\n\r\n    static int GetFormIndex(long number)\r\n    {\r\n        var form = LithuanianNumberFormDetector.Detect(number);\r\n        return form switch\r\n        {\r\n            LithuanianNumberForm.Singular => 0,\r\n            LithuanianNumberForm.Plural => 1,\r\n            LithuanianNumberForm.GenitivePlural => 2,\r\n            _ => throw new ArgumentOutOfRangeException(nameof(number))\r\n        };\r\n    }\r\n\r\n    static string GetCardinalNumberForGender(string number, GrammaticalGender gender)\r\n    {\r\n        if (gender == GrammaticalGender.Masculine)\r\n        {\r\n            return number;\r\n        }\r\n\r\n        if (gender == GrammaticalGender.Feminine)\r\n        {\r\n            if (number == \"du\")\r\n            {\r\n                return \"dvi\";\r\n            }\r\n\r\n            if (number.EndsWith(\"as\"))\r\n            {\r\n                return number[..^1];\r\n            }\r\n\r\n            if (number.EndsWith('i'))\r\n            {\r\n                return number + \"os\";\r\n            }\r\n\r\n            return number;\r\n        }\r\n\r\n        throw new ArgumentOutOfRangeException(nameof(gender));\r\n    }\r\n\r\n    static string GetOrdinalEndingForGender(GrammaticalGender gender) =>\r\n        gender switch\r\n        {\r\n            GrammaticalGender.Masculine => \"as\",\r\n            GrammaticalGender.Feminine => \"a\",\r\n            _ => throw new ArgumentOutOfRangeException(nameof(gender))\r\n        };\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/LuxembourgishNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass LuxembourgishNumberToWordsConverter : GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"null\", \"een\", \"zwee\", \"dräi\", \"véier\", \"fënnef\", \"sechs\", \"siwen\", \"aacht\", \"néng\", \"zéng\", \"eelef\", \"zwielef\", \"dräizéng\", \"véierzéng\", \"fofzéng\", \"siechzéng\", \"siwwenzéng\", \"uechtzéng\", \"nonzéng\"];\r\n    static readonly string[] TensMap = [\"null\", \"zéng\", \"zwanzeg\", \"drësseg\", \"véierzeg\", \"fofzeg\", \"sechzeg\", \"siwwenzeg\", \"achtzeg\", \"nonzeg\"];\r\n    static readonly string[] UnitsOrdinal = [string.Empty, \"éisch\", \"zwee\", \"drët\", \"véier\", \"fënnef\", \"sechs\", \"siwen\", \"aach\", \"néng\", \"zéng\", \"eelef\", \"zwielef\", \"dräizéng\", \"véierzéng\", \"fofzéng\", \"siechzéng\", \"siwwenzéng\", \"uechtzéng\", \"nonzéng\"];\r\n    static readonly string[] HundredOrdinalSingular = [\"eenhonnert\"];\r\n    static readonly string[] HundredOrdinalPlural = [\"{0}honnert\"];\r\n    static readonly string[] ThousandOrdinalSingular = [\"eendausend\"];\r\n    static readonly string[] ThousandOrdinalPlural = [\"{0}dausend\"];\r\n    static readonly string[] MillionOrdinalSingular = [\"eemillioun\", \"engmillioun\"];\r\n    static readonly string[] MillionOrdinalPlural = [\"{0}millioun\", \"{0}milliounen\"];\r\n    static readonly string[] BillionOrdinalSingular = [\"eemilliard\", \"engmilliard\"];\r\n    static readonly string[] BillionOrdinalPlural = [\"{0}milliard\", \"{0}milliarden\"];\r\n\r\n    public override string Convert(long number, GrammaticalGender gender, bool addAnd = true)\r\n        => Convert(number, WordForm.Normal, gender, addAnd);\r\n\r\n    public override string Convert(long number, WordForm wordForm, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[number];\r\n        }\r\n\r\n        var parts = new List<string>();\r\n        if (number < 0)\r\n        {\r\n            parts.Add(\"minus \");\r\n            number = -number;\r\n        }\r\n\r\n        CollectParts(parts, ref number, 1000000000000000000, true, \"{0} Trilliounen\", \"eng Trillioun\");\r\n        CollectParts(parts, ref number, 1000000000000000, true, \"{0} Billiarden\", \"eng Billiard\");\r\n        CollectParts(parts, ref number, 1000000000000, true, \"{0} Billiounen\", \"eng Billioun\");\r\n        CollectParts(parts, ref number, 1000000000, true, \"{0} Milliarden\", \"eng Milliard\");\r\n        CollectParts(parts, ref number, 1000000, true, \"{0} Milliounen\", \"eng Millioun\");\r\n        CollectParts(parts, ref number, 1000, false, \"{0}dausend\", \"eendausend\");\r\n        CollectParts(parts, ref number, 100, false, \"{0}honnert\", \"eenhonnert\");\r\n\r\n        if (number <= 0)\r\n        {\r\n            return string.Concat(parts);\r\n        }\r\n\r\n        if (number < 20)\r\n        {\r\n            switch (number)\r\n            {\r\n                case 1 when gender == GrammaticalGender.Feminine:\r\n                    parts.Add(\"eng\");\r\n                    break;\r\n                case 2 when gender == GrammaticalGender.Feminine:\r\n                    parts.Add(\"zwou\");\r\n                    break;\r\n                case 1 or 7:\r\n                    parts.Add(wordForm is WordForm.Eifeler\r\n                        ? LuxembourgishFormatter.ApplyEifelerRule(UnitsMap[number])\r\n                        : UnitsMap[number]);\r\n                    break;\r\n                default:\r\n                    parts.Add(UnitsMap[number]);\r\n                    break;\r\n            }\r\n        }\r\n        else\r\n        {\r\n            var units = number % 10;\r\n            var tens = TensMap[number / 10];\r\n\r\n            if (units > 0)\r\n            {\r\n                var andPart = LuxembourgishFormatter.CheckForAndApplyEifelerRule(\"an\", tens);\r\n                parts.Add($\"{UnitsMap[units]}{andPart}\");\r\n            }\r\n\r\n            parts.Add(tens);\r\n        }\r\n\r\n        return string.Concat(parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[number] + GetEndingForGender(gender);\r\n        }\r\n\r\n        var parts = new List<string>();\r\n        if (number < 0)\r\n        {\r\n            parts.Add(\"minus \");\r\n            number = -number;\r\n        }\r\n\r\n        CollectOrdinalParts(parts, ref number, 1000000000, true, BillionOrdinalPlural, BillionOrdinalSingular);\r\n        CollectOrdinalParts(parts, ref number, 1000000, true, MillionOrdinalPlural, MillionOrdinalSingular);\r\n        CollectOrdinalParts(parts, ref number, 1000, false, ThousandOrdinalPlural, ThousandOrdinalSingular);\r\n        CollectOrdinalParts(parts, ref number, 100, false, HundredOrdinalPlural, HundredOrdinalSingular);\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(number < 20 ? UnitsOrdinal[number] : Convert(number));\r\n        }\r\n\r\n        if (number is 0 or >= 20)\r\n        {\r\n            parts.Add(\"s\");\r\n        }\r\n\r\n        parts.Add(GetEndingForGender(gender));\r\n\r\n        return string.Concat(parts);\r\n    }\r\n\r\n    private void CollectParts(List<string> parts, ref long number, long divisor, bool addSpaceBeforeNextPart, string pluralFormat, string singular)\r\n    {\r\n        if (number / divisor <= 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        parts.Add(Part(pluralFormat, singular, number / divisor, divisor));\r\n        number %= divisor;\r\n        if (addSpaceBeforeNextPart && number > 0)\r\n        {\r\n            parts.Add(\" \");\r\n        }\r\n    }\r\n\r\n    private void CollectOrdinalParts(List<string> parts, ref int number, int divisor, bool evaluateNoRest, string[] pluralFormats, string[] singulars)\r\n    {\r\n        if (number / divisor <= 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var noRest = evaluateNoRest ? NoRestIndex(number % divisor) : 0;\r\n        parts.Add(Part(pluralFormats[noRest], singulars[noRest], number / divisor, divisor));\r\n        number %= divisor;\r\n    }\r\n\r\n    private string Part(string pluralFormat, string singular, long number, long divisor) =>\r\n        number switch\r\n        {\r\n            1 => singular,\r\n            2 when divisor >= 1000000 => string.Format(pluralFormat, Convert(number, GrammaticalGender.Feminine)),\r\n            7 => GetPartWithEifelerRule(pluralFormat, number, GrammaticalGender.Masculine),\r\n            _ => string.Format(pluralFormat, Convert(number))\r\n        };\r\n\r\n    private static int NoRestIndex(int number) =>\r\n        number == 0 ? 0 : 1;\r\n\r\n    private static string GetEndingForGender(GrammaticalGender gender) =>\r\n        gender switch\r\n        {\r\n            GrammaticalGender.Masculine => \"ten\",\r\n            GrammaticalGender.Feminine => \"t\",\r\n            GrammaticalGender.Neuter => \"t\",\r\n            _ => throw new ArgumentOutOfRangeException(nameof(gender))\r\n        };\r\n\r\n    private string GetPartWithEifelerRule(string pluralFormat, long number, GrammaticalGender gender)\r\n    {\r\n        var nextWord = pluralFormat\r\n            .AsSpan(3, pluralFormat.Length - 3)\r\n            .TrimStart();\r\n        var wordForm = LuxembourgishFormatter.DoesEifelerRuleApply(nextWord)\r\n            ? WordForm.Eifeler\r\n            : WordForm.Normal;\r\n        return string.Format(pluralFormat, Convert(number, wordForm, gender));\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/MalteseNumberToWordsConvertor.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass MalteseNumberToWordsConvertor : GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] OrdinalOverrideMap =\r\n    [\r\n        \"0\", \"l-ewwel\", \"it-tieni\", \"it-tielet\", \"ir-raba'\", \"il-ħames\", \"is-sitt\", \"is-seba'\", \"it-tmien\", \"id-disa'\",\r\n        \"l-għaxar\", \"il-ħdax\", \"it-tnax\", \"it-tlettax\", \"l-erbatax\", \"il-ħmistax\", \"is-sittax\", \"is-sbatax\",\r\n        \"it-tmintax\", \"id-dsatax\", \"l-għoxrin\"\r\n    ];\r\n\r\n    static readonly string[] UnitsMap =\r\n    [\r\n        \"żero\", \"wieħed\", \"tnejn\", \"tlieta\", \"erbgħa\", \"ħamsa\", \"sitta\", \"sebgħa\", \"tmienja\", \"disgħa\", \"għaxra\",\r\n        \"ħdax\", \"tnax\", \"tlettax\", \"erbatax\", \"ħmistax\", \"sittax\", \"sbatax\", \"tmintax\", \"dsatax\"\r\n    ];\r\n\r\n    static readonly string[] TensMap =\r\n        [\"zero\", \"għaxra\", \"għoxrin\", \"tletin\", \"erbgħin\", \"ħamsin\", \"sittin\", \"sebgħin\", \"tmenin\", \"disgħin\"];\r\n\r\n    static readonly string[] HundredsMap =\r\n    [\r\n        string.Empty, string.Empty, string.Empty, \"tlett\", \"erbgħa\", \"ħames\", \"sitt\", \"sebgħa\", \"tminn\", \"disgħa\",\r\n        \"għaxar\"\r\n    ];\r\n\r\n    static readonly string[] PrefixMap =\r\n    [\r\n        string.Empty, string.Empty, string.Empty, \"tlett\", \"erbat\", \"ħamest\", \"sitt\", \"sebat\", \"tmint\", \"disat\",\r\n        \"għaxart\", \"ħdax-il\", \"tnax-il\", \"tletax-il\", \"erbatax-il\", \"ħmistax-il\", \"sittax-il\", \"sbatax-il\",\r\n        \"tmintax-il\", \"dsatax-il\"\r\n    ];\r\n\r\n    public override string Convert(long input, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        var negativeNumber = false;\r\n\r\n        if (input < 0)\r\n        {\r\n            negativeNumber = true;\r\n            input *= -1;\r\n        }\r\n\r\n        if (input < 1000000000)\r\n        {\r\n            return GetMillions(input, gender) + (negativeNumber ? \" inqas minn żero\" : string.Empty);\r\n        }\r\n\r\n        var billions = input / 1000000000;\r\n        var tensInBillions = billions % 100;\r\n        var millions = input % 1000000000;\r\n\r\n        var billionsText = GetPrefixText(billions, tensInBillions, \"biljun\", \"żewġ biljuni\", \"biljuni\", false, gender);\r\n        var millionsText = GetMillions(millions, gender);\r\n\r\n        if (millions == 0)\r\n        {\r\n            return billionsText;\r\n        }\r\n\r\n        return $\"{billionsText} u {millionsText}\" + (negativeNumber ? \" inqas minn żero\" : string.Empty);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender)\r\n    {\r\n        if (number <= 20)\r\n        {\r\n            return OrdinalOverrideMap[number];\r\n        }\r\n\r\n        var ordinal = Convert(number, gender);\r\n\r\n        if (ordinal.StartsWith('d'))\r\n        {\r\n            return $\"id-{Convert(number, gender)}\";\r\n        }\r\n        if (ordinal.StartsWith('s'))\r\n        {\r\n            return $\"is-{Convert(number, gender)}\";\r\n        }\r\n        if (ordinal.StartsWith('t'))\r\n        {\r\n            return $\"it-{Convert(number, gender)}\";\r\n        }\r\n        if (ordinal.StartsWith('e'))\r\n        {\r\n            return $\"l-{Convert(number, gender)}\";\r\n        }\r\n        return $\"il-{Convert(number, gender)}\";\r\n    }\r\n\r\n    static string GetTens(long value, bool usePrefixMap, bool usePrefixMapForLowerDigits, GrammaticalGender gender)\r\n    {\r\n        if (value == 1 && gender == GrammaticalGender.Feminine)\r\n        {\r\n            return \"waħda\";\r\n        }\r\n\r\n        if (value < 11 && usePrefixMap && usePrefixMapForLowerDigits)\r\n        {\r\n            return PrefixMap[value];\r\n        }\r\n\r\n        if (value < 11 && usePrefixMap && !usePrefixMapForLowerDigits)\r\n        {\r\n            return HundredsMap[value];\r\n        }\r\n\r\n        if (value is > 10 and < 20 && usePrefixMap)\r\n        {\r\n            return PrefixMap[value];\r\n        }\r\n\r\n        if (value < 20)\r\n        {\r\n            return UnitsMap[value];\r\n        }\r\n\r\n        var single = value % 10;\r\n        var numberOfTens = value / 10;\r\n        if (single == 0)\r\n        {\r\n            return TensMap[numberOfTens];\r\n        }\r\n\r\n        return $\"{UnitsMap[single]} u {TensMap[numberOfTens]}\";\r\n    }\r\n\r\n    static string GetHundreds(long value, bool usePrefixMap, bool usePrefixMapForLowerValueDigits, GrammaticalGender gender)\r\n    {\r\n        if (value < 100)\r\n        {\r\n            return GetTens(value, usePrefixMap, usePrefixMapForLowerValueDigits, gender);\r\n        }\r\n\r\n        var tens = value % 100;\r\n        var numberOfHundreds = value / 100;\r\n\r\n        string hundredsText;\r\n        if (numberOfHundreds == 1)\r\n        {\r\n            hundredsText = \"mija\";\r\n        }\r\n        else if (numberOfHundreds == 2)\r\n        {\r\n            hundredsText = \"mitejn\";\r\n        }\r\n        else\r\n        {\r\n            hundredsText = HundredsMap[numberOfHundreds] + \" mija\";\r\n        }\r\n\r\n        if (tens == 0)\r\n        {\r\n            return hundredsText;\r\n        }\r\n\r\n        return $\"{hundredsText} u {GetTens(tens, usePrefixMap, usePrefixMapForLowerValueDigits, gender)}\";\r\n    }\r\n\r\n    static string GetThousands(long value, GrammaticalGender gender)\r\n    {\r\n        if (value < 1000)\r\n        {\r\n            return GetHundreds(value, false, false, gender);\r\n        }\r\n\r\n        var thousands = value / 1000;\r\n        var tensInThousands = thousands % 100;\r\n        var hundreds = value % 1000;\r\n\r\n        var thousandsInText = GetPrefixText(thousands, tensInThousands, \"elf\", \"elfejn\", \"elef\", true, gender);\r\n\r\n        var hundredsInText = GetHundreds(hundreds, false, false, gender);\r\n\r\n        if (hundreds == 0)\r\n        {\r\n            return thousandsInText;\r\n        }\r\n\r\n        return $\"{thousandsInText} u {hundredsInText}\";\r\n    }\r\n\r\n    static string GetMillions(long value, GrammaticalGender gender)\r\n    {\r\n        if (value < 1000000)\r\n        {\r\n            return GetThousands(value, gender);\r\n        }\r\n\r\n        var millions = value / 1000000;\r\n        var tensInMillions = millions % 100;\r\n        var thousands = value % 1000000;\r\n\r\n        var millionsText = GetPrefixText(millions, tensInMillions, \"miljun\", \"żewġ miljuni\", \"miljuni\", false, gender);\r\n        var thousandsText = GetThousands(thousands, gender);\r\n\r\n        if (thousands == 0)\r\n        {\r\n            return millionsText;\r\n        }\r\n\r\n        return $\"{millionsText} u {thousandsText}\";\r\n    }\r\n\r\n    static string GetPrefixText(long thousands, long tensInThousands, string singular, string dual, string plural, bool usePrefixMapForLowerValueDigits, GrammaticalGender gender)\r\n    {\r\n        if (thousands == 1)\r\n        {\r\n            return singular;\r\n        }\r\n\r\n        if (thousands == 2)\r\n        {\r\n            return dual;\r\n        }\r\n\r\n        if (tensInThousands > 10)\r\n        {\r\n            return $\"{GetHundreds(thousands, true, usePrefixMapForLowerValueDigits, gender)} {singular}\";\r\n        }\r\n\r\n        if (thousands == 100)\r\n        {\r\n            return $\"mitt {singular}\";\r\n        }\r\n\r\n        if (thousands == 101)\r\n        {\r\n            return $\"mija u {singular}\";\r\n        }\r\n\r\n        return $\"{GetHundreds(thousands, true, usePrefixMapForLowerValueDigits, gender)} {plural}\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/NorwegianBokmalNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass NorwegianBokmalNumberToWordsConverter : GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"null\", \"en\", \"to\", \"tre\", \"fire\", \"fem\", \"seks\", \"sju\", \"åtte\", \"ni\", \"ti\", \"elleve\", \"tolv\", \"tretten\", \"fjorten\", \"femten\", \"seksten\", \"sytten\", \"atten\", \"nitten\"];\r\n    static readonly string[] TensMap = [\"null\", \"ti\", \"tjue\", \"tretti\", \"førti\", \"femti\", \"seksti\", \"sytti\", \"åtti\", \"nitti\"];\r\n\r\n    static readonly FrozenDictionary<int, string> OrdinalExceptions = new Dictionary<int, string>\r\n    {\r\n        {\r\n            0, \"nullte\"\r\n        },\r\n        {\r\n            1, \"første\"\r\n        },\r\n        {\r\n            2, \"andre\"\r\n        },\r\n        {\r\n            3, \"tredje\"\r\n        },\r\n        {\r\n            4, \"fjerde\"\r\n        },\r\n        {\r\n            5, \"femte\"\r\n        },\r\n        {\r\n            6, \"sjette\"\r\n        },\r\n        {\r\n            11, \"ellevte\"\r\n        },\r\n        {\r\n            12, \"tolvte\"\r\n        }\r\n    }.ToFrozenDictionary();\r\n\r\n    public override string Convert(long number, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (number is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        return Convert((int)number, false, gender);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender) =>\r\n        Convert(number, true, gender);\r\n\r\n    string Convert(int number, bool isOrdinal, GrammaticalGender gender)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return GetUnitValue(0, isOrdinal);\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"minus {Convert(-number, isOrdinal, gender)}\";\r\n        }\r\n\r\n        if (number == 1)\r\n        {\r\n            switch (gender)\r\n            {\r\n                case GrammaticalGender.Feminine:\r\n                    return \"ei\";\r\n                case GrammaticalGender.Neuter:\r\n                    return \"et\";\r\n            }\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        var millionOrMore = false;\r\n\r\n        const int billion = 1000000000;\r\n        if (number / billion > 0)\r\n        {\r\n            millionOrMore = true;\r\n            var isExactOrdinal = isOrdinal && number % billion == 0;\r\n            parts.Add(Part(\"{0} milliard\" + (isExactOrdinal ? \"\" : \"er\"), (isExactOrdinal ? \"\" : \"en \") + \"milliard\", number / billion, !isExactOrdinal));\r\n            number %= billion;\r\n        }\r\n\r\n        const int million = 1000000;\r\n        if (number / million > 0)\r\n        {\r\n            millionOrMore = true;\r\n            var isExactOrdinal = isOrdinal && number % million == 0;\r\n            parts.Add(Part(\"{0} million\" + (isExactOrdinal ? \"\" : \"er\"), (isExactOrdinal ? \"\" : \"en \") + \"million\", number / million, !isExactOrdinal));\r\n            number %= million;\r\n        }\r\n\r\n        var thousand = false;\r\n        if (number / 1000 > 0)\r\n        {\r\n            thousand = true;\r\n            parts.Add(Part(\"{0}tusen\", number % 1000 < 100 ? \"tusen\" : \"ettusen\", number / 1000));\r\n            number %= 1000;\r\n        }\r\n\r\n        var hundred = false;\r\n        if (number / 100 > 0)\r\n        {\r\n            hundred = true;\r\n            parts.Add(Part(\"{0}hundre\", thousand || millionOrMore ? \"ethundre\" : \"hundre\", number / 100));\r\n            number %= 100;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            if (parts.Count != 0)\r\n            {\r\n                if (millionOrMore && !hundred && !thousand)\r\n                {\r\n                    parts.Add(\"og \");\r\n                }\r\n                else\r\n                {\r\n                    parts.Add(\"og\");\r\n                }\r\n            }\r\n\r\n            if (number < 20)\r\n            {\r\n                parts.Add(GetUnitValue(number, isOrdinal));\r\n            }\r\n            else\r\n            {\r\n                var lastPart = TensMap[number / 10];\r\n                if (number % 10 > 0)\r\n                {\r\n                    lastPart += $\"{GetUnitValue(number % 10, isOrdinal)}\";\r\n                }\r\n                else if (isOrdinal)\r\n                {\r\n                    lastPart = lastPart.TrimEnd('e') + \"ende\";\r\n                }\r\n\r\n                parts.Add(lastPart);\r\n            }\r\n        }\r\n        else if (isOrdinal)\r\n        {\r\n            parts[^1] += (number == 0 ? \"\" : \"en\") + (millionOrMore ? \"te\" : \"de\");\r\n        }\r\n\r\n        var toWords = string\r\n            .Concat(parts)\r\n            .Trim();\r\n\r\n        return toWords;\r\n    }\r\n\r\n    static string GetUnitValue(int number, bool isOrdinal)\r\n    {\r\n        if (isOrdinal)\r\n        {\r\n            if (ExceptionNumbersToWords(number, out var exceptionString))\r\n            {\r\n                return exceptionString;\r\n            }\r\n\r\n            if (number < 13)\r\n            {\r\n                return UnitsMap[number]\r\n                    .TrimEnd('e') + \"ende\";\r\n            }\r\n\r\n            return UnitsMap[number] + \"de\";\r\n        }\r\n\r\n        return UnitsMap[number];\r\n    }\r\n\r\n    static bool ExceptionNumbersToWords(int number, [NotNullWhen(true)] out string? words) =>\r\n        OrdinalExceptions.TryGetValue(number, out words);\r\n\r\n    string Part(string pluralFormat, string singular, int number, bool postfixSpace = false)\r\n    {\r\n        var postfix = postfixSpace ? \" \" : \"\";\r\n        if (number == 1)\r\n        {\r\n            return singular + postfix;\r\n        }\r\n\r\n        return string.Format(pluralFormat, Convert(number)) + postfix;\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/PolishNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass PolishNumberToWordsConverter(CultureInfo culture) :\r\n    GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] HundredsMap =\r\n    [\r\n        \"zero\", \"sto\", \"dwieście\", \"trzysta\", \"czterysta\", \"pięćset\", \"sześćset\", \"siedemset\", \"osiemset\", \"dziewięćset\"\r\n    ];\r\n\r\n    static readonly string[] TensMap =\r\n    [\r\n        \"zero\", \"dziesięć\", \"dwadzieścia\", \"trzydzieści\", \"czterdzieści\", \"pięćdziesiąt\", \"sześćdziesiąt\",\r\n        \"siedemdziesiąt\", \"osiemdziesiąt\", \"dziewięćdziesiąt\"\r\n    ];\r\n\r\n    static readonly string[] UnitsMap =\r\n    [\r\n        \"zero\", \"jeden\", \"dwa\", \"trzy\", \"cztery\", \"pięć\", \"sześć\", \"siedem\", \"osiem\", \"dziewięć\", \"dziesięć\",\r\n        \"jedenaście\", \"dwanaście\", \"trzynaście\", \"czternaście\", \"piętnaście\", \"szesnaście\", \"siedemnaście\",\r\n        \"osiemnaście\", \"dziewiętnaście\"\r\n    ];\r\n\r\n    static readonly string[][] PowersOfThousandMap =\r\n    [\r\n        [\"tysiąc\", \"tysiące\", \"tysięcy\"],\r\n        [\"milion\", \"miliony\", \"milionów\"],\r\n        [\"miliard\", \"miliardy\", \"miliardów\"],\r\n        [\"bilion\", \"biliony\", \"bilionów\"],\r\n        [\"biliard\", \"biliardy\", \"biliardów\"],\r\n        [\"trylion\", \"tryliony\", \"trylionów\"]\r\n    ];\r\n\r\n    const long MaxPossibleDivisor = 1_000_000_000_000_000_000;\r\n\r\n    public override string Convert(long input, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (input == 0)\r\n        {\r\n            return \"zero\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n        CollectParts(parts, input, gender);\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender) =>\r\n        number.ToString(culture);\r\n\r\n    static void CollectParts(List<string> parts, long input, GrammaticalGender gender)\r\n    {\r\n        var inputSign = 1;\r\n        if (input < 0)\r\n        {\r\n            parts.Add(\"minus\");\r\n            inputSign = -1;\r\n        }\r\n\r\n        var number = input;\r\n        var divisor = MaxPossibleDivisor;\r\n        var power = PowersOfThousandMap.Length - 1;\r\n        while (divisor > 0)\r\n        {\r\n            var multiplier = (int)Math.Abs(number / divisor);\r\n            if (divisor > 1)\r\n            {\r\n                if (multiplier > 1)\r\n                {\r\n                    CollectPartsUnderThousand(parts, multiplier, GrammaticalGender.Masculine);\r\n                }\r\n\r\n                if (multiplier > 0)\r\n                {\r\n                    parts.Add(GetPowerOfThousandNameForm(multiplier, power));\r\n                }\r\n            }\r\n            else if (multiplier > 0)\r\n            {\r\n                if (multiplier == 1 && Math.Abs(input) != 1)\r\n                {\r\n                    gender = GrammaticalGender.Masculine;\r\n                }\r\n\r\n                CollectPartsUnderThousand(parts, multiplier, gender);\r\n            }\r\n\r\n            number -= multiplier * divisor * inputSign;\r\n            divisor /= 1000;\r\n            power--;\r\n        }\r\n    }\r\n\r\n    static void CollectPartsUnderThousand(List<string> parts, int number, GrammaticalGender gender)\r\n    {\r\n        var hundredsDigit = number / 100;\r\n        var tensDigit = number % 100 / 10;\r\n        var unitsDigit = number % 10;\r\n\r\n        if (hundredsDigit >= 1)\r\n        {\r\n            parts.Add(HundredsMap[hundredsDigit]);\r\n        }\r\n\r\n        if (tensDigit >= 2)\r\n        {\r\n            parts.Add(TensMap[tensDigit]);\r\n        }\r\n\r\n        if (tensDigit != 1 && unitsDigit == 2)\r\n        {\r\n            var genderedForm = gender == GrammaticalGender.Feminine ? \"dwie\" : \"dwa\";\r\n            parts.Add(genderedForm);\r\n        }\r\n        else if (number == 1)\r\n        {\r\n            var genderedForm = gender switch\r\n            {\r\n                GrammaticalGender.Masculine => \"jeden\",\r\n                GrammaticalGender.Feminine => \"jedna\",\r\n                GrammaticalGender.Neuter => \"jedno\",\r\n                _ => throw new ArgumentOutOfRangeException(nameof(gender))\r\n            };\r\n            parts.Add(genderedForm);\r\n        }\r\n        else\r\n        {\r\n            var unit = unitsDigit + 10 * (tensDigit == 1 ? 1 : 0);\r\n            if (unit > 0)\r\n            {\r\n                parts.Add(UnitsMap[unit]);\r\n            }\r\n        }\r\n    }\r\n\r\n    static string GetPowerOfThousandNameForm(int multiplier, int power)\r\n    {\r\n        const int singularIndex = 0;\r\n        const int pluralIndex = 1;\r\n        const int genitiveIndex = 2;\r\n        if (multiplier == 1)\r\n        {\r\n            return PowersOfThousandMap[power][singularIndex];\r\n        }\r\n\r\n        var multiplierUnitsDigit = multiplier % 10;\r\n        var multiplierTensDigit = multiplier % 100 / 10;\r\n        if (multiplierTensDigit == 1 || multiplierUnitsDigit <= 1 || multiplierUnitsDigit >= 5)\r\n        {\r\n            return PowersOfThousandMap[power][genitiveIndex];\r\n        }\r\n\r\n        return PowersOfThousandMap[power][pluralIndex];\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/PortugueseNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass PortugueseNumberToWordsConverter : GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] PortugueseUnitsMap = [\"zero\", \"um\", \"dois\", \"três\", \"quatro\", \"cinco\", \"seis\", \"sete\", \"oito\", \"nove\", \"dez\", \"onze\", \"doze\", \"treze\", \"quatorze\", \"quinze\", \"dezasseis\", \"dezassete\", \"dezoito\", \"dezanove\"];\r\n    static readonly string[] PortugueseTensMap = [\"zero\", \"dez\", \"vinte\", \"trinta\", \"quarenta\", \"cinquenta\", \"sessenta\", \"setenta\", \"oitenta\", \"noventa\"];\r\n    static readonly string[] PortugueseHundredsMap = [\"zero\", \"cento\", \"duzentos\", \"trezentos\", \"quatrocentos\", \"quinhentos\", \"seiscentos\", \"setecentos\", \"oitocentos\", \"novecentos\"];\r\n\r\n    static readonly string[] PortugueseOrdinalUnitsMap = [\"zero\", \"primeiro\", \"segundo\", \"terceiro\", \"quarto\", \"quinto\", \"sexto\", \"sétimo\", \"oitavo\", \"nono\"];\r\n    static readonly string[] PortugueseOrdinalTensMap = [\"zero\", \"décimo\", \"vigésimo\", \"trigésimo\", \"quadragésimo\", \"quinquagésimo\", \"sexagésimo\", \"septuagésimo\", \"octogésimo\", \"nonagésimo\"];\r\n    static readonly string[] PortugueseOrdinalHundredsMap = [\"zero\", \"centésimo\", \"ducentésimo\", \"trecentésimo\", \"quadringentésimo\", \"quingentésimo\", \"sexcentésimo\", \"septingentésimo\", \"octingentésimo\", \"noningentésimo\"];\r\n\r\n    public override string Convert(long input, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (input is > 999999999999 or < -999999999999)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        var number = input;\r\n\r\n        if (number == 0)\r\n        {\r\n            return \"zero\";\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"menos {Convert(Math.Abs(number), gender)}\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number / 1000000000 > 0)\r\n        {\r\n            // gender is not applied for billions\r\n            parts.Add(number / 1000000000 == 1\r\n                ? \"mil milhões\"\r\n                : $\"{Convert(number / 1000000000)} mil milhões\");\r\n\r\n            number %= 1000000000;\r\n        }\r\n\r\n        if (number / 1000000 > 0)\r\n        {\r\n            // gender is not applied for millions\r\n            parts.Add(number / 1000000 >= 2\r\n                ? $\"{Convert(number / 1000000, GrammaticalGender.Masculine)} milhões\"\r\n                : $\"{Convert(number / 1000000, GrammaticalGender.Masculine)} milhão\");\r\n\r\n            number %= 1000000;\r\n        }\r\n\r\n        if (number / 1000 > 0)\r\n        {\r\n            // gender is not applied for thousands\r\n            parts.Add(number / 1000 == 1 ? \"mil\" : $\"{Convert(number / 1000, GrammaticalGender.Masculine)} mil\");\r\n            number %= 1000;\r\n        }\r\n\r\n        if (number / 100 > 0)\r\n        {\r\n            if (number == 100)\r\n            {\r\n                parts.Add(parts.Count > 0 ? \"e cem\" : \"cem\");\r\n            }\r\n            else\r\n            {\r\n                // Gender is applied to hundreds starting from 200\r\n                parts.Add(ApplyGender(PortugueseHundredsMap[number / 100], gender));\r\n            }\r\n\r\n            number %= 100;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            if (parts.Count != 0)\r\n            {\r\n                parts.Add(\"e\");\r\n            }\r\n\r\n            if (number < 20)\r\n            {\r\n                parts.Add(ApplyGender(PortugueseUnitsMap[number], gender));\r\n            }\r\n            else\r\n            {\r\n                var lastPart = PortugueseTensMap[number / 10];\r\n                if (number % 10 > 0)\r\n                {\r\n                    lastPart += $\" e {ApplyGender(PortugueseUnitsMap[number % 10], gender)}\";\r\n                }\r\n\r\n                parts.Add(lastPart);\r\n            }\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender)\r\n    {\r\n        // N/A in Portuguese ordinal\r\n        if (number == 0)\r\n        {\r\n            return \"zero\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number / 1000000000 > 0)\r\n        {\r\n            parts.Add(number / 1000000000 == 1\r\n                ? $\"{ApplyOrdinalGender(\"milésimo\", gender)} {ApplyOrdinalGender(\"milionésimo\", gender)}\"\r\n                : $\"{Convert(number / 1000000000)} {ApplyOrdinalGender(\"milésimo\", gender)} {ApplyOrdinalGender(\"milionésimo\", gender)}\");\r\n\r\n            number %= 1000000000;\r\n        }\r\n\r\n        if (number / 1000000 > 0)\r\n        {\r\n            parts.Add(number / 1000000 == 1\r\n                ? ApplyOrdinalGender(\"milionésimo\", gender)\r\n                : string.Format(\"{0} \" + ApplyOrdinalGender(\"milionésimo\", gender), ConvertToOrdinal(number / 1000000000, gender)));\r\n\r\n            number %= 1000000;\r\n        }\r\n\r\n        if (number / 1000 > 0)\r\n        {\r\n            parts.Add(number / 1000 == 1\r\n                ? ApplyOrdinalGender(\"milésimo\", gender)\r\n                : string.Format(\"{0} \" + ApplyOrdinalGender(\"milésimo\", gender), ConvertToOrdinal(number / 1000, gender)));\r\n\r\n            number %= 1000;\r\n        }\r\n\r\n        if (number / 100 > 0)\r\n        {\r\n            parts.Add(ApplyOrdinalGender(PortugueseOrdinalHundredsMap[number / 100], gender));\r\n            number %= 100;\r\n        }\r\n\r\n        if (number / 10 > 0)\r\n        {\r\n            parts.Add(ApplyOrdinalGender(PortugueseOrdinalTensMap[number / 10], gender));\r\n            number %= 10;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(ApplyOrdinalGender(PortugueseOrdinalUnitsMap[number], gender));\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    static string ApplyGender(string toWords, GrammaticalGender gender)\r\n    {\r\n        if (gender != GrammaticalGender.Feminine)\r\n        {\r\n            return toWords;\r\n        }\r\n\r\n        if (toWords.EndsWith(\"os\"))\r\n        {\r\n            return StringHumanizeExtensions.Concat(toWords.AsSpan(0, toWords.Length - 2), \"as\".AsSpan());\r\n        }\r\n\r\n        if (toWords.EndsWith(\"um\"))\r\n        {\r\n            return StringHumanizeExtensions.Concat(toWords.AsSpan(0, toWords.Length - 2), \"uma\".AsSpan());\r\n        }\r\n\r\n        if (toWords.EndsWith(\"dois\"))\r\n        {\r\n            return StringHumanizeExtensions.Concat(toWords.AsSpan(0, toWords.Length - 4), \"duas\".AsSpan());\r\n        }\r\n\r\n        return toWords;\r\n    }\r\n\r\n    static string ApplyOrdinalGender(string toWords, GrammaticalGender gender)\r\n    {\r\n        if (gender == GrammaticalGender.Feminine)\r\n        {\r\n            return toWords.TrimEnd('o') + 'a';\r\n        }\r\n\r\n        return toWords;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/Romanian/RomanianCardinalNumberConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass RomanianCardinalNumberConverter\r\n{\r\n    /// <summary>\r\n    /// Lookup table converting units number to text. Index 1 for 1, index 2 for 2, up to index 9 for 9.\r\n    /// </summary>\r\n    readonly string[] units =\r\n    [\r\n        string.Empty,\r\n        \"unu|una|unu\",\r\n        \"doi|două|două\",\r\n        \"trei\",\r\n        \"patru\",\r\n        \"cinci\",\r\n        \"șase\",\r\n        \"șapte\",\r\n        \"opt\",\r\n        \"nouă\"\r\n    ];\r\n\r\n    /// <summary>\r\n    /// Lookup table converting teens number to text. Index 0 for 10, index 1 for 11, up to index 9 for 19.\r\n    /// </summary>\r\n    readonly string[] teensUnder20NumberToText =\r\n    [\r\n        \"zece\",\r\n        \"unsprezece\",\r\n        \"doisprezece|douăsprezece|douăsprezece\",\r\n        \"treisprezece\",\r\n        \"paisprezece\",\r\n        \"cincisprezece\",\r\n        \"șaisprezece\",\r\n        \"șaptesprezece\",\r\n        \"optsprezece\",\r\n        \"nouăsprezece\"\r\n    ];\r\n\r\n    /// <summary>\r\n    /// Lookup table converting tens number to text. Index 2 for 20, index 3 for 30, up to index 9 for 90.\r\n    /// </summary>\r\n    readonly string[] tensOver20NumberToText =\r\n    [\r\n        string.Empty,\r\n        string.Empty,\r\n        \"douăzeci\",\r\n        \"treizeci\",\r\n        \"patruzeci\",\r\n        \"cincizeci\",\r\n        \"șaizeci\",\r\n        \"șaptezeci\",\r\n        \"optzeci\",\r\n        \"nouăzeci\"\r\n    ];\r\n\r\n    readonly string feminineSingular = \"o\";\r\n    readonly string masculineSingular = \"un\";\r\n\r\n    readonly string joinGroups = \"și\";\r\n    readonly string joinAbove20 = \"de\";\r\n    readonly string minusSign = \"minus\";\r\n\r\n    /// <summary>\r\n    /// Enumerates sets of three-digits having distinct conversion to text.\r\n    /// </summary>\r\n    enum ThreeDigitSets\r\n    {\r\n        /// <summary>\r\n        /// Lowest three-digits set, from 1 to 999.\r\n        /// </summary>\r\n        Units = 0,\r\n\r\n        /// <summary>\r\n        /// Three-digits set counting the thousands, from 1'000 to 999'000.\r\n        /// </summary>\r\n        Thousands = 1,\r\n\r\n        /// <summary>\r\n        /// Three-digits set counting millions, from 1'000'000 to 999'000'000.\r\n        /// </summary>\r\n        Millions = 2,\r\n\r\n        /// <summary>\r\n        /// Three-digits set counting billions, from 1'000'000'000 to 999'000'000'000.\r\n        /// </summary>\r\n        Billions = 3,\r\n\r\n        /// <summary>\r\n        /// Three-digits set beyond 999 billions, from 1'000'000'000'000 onward.\r\n        /// </summary>\r\n        More = 4\r\n    }\r\n\r\n    public string Convert(int number, GrammaticalGender gender)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return \"zero\";\r\n        }\r\n\r\n        var words = string.Empty;\r\n\r\n        var prefixMinusSign = false;\r\n\r\n        if (number < 0)\r\n        {\r\n            prefixMinusSign = true;\r\n            number = -number;\r\n        }\r\n\r\n        var _threeDigitParts = SplitEveryThreeDigits(number);\r\n\r\n        for (var i = 0; i < _threeDigitParts.Count; i++)\r\n        {\r\n            var currentSet = (ThreeDigitSets)Enum.ToObject(typeof(ThreeDigitSets), i);\r\n\r\n            var partToString = GetNextPartConverter(currentSet);\r\n\r\n            if (partToString != null)\r\n            {\r\n                words = partToString(_threeDigitParts[i], gender)\r\n                    .Trim() + \" \" + words.Trim();\r\n            }\r\n        }\r\n\r\n        if (prefixMinusSign)\r\n        {\r\n            words = minusSign + \" \" + words;\r\n        }\r\n\r\n        // remove extra spaces\r\n        return words\r\n            .TrimEnd()\r\n            .Replace(\"  \", \" \");\r\n    }\r\n\r\n    /// <summary>\r\n    /// Splits a number into a sequence of three-digits numbers,\r\n    /// starting from units, then thousands, millions, and so on.\r\n    /// </summary>\r\n    /// <param name=\"number\">The number to split.</param>\r\n    /// <returns>The sequence of three-digit numbers.</returns>\r\n    static List<int> SplitEveryThreeDigits(int number)\r\n    {\r\n        var parts = new List<int>();\r\n        var rest = number;\r\n\r\n        while (rest > 0)\r\n        {\r\n            var threeDigit = rest % 1000;\r\n\r\n            parts.Add(threeDigit);\r\n\r\n            rest /= 1000;\r\n        }\r\n\r\n        return parts;\r\n    }\r\n\r\n    /// <summary>\r\n    /// During number conversion to text, finds out the converter\r\n    /// to use for the next three-digit set.\r\n    /// </summary>\r\n    /// <returns>The next conversion function to use.</returns>\r\n    Func<int, GrammaticalGender, string>? GetNextPartConverter(ThreeDigitSets currentSet) =>\r\n        currentSet switch\r\n        {\r\n            ThreeDigitSets.Units => UnitsConverter,\r\n            ThreeDigitSets.Thousands => ThousandsConverter,\r\n            ThreeDigitSets.Millions => MillionsConverter,\r\n            ThreeDigitSets.Billions => BillionsConverter,\r\n            ThreeDigitSets.More => null,\r\n            _ => throw new ArgumentOutOfRangeException(\"Unknow ThreeDigitSet: \" + currentSet)\r\n        };\r\n\r\n    /// <summary>\r\n    /// Converts a three-digit set to text.\r\n    /// </summary>\r\n    /// <param name=\"number\">The three-digit set to convert.</param>\r\n    /// <param name=\"gender\">The grammatical gender to convert to.</param>\r\n    /// <returns>The same three-digit set expressed as text.</returns>\r\n    string ThreeDigitSetConverter(int number, GrammaticalGender gender)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        // grab lowest two digits\r\n        var tensAndUnits = number % 100;\r\n        // grab third digit\r\n        var hundreds = number / 100;\r\n\r\n        // grab also first and second digits separately\r\n        var units = tensAndUnits % 10;\r\n        var tens = tensAndUnits / 10;\r\n\r\n        var words = string.Empty;\r\n\r\n        // append text for hundreds\r\n        words += HundredsToText(hundreds);\r\n\r\n        // append text for tens, only those from twenty upward\r\n        words += (tens >= 2 ? \" \" : string.Empty) + tensOver20NumberToText[tens];\r\n\r\n        if (tensAndUnits <= 9)\r\n        {\r\n            // simple case for units, under 10\r\n            words += \" \" + GetPartByGender(this.units[tensAndUnits], gender);\r\n        }\r\n        else if (tensAndUnits <= 19)\r\n        {\r\n            // special case for 'teens', from 10 to 19\r\n            words += \" \" + GetPartByGender(teensUnder20NumberToText[tensAndUnits - 10], gender);\r\n        }\r\n        else\r\n        {\r\n            // exception for zero\r\n            var unitsText = units == 0 ? string.Empty : \" \" + joinGroups + \" \" + GetPartByGender(this.units[units], gender);\r\n\r\n            words += unitsText;\r\n        }\r\n\r\n        return words;\r\n    }\r\n\r\n    static string GetPartByGender(string multiGenderPart, GrammaticalGender gender)\r\n    {\r\n        if (multiGenderPart.Contains('|'))\r\n        {\r\n            var parts = multiGenderPart.Split('|');\r\n            if (gender == GrammaticalGender.Feminine)\r\n            {\r\n                return parts[1];\r\n            }\r\n\r\n            if (gender == GrammaticalGender.Neuter)\r\n            {\r\n                return parts[2];\r\n            }\r\n\r\n            return parts[0];\r\n        }\r\n\r\n        return multiGenderPart;\r\n    }\r\n\r\n    static bool IsAbove20(int number) =>\r\n        number >= 20;\r\n\r\n    string HundredsToText(int hundreds)\r\n    {\r\n        if (hundreds == 0)\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        if (hundreds == 1)\r\n        {\r\n            return feminineSingular + \" sută\";\r\n        }\r\n\r\n        return GetPartByGender(units[hundreds], GrammaticalGender.Feminine) + \" sute\";\r\n    }\r\n\r\n    /// <summary>\r\n    /// Converts a three-digit number, as units, to text.\r\n    /// </summary>\r\n    /// <param name=\"number\">The three-digit number, as units, to convert.</param>\r\n    /// <param name=\"gender\">The grammatical gender to convert to.</param>\r\n    /// <returns>The same three-digit number, as units, expressed as text.</returns>\r\n    string UnitsConverter(int number, GrammaticalGender gender) =>\r\n        ThreeDigitSetConverter(number, gender);\r\n\r\n    /// <summary>\r\n    /// Converts a thousands three-digit number to text.\r\n    /// </summary>\r\n    /// <param name=\"number\">The three-digit number, as thousands, to convert.</param>\r\n    /// <param name=\"gender\">The grammatical gender to convert to.</param>\r\n    /// <returns>The same three-digit number of thousands expressed as text.</returns>\r\n    string ThousandsConverter(int number, GrammaticalGender gender)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        if (number == 1)\r\n        {\r\n            return feminineSingular + \" mie\";\r\n        }\r\n\r\n        return ThreeDigitSetConverter(number, GrammaticalGender.Feminine) + (IsAbove20(number) ? \" \" + joinAbove20 : string.Empty) + \" mii\";\r\n    }\r\n\r\n    // Large numbers (above 10^6) use a combined form of the long and short scales.\r\n    /*\r\n            Singular    Plural            Order     Scale\r\n            -----------------------------------------------\r\n            zece        zeci              10^1      -\r\n            sută        sute              10^2      -\r\n            mie         mii               10^3      -\r\n            milion      milioane          10^6      short/long\r\n            miliard     miliarde          10^9      long\r\n            trilion     trilioane         10^12     short\r\n    */\r\n\r\n    /// <summary>\r\n    /// Converts a millions three-digit number to text.\r\n    /// </summary>\r\n    /// <param name=\"number\">The three-digit number, as millions, to convert.</param>\r\n    /// <param name=\"gender\">The grammatical gender to convert to.</param>\r\n    /// <returns>The same three-digit number of millions expressed as text.</returns>\r\n    string MillionsConverter(int number, GrammaticalGender gender)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        if (number == 1)\r\n        {\r\n            return masculineSingular + \" milion\";\r\n        }\r\n\r\n        return ThreeDigitSetConverter(number, GrammaticalGender.Feminine) + (IsAbove20(number) ? \" \" + joinAbove20 : string.Empty) + \" milioane\";\r\n    }\r\n\r\n    /// <summary>\r\n    /// Converts a billions three-digit number to text.\r\n    /// </summary>\r\n    /// <param name=\"number\">The three-digit number, as billions, to convert.</param>\r\n    /// <param name=\"gender\">The grammatical gender to convert to.</param>\r\n    /// <returns>The same three-digit number of billions expressed as text.</returns>\r\n    string BillionsConverter(int number, GrammaticalGender gender)\r\n    {\r\n        if (number == 1)\r\n        {\r\n            return masculineSingular + \" miliard\";\r\n        }\r\n\r\n        return ThreeDigitSetConverter(number, GrammaticalGender.Feminine) + (IsAbove20(number) ? \" \" + joinAbove20 : string.Empty) + \" miliarde\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/Romanian/RomanianOrdinalNumberConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass RomanianOrdinalNumberConverter\r\n{\r\n    /// <summary>\r\n    /// Lookup table converting units number to text. Index 1 for 1, index 2 for 2, up to index 9.\r\n    /// </summary>\r\n    readonly Dictionary<int, string> ordinalsUnder10 = new()\r\n    {\r\n        {\r\n            1, \"primul|prima\"\r\n        },\r\n        {\r\n            2, \"doilea|doua\"\r\n        },\r\n        {\r\n            3, \"treilea|treia\"\r\n        },\r\n        {\r\n            4, \"patrulea|patra\"\r\n        },\r\n        {\r\n            5, \"cincilea|cincea\"\r\n        },\r\n        {\r\n            6, \"șaselea|șasea\"\r\n        },\r\n        {\r\n            7, \"șaptelea|șaptea\"\r\n        },\r\n        {\r\n            8, \"optulea|opta\"\r\n        },\r\n        {\r\n            9, \"nouălea|noua\"\r\n        },\r\n    };\r\n\r\n    readonly string femininePrefix = \"a\";\r\n    readonly string masculinePrefix = \"al\";\r\n    readonly string feminineSuffix = \"a\";\r\n    readonly string masculineSuffix = \"lea\";\r\n\r\n    public string Convert(int number, GrammaticalGender gender)\r\n    {\r\n        // it's easier to treat zero as a completely distinct case\r\n        if (number == 0)\r\n        {\r\n            return \"zero\";\r\n        }\r\n\r\n        if (number == 1)\r\n        {\r\n            // no prefixes for primul/prima\r\n            return GetPartByGender(ordinalsUnder10[number], gender);\r\n        }\r\n\r\n        if (number <= 9)\r\n        {\r\n            // units ordinals, 2 to 9, are totally different than the rest: treat them as a distinct case\r\n            return string.Format(\"{0} {1}\",\r\n                gender == GrammaticalGender.Feminine ? femininePrefix : masculinePrefix,\r\n                GetPartByGender(ordinalsUnder10[number], gender)\r\n            );\r\n        }\r\n\r\n        var coverter = new RomanianCardinalNumberConverter();\r\n        var words = coverter.Convert(number, gender);\r\n\r\n        // remove 'de' preposition\r\n        words = words.Replace(\" de \", \" \");\r\n\r\n        if (gender == GrammaticalGender.Feminine && words.EndsWith(\"zeci\"))\r\n        {\r\n            words = StringHumanizeExtensions.Concat(words.AsSpan(0, words.Length - 4), \"zece\".AsSpan());\r\n        }\r\n        else if (gender == GrammaticalGender.Feminine && words.Contains(\"zeci\") && (words.Contains(\"milioane\") || words.Contains(\"miliarde\")))\r\n        {\r\n            words = words.Replace(\"zeci\", \"zecea\");\r\n        }\r\n\r\n        if (gender == GrammaticalGender.Feminine && words.StartsWith(\"un \"))\r\n        {\r\n            words = words\r\n                .AsSpan(2)\r\n                .TrimStart()\r\n                .ToString();\r\n        }\r\n\r\n        if (words.EndsWith(\"milioane\"))\r\n        {\r\n            if (gender == GrammaticalGender.Feminine)\r\n            {\r\n                words = StringHumanizeExtensions.Concat(words.AsSpan(0, words.Length - 8), \"milioana\".AsSpan());\r\n            }\r\n        }\r\n\r\n        var customMasculineSuffix = masculineSuffix;\r\n        if (words.EndsWith(\"milion\"))\r\n        {\r\n            if (gender == GrammaticalGender.Feminine)\r\n            {\r\n                words = StringHumanizeExtensions.Concat(words.AsSpan(0, words.Length - 6), \"milioana\".AsSpan());\r\n            }\r\n            else\r\n            {\r\n                customMasculineSuffix = \"u\" + masculineSuffix;\r\n            }\r\n        }\r\n        else if (words.EndsWith(\"miliard\"))\r\n        {\r\n            if (gender == GrammaticalGender.Masculine)\r\n            {\r\n                customMasculineSuffix = \"u\" + masculineSuffix;\r\n            }\r\n        }\r\n\r\n        // trim last letter\r\n        if (gender == GrammaticalGender.Feminine && !words.EndsWith(\"zece\") &&\r\n            (words.EndsWith('a') ||\r\n             words.EndsWith('ă') ||\r\n             words.EndsWith('e') ||\r\n             words.EndsWith('i')))\r\n        {\r\n            words = words[..^1];\r\n        }\r\n\r\n        return string.Format(\"{0} {1}{2}\",\r\n            gender == GrammaticalGender.Feminine ? femininePrefix : masculinePrefix,\r\n            words,\r\n            gender == GrammaticalGender.Feminine ? feminineSuffix : customMasculineSuffix\r\n        );\r\n    }\r\n\r\n    static string GetPartByGender(string multiGenderPart, GrammaticalGender gender)\r\n    {\r\n        if (multiGenderPart.Contains('|'))\r\n        {\r\n            var parts = multiGenderPart.Split('|');\r\n            if (gender == GrammaticalGender.Feminine)\r\n            {\r\n                return parts[1];\r\n            }\r\n\r\n            return parts[0];\r\n        }\r\n\r\n        return multiGenderPart;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/RomanianNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass RomanianNumberToWordsConverter : GenderedNumberToWordsConverter\r\n{\r\n    public override string Convert(long number, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (number is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        var converter = new RomanianCardinalNumberConverter();\r\n        return converter.Convert((int)number, gender);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender)\r\n    {\r\n        var converter = new RomanianOrdinalNumberConverter();\r\n        return converter.Convert(number, gender);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/RussianNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass RussianNumberToWordsConverter : GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] HundredsMap = [\"ноль\", \"сто\", \"двести\", \"триста\", \"четыреста\", \"пятьсот\", \"шестьсот\", \"семьсот\", \"восемьсот\", \"девятьсот\"];\r\n    static readonly string[] TensMap = [\"ноль\", \"десять\", \"двадцать\", \"тридцать\", \"сорок\", \"пятьдесят\", \"шестьдесят\", \"семьдесят\", \"восемьдесят\", \"девяносто\"];\r\n    static readonly string[] UnitsMap = [\"ноль\", \"один\", \"два\", \"три\", \"четыре\", \"пять\", \"шесть\", \"семь\", \"восемь\", \"девять\", \"десять\", \"одиннадцать\", \"двенадцать\", \"тринадцать\", \"четырнадцать\", \"пятнадцать\", \"шестнадцать\", \"семнадцать\", \"восемнадцать\", \"девятнадцать\"];\r\n    static readonly string[] UnitsOrdinalPrefixes = [string.Empty, string.Empty, \"двух\", \"трёх\", \"четырёх\", \"пяти\", \"шести\", \"семи\", \"восьми\", \"девяти\", \"десяти\", \"одиннадцати\", \"двенадцати\", \"тринадцати\", \"четырнадцати\", \"пятнадцати\", \"шестнадцати\", \"семнадцати\", \"восемнадцати\", \"девятнадцати\"];\r\n    static readonly string[] TensOrdinalPrefixes = [string.Empty, \"десяти\", \"двадцати\", \"тридцати\", \"сорока\", \"пятидесяти\", \"шестидесяти\", \"семидесяти\", \"восьмидесяти\", \"девяносто\"];\r\n    static readonly string[] TensOrdinal = [string.Empty, \"десят\", \"двадцат\", \"тридцат\", \"сороков\", \"пятидесят\", \"шестидесят\", \"семидесят\", \"восьмидесят\", \"девяност\"];\r\n    static readonly string[] UnitsOrdinal = [string.Empty, \"перв\", \"втор\", \"трет\", \"четверт\", \"пят\", \"шест\", \"седьм\", \"восьм\", \"девят\", \"десят\", \"одиннадцат\", \"двенадцат\", \"тринадцат\", \"четырнадцат\", \"пятнадцат\", \"шестнадцат\", \"семнадцат\", \"восемнадцат\", \"девятнадцат\"];\r\n\r\n    public override string Convert(long input, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (input == 0)\r\n        {\r\n            return \"ноль\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (input < 0)\r\n        {\r\n            parts.Add(\"минус\");\r\n        }\r\n\r\n        CollectParts(parts, ref input, 1000000000000000000, GrammaticalGender.Masculine, \"квинтиллион\", \"квинтиллиона\", \"квинтиллионов\");\r\n        CollectParts(parts, ref input, 1000000000000000, GrammaticalGender.Masculine, \"квадриллион\", \"квадриллиона\", \"квадриллионов\");\r\n        CollectParts(parts, ref input, 1000000000000, GrammaticalGender.Masculine, \"триллион\", \"триллиона\", \"триллионов\");\r\n        CollectParts(parts, ref input, 1000000000, GrammaticalGender.Masculine, \"миллиард\", \"миллиарда\", \"миллиардов\");\r\n        CollectParts(parts, ref input, 1000000, GrammaticalGender.Masculine, \"миллион\", \"миллиона\", \"миллионов\");\r\n        CollectParts(parts, ref input, 1000, GrammaticalGender.Feminine, \"тысяча\", \"тысячи\", \"тысяч\");\r\n\r\n        if (input != 0)\r\n        {\r\n            CollectPartsUnderOneThousand(parts, Math.Abs(input), gender);\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int input, GrammaticalGender gender)\r\n    {\r\n        if (input == 0)\r\n        {\r\n            return \"нулев\" + GetEndingForGender(gender, input);\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (input < 0)\r\n        {\r\n            parts.Add(\"минус\");\r\n            input = -input;\r\n        }\r\n\r\n        var number = (long)input;\r\n        CollectOrdinalParts(parts, ref number, 1000000000, GrammaticalGender.Masculine, \"миллиардн\" + GetEndingForGender(gender, number), \"миллиард\", \"миллиарда\", \"миллиардов\");\r\n        CollectOrdinalParts(parts, ref number, 1000000, GrammaticalGender.Masculine, \"миллионн\" + GetEndingForGender(gender, number), \"миллион\", \"миллиона\", \"миллионов\");\r\n        CollectOrdinalParts(parts, ref number, 1000, GrammaticalGender.Feminine, \"тысячн\" + GetEndingForGender(gender, number), \"тысяча\", \"тысячи\", \"тысяч\");\r\n\r\n        if (number >= 100)\r\n        {\r\n            var ending = GetEndingForGender(gender, number);\r\n            var hundreds = number / 100;\r\n            number %= 100;\r\n            if (number == 0)\r\n            {\r\n                parts.Add(UnitsOrdinalPrefixes[hundreds] + \"сот\" + ending);\r\n            }\r\n            else\r\n            {\r\n                parts.Add(HundredsMap[hundreds]);\r\n            }\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            var ending = GetEndingForGender(gender, number);\r\n            var tens = number / 10;\r\n            number %= 10;\r\n            if (number == 0)\r\n            {\r\n                parts.Add(TensOrdinal[tens] + ending);\r\n            }\r\n            else\r\n            {\r\n                parts.Add(TensMap[tens]);\r\n            }\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(UnitsOrdinal[number] + GetEndingForGender(gender, number));\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    static void CollectPartsUnderOneThousand(List<string> parts, long number, GrammaticalGender gender)\r\n    {\r\n        if (number >= 100)\r\n        {\r\n            var hundreds = number / 100;\r\n            number %= 100;\r\n            parts.Add(HundredsMap[hundreds]);\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            var tens = number / 10;\r\n            parts.Add(TensMap[tens]);\r\n            number %= 10;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            if (number == 1 && gender == GrammaticalGender.Feminine)\r\n            {\r\n                parts.Add(\"одна\");\r\n            }\r\n            else if (number == 1 && gender == GrammaticalGender.Neuter)\r\n            {\r\n                parts.Add(\"одно\");\r\n            }\r\n            else if (number == 2 && gender == GrammaticalGender.Feminine)\r\n            {\r\n                parts.Add(\"две\");\r\n            }\r\n            else if (number < 20)\r\n            {\r\n                parts.Add(UnitsMap[number]);\r\n            }\r\n        }\r\n    }\r\n\r\n    static string GetPrefix(long number)\r\n    {\r\n        var parts = new List<string>();\r\n\r\n        if (number >= 100)\r\n        {\r\n            var hundreds = number / 100;\r\n            number %= 100;\r\n            if (hundreds != 1)\r\n            {\r\n                parts.Add(UnitsOrdinalPrefixes[hundreds] + \"сот\");\r\n            }\r\n            else\r\n            {\r\n                parts.Add(\"сто\");\r\n            }\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            var tens = number / 10;\r\n            number %= 10;\r\n            parts.Add(TensOrdinalPrefixes[tens]);\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(number == 1 ? \"одно\" : UnitsOrdinalPrefixes[number]);\r\n        }\r\n\r\n        return string.Concat(parts);\r\n    }\r\n\r\n    static void CollectParts(List<string> parts, ref long number, long divisor, GrammaticalGender gender, params string[] forms)\r\n    {\r\n        var result = Math.Abs(number / divisor);\r\n        if (result == 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        CollectPartsUnderOneThousand(parts, result, gender);\r\n        parts.Add(ChooseOneForGrammaticalNumber(result, forms));\r\n        number = Math.Abs(number % divisor);\r\n    }\r\n\r\n    static void CollectOrdinalParts(List<string> parts, ref long number, int divisor, GrammaticalGender gender, string prefixedForm, params string[] forms)\r\n    {\r\n        if (number < divisor)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var result = number / divisor;\r\n        number %= divisor;\r\n        if (number == 0)\r\n        {\r\n            if (result == 1)\r\n            {\r\n                parts.Add(prefixedForm);\r\n            }\r\n            else\r\n            {\r\n                parts.Add(GetPrefix(result) + prefixedForm);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            CollectPartsUnderOneThousand(parts, result, gender);\r\n            parts.Add(ChooseOneForGrammaticalNumber(result, forms));\r\n        }\r\n    }\r\n\r\n    static int GetIndex(RussianGrammaticalNumber number)\r\n    {\r\n        if (number == RussianGrammaticalNumber.Singular)\r\n        {\r\n            return 0;\r\n        }\r\n\r\n        if (number == RussianGrammaticalNumber.Paucal)\r\n        {\r\n            return 1;\r\n        }\r\n\r\n        return 2;\r\n    }\r\n\r\n    static string ChooseOneForGrammaticalNumber(long number, string[] forms) =>\r\n        forms[GetIndex(RussianGrammaticalNumberDetector.Detect(number))];\r\n\r\n    static string GetEndingForGender(GrammaticalGender gender, long number)\r\n    {\r\n        switch (gender)\r\n        {\r\n            case GrammaticalGender.Masculine:\r\n                if (number is 0 or 2 or 6 or 7 or 8 or 40)\r\n                {\r\n                    return \"ой\";\r\n                }\r\n\r\n                if (number == 3)\r\n                {\r\n                    return \"ий\";\r\n                }\r\n\r\n                return \"ый\";\r\n            case GrammaticalGender.Feminine:\r\n                if (number == 3)\r\n                {\r\n                    return \"ья\";\r\n                }\r\n\r\n                return \"ая\";\r\n            case GrammaticalGender.Neuter:\r\n                if (number == 3)\r\n                {\r\n                    return \"ье\";\r\n                }\r\n\r\n                return \"ое\";\r\n            default:\r\n                throw new ArgumentOutOfRangeException(nameof(gender));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/SerbianCyrlNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass SerbianCyrlNumberToWordsConverter(CultureInfo culture) :\r\n    GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"нула\", \"један\", \"два\", \"три\", \"четири\", \"пет\", \"шест\", \"седам\", \"осам\", \"девет\", \"десет\", \"једанест\", \"дванаест\", \"тринаест\", \"четрнаест\", \"петнаест\", \"шеснаест\", \"седамнаест\", \"осамнаест\", \"деветнаест\"];\r\n    static readonly string[] TensMap = [\"нула\", \"десет\", \"двадесет\", \"тридесет\", \"четрдесет\", \"петдесет\", \"шестдесет\", \"седамдесет\", \"осамдесет\", \"деветдесет\"];\r\n\r\n    public override string Convert(long input)\r\n    {\r\n        if (input is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        var number = (int)input;\r\n\r\n        if (number == 0)\r\n        {\r\n            return \"нула\";\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"- {Convert(-number)}\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n        var billions = number / 1000000000;\r\n\r\n        if (billions > 0)\r\n        {\r\n            parts.Add(Part(\"милијарда\", \"две милијарде\", \"{0} милијарде\", \"{0} милијарда\", billions));\r\n            number %= 1000000000;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var millions = number / 1000000;\r\n\r\n        if (millions > 0)\r\n        {\r\n            parts.Add(Part(\"милион\", \"два милиона\", \"{0} милиона\", \"{0} милиона\", millions));\r\n            number %= 1000000;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var thousands = number / 1000;\r\n\r\n        if (thousands > 0)\r\n        {\r\n            parts.Add(Part(\"хиљаду\", \"две хиљаде\", \"{0} хиљаде\", \"{0} хиљада\", thousands));\r\n            number %= 1000;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var hundreds = number / 100;\r\n\r\n        if (hundreds > 0)\r\n        {\r\n            parts.Add(Part(\"сто\", \"двесто\", \"{0}сто\", \"{0}сто\", hundreds));\r\n            number %= 100;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            if (number < 20)\r\n            {\r\n                parts.Add(UnitsMap[number]);\r\n            }\r\n            else\r\n            {\r\n                parts.Add(TensMap[number / 10]);\r\n\r\n                var units = number % 10;\r\n\r\n                if (units > 0)\r\n                {\r\n                    parts.Add($\" {UnitsMap[units]}\");\r\n                }\r\n            }\r\n        }\r\n\r\n        return string.Concat(parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number) =>\r\n        //TODO: In progress\r\n        number.ToString(culture);\r\n\r\n    string Part(string singular, string dual, string trialQuadral, string plural, int number)\r\n    {\r\n        return number switch\r\n        {\r\n            1 => singular,\r\n            2 => dual,\r\n            3 or 4 => string.Format(trialQuadral, Convert(number)),\r\n            _ => string.Format(plural, Convert(number)),\r\n        };\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/SerbianNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass SerbianNumberToWordsConverter(CultureInfo culture) :\r\n    GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"nula\", \"jedan\", \"dva\", \"tri\", \"četiri\", \"pet\", \"šest\", \"sedam\", \"osam\", \"devet\", \"deset\", \"jedanaest\", \"dvanaest\", \"trinaest\", \"četrnaest\", \"petnaest\", \"šestnaest\", \"sedemnaest\", \"osemnaest\", \"devetnaest\"];\r\n    static readonly string[] TensMap = [\"nula\", \"deset\", \"dvadeset\", \"trideset\", \"četrdeset\", \"petdeset\", \"šestdeset\", \"sedamdeset\", \"osamdeset\", \"devetdeset\"];\r\n\r\n    public override string Convert(long input)\r\n    {\r\n        if (input is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        var number = (int)input;\r\n        if (number == 0)\r\n        {\r\n            return \"nula\";\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"- {Convert(-number)}\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n        var billions = number / 1000000000;\r\n\r\n        if (billions > 0)\r\n        {\r\n            parts.Add(Part(\"milijarda\", \"dve milijarde\", \"{0} milijarde\", \"{0} milijarda\", billions));\r\n            number %= 1000000000;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var millions = number / 1000000;\r\n\r\n        if (millions > 0)\r\n        {\r\n            parts.Add(Part(\"milion\", \"dva miliona\", \"{0} miliona\", \"{0} miliona\", millions));\r\n            number %= 1000000;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var thousands = number / 1000;\r\n\r\n        if (thousands > 0)\r\n        {\r\n            parts.Add(Part(\"hiljadu\", \"dve hiljade\", \"{0} hiljade\", \"{0} hiljada\", thousands));\r\n            number %= 1000;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var hundreds = number / 100;\r\n\r\n        if (hundreds > 0)\r\n        {\r\n            parts.Add(Part(\"sto\", \"dvesto\", \"{0}sto\", \"{0}sto\", hundreds));\r\n            number %= 100;\r\n\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            if (number < 20)\r\n            {\r\n                parts.Add(UnitsMap[number]);\r\n            }\r\n            else\r\n            {\r\n                parts.Add(TensMap[number / 10]);\r\n                var units = number % 10;\r\n\r\n                if (units > 0)\r\n                {\r\n                    parts.Add($\" {UnitsMap[units]}\");\r\n                }\r\n            }\r\n        }\r\n\r\n        return string.Concat(parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number) =>\r\n        //TODO: In progress\r\n        number.ToString(culture);\r\n\r\n    string Part(string singular, string dual, string trialQuadral, string plural, int number)\r\n    {\r\n        return number switch\r\n        {\r\n            1 => singular,\r\n            2 => dual,\r\n            3 or 4 => string.Format(trialQuadral, Convert(number)),\r\n            _ => string.Format(plural, Convert(number)),\r\n        };\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/SlovenianNumberToWordsConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass SlovenianNumberToWordsConverter(CultureInfo culture) :\r\n    GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"nič\", \"ena\", \"dva\", \"tri\", \"štiri\", \"pet\", \"šest\", \"sedem\", \"osem\", \"devet\", \"deset\", \"enajst\", \"dvanajst\", \"trinajst\", \"štirinajst\", \"petnajst\", \"šestnajst\", \"sedemnajst\", \"osemnajst\", \"devetnajst\"];\r\n    static readonly string[] TensMap = [\"nič\", \"deset\", \"dvajset\", \"trideset\", \"štirideset\", \"petdeset\", \"šestdeset\", \"sedemdeset\", \"osemdeset\", \"devetdeset\"];\r\n\r\n    public override string Convert(long input)\r\n    {\r\n        if (input is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        var number = (int)input;\r\n        if (number == 0)\r\n        {\r\n            return \"nič\";\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"minus {Convert(-number)}\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        var billions = number / 1000000000;\r\n        if (billions > 0)\r\n        {\r\n            parts.Add(Part(\"milijarda\", \"dve milijardi\", \"{0} milijarde\", \"{0} milijard\", billions));\r\n            number %= 1000000000;\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var millions = number / 1000000;\r\n        if (millions > 0)\r\n        {\r\n            parts.Add(Part(\"milijon\", \"dva milijona\", \"{0} milijone\", \"{0} milijonov\", millions));\r\n            number %= 1000000;\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var thousands = number / 1000;\r\n        if (thousands > 0)\r\n        {\r\n            parts.Add(Part(\"tisoč\", \"dva tisoč\", \"{0} tisoč\", \"{0} tisoč\", thousands));\r\n            number %= 1000;\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        var hundreds = number / 100;\r\n        if (hundreds > 0)\r\n        {\r\n            parts.Add(Part(\"sto\", \"dvesto\", \"{0}sto\", \"{0}sto\", hundreds));\r\n            number %= 100;\r\n            if (number > 0)\r\n            {\r\n                parts.Add(\" \");\r\n            }\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            if (number < 20)\r\n            {\r\n                if (number > 1)\r\n                {\r\n                    parts.Add(UnitsMap[number]);\r\n                }\r\n                else\r\n                {\r\n                    parts.Add(\"ena\");\r\n                }\r\n            }\r\n            else\r\n            {\r\n                var units = number % 10;\r\n                if (units > 0)\r\n                {\r\n                    parts.Add($\"{UnitsMap[units]}in\");\r\n                }\r\n\r\n                parts.Add(TensMap[number / 10]);\r\n            }\r\n        }\r\n\r\n        return string.Concat(parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number) =>\r\n        number.ToString(culture);\r\n\r\n    string Part(string singular, string dual, string trialQuadral, string plural, int number)\r\n    {\r\n        if (number == 1)\r\n        {\r\n            return singular;\r\n        }\r\n\r\n        if (number == 2)\r\n        {\r\n            return dual;\r\n        }\r\n\r\n        if (number is 3 or 4)\r\n        {\r\n            return string.Format(trialQuadral, Convert(number));\r\n        }\r\n\r\n        return string.Format(plural, Convert(number));\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/SpanishNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass SpanishNumberToWordsConverter : GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] HundredsRootMap =\r\n    [\r\n        \"cero\", \"ciento\", \"doscient\", \"trescient\", \"cuatrocient\", \"quinient\", \"seiscient\", \"setecient\",\r\n        \"ochocient\", \"novecient\"\r\n    ];\r\n\r\n    static readonly string[] HundredthsRootMap =\r\n    [\r\n        \"\", \"centésim\", \"ducentésim\", \"tricentésim\", \"cuadringentésim\", \"quingentésim\", \"sexcentésim\",\r\n        \"septingentésim\", \"octingentésim\", \"noningentésim\"\r\n    ];\r\n\r\n    static readonly string[] OrdinalsRootMap =\r\n    [\r\n        \"\", \"primer\", \"segund\", \"tercer\", \"cuart\", \"quint\", \"sext\",\r\n        \"séptim\", \"octav\", \"noven\"\r\n    ];\r\n\r\n    static readonly string[] TensMap =\r\n    [\r\n        \"cero\", \"diez\", \"veinte\", \"treinta\", \"cuarenta\", \"cincuenta\", \"sesenta\", \"setenta\", \"ochenta\", \"noventa\"\r\n    ];\r\n\r\n    static readonly string[] TenthsRootMap =\r\n    [\r\n        \"\", \"décim\", \"vigésim\", \"trigésim\", \"cuadragésim\", \"quincuagésim\", \"sexagésim\", \"septuagésim\",\r\n        \"octogésim\", \"nonagésim\"\r\n    ];\r\n\r\n    static readonly string[] ThousandthsRootMap =\r\n    [\r\n        \"\", \"milésim\", \"dosmilésim\", \"tresmilésim\", \"cuatromilésim\", \"cincomilésim\", \"seismilésim\",\r\n        \"sietemilésim\", \"ochomilésim\", \"nuevemilésim\"\r\n    ];\r\n\r\n    static readonly string[] TupleMap =\r\n    [\r\n        \"cero veces\", \"una vez\", \"doble\", \"triple\", \"cuádruple\", \"quíntuple\", \"séxtuple\", \"séptuple\", \"óctuple\",\r\n        \"nonuplo\", \"décuplo\", \"undécuplo\", \"duodécuplo\", \"terciodécuplo\"\r\n    ];\r\n\r\n    static readonly string[] UnitsMap =\r\n    [\r\n        \"cero\", \"uno\", \"dos\", \"tres\", \"cuatro\", \"cinco\", \"seis\", \"siete\", \"ocho\", \"nueve\", \"diez\", \"once\", \"doce\",\r\n        \"trece\", \"catorce\", \"quince\", \"dieciséis\", \"diecisiete\", \"dieciocho\", \"diecinueve\", \"veinte\", \"veintiuno\",\r\n        \"veintidós\", \"veintitrés\", \"veinticuatro\", \"veinticinco\", \"veintiséis\", \"veintisiete\", \"veintiocho\", \"veintinueve\"\r\n    ];\r\n\r\n    public override string Convert(long input, GrammaticalGender gender, bool addAnd = true) =>\r\n        Convert(input, WordForm.Normal, gender, addAnd);\r\n\r\n    public override string Convert(long number, WordForm wordForm, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        List<string> wordBuilder = [];\r\n\r\n        if (number == 0)\r\n        {\r\n            return \"cero\";\r\n        }\r\n\r\n        if (number == long.MinValue)\r\n        {\r\n            return\r\n                \"menos nueve trillones doscientos veintitrés mil trescientos setenta y dos billones treinta y seis mil \" +\r\n                \"ochocientos cincuenta y cuatro millones setecientos setenta y cinco mil ochocientos ocho\";\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"menos {Convert(-number)}\";\r\n        }\r\n\r\n        wordBuilder.Add(ConvertGreaterThanMillion(number, out var remainder));\r\n        wordBuilder.Add(ConvertThousands(remainder, out remainder, gender));\r\n        wordBuilder.Add(ConvertHundreds(remainder, out remainder, gender));\r\n        wordBuilder.Add(ConvertUnits(remainder, gender, wordForm));\r\n\r\n        return BuildWord(wordBuilder);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender) =>\r\n        ConvertToOrdinal(number, gender, WordForm.Normal);\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender, WordForm wordForm)\r\n    {\r\n        List<string> wordBuilder = [];\r\n\r\n        if (number is 0 or int.MinValue)\r\n        {\r\n            return \"cero\";\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return ConvertToOrdinal(Math.Abs(number), gender);\r\n        }\r\n\r\n        if (IsRoundBillion(number))\r\n        {\r\n            return ConvertRoundBillionths(number, gender);\r\n        }\r\n\r\n        if (IsRoundMillion(number))\r\n        {\r\n            return ConvertToOrdinal(number / 1000, gender)\r\n                .Replace(\"milésim\", \"millonésim\");\r\n        }\r\n\r\n        wordBuilder.Add(ConvertTensAndHunderdsOfThousandths(number, out var remainder, gender));\r\n        wordBuilder.Add(ConvertThousandths(remainder, out remainder, gender));\r\n        wordBuilder.Add(ConvertHundredths(remainder, out remainder, gender));\r\n        wordBuilder.Add(ConvertTenths(remainder, out remainder, gender));\r\n        wordBuilder.Add(ConvertOrdinalUnits(remainder, gender, wordForm));\r\n\r\n        return BuildWord(wordBuilder);\r\n    }\r\n\r\n    public override string ConvertToTuple(int number)\r\n    {\r\n        number = Math.Abs(number);\r\n\r\n        if (number < TupleMap.Length)\r\n        {\r\n            return TupleMap[number];\r\n        }\r\n\r\n        return Convert(number) + \" veces\";\r\n    }\r\n\r\n    static string BuildWord(List<string> wordParts)\r\n    {\r\n        wordParts.RemoveAll(string.IsNullOrEmpty);\r\n        return string.Join(\" \", wordParts);\r\n    }\r\n\r\n    static string ConvertHundreds(in long inputNumber, out long remainder, GrammaticalGender gender)\r\n    {\r\n        var wordPart = string.Empty;\r\n        remainder = inputNumber;\r\n\r\n        if (inputNumber / 100 > 0)\r\n        {\r\n            wordPart = inputNumber == 100 ? \"cien\" : GetGenderedHundredsMap(gender)[(int)(inputNumber / 100)];\r\n\r\n            remainder = inputNumber % 100;\r\n        }\r\n\r\n        return wordPart;\r\n    }\r\n\r\n    static string ConvertHundredths(in int number, out int remainder, GrammaticalGender gender) =>\r\n        ConvertMappedOrdinalNumber(number, 100, HundredthsRootMap, out remainder, gender);\r\n\r\n    static string ConvertMappedOrdinalNumber(\r\n        in int number,\r\n        in int divisor,\r\n        string[] map,\r\n        out int remainder,\r\n        GrammaticalGender gender)\r\n    {\r\n        var wordPart = string.Empty;\r\n        remainder = number;\r\n\r\n        if (number / divisor > 0)\r\n        {\r\n            var genderedEnding = gender == GrammaticalGender.Feminine ? \"a\" : \"o\";\r\n            wordPart = map[number / divisor] + genderedEnding;\r\n            remainder = number % divisor;\r\n        }\r\n\r\n        return wordPart;\r\n    }\r\n\r\n    static string ConvertOrdinalUnits(in int number, GrammaticalGender gender, WordForm wordForm)\r\n    {\r\n        if (number is <= 0 or >= 10)\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        switch (gender)\r\n        {\r\n            case GrammaticalGender.Masculine:\r\n            case GrammaticalGender.Neuter:\r\n                if (HasOrdinalAbbreviation(number, wordForm))\r\n                {\r\n                    return OrdinalsRootMap[number];\r\n                }\r\n\r\n                return OrdinalsRootMap[number] + 'o';\r\n            case GrammaticalGender.Feminine:\r\n                return OrdinalsRootMap[number] + \"a\";\r\n            default:\r\n                throw new ArgumentOutOfRangeException(nameof(gender), gender, null);\r\n        }\r\n    }\r\n\r\n    static string ConvertTenths(in int number, out int remainder, GrammaticalGender gender) =>\r\n        ConvertMappedOrdinalNumber(number, 10, TenthsRootMap, out remainder, gender);\r\n\r\n    static string ConvertThousandths(in int number, out int remainder, GrammaticalGender gender) =>\r\n        ConvertMappedOrdinalNumber(number, 1000, ThousandthsRootMap, out remainder, gender);\r\n\r\n    static string ConvertUnits(long inputNumber, GrammaticalGender gender, WordForm wordForm = WordForm.Normal)\r\n    {\r\n        if (inputNumber <= 0)\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        UnitsMap[1] = GetGenderedOne(gender, wordForm);\r\n        UnitsMap[21] = GetGenderedTwentyOne(gender, wordForm);\r\n\r\n        if (inputNumber < 30)\r\n        {\r\n            return UnitsMap[inputNumber];\r\n        }\r\n\r\n        var wordPart = TensMap[inputNumber / 10];\r\n        if (inputNumber % 10 <= 0)\r\n        {\r\n            return wordPart;\r\n        }\r\n\r\n        return wordPart + $\" y {UnitsMap[inputNumber % 10]}\";\r\n    }\r\n\r\n    static List<string> GetGenderedHundredsMap(GrammaticalGender gender)\r\n    {\r\n        var genderedEnding = gender == GrammaticalGender.Feminine ? \"as\" : \"os\";\r\n        var map = new List<string>();\r\n        map.AddRange(HundredsRootMap.Take(2));\r\n\r\n        for (var i = 2; i < HundredsRootMap.Length; i++)\r\n        {\r\n            map.Add(HundredsRootMap[i] + genderedEnding);\r\n        }\r\n\r\n        return map;\r\n    }\r\n\r\n    static string GetGenderedOne(GrammaticalGender gender, WordForm wordForm = WordForm.Normal)\r\n    {\r\n        return gender switch\r\n        {\r\n            GrammaticalGender.Masculine or GrammaticalGender.Neuter => wordForm == WordForm.Abbreviation ? \"un\" : \"uno\",\r\n            GrammaticalGender.Feminine => \"una\",\r\n            _ => throw new ArgumentOutOfRangeException(nameof(gender), gender, null),\r\n        };\r\n    }\r\n\r\n    static string GetGenderedTwentyOne(GrammaticalGender gender, WordForm wordForm = WordForm.Normal)\r\n    {\r\n        return gender switch\r\n        {\r\n            GrammaticalGender.Masculine or GrammaticalGender.Neuter => wordForm == WordForm.Abbreviation ? \"veintiún\" : \"veintiuno\",\r\n            GrammaticalGender.Feminine => \"veintiuna\",\r\n            _ => throw new ArgumentOutOfRangeException(nameof(gender), gender, null),\r\n        };\r\n    }\r\n\r\n    static bool HasOrdinalAbbreviation(int number, WordForm wordForm) =>\r\n        number is 1 or 3 && wordForm == WordForm.Abbreviation;\r\n\r\n    static bool IsRoundBillion(int number) =>\r\n        number >= 1000_000_000 && number % 1_000_000 == 0;\r\n\r\n    static bool IsRoundMillion(int number) =>\r\n        number >= 1000000 && number % 1000000 == 0;\r\n\r\n    static string PluralizeGreaterThanMillion(string singularWord) =>\r\n        singularWord.TrimEnd('ó', 'n') + \"ones\";\r\n\r\n    static readonly KeyValuePair<string, long>[] NumbersAndWordsDict =\r\n    [\r\n        new(\"trillón\", 1_000_000_000_000_000_000),\r\n        new(\"billón\", 1_000_000_000_000),\r\n        new(\"millón\", 1_000_000),\r\n    ];\r\n\r\n    string ConvertGreaterThanMillion(in long inputNumber, out long remainder)\r\n    {\r\n        List<string> wordBuilder = [];\r\n\r\n        remainder = inputNumber;\r\n        foreach (var numberAndWord in NumbersAndWordsDict)\r\n        {\r\n            if (remainder / numberAndWord.Value > 0)\r\n            {\r\n                if (remainder / numberAndWord.Value == 1)\r\n                {\r\n                    wordBuilder.Add($\"un {numberAndWord.Key}\");\r\n                }\r\n                else\r\n                {\r\n                    wordBuilder.Add(remainder / numberAndWord.Value % 10 == 1 ? $\"{Convert(remainder / numberAndWord.Value, WordForm.Abbreviation, GrammaticalGender.Masculine)} {PluralizeGreaterThanMillion(numberAndWord.Key)}\" : $\"{Convert(remainder / numberAndWord.Value)} {PluralizeGreaterThanMillion(numberAndWord.Key)}\");\r\n                }\r\n\r\n                remainder %= numberAndWord.Value;\r\n            }\r\n        }\r\n\r\n        return BuildWord(wordBuilder);\r\n    }\r\n\r\n    string ConvertRoundBillionths(int number, GrammaticalGender gender)\r\n    {\r\n        var cardinalPart = Convert(number / 1_000_000, WordForm.Abbreviation, gender);\r\n        var sep = number == 1_000_000_000 ? \"\" : \" \";\r\n        var ordinalPart = ConvertToOrdinal(1_000_000, gender);\r\n        return cardinalPart + sep + ordinalPart;\r\n    }\r\n\r\n    string ConvertTensAndHunderdsOfThousandths(in int number, out int remainder, GrammaticalGender gender)\r\n    {\r\n        var wordPart = string.Empty;\r\n        remainder = number;\r\n\r\n        if (number / 10000 > 0)\r\n        {\r\n            wordPart = Convert(number / 1000 * 1000, gender);\r\n\r\n            if (number < 30000 || IsRoundNumber(number))\r\n            {\r\n                if (number == 21000)\r\n                {\r\n                    wordPart = wordPart\r\n                        .Replace(\"a\", \"\")\r\n                        .Replace(\"ú\", \"u\");\r\n                }\r\n\r\n                wordPart = wordPart.Remove(wordPart.LastIndexOf(' '), 1);\r\n            }\r\n\r\n            wordPart += \"ésim\" + (gender == GrammaticalGender.Masculine ? \"o\" : \"a\");\r\n\r\n            remainder = number % 1000;\r\n        }\r\n\r\n        return wordPart;\r\n\r\n        static bool IsRoundNumber(int number) =>\r\n            (number % 10000 == 0 && number < 100000)\r\n            || (number % 100000 == 0 && number < 1000000)\r\n            || (number % 1000000 == 0 && number < 10000000)\r\n            || (number % 10000000 == 0 && number < 100000000)\r\n            || (number % 100000000 == 0 && number < 1000000000)\r\n            || (number % 1000000000 == 0 && number < int.MaxValue);\r\n    }\r\n\r\n    string ConvertThousands(in long inputNumber, out long remainder, GrammaticalGender gender)\r\n    {\r\n        var wordPart = string.Empty;\r\n        remainder = inputNumber;\r\n\r\n        if (inputNumber / 1000 > 0)\r\n        {\r\n            if (inputNumber / 1000 == 1)\r\n            {\r\n                wordPart = \"mil\";\r\n            }\r\n            else\r\n            {\r\n                wordPart = gender == GrammaticalGender.Feminine ? $\"{Convert(inputNumber / 1000, GrammaticalGender.Feminine)} mil\" : $\"{Convert(inputNumber / 1000, WordForm.Abbreviation, gender)} mil\";\r\n            }\r\n\r\n            remainder = inputNumber % 1000;\r\n        }\r\n\r\n        return wordPart;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/SwedishNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass SwedishNumberToWordsConverter : GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"noll\", \"ett\", \"två\", \"tre\", \"fyra\", \"fem\", \"sex\", \"sju\", \"åtta\", \"nio\", \"tio\", \"elva\", \"tolv\", \"tretton\", \"fjorton\", \"femton\", \"sexton\", \"sjutton\", \"arton\", \"nitton\"];\r\n    static readonly string[] TensMap = [\"noll\", \"tio\", \"tjugo\", \"trettio\", \"fyrtio\", \"femtio\", \"sextio\", \"sjuttio\", \"åttio\", \"nittio\", \"hundra\"];\r\n\r\n    class Fact\r\n    {\r\n        public int Value { get; set; }\r\n        public required string Name { get; set; }\r\n        public required string Prefix { get; set; }\r\n        public required string Postfix { get; set; }\r\n        public bool DisplayOneUnit { get; set; }\r\n        public GrammaticalGender Gender { get; set; } = GrammaticalGender.Neuter;\r\n    }\r\n\r\n    static readonly Fact[] Hunderds =\r\n    [\r\n        new()\r\n        {\r\n            Value = 1000000000,\r\n            Name = \"miljard\",\r\n            Prefix = \" \",\r\n            Postfix = \" \",\r\n            DisplayOneUnit = true,\r\n            Gender = GrammaticalGender.Masculine\r\n        },\r\n        new()\r\n        {\r\n            Value = 1000000,\r\n            Name = \"miljon\",\r\n            Prefix = \" \",\r\n            Postfix = \" \",\r\n            DisplayOneUnit = true,\r\n            Gender = GrammaticalGender.Masculine\r\n        },\r\n        new()\r\n        {\r\n            Value = 1000,\r\n            Name = \"tusen\",\r\n            Prefix = \" \",\r\n            Postfix = \" \",\r\n            DisplayOneUnit = true\r\n        },\r\n        new()\r\n        {\r\n            Value = 100,\r\n            Name = \"hundra\",\r\n            Prefix = \"\",\r\n            Postfix = \"\",\r\n            DisplayOneUnit = false\r\n        }\r\n    ];\r\n\r\n    public override string Convert(long input, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (input is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        var number = (int)input;\r\n\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[0];\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"minus {Convert(-number, gender)}\";\r\n        }\r\n\r\n        var word = \"\";\r\n\r\n        foreach (var m in Hunderds)\r\n        {\r\n            var divided = number / m.Value;\r\n\r\n            if (divided <= 0)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            if (divided == 1 && !m.DisplayOneUnit)\r\n            {\r\n                word += m.Name;\r\n            }\r\n            else\r\n            {\r\n                word += Convert(divided, m.Gender) + m.Prefix + m.Name;\r\n            }\r\n\r\n            // pluralise 1M+\r\n            if (divided > 1 && input >= 1_000_000)\r\n            {\r\n                word += \"er\";\r\n            }\r\n\r\n            number %= m.Value;\r\n            if (number > 0)\r\n            {\r\n                word += m.Postfix;\r\n            }\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            if (number < 20)\r\n            {\r\n                if (number == 1 && gender == GrammaticalGender.Masculine)\r\n                {\r\n                    word += \"en\";\r\n                }\r\n                else\r\n                {\r\n                    word += UnitsMap[number];\r\n                }\r\n            }\r\n            else\r\n            {\r\n                var tens = TensMap[number / 10];\r\n                var unit = number % 10;\r\n                if (unit > 0)\r\n                {\r\n                    var units = UnitsMap[unit];\r\n                    word += tens + units;\r\n                }\r\n                else\r\n                {\r\n                    word += tens;\r\n                }\r\n            }\r\n        }\r\n\r\n        return word;\r\n    }\r\n\r\n    public override string Convert(long input) =>\r\n        Convert(input, GrammaticalGender.Neuter);\r\n\r\n    static readonly string[] OrdinalNumbers =\r\n    [\r\n        \"nollte\",\r\n        \"första\",\r\n        \"andra\",\r\n        \"tredje\",\r\n        \"fjärde\",\r\n        \"femte\",\r\n        \"sjätte\",\r\n        \"sjunde\",\r\n        \"åttonde\",\r\n        \"nionde\",\r\n        \"tionde\",\r\n        \"elfte\",\r\n        \"tolfte\",\r\n        \"trettonde\",\r\n        \"fjortonde\",\r\n        \"femtonde\",\r\n        \"sextonde\",\r\n        \"sjuttonde\",\r\n        \"artonde\",\r\n        \"nittonde\",\r\n        \"tjugonde\"\r\n    ];\r\n\r\n    public override string ConvertToOrdinal(int number)\r\n    {\r\n        var word = \"\";\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"minus {ConvertToOrdinal(-number)}\";\r\n        }\r\n\r\n        if (number <= 20)\r\n        {\r\n            return OrdinalNumbers[number];\r\n        }\r\n\r\n        // 21+\r\n        if (number <= 100)\r\n        {\r\n            var tens = TensMap[number / 10];\r\n            var unit = number % 10;\r\n            if (unit > 0)\r\n            {\r\n                word += tens + ConvertToOrdinal(unit);\r\n            }\r\n            else if (number == 100)\r\n            {\r\n                word += tens + \"de\";\r\n            }\r\n            else\r\n            {\r\n                word += tens + \"nde\";\r\n            }\r\n\r\n            return word;\r\n        }\r\n\r\n        // 101+\r\n        foreach (var m in Hunderds)\r\n        {\r\n            var divided = number / m.Value;\r\n\r\n            if (divided <= 0)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            if (divided == 1 && !m.DisplayOneUnit)\r\n            {\r\n                word += m.Name;\r\n            }\r\n            else\r\n            {\r\n                word += Convert(divided, m.Gender) + m.Prefix + m.Name;\r\n            }\r\n\r\n            // suffix -de/-te\r\n            if (number % m.Value == 0)\r\n            {\r\n                word += number switch\r\n                {\r\n                    1_000_000 => \"te\",\r\n                    _ => \"de\"\r\n                };\r\n            }\r\n\r\n            number %= m.Value;\r\n            if (number > 0)\r\n            {\r\n                word += ConvertToOrdinal(number);\r\n            }\r\n        }\r\n\r\n        return word;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/TamilNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass TamilNumberToWordsConverter : GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"சுழியம்\", \"ஒன்று\", \"இரண்டு\", \"மூன்று\", \"நான்கு\", \"ஐந்து\", \"ஆறு\", \"ஏழு\", \"எட்டு\", \"ஒன்பது\", \"பத்து\", \"பதினொன்று\", \"பனிரெண்டு\", \"பதிமூன்று\", \"பதினான்கு\", \"பதினைந்து\", \"பதினாறு\", \"பதினேழு\", \"பதினெட்டு\", \"பத்தொன்பது\"];\r\n    static readonly string[] TensMap = [\"சுழியம்\", \"பத்து\", \"இருப\", \"முப்ப\", \"நாற்ப\", \"ஐம்ப\", \"அறுப\", \"எழுப\", \"எண்ப\", \"தொண்ணூ\"];\r\n    static readonly string[] HundredsMap = [\"நூ\", \"இருநூ\", \"முன்னூ\", \"நானூ\", \"ஐந்நூ\", \"அறுநூ\", \"எழுநூ\", \"எண்ணூ\", \"தொள்ளாயிர\"];\r\n    static readonly string[] ThousandsMap = [\"ஆ\", \"இரண்டா\", \"மூன்றா\", \"நான்கா\", \"ஐந்தா\", \"ஆறா\", \"ஏழா\", \"எட்டா\", \"ஒன்பதா\", \"பத்தா\", \"பதினொன்றா\", \"பனிரெண்டா\", \"பதிமூன்றா\", \"பதினான்கா\", \"பதினைந்தா\", \"பதினாறா\", \"பதினேழா\", \"பதினெட்டா\", \"பத்தொன்பதா\"];\r\n\r\n    static readonly string[] LakhsMap = [\"இலட்ச\"];\r\n\r\n    static readonly FrozenDictionary<long, string> OrdinalExceptions = new Dictionary<long, string>\r\n    {\r\n        {\r\n            1, \"முதலாவது\"\r\n        },\r\n        {\r\n            2, \"இரண்டாவது\"\r\n        },\r\n        {\r\n            3, \"மூன்றாவது\"\r\n        },\r\n        {\r\n            4, \"நான்காவது\"\r\n        },\r\n        {\r\n            5, \"ஐந்தாவது\"\r\n        },\r\n        {\r\n            8, \"எட்டாவது\"\r\n        },\r\n        {\r\n            9, \"ஒன்பதாவது\"\r\n        },\r\n        {\r\n            12, \"பனிரெண்டாவது\"\r\n        },\r\n    }.ToFrozenDictionary();\r\n\r\n    public override string Convert(long number) =>\r\n        ConvertImpl(number, false);\r\n\r\n    public override string ConvertToOrdinal(int number) =>\r\n        ConvertImpl(number, true);\r\n\r\n    string ConvertImpl(long number, bool isOrdinal)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return GetUnitValue(0, isOrdinal);\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"கழித்தல் {Convert(-number)}\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number / 1000000000000000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000000000000000)} quintillion\");\r\n            number %= 1000000000000000000;\r\n        }\r\n\r\n        if (number / 1000000000000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000000000000)} quadrillion\");\r\n            number %= 1000000000000000;\r\n        }\r\n\r\n        //if ((number / 1000000000000) > 0)\r\n        //{\r\n        //    parts.Add(string.Format(\"{0} trillion\", Convert(number / 1000000000000)));\r\n        //    number %= 1000000000000;\r\n        //}\r\n\r\n        //if ((number / 1000000000) > 0)\r\n        //{\r\n        //    parts.Add(string.Format(\"{0} பில்லியன்\", Convert(number / 1000000000)));\r\n        //    number %= 1000000000;\r\n        //}\r\n\r\n        //if ((number / 1000000) > 0)\r\n        //{\r\n        //    parts.Add(string.Format(\"{0} மில்லியன்\", Convert(number / 1000000)));\r\n        //    number %= 1000000;\r\n        //}\r\n\r\n        if (number / 10000000 > 0)\r\n        {\r\n            parts.Add(GetCroresValue(ref number));\r\n        }\r\n\r\n        if (number / 100000 > 0)\r\n        {\r\n            parts.Add(GetLakhsValue(ref number, isOrdinal));\r\n        }\r\n\r\n        if (number / 1000 > 0)\r\n        {\r\n            parts.Add(GetThousandsValue(ref number));\r\n        }\r\n\r\n        if (number / 100 > 0)\r\n        {\r\n            parts.Add(GetHundredsValue(ref number));\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(GetTensValue(number, isOrdinal));\r\n        }\r\n        else if (isOrdinal)\r\n        {\r\n            parts[^1] += \"வது\";\r\n        }\r\n\r\n        var toWords = string.Join(\" \", parts);\r\n\r\n        if (isOrdinal)\r\n        {\r\n            toWords = RemoveOnePrefix(toWords);\r\n        }\r\n\r\n        return toWords;\r\n    }\r\n\r\n    static string GetUnitValue(long number, bool isOrdinal)\r\n    {\r\n        if (isOrdinal)\r\n        {\r\n            if (ExceptionNumbersToWords(number, out var exceptionString))\r\n            {\r\n                return exceptionString;\r\n            }\r\n\r\n            return UnitsMap[number] + \"வது\";\r\n        }\r\n\r\n        return UnitsMap[number];\r\n    }\r\n\r\n    static string GetTensValue(long number, bool isOrdinal, bool isThousand = false)\r\n    {\r\n        var local_word = \"\";\r\n        if (number < 20)\r\n        {\r\n            local_word = GetUnitValue(number, isOrdinal);\r\n        }\r\n        else if (number is >= 20 and <= 99)\r\n        {\r\n            var lastPart = TensMap[number / 10];\r\n            var quot = number / 10;\r\n            if (number % 10 > 0)\r\n            {\r\n                if (quot == 9)\r\n                {\r\n                    lastPart += \"ற்றி \";\r\n                }\r\n                else if (quot is 7 or 8 or 4)\r\n                {\r\n                    lastPart += \"த்தி \";\r\n                }\r\n                else\r\n                {\r\n                    lastPart += \"த்து \";\r\n                }\r\n\r\n                if (!isThousand)\r\n                {\r\n                    lastPart += $\"{GetUnitValue(number % 10, isOrdinal)}\";\r\n                }\r\n            }\r\n            else if (number % 10 == 0)\r\n            {\r\n                if (isThousand)\r\n                {\r\n                    if (quot == 9)\r\n                    {\r\n                        lastPart += \"றா\";\r\n                    }\r\n                    else\r\n                    {\r\n                        lastPart += \"தா\";\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (quot == 9)\r\n                    {\r\n                        lastPart += \"று\";\r\n                    }\r\n                    else\r\n                    {\r\n                        lastPart += \"து\";\r\n                    }\r\n                }\r\n            }\r\n            else if (isOrdinal)\r\n            {\r\n                lastPart = lastPart.TrimEnd('y') + \"ieth\";\r\n            }\r\n\r\n            local_word = lastPart;\r\n        }\r\n\r\n        return local_word;\r\n    }\r\n\r\n    static string GetLakhsValue(ref long number, bool isOrdinal)\r\n    {\r\n        var num_above_10 = number / 100000;\r\n        var local_word = \"\";\r\n        if (num_above_10 >= 20)\r\n        {\r\n            local_word = GetTensValue(num_above_10, false, false);\r\n            local_word += \" \" + LakhsMap[0];\r\n        }\r\n        else if (num_above_10 == 1)\r\n        {\r\n            local_word = \"ஒரு \" + LakhsMap[0];\r\n        }\r\n        else\r\n        {\r\n            local_word += GetTensValue(number / 100000, isOrdinal) + \" \" + LakhsMap[0];\r\n        }\r\n\r\n        if (number % 1000000 == 0 || number % 100000 == 0)\r\n        {\r\n            local_word += \"ம்\";\r\n        }\r\n        else\r\n        {\r\n            local_word += \"த்து\";\r\n        }\r\n\r\n        number %= 100000;\r\n        return local_word;\r\n    }\r\n\r\n    static string GetCroresValue(ref long number)\r\n    {\r\n        var local_word = \"\";\r\n        var num_above_10 = number / 10000000;\r\n        var str_crore = \"கோடி\";\r\n\r\n        if (num_above_10 is > 99999 and <= 9999999)\r\n        {\r\n            local_word = GetLakhsValue(ref num_above_10, false);\r\n            local_word += \" \";\r\n        }\r\n\r\n        if (num_above_10 is > 999 and <= 99999)\r\n        {\r\n            local_word += GetThousandsValue(ref num_above_10);\r\n            local_word += \" \";\r\n        }\r\n\r\n        if (num_above_10 is > 99 and <= 999)\r\n        {\r\n            local_word += GetHundredsValue(ref num_above_10);\r\n            local_word += \" \";\r\n        }\r\n\r\n        if (num_above_10 >= 20)\r\n        {\r\n            local_word += GetTensValue(num_above_10, false, false);\r\n            local_word += \" \";\r\n        }\r\n        else if (num_above_10 == 1)\r\n        {\r\n            local_word = \"ஒரு \";\r\n        }\r\n        else if (num_above_10 > 0)\r\n        {\r\n            local_word += GetTensValue(num_above_10, false) + \" \";\r\n        }\r\n\r\n        local_word = local_word.TrimEnd() + \" \" + str_crore;\r\n        if (number % 10000000 == 0 || number % 100000000 == 0)\r\n        {\r\n            local_word += \"\";\r\n        }\r\n        else\r\n        {\r\n            local_word += \"யே\";\r\n        }\r\n\r\n        number %= 10000000;\r\n        return local_word;\r\n    }\r\n\r\n    static string GetThousandsValue(ref long number)\r\n    {\r\n        var num_above_10 = number / 1000;\r\n        var local_word = \"\";\r\n        if (num_above_10 >= 20)\r\n        {\r\n            local_word = GetTensValue(num_above_10, false, true);\r\n\r\n            if (num_above_10 % 10 == 1)\r\n            {\r\n                local_word += \"ஓரா\";\r\n            }\r\n            else if (num_above_10 % 10 > 1)\r\n            {\r\n                local_word += ThousandsMap[num_above_10 % 10 - 1];\r\n            }\r\n        }\r\n        else\r\n        {\r\n            local_word += ThousandsMap[number / 1000 - 1];\r\n        }\r\n\r\n        number %= 1000;\r\n\r\n        if (number > 0)\r\n        {\r\n            local_word += \"யிரத்து\";\r\n        }\r\n        else\r\n        {\r\n            local_word += \"யிரம்\";\r\n        }\r\n\r\n        return local_word;\r\n    }\r\n\r\n    static string GetHundredsValue(ref long number)\r\n    {\r\n        var local_word = HundredsMap[number / 100 - 1];\r\n        if (number / 100 == 9)\r\n        {\r\n            if (number % 100 == 0)\r\n            {\r\n                local_word += \"ம்\";\r\n            }\r\n            else\r\n            {\r\n                local_word += \"த்து\";\r\n            }\r\n        }\r\n        else if (number % 100 >= 1)\r\n        {\r\n            local_word += \"ற்று\";\r\n        }\r\n        else\r\n        {\r\n            local_word += \"று\";\r\n        }\r\n\r\n        number %= 100;\r\n\r\n        return local_word;\r\n    }\r\n\r\n    static string RemoveOnePrefix(string toWords)\r\n    {\r\n        // one hundred => hundredth\r\n        if (toWords.StartsWith(\"one\", StringComparison.Ordinal))\r\n        {\r\n            toWords = toWords[4..];\r\n        }\r\n\r\n        return toWords;\r\n    }\r\n\r\n    static bool ExceptionNumbersToWords(long number, [NotNullWhen(true)] out string? words) =>\r\n        OrdinalExceptions.TryGetValue(number, out words);\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/ThaiNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass ThaiNumberToWordsConverter : GenderlessNumberToWordsConverter\r\n{\r\n    public override string Convert(long numbermoney)\r\n    {\r\n        var Textreturn = \"\";\r\n        if (numbermoney == 0)\r\n        {\r\n            return \"ศูนย์\";\r\n        }\r\n\r\n        if (numbermoney < 0)\r\n        {\r\n            Textreturn = \"ลบ\";\r\n            numbermoney = -numbermoney;\r\n        }\r\n\r\n        if (numbermoney / 1000000 > 0)\r\n        {\r\n            Textreturn += Convert(numbermoney / 1000000) + \"ล้าน\";\r\n            numbermoney %= 1000000;\r\n        }\r\n\r\n        if (numbermoney / 100000 > 0)\r\n        {\r\n            Textreturn += Convert(numbermoney / 100000) + \"แสน\";\r\n            numbermoney %= 100000;\r\n        }\r\n\r\n        if (numbermoney / 10000 > 0)\r\n        {\r\n            Textreturn += Convert(numbermoney / 10000) + \"หมื่น\";\r\n            numbermoney %= 10000;\r\n        }\r\n\r\n        if (numbermoney / 1000 > 0)\r\n        {\r\n            Textreturn += Convert(numbermoney / 1000) + \"พัน\";\r\n            numbermoney %= 1000;\r\n        }\r\n\r\n        if (numbermoney / 100 > 0)\r\n        {\r\n            Textreturn += Convert(numbermoney / 100) + \"ร้อย\";\r\n            numbermoney %= 100;\r\n        }\r\n\r\n        if (numbermoney > 0)\r\n        {\r\n            if (Textreturn != \"\")\r\n            {\r\n                Textreturn += \"\";\r\n            }\r\n\r\n            var unitsMap = new[]\r\n            {\r\n                \"ศูนย์\",\r\n                \"หนึ่ง\",\r\n                \"สอง\",\r\n                \"สาม\",\r\n                \"สี่\",\r\n                \"ห้า\",\r\n                \"หก\",\r\n                \"เจ็ด\",\r\n                \"เเปด\",\r\n                \"เก้า\",\r\n                \"สิบ\",\r\n                \"สิบเอ็ด\",\r\n                \"สิบสอง\",\r\n                \"สิบสาม\",\r\n                \"สิบสี่\",\r\n                \"สิบห้า\",\r\n                \"สิบหก\",\r\n                \"สิบเจ็ด\",\r\n                \"สิบเเปด\",\r\n                \"สิบเก้า\"\r\n            };\r\n            var tensMap = new[]\r\n            {\r\n                \"ศูนย์\",\r\n                \"สิบ\",\r\n                \"ยี่สิบ\",\r\n                \"สามสิบ\",\r\n                \"สี่สิบ\",\r\n                \"ห้าสิบ\",\r\n                \"หกสิบ\",\r\n                \"เจ็ดสิบ\",\r\n                \"แปดสิบ\",\r\n                \"เก้าสิบ\"\r\n            };\r\n\r\n            if (numbermoney < 20)\r\n            {\r\n                Textreturn += unitsMap[numbermoney];\r\n            }\r\n            else\r\n            {\r\n                Textreturn += tensMap[numbermoney / 10];\r\n                if (numbermoney % 10 > 0)\r\n                {\r\n                    Textreturn += \"\" + unitsMap[numbermoney % 10];\r\n                }\r\n            }\r\n        }\r\n\r\n        return Textreturn;\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number) =>\r\n        Convert(number);\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/TurkishNumberToWordConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass TurkishNumberToWordConverter :\r\n    GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"sıfır\", \"bir\", \"iki\", \"üç\", \"dört\", \"beş\", \"altı\", \"yedi\", \"sekiz\", \"dokuz\"];\r\n    static readonly string[] TensMap = [\"sıfır\", \"on\", \"yirmi\", \"otuz\", \"kırk\", \"elli\", \"altmış\", \"yetmiş\", \"seksen\", \"doksan\"];\r\n\r\n    static readonly FrozenDictionary<char, string> OrdinalSuffix = new Dictionary<char, string>\r\n    {\r\n        {\r\n            'ı', \"ıncı\"\r\n        },\r\n        {\r\n            'i', \"inci\"\r\n        },\r\n        {\r\n            'u', \"uncu\"\r\n        },\r\n        {\r\n            'ü', \"üncü\"\r\n        },\r\n        {\r\n            'o', \"uncu\"\r\n        },\r\n        {\r\n            'ö', \"üncü\"\r\n        },\r\n        {\r\n            'e', \"inci\"\r\n        },\r\n        {\r\n            'a', \"ıncı\"\r\n        },\r\n    }.ToFrozenDictionary();\r\n\r\n    static readonly FrozenDictionary<char, string> TupleSuffix = new Dictionary<char, string>\r\n    {\r\n        {\r\n            'ı', \"lı\"\r\n        },\r\n        {\r\n            'i', \"li\"\r\n        },\r\n        {\r\n            'u', \"lu\"\r\n        },\r\n        {\r\n            'ü', \"lü\"\r\n        },\r\n        {\r\n            'o', \"lu\"\r\n        },\r\n        {\r\n            'ö', \"lü\"\r\n        },\r\n        {\r\n            'e', \"li\"\r\n        },\r\n        {\r\n            'a', \"lı\"\r\n        },\r\n    }.ToFrozenDictionary();\r\n\r\n    public override string Convert(long input)\r\n    {\r\n        var number = input;\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[0];\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return $\"eksi {Convert(-number)}\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number / 1000000000000000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000000000000000)} kentilyon\");\r\n            number %= 1000000000000000000;\r\n        }\r\n\r\n        if (number / 1000000000000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000000000000)} katrilyon\");\r\n            number %= 1000000000000000;\r\n        }\r\n\r\n        if (number / 1000000000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000000000)} trilyon\");\r\n            number %= 1000000000000;\r\n        }\r\n\r\n        if (number / 1000000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000000)} milyar\");\r\n            number %= 1000000000;\r\n        }\r\n\r\n        if (number / 1000000 > 0)\r\n        {\r\n            parts.Add($\"{Convert(number / 1000000)} milyon\");\r\n            number %= 1000000;\r\n        }\r\n\r\n        var thousand = number / 1000;\r\n        if (thousand > 0)\r\n        {\r\n            parts.Add($\"{(thousand > 1 ? Convert(thousand) : \"\")} bin\".Trim());\r\n            number %= 1000;\r\n        }\r\n\r\n        var hundred = number / 100;\r\n        if (hundred > 0)\r\n        {\r\n            parts.Add($\"{(hundred > 1 ? Convert(hundred) : \"\")} yüz\".Trim());\r\n            number %= 100;\r\n        }\r\n\r\n        if (number / 10 > 0)\r\n        {\r\n            parts.Add(TensMap[number / 10]);\r\n            number %= 10;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(UnitsMap[number]);\r\n        }\r\n\r\n        var toWords = string.Join(\" \", parts);\r\n\r\n        return toWords;\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number)\r\n    {\r\n        var word = Convert(number);\r\n        var wordSuffix = string.Empty;\r\n        var suffixFoundOnLastVowel = false;\r\n\r\n        for (var i = word.Length - 1; i >= 0; i--)\r\n        {\r\n            if (OrdinalSuffix.TryGetValue(word[i], out wordSuffix))\r\n            {\r\n                suffixFoundOnLastVowel = i == word.Length - 1;\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (word[^1] == 't')\r\n        {\r\n            word = StringHumanizeExtensions.Concat(word.AsSpan(0, word.Length - 1), 'd');\r\n        }\r\n\r\n        if (suffixFoundOnLastVowel)\r\n        {\r\n            word = word[..^1];\r\n        }\r\n\r\n        return $\"{word}{wordSuffix}\";\r\n    }\r\n\r\n    public override string ConvertToTuple(int number)\r\n    {\r\n        switch (number)\r\n        {\r\n            case 1:\r\n                return \"tek\";\r\n            case 2:\r\n                return \"çift\";\r\n            default:\r\n                var word = Convert(number);\r\n                var wordSuffix = string.Empty;\r\n\r\n                for (var i = word.Length - 1; i >= 0; i--)\r\n                {\r\n                    if (TupleSuffix.TryGetValue(word[i], out wordSuffix))\r\n                    {\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                return $\"{word}{wordSuffix}\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/UkrainianNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass UkrainianNumberToWordsConverter : GenderedNumberToWordsConverter\r\n{\r\n    static readonly string[] HundredsMap = [\"нуль\", \"сто\", \"двісті\", \"триста\", \"чотириста\", \"п'ятсот\", \"шістсот\", \"сімсот\", \"вісімсот\", \"дев'ятсот\"];\r\n    static readonly string[] TensMap = [\"нуль\", \"десять\", \"двадцять\", \"тридцять\", \"сорок\", \"п'ятдесят\", \"шістдесят\", \"сімдесят\", \"вісімдесят\", \"дев'яносто\"];\r\n    static readonly string[] UnitsMap = [\"нуль\", \"один\", \"два\", \"три\", \"чотири\", \"п'ять\", \"шість\", \"сім\", \"вісім\", \"дев'ять\", \"десять\", \"одинадцять\", \"дванадцять\", \"тринадцять\", \"чотирнадцять\", \"п'ятнадцять\", \"шістнадцять\", \"сімнадцять\", \"вісімнадцять\", \"дев'ятнадцять\"];\r\n    static readonly string[] UnitsOrdinalPrefixes = [string.Empty, string.Empty, \"двох\", \"трьох\", \"чотирьох\", \"п'яти\", \"шести\", \"семи\", \"восьми\", \"дев'яти\", \"десяти\", \"одинадцяти\", \"дванадцяти\", \"тринадцяти\", \"чотирнадцяти\", \"п'ятнадцяти\", \"шістнадцяти\", \"сімнадцяти\", \"вісімнадцяти\", \"дев'ятнадцяти\", \"двадцяти\"];\r\n    static readonly string[] TensOrdinalPrefixes = [string.Empty, \"десяти\", \"двадцяти\", \"тридцяти\", \"сорока\", \"п'ятдесяти\", \"шістдесяти\", \"сімдесяти\", \"вісімдесяти\", \"дев'яносто\"];\r\n    static readonly string[] TensOrdinal = [string.Empty, \"десят\", \"двадцят\", \"тридцят\", \"сороков\", \"п'ятдесят\", \"шістдесят\", \"сімдесят\", \"вісімдесят\", \"дев'яност\"];\r\n    static readonly string[] UnitsOrdinal = [\"нульов\", \"перш\", \"друг\", \"трет\", \"четверт\", \"п'ят\", \"шост\", \"сьом\", \"восьм\", \"дев'ят\", \"десят\", \"одинадцят\", \"дванадцят\", \"тринадцят\", \"чотирнадцят\", \"п'ятнадцят\", \"шістнадцят\", \"сімнадцят\", \"вісімнадцят\", \"дев'ятнадцят\"];\r\n\r\n    public override string Convert(long input, GrammaticalGender gender, bool addAnd = true)\r\n    {\r\n        if (input == 0)\r\n        {\r\n            return \"нуль\";\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (input < 0)\r\n        {\r\n            parts.Add(\"мінус\");\r\n        }\r\n\r\n        CollectParts(parts, ref input, 1000000000000000000, GrammaticalGender.Masculine, \"квінтильйон\", \"квінтильйона\", \"квінтильйонів\");\r\n        CollectParts(parts, ref input, 1000000000000000, GrammaticalGender.Masculine, \"квадрильйон\", \"квадрильйона\", \"квадрильйонів\");\r\n        CollectParts(parts, ref input, 1000000000000, GrammaticalGender.Masculine, \"трильйон\", \"трильйона\", \"трильйонів\");\r\n        CollectParts(parts, ref input, 1000000000, GrammaticalGender.Masculine, \"мільярд\", \"мільярда\", \"мільярдів\");\r\n        CollectParts(parts, ref input, 1000000, GrammaticalGender.Masculine, \"мільйон\", \"мільйона\", \"мільйонів\");\r\n        CollectParts(parts, ref input, 1000, GrammaticalGender.Feminine, \"тисяча\", \"тисячі\", \"тисяч\");\r\n\r\n        if (input != 0)\r\n        {\r\n            CollectPartsUnderOneThousand(parts, Math.Abs(input), gender);\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number, GrammaticalGender gender)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return \"нульов\" + GetEndingForGender(gender, number);\r\n        }\r\n\r\n        var parts = new List<string>();\r\n\r\n        if (number < 0)\r\n        {\r\n            parts.Add(\"мінус\");\r\n            number = -number;\r\n        }\r\n\r\n        CollectOrdinalParts(parts, ref number, 1000000000, GrammaticalGender.Masculine, \"мільярдн\" + GetEndingForGender(gender, number), \"мільярд\", \"мільярда\", \"мільярдів\");\r\n        CollectOrdinalParts(parts, ref number, 1000000, GrammaticalGender.Masculine, \"мільйонн\" + GetEndingForGender(gender, number), \"мільйон\", \"мільйона\", \"мільйонів\");\r\n        CollectOrdinalParts(parts, ref number, 1000, GrammaticalGender.Feminine, \"тисячн\" + GetEndingForGender(gender, number), \"тисяча\", \"тисячі\", \"тисяч\");\r\n\r\n        if (number >= 100)\r\n        {\r\n            var ending = GetEndingForGender(gender, number);\r\n            var hundreds = number / 100;\r\n            number %= 100;\r\n            if (number == 0)\r\n            {\r\n                parts.Add(UnitsOrdinalPrefixes[hundreds] + \"сот\" + ending);\r\n            }\r\n            else\r\n            {\r\n                parts.Add(HundredsMap[hundreds]);\r\n            }\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            var ending = GetEndingForGender(gender, number);\r\n            var tens = number / 10;\r\n            number %= 10;\r\n            if (number == 0)\r\n            {\r\n                parts.Add(TensOrdinal[tens] + ending);\r\n            }\r\n            else\r\n            {\r\n                parts.Add(TensMap[tens]);\r\n            }\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(UnitsOrdinal[number] + GetEndingForGender(gender, number));\r\n        }\r\n\r\n        return string.Join(\" \", parts);\r\n    }\r\n\r\n    static void CollectPartsUnderOneThousand(List<string> parts, long number, GrammaticalGender gender)\r\n    {\r\n        if (number >= 100)\r\n        {\r\n            var hundreds = number / 100;\r\n            number %= 100;\r\n            parts.Add(HundredsMap[hundreds]);\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            var tens = number / 10;\r\n            parts.Add(TensMap[tens]);\r\n            number %= 10;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            if (number == 1 && gender == GrammaticalGender.Feminine)\r\n            {\r\n                parts.Add(\"одна\");\r\n            }\r\n            else if (number == 1 && gender == GrammaticalGender.Neuter)\r\n            {\r\n                parts.Add(\"одне\");\r\n            }\r\n            else if (number == 2 && gender == GrammaticalGender.Feminine)\r\n            {\r\n                parts.Add(\"дві\");\r\n            }\r\n            else if (number < 20)\r\n            {\r\n                parts.Add(UnitsMap[number]);\r\n            }\r\n        }\r\n    }\r\n\r\n    static string GetPrefix(int number)\r\n    {\r\n        var parts = new List<string>();\r\n\r\n        if (number >= 100)\r\n        {\r\n            var hundreds = number / 100;\r\n            number %= 100;\r\n            if (hundreds != 1)\r\n            {\r\n                parts.Add(UnitsOrdinalPrefixes[hundreds] + \"сот\");\r\n            }\r\n            else\r\n            {\r\n                parts.Add(\"сто\");\r\n            }\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            var tens = number / 10;\r\n            number %= 10;\r\n            parts.Add(TensOrdinalPrefixes[tens]);\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            parts.Add(number == 1 ? \"одно\" : UnitsOrdinalPrefixes[number]);\r\n        }\r\n\r\n        return string.Concat(parts);\r\n    }\r\n\r\n    static void CollectParts(List<string> parts, ref long number, long divisor, GrammaticalGender gender, params string[] forms)\r\n    {\r\n        var result = Math.Abs(number / divisor);\r\n        if (result == 0)\r\n        {\r\n            return;\r\n        }\r\n\r\n        CollectPartsUnderOneThousand(parts, result, gender);\r\n        parts.Add(ChooseOneForGrammaticalNumber(result, forms));\r\n        number = Math.Abs(number % divisor);\r\n    }\r\n\r\n    static void CollectOrdinalParts(List<string> parts, ref int number, int divisor, GrammaticalGender gender, string prefixedForm, params string[] forms)\r\n    {\r\n        if (number < divisor)\r\n        {\r\n            return;\r\n        }\r\n\r\n        var result = number / divisor;\r\n        number %= divisor;\r\n        if (number == 0)\r\n        {\r\n            if (result == 1)\r\n            {\r\n                parts.Add(prefixedForm);\r\n            }\r\n            else\r\n            {\r\n                parts.Add(GetPrefix(result) + prefixedForm);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            CollectPartsUnderOneThousand(parts, result, gender);\r\n            parts.Add(ChooseOneForGrammaticalNumber(result, forms));\r\n        }\r\n    }\r\n\r\n    static int GetIndex(RussianGrammaticalNumber number)\r\n    {\r\n        if (number == RussianGrammaticalNumber.Singular)\r\n        {\r\n            return 0;\r\n        }\r\n\r\n        if (number == RussianGrammaticalNumber.Paucal)\r\n        {\r\n            return 1;\r\n        }\r\n\r\n        return 2;\r\n    }\r\n\r\n    static string ChooseOneForGrammaticalNumber(long number, string[] forms) =>\r\n        forms[GetIndex(RussianGrammaticalNumberDetector.Detect(number))];\r\n\r\n    static string GetEndingForGender(GrammaticalGender gender, int number)\r\n    {\r\n        switch (gender)\r\n        {\r\n            case GrammaticalGender.Masculine:\r\n                if (number == 3)\r\n                {\r\n                    return \"ій\";\r\n                }\r\n\r\n                return \"ий\";\r\n            case GrammaticalGender.Feminine:\r\n                if (number == 3)\r\n                {\r\n                    return \"я\";\r\n                }\r\n\r\n                return \"а\";\r\n            case GrammaticalGender.Neuter:\r\n                if (number == 3)\r\n                {\r\n                    return \"є\";\r\n                }\r\n\r\n                return \"е\";\r\n            default:\r\n                throw new ArgumentOutOfRangeException(nameof(gender));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/UzbekCyrlNumberToWordConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass UzbekCyrlNumberToWordConverter : GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"нол\", \"бир\", \"икки\", \"уч\", \"тўрт\", \"беш\", \"олти\", \"етти\", \"саккиз\", \"тўққиз\"];\r\n    static readonly string[] TensMap = [\"нол\", \"ўн\", \"йигирма\", \"ўттиз\", \"қирқ\", \"эллик\", \"олтмиш\", \"етмиш\", \"саксон\", \"тўқсон\"];\r\n\r\n    static readonly string[] OrdinalSuffixes = [\"инчи\", \"нчи\"];\r\n\r\n    public override string Convert(long input)\r\n    {\r\n        if (input is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        var number = (int)input;\r\n        if (number < 0)\r\n        {\r\n            return $\"минус {Convert(-number, true)}\";\r\n        }\r\n\r\n        return Convert(number, true);\r\n    }\r\n\r\n    static string Convert(int number, bool checkForHundredRule)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[0];\r\n        }\r\n\r\n        if (checkForHundredRule && number == 100)\r\n        {\r\n            return \"юз\";\r\n        }\r\n\r\n        var sb = new StringBuilder();\r\n\r\n        if (number / 1000000000 > 0)\r\n        {\r\n            sb.AppendFormat(\"{0} миллиард \", Convert(number / 1000000000, false));\r\n            number %= 1000000000;\r\n        }\r\n\r\n        if (number / 1000000 > 0)\r\n        {\r\n            sb.AppendFormat(\"{0} миллион \", Convert(number / 1000000, true));\r\n            number %= 1000000;\r\n        }\r\n\r\n        var thousand = number / 1000;\r\n        if (thousand > 0)\r\n        {\r\n            sb.AppendFormat(\"{0} минг \", Convert(thousand, true));\r\n            number %= 1000;\r\n        }\r\n\r\n        var hundred = number / 100;\r\n        if (hundred > 0)\r\n        {\r\n            sb.AppendFormat(\"{0} юз \", Convert(hundred, false));\r\n            number %= 100;\r\n        }\r\n\r\n        if (number / 10 > 0)\r\n        {\r\n            sb.AppendFormat(\"{0} \", TensMap[number / 10]);\r\n            number %= 10;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            sb.AppendFormat(\"{0} \", UnitsMap[number]);\r\n        }\r\n\r\n        return sb\r\n            .ToString()\r\n            .Trim();\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number)\r\n    {\r\n        var word = Convert(number);\r\n        var i = 0;\r\n        if (string.IsNullOrEmpty(word))\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        var lastChar = word[^1];\r\n        if (lastChar is 'и' or 'а')\r\n        {\r\n            i = 1;\r\n        }\r\n\r\n        return $\"{word}{OrdinalSuffixes[i]}\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/UzbekLatnNumberToWordConverter.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass UzbekLatnNumberToWordConverter : GenderlessNumberToWordsConverter\r\n{\r\n    static readonly string[] UnitsMap = [\"nol\", \"bir\", \"ikki\", \"uch\", \"to`rt\", \"besh\", \"olti\", \"yetti\", \"sakkiz\", \"to`qqiz\"];\r\n    static readonly string[] TensMap = [\"nol\", \"o`n\", \"yigirma\", \"o`ttiz\", \"qirq\", \"ellik\", \"oltmish\", \"yetmish\", \"sakson\", \"to`qson\"];\r\n\r\n    static readonly string[] OrdinalSuffixes = [\"inchi\", \"nchi\"];\r\n\r\n    public override string Convert(long input)\r\n    {\r\n        if (input is > int.MaxValue or < int.MinValue)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        var number = (int)input;\r\n        if (number < 0)\r\n        {\r\n            return $\"minus {Convert(-number, true)}\";\r\n        }\r\n\r\n        return Convert(number, true);\r\n    }\r\n\r\n    static string Convert(int number, bool checkForHundredRule)\r\n    {\r\n        if (number == 0)\r\n        {\r\n            return UnitsMap[0];\r\n        }\r\n\r\n        if (checkForHundredRule && number == 100)\r\n        {\r\n            return \"yuz\";\r\n        }\r\n\r\n        var sb = new StringBuilder();\r\n\r\n        if (number / 1000000000 > 0)\r\n        {\r\n            sb.AppendFormat(\"{0} milliard \", Convert(number / 1000000000, false));\r\n            number %= 1000000000;\r\n        }\r\n\r\n        if (number / 1000000 > 0)\r\n        {\r\n            sb.AppendFormat(\"{0} million \", Convert(number / 1000000, true));\r\n            number %= 1000000;\r\n        }\r\n\r\n        var thousand = number / 1000;\r\n        if (thousand > 0)\r\n        {\r\n            sb.AppendFormat(\"{0} ming \", Convert(thousand, true));\r\n            number %= 1000;\r\n        }\r\n\r\n        var hundred = number / 100;\r\n        if (hundred > 0)\r\n        {\r\n            sb.AppendFormat(\"{0} yuz \", Convert(hundred, false));\r\n            number %= 100;\r\n        }\r\n\r\n        if (number / 10 > 0)\r\n        {\r\n            sb.AppendFormat(\"{0} \", TensMap[number / 10]);\r\n            number %= 10;\r\n        }\r\n\r\n        if (number > 0)\r\n        {\r\n            sb.AppendFormat(\"{0} \", UnitsMap[number]);\r\n        }\r\n\r\n        return sb\r\n            .ToString()\r\n            .Trim();\r\n    }\r\n\r\n    public override string ConvertToOrdinal(int number)\r\n    {\r\n        var word = Convert(number);\r\n        var i = 0;\r\n        if (string.IsNullOrEmpty(word))\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        var lastChar = word[^1];\r\n        if (lastChar is 'i' or 'a')\r\n        {\r\n            i = 1;\r\n        }\r\n\r\n        return $\"{word}{OrdinalSuffixes[i]}\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/NumberToWords/VietnameseNumberToWordsConverter.cs",
    "content": "namespace Humanizer;\r\n\r\nclass VietnameseNumberToWordsConverter : GenderlessNumberToWordsConverter\r\n{\r\n    const int OneBillion = 1000000000;\r\n    const int OneMillion = 1000000;\r\n\r\n    static readonly string[] NumberVerbalPairs =\r\n    [\r\n        \"\", \"một\", \"hai\", \"ba\", \"bốn\", \"năm\", \"sáu\", \"bảy\", \"tám\", \"chín\"\r\n    ];\r\n\r\n    public override string Convert(long number) =>\r\n        number == 0\r\n            ? \"không\"\r\n            : ConvertImpl(number);\r\n\r\n    public override string ConvertToOrdinal(int number) =>\r\n        $\"thứ {ConvertToOrdinalImpl(number)}\";\r\n\r\n    string ConvertToOrdinalImpl(int number) =>\r\n        number switch\r\n        {\r\n            1 => \"nhất\",\r\n            2 => \"nhì\",\r\n            4 => \"tư\",\r\n            _ => Convert(number)\r\n        };\r\n\r\n    static string ConvertImpl(long number, bool hasTens = false, bool isGreaterThanOneHundred = false)\r\n    {\r\n        if (number < 0)\r\n        {\r\n            return $\"trừ {ConvertImpl(-number, hasTens, isGreaterThanOneHundred)}\";\r\n        }\r\n\r\n        if (number >= OneBillion)\r\n        {\r\n            return string.Format(\r\n                    \"{0} tỉ {1}\",\r\n                    ConvertImpl(number / OneBillion),\r\n                    ConvertImpl(number % OneBillion, isGreaterThanOneHundred: true)\r\n                )\r\n                .TrimEnd();\r\n        }\r\n\r\n        if (number >= OneMillion)\r\n        {\r\n            return string.Format(\r\n                    \"{0} triệu {1}\",\r\n                    ConvertImpl(number / OneMillion),\r\n                    ConvertImpl(number % OneMillion, isGreaterThanOneHundred: true)\r\n                )\r\n                .TrimEnd();\r\n        }\r\n\r\n        if (number >= 1000)\r\n        {\r\n            return string.Format(\r\n                    \"{0} nghìn {1}\",\r\n                    ConvertImpl(number / 1000),\r\n                    ConvertImpl(number % 1000, isGreaterThanOneHundred: true)\r\n                )\r\n                .TrimEnd();\r\n        }\r\n\r\n        if (number >= 100)\r\n        {\r\n            return string.Format(\r\n                    \"{0} trăm {1}\",\r\n                    NumberVerbalPairs[number / 100],\r\n                    ConvertImpl(number % 100, isGreaterThanOneHundred: true)\r\n                )\r\n                .TrimEnd();\r\n        }\r\n\r\n        if (number >= 20)\r\n        {\r\n            return string.Format(\r\n                    \"{0} mươi {1}\",\r\n                    NumberVerbalPairs[number / 10],\r\n                    ConvertImpl(number % 10, hasTens: true)\r\n                )\r\n                .TrimEnd();\r\n        }\r\n\r\n        if (number == 14)\r\n        {\r\n            return \"mười bốn\";\r\n        }\r\n\r\n        if (number == 11)\r\n        {\r\n            return \"mười một\";\r\n        }\r\n\r\n        if (number >= 10)\r\n        {\r\n            return $\"mười {ConvertImpl(number % 10, hasTens: true)}\".TrimEnd();\r\n        }\r\n\r\n        if (number == 5 && hasTens)\r\n        {\r\n            return \"lăm\";\r\n        }\r\n\r\n        if (number == 4 && hasTens)\r\n        {\r\n            return \"tư\";\r\n        }\r\n\r\n        if (number == 1 && hasTens)\r\n        {\r\n            return \"mốt\";\r\n        }\r\n\r\n        if (number > 0 && isGreaterThanOneHundred && !hasTens)\r\n        {\r\n            return $\"linh {NumberVerbalPairs[number]}\";\r\n        }\r\n\r\n        return NumberVerbalPairs[number];\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/ArmenianOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass ArmenianOrdinalizer : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString)\r\n    {\r\n        if (number is 1 or -1)\r\n        {\r\n            return numberString + \"-ին\";\r\n        }\r\n\r\n        return numberString + \"-րդ\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/AzerbaijaniOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass AzerbaijaniOrdinalizer : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString) =>\r\n        numberString + \".\";\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/CatalanOrdinalizer.cs",
    "content": "namespace Humanizer;\r\n\r\nclass CatalanOrdinalizer() : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString) =>\r\n        Convert(number, numberString, GrammaticalGender.Masculine, WordForm.Normal);\r\n\r\n    public override string Convert(int number, string numberString, GrammaticalGender gender) =>\r\n        Convert(number, numberString, gender, WordForm.Normal);\r\n\r\n    public override string Convert(int number, string numberString, GrammaticalGender gender, WordForm wordForm)\r\n    {\r\n        if (number is 0 or int.MinValue)\r\n        {\r\n            return \"0\";\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return Convert(-number, (-number).ToString(), gender);\r\n        }\r\n\r\n        if (gender == GrammaticalGender.Feminine)\r\n        {\r\n            return $\"{numberString}a\";\r\n        }\r\n\r\n        if (number % 10 == 1 || number % 10 == 3)\r\n        {\r\n            return $\"{numberString}r\";\r\n        }\r\n\r\n        if (number % 10 == 2)\r\n        {\r\n            return $\"{numberString}n\";\r\n        }\r\n\r\n        if (number % 10 == 4)\r\n        {\r\n            return $\"{numberString}t\";\r\n        }\r\n\r\n        return $\"{numberString}è\";\r\n\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/DefaultOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass DefaultOrdinalizer : IOrdinalizer\r\n{\r\n    public virtual string Convert(int number, string numberString, GrammaticalGender gender) =>\r\n        Convert(number, numberString);\r\n\r\n    public virtual string Convert(int number, string numberString) =>\r\n        numberString;\r\n\r\n    public virtual string Convert(int number, string numberString, WordForm wordForm) =>\r\n        Convert(number, numberString, default, wordForm);\r\n\r\n    public virtual string Convert(int number, string numberString, GrammaticalGender gender, WordForm wordForm) =>\r\n        Convert(number, numberString, gender);\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/DutchOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass DutchOrdinalizer : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString) =>\r\n        Convert(number, numberString, GrammaticalGender.Masculine);\r\n\r\n    public override string Convert(int number, string numberString, GrammaticalGender gender)\r\n    {\r\n        // N/A in Dutch\r\n        if (number == 0)\r\n        {\r\n            return \"0\";\r\n        }\r\n\r\n        return numberString + \"e\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/EnglishOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass EnglishOrdinalizer : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString)\r\n    {\r\n        var nMod100 = number % 100;\r\n\r\n        if (nMod100 is >= 11 and <= 20)\r\n        {\r\n            return numberString + \"th\";\r\n        }\r\n\r\n        return (number % 10) switch\r\n        {\r\n            1 => numberString + \"st\",\r\n            2 => numberString + \"nd\",\r\n            3 => numberString + \"rd\",\r\n            _ => numberString + \"th\"\r\n        };\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/FrenchOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass FrenchOrdinalizer : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString) =>\r\n        Convert(number, numberString, GrammaticalGender.Masculine);\r\n\r\n    public override string Convert(int number, string numberString, GrammaticalGender gender)\r\n    {\r\n        if (number == 1)\r\n        {\r\n            if (gender == GrammaticalGender.Feminine)\r\n            {\r\n                return numberString + \"ère\";\r\n            }\r\n\r\n            return numberString + \"er\";\r\n        }\r\n\r\n        return numberString + \"ème\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/GermanOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass GermanOrdinalizer : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString) =>\r\n        numberString + \".\";\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/HungarianOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass HungarianOrdinalizer : DefaultOrdinalizer\r\n{\r\n    // In hungarian language ordinal numbers are marked with a dot \".\" at the end\r\n    public override string Convert(int number, string numberString) => numberString + \".\";\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/IOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// The interface used to localise the Ordinalize method\r\n/// </summary>\r\npublic interface IOrdinalizer\r\n{\r\n    /// <summary>\r\n    /// Ordinalizes the number\r\n    /// </summary>\r\n    string Convert(int number, string numberString);\r\n\r\n    /// <summary>\r\n    /// Ordinalizes the number to a locale's specific form.\r\n    /// </summary>\r\n    string Convert(int number, string numberString, WordForm wordForm);\r\n\r\n    /// <summary>\r\n    /// Ordinalizes the number using the provided grammatical gender\r\n    /// </summary>\r\n    string Convert(int number, string numberString, GrammaticalGender gender);\r\n\r\n    /// <summary>\r\n    /// Ordinalizes the number to a locale's specific form using the provided grammatical gender.\r\n    /// </summary>\r\n    string Convert(int number, string numberString, GrammaticalGender gender, WordForm wordForm);\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/IcelandicOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass IcelandicOrdinalizer : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString) =>\r\n        numberString + \".\";\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/ItalianOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass ItalianOrdinalizer : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString) =>\r\n        Convert(number, numberString, GrammaticalGender.Masculine);\r\n\r\n    public override string Convert(int number, string numberString, GrammaticalGender gender)\r\n    {\r\n        // No ordinal for 0 in italian (neologism apart)\r\n        if (number == 0)\r\n        {\r\n            return \"0\";\r\n        }\r\n\r\n        if (gender == GrammaticalGender.Feminine)\r\n        {\r\n            return numberString + \"ª\";\r\n        }\r\n\r\n        return numberString + \"°\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/LuxembourgishOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass LuxembourgishOrdinalizer : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString) =>\r\n        numberString + \".\";\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/PortugueseOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass PortugueseOrdinalizer : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString) =>\r\n        Convert(number, numberString, GrammaticalGender.Masculine);\r\n\r\n    public override string Convert(int number, string numberString, GrammaticalGender gender)\r\n    {\r\n        // N/A in Portuguese\r\n        if (number == 0)\r\n        {\r\n            return \"0\";\r\n        }\r\n\r\n        if (gender == GrammaticalGender.Feminine)\r\n        {\r\n            return numberString + \"ª\";\r\n        }\r\n\r\n        return numberString + \"º\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/RomanianOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass RomanianOrdinalizer : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString) =>\r\n        Convert(number, numberString, GrammaticalGender.Masculine);\r\n\r\n    public override string Convert(int number, string numberString, GrammaticalGender gender)\r\n    {\r\n        // No ordinal for 0 (zero) in Romanian.\r\n        if (number == 0)\r\n        {\r\n            return \"0\";\r\n        }\r\n\r\n        // Exception from the rule.\r\n        if (number == 1)\r\n        {\r\n            if (gender == GrammaticalGender.Feminine)\r\n            {\r\n                return \"prima\"; // întâia\r\n            }\r\n\r\n            return \"primul\"; // întâiul\r\n        }\r\n\r\n        if (gender == GrammaticalGender.Feminine)\r\n        {\r\n            return $\"a {numberString}-a\";\r\n        }\r\n\r\n        return $\"al {numberString}-lea\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/RussianOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass RussianOrdinalizer : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString) =>\r\n        Convert(number, numberString, GrammaticalGender.Masculine);\r\n\r\n    public override string Convert(int number, string numberString, GrammaticalGender gender)\r\n    {\r\n        if (gender == GrammaticalGender.Masculine)\r\n        {\r\n            return numberString + \"-й\";\r\n        }\r\n\r\n        if (gender == GrammaticalGender.Feminine)\r\n        {\r\n            return numberString + \"-я\";\r\n        }\r\n\r\n        return numberString + \"-е\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/SpanishOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass SpanishOrdinalizer(CultureInfo culture) : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString) =>\r\n        Convert(number, numberString, GrammaticalGender.Masculine, WordForm.Normal);\r\n\r\n    public override string Convert(int number, string numberString, GrammaticalGender gender) =>\r\n        Convert(number, numberString, gender, WordForm.Normal);\r\n\r\n    public override string Convert(int number, string numberString, GrammaticalGender gender, WordForm wordForm)\r\n    {\r\n        // N/A in Spanish\r\n        if (number is 0 or int.MinValue)\r\n        {\r\n            return \"0\";\r\n        }\r\n\r\n        if (number < 0)\r\n        {\r\n            return Convert(-number, GetNumberString(-number), gender);\r\n        }\r\n\r\n        return gender switch\r\n        {\r\n            GrammaticalGender.Masculine or GrammaticalGender.Neuter => numberString + GetWordForm(number, wordForm),\r\n            GrammaticalGender.Feminine => numberString + \".ª\",\r\n            _ => throw new ArgumentOutOfRangeException(nameof(gender), gender, null),\r\n        };\r\n    }\r\n\r\n    string GetNumberString(int number) =>\r\n        number.ToString(culture);\r\n\r\n    static string GetWordForm(int number, WordForm wordForm) =>\r\n        (number % 10 == 1 || number % 10 == 3) && wordForm == WordForm.Abbreviation ? \".er\" : \".º\";\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/TurkishOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass TurkishOrdinalizer : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString) =>\r\n        numberString + \".\";\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Ordinalizers/UkrainianOrdinalizer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\nclass UkrainianOrdinalizer : DefaultOrdinalizer\r\n{\r\n    public override string Convert(int number, string numberString) =>\r\n        Convert(number, numberString, GrammaticalGender.Masculine);\r\n\r\n    public override string Convert(int number, string numberString, GrammaticalGender gender)\r\n    {\r\n        if (gender == GrammaticalGender.Masculine)\r\n        {\r\n            return numberString + \"-й\";\r\n        }\r\n\r\n        if (gender == GrammaticalGender.Feminine)\r\n        {\r\n            if (number % 10 == 3)\r\n            {\r\n                return numberString + \"-я\";\r\n            }\r\n\r\n            return numberString + \"-а\";\r\n        }\r\n\r\n        if (gender == GrammaticalGender.Neuter)\r\n        {\r\n            if (number % 10 == 3)\r\n            {\r\n                return numberString + \"-є\";\r\n            }\r\n        }\r\n\r\n        return numberString + \"-е\";\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/ResourceKeys.Common.cs",
    "content": "﻿namespace Humanizer;\r\n\r\npublic partial class ResourceKeys\r\n{\r\n    static void ValidateRange(int count)\r\n    {\r\n        ArgumentOutOfRangeException.ThrowIfNegative(count, nameof(count));\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/ResourceKeys.DateHumanize.cs",
    "content": "﻿namespace Humanizer;\r\n\r\npublic partial class ResourceKeys\r\n{\r\n    /// <summary>\r\n    /// Encapsulates the logic required to get the resource keys for DateTime.Humanize\r\n    /// </summary>\r\n    public static class DateHumanize\r\n    {\r\n        /// <summary>\r\n        /// Resource key for Now.\r\n        /// </summary>\r\n        public const string Now = \"DateHumanize_Now\";\r\n\r\n        /// <summary>\r\n        /// Resource key for Never.\r\n        /// </summary>\r\n        public const string Never = \"DateHumanize_Never\";\r\n\r\n        /// <summary>\r\n        /// Generates Resource Keys according to convention.\r\n        /// </summary>\r\n        /// <param name=\"timeUnit\">Time unit</param>\r\n        /// <param name=\"timeUnitTense\">Is time unit in future or past</param>\r\n        /// <param name=\"count\">Number of units, default is One.</param>\r\n        /// <returns>Resource key, like DateHumanize_SingleMinuteAgo</returns>\r\n        public static string GetResourceKey(TimeUnit timeUnit, Tense timeUnitTense, int count = 1)\r\n        {\r\n            ValidateRange(count);\r\n\r\n            if (count == 0)\r\n            {\r\n                return Now;\r\n            }\r\n\r\n            if (count == 1)\r\n            {\r\n                if (timeUnitTense == Tense.Future)\r\n                {\r\n                    return timeUnit switch\r\n                    {\r\n                        TimeUnit.Millisecond => \"DateHumanize_SingleMillisecondFromNow\",\r\n                        TimeUnit.Second => \"DateHumanize_SingleSecondFromNow\",\r\n                        TimeUnit.Minute => \"DateHumanize_SingleMinuteFromNow\",\r\n                        TimeUnit.Hour => \"DateHumanize_SingleHourFromNow\",\r\n                        TimeUnit.Day => \"DateHumanize_SingleDayFromNow\",\r\n                        TimeUnit.Week => \"DateHumanize_SingleWeekFromNow\",\r\n                        TimeUnit.Month => \"DateHumanize_SingleMonthFromNow\",\r\n                        TimeUnit.Year => \"DateHumanize_SingleYearFromNow\",\r\n                        _ => throw new ArgumentOutOfRangeException(nameof(timeUnit), timeUnit, null)\r\n                    };\r\n                }\r\n\r\n                return timeUnit switch\r\n                {\r\n                    TimeUnit.Millisecond => \"DateHumanize_SingleMillisecondAgo\",\r\n                    TimeUnit.Second => \"DateHumanize_SingleSecondAgo\",\r\n                    TimeUnit.Minute => \"DateHumanize_SingleMinuteAgo\",\r\n                    TimeUnit.Hour => \"DateHumanize_SingleHourAgo\",\r\n                    TimeUnit.Day => \"DateHumanize_SingleDayAgo\",\r\n                    TimeUnit.Week => \"DateHumanize_SingleWeekAgo\",\r\n                    TimeUnit.Month => \"DateHumanize_SingleMonthAgo\",\r\n                    TimeUnit.Year => \"DateHumanize_SingleYearAgo\",\r\n                    _ => throw new ArgumentOutOfRangeException(nameof(timeUnit), timeUnit, null)\r\n                };\r\n            }\r\n\r\n            if (timeUnitTense == Tense.Future)\r\n            {\r\n                return timeUnit switch\r\n                {\r\n                    TimeUnit.Millisecond => \"DateHumanize_MultipleMillisecondsFromNow\",\r\n                    TimeUnit.Second => \"DateHumanize_MultipleSecondsFromNow\",\r\n                    TimeUnit.Minute => \"DateHumanize_MultipleMinutesFromNow\",\r\n                    TimeUnit.Hour => \"DateHumanize_MultipleHoursFromNow\",\r\n                    TimeUnit.Day => \"DateHumanize_MultipleDaysFromNow\",\r\n                    TimeUnit.Week => \"DateHumanize_MultipleWeeksFromNow\",\r\n                    TimeUnit.Month => \"DateHumanize_MultipleMonthsFromNow\",\r\n                    TimeUnit.Year => \"DateHumanize_MultipleYearsFromNow\",\r\n                    _ => throw new ArgumentOutOfRangeException(nameof(timeUnit), timeUnit, null)\r\n                };\r\n            }\r\n\r\n            return timeUnit switch\r\n            {\r\n                TimeUnit.Millisecond => \"DateHumanize_MultipleMillisecondsAgo\",\r\n                TimeUnit.Second => \"DateHumanize_MultipleSecondsAgo\",\r\n                TimeUnit.Minute => \"DateHumanize_MultipleMinutesAgo\",\r\n                TimeUnit.Hour => \"DateHumanize_MultipleHoursAgo\",\r\n                TimeUnit.Day => \"DateHumanize_MultipleDaysAgo\",\r\n                TimeUnit.Week => \"DateHumanize_MultipleWeeksAgo\",\r\n                TimeUnit.Month => \"DateHumanize_MultipleMonthsAgo\",\r\n                TimeUnit.Year => \"DateHumanize_MultipleYearsAgo\",\r\n                _ => throw new ArgumentOutOfRangeException(nameof(timeUnit), timeUnit, null)\r\n            };\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/ResourceKeys.TimeSpanHumanize.cs",
    "content": "﻿namespace Humanizer;\r\n\r\npublic partial class ResourceKeys\r\n{\r\n    /// <summary>\r\n    /// Encapsulates the logic required to get the resource keys for TimeSpan.Humanize\r\n    /// Examples: TimeSpanHumanize_SingleMinute, TimeSpanHumanize_MultipleHours.\r\n    /// </summary>\r\n    public static class TimeSpanHumanize\r\n    {\r\n        /// <summary>\r\n        /// Generates Resource Keys according to convention.\r\n        /// </summary>\r\n        /// <param name=\"unit\">Time unit, <see cref=\"TimeUnit\"/>.</param>\r\n        /// <param name=\"count\">Number of units, default is One.</param>\r\n        /// <param name=\"toWords\">Result to words, default is false.</param>\r\n        /// <returns>Resource key, like TimeSpanHumanize_SingleMinute</returns>\r\n        public static string GetResourceKey(TimeUnit unit, int count = 1, bool toWords = false)\r\n        {\r\n            ValidateRange(count);\r\n\r\n            if (count == 0 && toWords)\r\n            {\r\n                return \"TimeSpanHumanize_Zero\";\r\n            }\r\n\r\n            if (count == 1)\r\n            {\r\n                return unit switch\r\n                {\r\n                    TimeUnit.Millisecond => \"TimeSpanHumanize_SingleMillisecond\",\r\n                    TimeUnit.Second => \"TimeSpanHumanize_SingleSecond\",\r\n                    TimeUnit.Minute => \"TimeSpanHumanize_SingleMinute\",\r\n                    TimeUnit.Hour => \"TimeSpanHumanize_SingleHour\",\r\n                    TimeUnit.Day => \"TimeSpanHumanize_SingleDay\",\r\n                    TimeUnit.Week => \"TimeSpanHumanize_SingleWeek\",\r\n                    TimeUnit.Month => \"TimeSpanHumanize_SingleMonth\",\r\n                    TimeUnit.Year => \"TimeSpanHumanize_SingleYear\",\r\n                    _ => throw new ArgumentOutOfRangeException(nameof(unit), unit, null)\r\n                };\r\n            }\r\n\r\n            return unit switch\r\n            {\r\n                TimeUnit.Millisecond => \"TimeSpanHumanize_MultipleMilliseconds\",\r\n                TimeUnit.Second => \"TimeSpanHumanize_MultipleSeconds\",\r\n                TimeUnit.Minute => \"TimeSpanHumanize_MultipleMinutes\",\r\n                TimeUnit.Hour => \"TimeSpanHumanize_MultipleHours\",\r\n                TimeUnit.Day => \"TimeSpanHumanize_MultipleDays\",\r\n                TimeUnit.Week => \"TimeSpanHumanize_MultipleWeeks\",\r\n                TimeUnit.Month => \"TimeSpanHumanize_MultipleMonths\",\r\n                TimeUnit.Year => \"TimeSpanHumanize_MultipleYears\",\r\n                _ => throw new ArgumentOutOfRangeException(nameof(unit), unit, null)\r\n            };\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/ResourceKeys.TimeUnitSymbol.cs",
    "content": "﻿namespace Humanizer;\r\n\r\npublic partial class ResourceKeys\r\n{\r\n    /// <summary>\r\n    /// Encapsulates the logic required to get the resource keys for TimeUnit.ToSymbol\r\n    /// </summary>\r\n    public static class TimeUnitSymbol\r\n    {\r\n        /// <summary>\r\n        /// Generates Resource Keys according to convention.\r\n        /// Examples: TimeUnit_Minute, TimeUnit_Hour.\r\n        /// </summary>\r\n        /// <param name=\"unit\">Time unit, <see cref=\"TimeUnit\"/>.</param>\r\n        /// <returns>Resource key, like TimeSpanHumanize_SingleMinute</returns>\r\n        public static string GetResourceKey(TimeUnit unit) =>\r\n            unit switch\r\n            {\r\n                TimeUnit.Millisecond => \"TimeUnit_Millisecond\",\r\n                TimeUnit.Second => \"TimeUnit_Second\",\r\n                TimeUnit.Minute => \"TimeUnit_Minute\",\r\n                TimeUnit.Hour => \"TimeUnit_Hour\",\r\n                TimeUnit.Day => \"TimeUnit_Day\",\r\n                TimeUnit.Week => \"TimeUnit_Week\",\r\n                TimeUnit.Month => \"TimeUnit_Month\",\r\n                TimeUnit.Year => \"TimeUnit_Year\",\r\n                _ => throw new ArgumentOutOfRangeException(nameof(unit), unit, null)\r\n            };\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/Resources.cs",
    "content": "using System.Resources;\r\n\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// Provides access to the resources of Humanizer\r\n/// </summary>\r\npublic static class Resources\r\n{\r\n    static readonly ResourceManager ResourceManager = new(\"Humanizer.Properties.Resources\", typeof(Resources).GetTypeInfo()\r\n        .Assembly);\r\n\r\n    /// <summary>\r\n    /// Returns the value of the specified string resource\r\n    /// </summary>\r\n    /// <param name=\"resourceKey\">The name of the resource to retrieve.</param>\r\n    /// <param name=\"culture\">The culture of the resource to retrieve. If not specified, current thread's UI culture is used.</param>\r\n    /// <returns>The value of the resource localized for the specified culture.</returns>\r\n    public static string GetResource(string resourceKey, CultureInfo? culture = null)\r\n    {\r\n        // When an explicit culture is provided, we must ensure the exact culture's resource set\r\n        // is loaded before falling back. In Blazor WebAssembly, satellite assemblies are loaded\r\n        // lazily, and ResourceManager.GetString's fallback logic may cache an incorrect neutral\r\n        // culture result before the satellite assembly loads. To prevent this, we:\r\n        //   1) Load the exact culture's ResourceSet (createIfNotExists: true, tryParents: false)\r\n        //   2) Only fall back to GetString if the exact culture's resource set doesn't contain the key\r\n\r\n        string? resource = null;\r\n\r\n        // Only attempt to load the exact culture's resource set when an explicit culture is provided\r\n        // This preserves the previous behavior for callers that pass null (they fall through to GetString).\r\n        if (culture != null)\r\n        {\r\n            // Load the exact culture's resource set without trying parents.\r\n            // This ensures the satellite assembly is loaded in Blazor WebAssembly scenarios.\r\n            var exactResourceSet = ResourceManager.GetResourceSet(culture, createIfNotExists: true, tryParents: false);\r\n            resource = exactResourceSet?.GetString(resourceKey);\r\n        }\r\n\r\n        // If not found in the exact culture (or culture was null), use the standard GetString\r\n        // which performs the full fallback chain and accepts null culture.\r\n        resource ??= ResourceManager.GetString(resourceKey, culture);\r\n\r\n        if (resource == null || string.IsNullOrEmpty(resource))\r\n        {\r\n            throw new ArgumentException($@\"The resource object with key '{resourceKey}' was not found\", nameof(resourceKey));\r\n        }\r\n\r\n        return resource;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Tries to get the value of the specified string resource, without fallback\r\n    /// </summary>\r\n    /// <param name=\"resourceKey\">The name of the resource to retrieve.</param>\r\n    /// <param name=\"culture\">The culture of the resource to retrieve. If not specified, current thread's UI culture is used.</param>\r\n    /// <param name=\"result\">The value of the resource localized for the specified culture if found; null otherwise.</param>\r\n    /// <returns>true if the specified string resource was found for the given culture; otherwise, false.</returns>\r\n    public static bool TryGetResource(string resourceKey, CultureInfo? culture, [NotNullWhen(true)] out string? result)\r\n    {\r\n        culture ??= CultureInfo.CurrentUICulture;\r\n        var resourceSet = ResourceManager.GetResourceSet(culture, createIfNotExists: false, tryParents: false);\r\n        result = resourceSet?.GetString(resourceKey);\r\n        return result is not null;\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/Tense.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Enumerates the possible time references; past or future.\r\n/// </summary>\r\npublic enum Tense\r\n{\r\n    Future,\r\n    Past\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/TimeToClockNotation/BrazilianPortugueseTimeOnlyToClockNotationConverter.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass BrazilianPortugueseTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConverter\r\n{\r\n    public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)\r\n    {\r\n        switch (time)\r\n        {\r\n            case { Hour: 0, Minute: 0 }:\r\n                return \"meia-noite\";\r\n            case { Hour: 12, Minute: 0 }:\r\n                return \"meio-dia\";\r\n        }\r\n\r\n        var normalizedHour = time.Hour % 12;\r\n        var normalizedMinutes = (int)(roundToNearestFive == ClockNotationRounding.NearestFiveMinutes\r\n            ? 5 * Math.Round(time.Minute / 5.0)\r\n            : time.Minute);\r\n\r\n        return normalizedMinutes switch\r\n        {\r\n            00 => $\"{normalizedHour.ToWords(GrammaticalGender.Feminine)} em ponto\",\r\n            30 => $\"{normalizedHour.ToWords(GrammaticalGender.Feminine)} e meia\",\r\n            40 => $\"vinte para as {(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)}\",\r\n            45 => $\"quinze para as {(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)}\",\r\n            50 => $\"dez para as {(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)}\",\r\n            55 => $\"cinco para as {(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)}\",\r\n            60 => $\"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)} em ponto\",\r\n            _ => $\"{normalizedHour.ToWords(GrammaticalGender.Feminine)} e {normalizedMinutes.ToWords()}\"\r\n        };\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/TimeToClockNotation/CaTimeOnlyToClockNotationConverter.cs",
    "content": "#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass CaTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConverter\r\n{\r\n    const int MORNING = 6;\r\n    const int NOON = 12;\r\n    const int AFTERNOON = 21;\r\n\r\n    public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)\r\n    {\r\n        switch (time)\r\n        {\r\n            case { Hour: 0, Minute: 0 }:\r\n                return \"mitjanit\";\r\n\r\n            case { Hour: 12, Minute: 0 }:\r\n                return \"migdia\";\r\n        }\r\n\r\n        var article = GetArticle(time);\r\n        var articleNextHour = GetArticle(time.AddHours(1));\r\n        var hour = NormalizeHour(time).ToWords(GrammaticalGender.Feminine);\r\n        var nextHour = NormalizeHour(time.AddHours(1)).ToWords(GrammaticalGender.Feminine);\r\n        var dayPeriod = GetDayPeriod(time);\r\n        var dayPeriodNextHour = GetDayPeriod(time.AddHours(1));\r\n\r\n        var normalizedMinutes = (int)(roundToNearestFive == ClockNotationRounding.NearestFiveMinutes\r\n            ? 5 * Math.Round(time.Minute / 5.0)\r\n            : time.Minute);\r\n\r\n        return normalizedMinutes switch\r\n        {\r\n            0 => $\"{article} {hour} {dayPeriod}\",\r\n            15 => $\"{article} {hour} i quart {dayPeriod}\",\r\n            30 => $\"{article} {hour} i mitja {dayPeriod}\",\r\n            35 => $\"{articleNextHour} {nextHour} menys vint-i-cinc {dayPeriodNextHour}\",\r\n            40 => $\"{articleNextHour} {nextHour} menys vint {dayPeriodNextHour}\",\r\n            45 => $\"{articleNextHour} {nextHour} menys quart {dayPeriodNextHour}\",\r\n            50 => $\"{articleNextHour} {nextHour} menys deu {dayPeriodNextHour}\",\r\n            55 => $\"{articleNextHour} {nextHour} menys cinc {dayPeriodNextHour}\",\r\n            60 => $\"{articleNextHour} {nextHour} {dayPeriodNextHour}\",\r\n            _ => $\"{article} {hour} i {normalizedMinutes.ToWords()} {dayPeriod}\"\r\n        };\r\n    }\r\n\r\n    static int NormalizeHour(TimeOnly time) =>\r\n        time.Hour % 12 != 0 ? time.Hour % 12 : 12;\r\n\r\n    static string GetArticle(TimeOnly time) =>\r\n        time.Hour is 1 or 13 ? \"la\" : \"les\";\r\n\r\n    static string GetDayPeriod(TimeOnly time)\r\n    {\r\n        if (IsEarlyMorning(time))\r\n        {\r\n            return \"de la matinada\";\r\n        }\r\n\r\n        if (IsMorning(time))\r\n        {\r\n            return \"del matí\";\r\n        }\r\n\r\n        if (IsAfternoon(time))\r\n        {\r\n            return \"de la tarda\";\r\n        }\r\n\r\n        return \"de la nit\";\r\n    }\r\n\r\n    static bool IsEarlyMorning(TimeOnly time) =>\r\n        time.Hour is >= 1 and < MORNING;\r\n\r\n    static bool IsMorning(TimeOnly time) =>\r\n        time.Hour is >= MORNING and < NOON;\r\n\r\n    static bool IsAfternoon(TimeOnly time) =>\r\n        time.Hour is >= NOON and < AFTERNOON;\r\n}\r\n\r\n#endif"
  },
  {
    "path": "src/Humanizer/Localisation/TimeToClockNotation/DefaultTimeOnlyToClockNotationConverter.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass DefaultTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConverter\r\n{\r\n    public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)\r\n    {\r\n        switch (time)\r\n        {\r\n            case { Hour: 0, Minute: 0 }:\r\n                return \"midnight\";\r\n            case { Hour: 12, Minute: 0 }:\r\n                return \"noon\";\r\n        }\r\n\r\n        var normalizedHour = time.Hour % 12;\r\n        var normalizedMinutes = (int)(roundToNearestFive == ClockNotationRounding.NearestFiveMinutes\r\n            ? 5 * Math.Round(time.Minute / 5.0)\r\n            : time.Minute);\r\n\r\n        return normalizedMinutes switch\r\n        {\r\n            00 => $\"{normalizedHour.ToWords()} o'clock\",\r\n            05 => $\"five past {normalizedHour.ToWords()}\",\r\n            10 => $\"ten past {normalizedHour.ToWords()}\",\r\n            15 => $\"a quarter past {normalizedHour.ToWords()}\",\r\n            20 => $\"twenty past {normalizedHour.ToWords()}\",\r\n            25 => $\"twenty-five past {normalizedHour.ToWords()}\",\r\n            30 => $\"half past {normalizedHour.ToWords()}\",\r\n            40 => $\"twenty to {(normalizedHour + 1).ToWords()}\",\r\n            45 => $\"a quarter to {(normalizedHour + 1).ToWords()}\",\r\n            50 => $\"ten to {(normalizedHour + 1).ToWords()}\",\r\n            55 => $\"five to {(normalizedHour + 1).ToWords()}\",\r\n            60 => $\"{(normalizedHour + 1).ToWords()} o'clock\",\r\n            _ => $\"{normalizedHour.ToWords()} {normalizedMinutes.ToWords()}\"\r\n        };\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/TimeToClockNotation/EsTimeOnlyToClockNotationConverter.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass EsTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConverter\r\n{\r\n    const int MORNING = 6;\r\n    const int NOON = 12;\r\n    const int AFTERNOON = 21;\r\n\r\n    public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)\r\n    {\r\n        switch (time)\r\n        {\r\n            case { Hour: 0, Minute: 0 }:\r\n                return \"medianoche\";\r\n\r\n            case { Hour: 12, Minute: 0 }:\r\n                return \"mediodía\";\r\n        }\r\n\r\n        var article = GetArticle(time);\r\n        var articleNextHour = GetArticle(time.AddHours(1));\r\n        var hour = NormalizeHour(time).ToWords(GrammaticalGender.Feminine);\r\n        var nextHour = NormalizeHour(time.AddHours(1)).ToWords(GrammaticalGender.Feminine);\r\n        var dayPeriod = GetDayPeriod(time);\r\n        var dayPeriodNextHour = GetDayPeriod(time.AddHours(1));\r\n\r\n        var normalizedMinutes = (int)(roundToNearestFive == ClockNotationRounding.NearestFiveMinutes\r\n            ? 5 * Math.Round(time.Minute / 5.0)\r\n            : time.Minute);\r\n\r\n        return normalizedMinutes switch\r\n        {\r\n            0 => $\"{article} {hour} {dayPeriod}\",\r\n            15 => $\"{article} {hour} y cuarto {dayPeriod}\",\r\n            30 => $\"{article} {hour} y media {dayPeriod}\",\r\n            35 => $\"{articleNextHour} {nextHour} menos veinticinco {dayPeriodNextHour}\",\r\n            40 => $\"{articleNextHour} {nextHour} menos veinte {dayPeriodNextHour}\",\r\n            45 => $\"{articleNextHour} {nextHour} menos cuarto {dayPeriodNextHour}\",\r\n            50 => $\"{articleNextHour} {nextHour} menos diez {dayPeriodNextHour}\",\r\n            55 => $\"{articleNextHour} {nextHour} menos cinco {dayPeriodNextHour}\",\r\n            60 => $\"{articleNextHour} {nextHour} {dayPeriodNextHour}\",\r\n            _ => $\"{article} {hour} y {normalizedMinutes.ToWords()} {dayPeriod}\"\r\n        };\r\n    }\r\n\r\n    static int NormalizeHour(TimeOnly time) =>\r\n        time.Hour % 12 != 0 ? time.Hour % 12 : 12;\r\n\r\n    static string GetArticle(TimeOnly time) =>\r\n        time.Hour is 1 or 13 ? \"la\" : \"las\";\r\n\r\n    static string GetDayPeriod(TimeOnly time)\r\n    {\r\n        if (IsEarlyMorning(time))\r\n        {\r\n            return \"de la madrugada\";\r\n        }\r\n\r\n        if (IsMorning(time))\r\n        {\r\n            return \"de la mañana\";\r\n        }\r\n\r\n        if (IsAfternoon(time))\r\n        {\r\n            return \"de la tarde\";\r\n        }\r\n\r\n        return \"de la noche\";\r\n    }\r\n\r\n    static bool IsEarlyMorning(TimeOnly time) =>\r\n        time.Hour is >= 1 and < MORNING;\r\n\r\n    static bool IsMorning(TimeOnly time) =>\r\n        time.Hour is >= MORNING and < NOON;\r\n\r\n    static bool IsAfternoon(TimeOnly time) =>\r\n        time.Hour is >= NOON and < AFTERNOON;\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/TimeToClockNotation/FrTimeOnlyToClockNotationConverter.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass FrTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConverter\r\n{\r\n    public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)\r\n    {\r\n        var normalizedMinutes = (int)(roundToNearestFive == ClockNotationRounding.NearestFiveMinutes\r\n            ? 5 * Math.Round(time.Minute / 5.0)\r\n            : time.Minute);\r\n\r\n        return normalizedMinutes switch\r\n        {\r\n            00 => GetHourExpression(time.Hour),\r\n            60 => GetHourExpression(time.Hour + 1),\r\n            _ => $\"{GetHourExpression(time.Hour)} {normalizedMinutes.ToWords(GrammaticalGender.Feminine)}\"\r\n        };\r\n\r\n        static string GetHourExpression(int hour) =>\r\n            hour switch\r\n            {\r\n                0 => \"minuit\",\r\n                12 => \"midi\",\r\n                _ => hour.ToWords(GrammaticalGender.Feminine) + (hour > 1 ? \" heures\" : \" heure\")\r\n            };\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/TimeToClockNotation/GermanTimeOnlyToClockNotationConverter.cs",
    "content": "#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass GermanTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConverter\r\n{\r\n    public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)\r\n    {\r\n        switch (time)\r\n        {\r\n            case { Hour: 0, Minute: 0 }:\r\n                return \"zwölf Uhr nachts\";\r\n            case { Hour: 12, Minute: 0 }:\r\n                return \"zwölf Uhr mittags\";\r\n        }\r\n\r\n        var normalizedHour = time.Hour % 12;\r\n        var normalizedMinutes = (int)(roundToNearestFive == ClockNotationRounding.NearestFiveMinutes\r\n            ? 5 * Math.Round(time.Minute / 5.0)\r\n            : time.Minute);\r\n\r\n        return normalizedMinutes switch\r\n        {\r\n            00 => $\"{normalizedHour.ToWords()} Uhr\",\r\n            05 => $\"fünf nach {normalizedHour.ToWords()}\",\r\n            10 => $\"zehn nach {normalizedHour.ToWords()}\",\r\n            15 => $\"viertel nach {normalizedHour.ToWords()}\",\r\n            20 => $\"zwanzig nach {normalizedHour.ToWords()}\",\r\n            25 => $\"fünf vor halb {(normalizedHour + 1).ToWords()}\",\r\n            30 => $\"halb {(normalizedHour + 1).ToWords()}\",\r\n            35 => $\"fünf nach halb {(normalizedHour + 1).ToWords()}\",\r\n            40 => $\"zwanzig vor {(normalizedHour + 1).ToWords()}\",\r\n            45 => $\"viertel vor {(normalizedHour + 1).ToWords()}\",\r\n            50 => $\"zehn vor {(normalizedHour + 1).ToWords()}\",\r\n            55 => $\"fünf vor {(normalizedHour + 1).ToWords()}\",\r\n            60 => $\"{(normalizedHour + 1).ToWords()} Uhr\",\r\n            _ => $\"{normalizedHour.ToWords()} Uhr {normalizedMinutes.ToWords()}\"\r\n        };\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/TimeToClockNotation/ITimeOnlyToClockNotationConverter.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// The interface used to localise the ToClockNotation method.\r\n/// </summary>\r\npublic interface ITimeOnlyToClockNotationConverter\r\n{\r\n    /// <summary>\r\n    /// Converts the time to Clock Notation\r\n    /// </summary>\r\n    string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive);\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/TimeToClockNotation/LbTimeOnlyToClockNotationConverter.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass LbTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConverter\r\n{\r\n    public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)\r\n    {\r\n        var roundedTime = roundToNearestFive is ClockNotationRounding.NearestFiveMinutes\r\n            ? GetRoundedTime(time)\r\n            : time;\r\n\r\n        return roundedTime switch\r\n        {\r\n            { Hour: 0, Minute: 0 } => \"Mëtternuecht\",\r\n            { Hour: 12, Minute: 0 } => \"Mëtteg\",\r\n            _ => roundedTime.Minute switch\r\n            {\r\n                00 => GetHourExpression(roundedTime.Hour, \"Auer\"),\r\n                15 => $\"Véirel op {GetHourExpression(roundedTime.Hour)}\",\r\n                25 => $\"{GetMinuteExpression(30 - roundedTime.Minute, \"vir\")} hallwer {GetHourExpression(roundedTime.Hour + 1)}\",\r\n                30 => $\"hallwer {GetHourExpression(roundedTime.Hour + 1)}\",\r\n                35 => $\"{GetMinuteExpression(roundedTime.Minute - 30, \"op\")} hallwer {GetHourExpression(roundedTime.Hour + 1)}\",\r\n                45 => $\"Véirel vir {GetHourExpression(roundedTime.Hour + 1)}\",\r\n                60 => GetHourExpression(roundedTime.Hour + 1, \"Auer\"),\r\n                01 => $\"{GetMinuteExpression(roundedTime.Minute, \"Minutt\")} op {GetHourExpression(roundedTime.Hour)}\",\r\n                59 => $\"{GetMinuteExpression(60 - roundedTime.Minute, \"Minutt\")} vir {GetHourExpression(roundedTime.Hour + 1)}\",\r\n                05 or 10 or 20 => $\"{GetMinuteExpression(roundedTime.Minute, \"op\")} {GetHourExpression(roundedTime.Hour)}\",\r\n                40 or 50 or 55 => $\"{GetMinuteExpression(60 - roundedTime.Minute, \"vir\")} {GetHourExpression(roundedTime.Hour + 1)}\",\r\n                > 00 and < 25 => $\"{GetMinuteExpression(roundedTime.Minute, \"Minutten\")} op {GetHourExpression(roundedTime.Hour)}\",\r\n                > 25 and < 30 => $\"{GetMinuteExpression(30 - roundedTime.Minute, \"Minutten\")} vir hallwer {GetHourExpression(roundedTime.Hour + 1)}\",\r\n                > 30 and < 35 => $\"{GetMinuteExpression(roundedTime.Minute - 30, \"Minutten\")} op hallwer {GetHourExpression(roundedTime.Hour + 1)}\",\r\n                > 35 and < 60 => $\"{GetMinuteExpression(60 - roundedTime.Minute, \"Minutten\")} vir {GetHourExpression(roundedTime.Hour + 1)}\",\r\n                _ => $\"{GetHourExpression(time.Hour, \"Auer\")} {GetMinuteExpression(time.Minute)}\"\r\n            }\r\n        };\r\n    }\r\n\r\n    private static TimeOnly GetRoundedTime(TimeOnly time)\r\n    {\r\n        var tempRoundedMinutes = (int)(5 * Math.Round(time.Minute / 5.0));\r\n        var roundedHours = tempRoundedMinutes == 60 ? time.Hour + 1 : time.Hour;\r\n        var roundedMinutes = tempRoundedMinutes == 60 ? 0 : tempRoundedMinutes;\r\n        return new(roundedHours, roundedMinutes);\r\n    }\r\n\r\n    private static string GetMinuteExpression(int minute, string nextWord = \"\")\r\n        => GetFormattedExpression(minute, nextWord);\r\n\r\n    private static string GetHourExpression(int hour, string nextWord = \"\")\r\n    {\r\n        var normalizedHour = hour % 12;\r\n        var hourExpression = normalizedHour == 0 ? 12 : normalizedHour;\r\n\r\n        return GetFormattedExpression(hourExpression, nextWord);\r\n    }\r\n\r\n    private static string GetFormattedExpression(int number, string nextWord) =>\r\n        (number switch\r\n        {\r\n            1 or 2 => $\"{number.ToWords(GrammaticalGender.Feminine)} {nextWord}\",\r\n            7 => $\"{number.ToWords(LuxembourgishFormatter.DoesEifelerRuleApply(nextWord) ? WordForm.Eifeler : WordForm.Normal)} {nextWord}\",\r\n            _ => $\"{number.ToWords()} {nextWord}\"\r\n        }).TrimEnd();\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/TimeToClockNotation/PortugueseTimeOnlyToClockNotationConverter.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\nclass PortugueseTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConverter\r\n{\r\n    public string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)\r\n    {\r\n        switch (time)\r\n        {\r\n            case { Hour: 0, Minute: 0 }:\r\n                return \"meia-noite\";\r\n            case { Hour: 12, Minute: 0 }:\r\n                return \"meio-dia\";\r\n        }\r\n\r\n        var normalizedHour = time.Hour % 12;\r\n        var normalizedMinutes = (int)(roundToNearestFive == ClockNotationRounding.NearestFiveMinutes\r\n            ? 5 * Math.Round(time.Minute / 5.0)\r\n            : time.Minute);\r\n\r\n        return normalizedMinutes switch\r\n        {\r\n            00 => $\"{normalizedHour.ToWords(GrammaticalGender.Feminine)} horas\",\r\n            15 => $\"{normalizedHour.ToWords(GrammaticalGender.Feminine)} e um quarto\",\r\n            30 => $\"{normalizedHour.ToWords(GrammaticalGender.Feminine)} e meia\",\r\n            40 => $\"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)} menos vinte\",\r\n            45 => $\"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)} menos um quarto\",\r\n            50 => $\"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)} menos dez\",\r\n            55 => $\"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)} menos cinco\",\r\n            60 => $\"{(normalizedHour + 1).ToWords(GrammaticalGender.Feminine)} horas\",\r\n            _ => $\"{normalizedHour.ToWords(GrammaticalGender.Feminine)} e {normalizedMinutes.ToWords()}\"\r\n        };\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/TimeUnit.cs",
    "content": "﻿namespace Humanizer;\r\n\r\npublic enum TimeUnit\r\n{\r\n    Millisecond,\r\n    Second,\r\n    Minute,\r\n    Hour,\r\n    Day,\r\n    Week,\r\n    Month,\r\n    Year\r\n}"
  },
  {
    "path": "src/Humanizer/Localisation/WordsToNumber/DefaultWordsToNumberConverter.cs",
    "content": "namespace Humanizer;\r\n\r\ninternal class DefaultWordsToNumberConverter(CultureInfo culture) : GenderlessWordsToNumberConverter\r\n{\r\n    private readonly CultureInfo cultureInfo = culture;\r\n\r\n    public override int Convert(string words)\r\n    {\r\n        TryConvert(words, out var parsedValue);\r\n\r\n        return parsedValue;\r\n    }\r\n    public override bool TryConvert(string words, out int parsedValue) => TryConvert(words, out parsedValue, out _);\r\n\r\n    public override bool TryConvert(string words, out int parsedValue, out string? unrecognizedWord)\r\n    {\r\n        if (cultureInfo.TwoLetterISOLanguageName == \"en\")\r\n        {\r\n            return new EnglishWordsToNumberConverter().TryConvert(words, out parsedValue, out unrecognizedWord);\r\n        }\r\n        throw new NotSupportedException($\"Words-to-number conversion is not supported for '{cultureInfo.TwoLetterISOLanguageName}'.\");\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/WordsToNumber/EnglishWordsToNumberConverter.cs",
    "content": "namespace Humanizer;\r\n\r\ninternal partial class EnglishWordsToNumberConverter : GenderlessWordsToNumberConverter\r\n{\r\n    private const string OrdinalSuffixPattern = @\"\\b(\\d+)(st|nd|rd|th)\\b\";\r\n\r\n#if NET7_0_OR_GREATER\r\n    [GeneratedRegex(OrdinalSuffixPattern)]\r\n    private static partial Regex OrdinalSuffixRegexGenerated();\r\n    \r\n    private static Regex OrdinalSuffixRegex() => OrdinalSuffixRegexGenerated();\r\n#else\r\n    private static readonly Regex OrdinalSuffixRegexField = new(OrdinalSuffixPattern, RegexOptions.Compiled);\r\n\r\n    private static Regex OrdinalSuffixRegex() => OrdinalSuffixRegexField;\r\n#endif\r\n\r\n    private static readonly FrozenDictionary<string, int> NumbersMap = new Dictionary<string, int>\r\n    {\r\n        {\"zero\",0}, {\"one\",1}, {\"two\",2}, {\"three\",3}, {\"four\",4}, {\"five\",5},\r\n        {\"six\",6}, {\"seven\",7}, {\"eight\",8}, {\"nine\",9}, {\"ten\",10},\r\n        {\"eleven\",11}, {\"twelve\",12}, {\"thirteen\",13}, {\"fourteen\",14},\r\n        {\"fifteen\",15}, {\"sixteen\",16}, {\"seventeen\",17}, {\"eighteen\",18},\r\n        {\"nineteen\",19}, {\"twenty\", 20}, {\"thirty\", 30}, {\"forty\", 40},\r\n        {\"fifty\", 50}, {\"sixty\", 60}, {\"seventy\", 70}, {\"eighty\", 80},\r\n        {\"ninety\", 90}, {\"hundred\", 100}, {\"thousand\", 1000},\r\n        {\"million\", 1_000_000}, {\"billion\", 1_000_000_000}\r\n    }.ToFrozenDictionary();\r\n\r\n    private static readonly FrozenDictionary<string, int> OrdinalsMap = new Dictionary<string, int>\r\n    {\r\n        {\"first\",1}, {\"second\",2}, {\"third\",3}, {\"fourth\",4}, {\"fifth\",5},\r\n        {\"sixth\",6}, {\"seventh\",7}, {\"eighth\",8}, {\"ninth\",9}, {\"tenth\",10},\r\n        {\"eleventh\",11}, {\"twelfth\",12}, {\"thirteenth\",13}, {\"fourteenth\",14},\r\n        {\"fifteenth\",15}, {\"sixteenth\",16}, {\"seventeenth\",17}, {\"eighteenth\",18},\r\n        {\"nineteenth\",19}, {\"twentieth\",20}, {\"thirtieth\",30},\r\n        {\"fortieth\",40}, {\"fiftieth\",50}, {\"sixtieth\",60}, {\"seventieth\",70},\r\n        {\"eightieth\",80}, {\"ninetieth\",90}, {\"hundredth\",100}, {\"thousandth\",1000}\r\n    }.ToFrozenDictionary();\r\n\r\n    public override int Convert(string words)\r\n    {\r\n        if (!TryConvert(words, out var result, out var unrecognizedword))\r\n        {\r\n            throw new ArgumentException($\"Unrecognized number word: {unrecognizedword}\");\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    public override bool TryConvert(string words, out int result) => TryConvert(words, out result, out _);\r\n\r\n    public override bool TryConvert(string words, out int parsedValue, out string? unrecognizedWord)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(words))\r\n        {\r\n            throw new ArgumentException(\"Input words cannot be empty.\");\r\n        }\r\n\r\n        unrecognizedWord = null;\r\n\r\n        words = words.Replace(\",\", \"\")\r\n                     .Replace(\" and \", \" \")\r\n                     .ToLowerInvariant()\r\n                     .Trim();\r\n\r\n        var isNegative = words.StartsWith(\"minus \") || words.StartsWith(\"negative \");\r\n        if (isNegative)\r\n        {\r\n            words = words.Replace(\"minus \", \"\").Replace(\"negative \", \"\").Trim();\r\n        }\r\n\r\n        // Remove ordinal suffixes (st, nd, rd, th)\r\n        words = OrdinalSuffixRegex().Replace(words, \"$1\");\r\n        words = words.Replace(\"-\", \" \");\r\n\r\n        if (int.TryParse(words, out var numericValue))\r\n        {\r\n            parsedValue = isNegative ? -numericValue : numericValue;\r\n            return true;\r\n        }\r\n\r\n        if (OrdinalsMap.TryGetValue(words, out var ordinalValue))\r\n        {\r\n            parsedValue = isNegative ? -ordinalValue : ordinalValue;\r\n            return true;\r\n        }\r\n        if (TryConvertWordsToNumber(words, out var numberValue, out var unrecognizedNumberWord))\r\n        {\r\n            parsedValue = isNegative ? -numberValue : numberValue;\r\n            return true;\r\n        }\r\n\r\n        unrecognizedWord = unrecognizedNumberWord;\r\n        parsedValue = default;\r\n        return false;\r\n    }\r\n\r\n    private static bool TryConvertWordsToNumber(string words, out int result, out string? unrecognizedWord)\r\n    {\r\n        var wordsArray = words.Split(' ', StringSplitOptions.RemoveEmptyEntries);\r\n        result = 0;\r\n        unrecognizedWord = null;\r\n        var current = 0;\r\n        var hasOrdinal = false;\r\n\r\n        foreach (var word in wordsArray)\r\n        {\r\n            if (OrdinalsMap.TryGetValue(word, out var ordinalValue))\r\n            {\r\n                result += current + ordinalValue;\r\n                hasOrdinal = true;\r\n                break; // Stop processing after an ordinal\r\n            }\r\n\r\n            if (!NumbersMap.TryGetValue(word, out var value))\r\n            {\r\n                unrecognizedWord = word;\r\n                return false;\r\n            }\r\n\r\n            if (value == 100)\r\n            {\r\n                current = (current == 0 ? 1 : current) * 100;\r\n            }\r\n            else if (value >= 1000)\r\n            {\r\n                result += (current == 0 ? 1 : current) * value;\r\n                current = 0;\r\n            }\r\n            else\r\n            {\r\n                current += value;\r\n            }\r\n        }\r\n\r\n        if (!hasOrdinal)\r\n        {\r\n            result += current;\r\n        }\r\n\r\n        return true;\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/WordsToNumber/GenderlessWordsToNumberConverter.cs",
    "content": "namespace Humanizer;\r\n\r\ninternal abstract class GenderlessWordsToNumberConverter : IWordsToNumberConverter\r\n{\r\n    public abstract int Convert(string words);\r\n    public abstract bool TryConvert(string words, out int parsedValue);\r\n    public abstract bool TryConvert(string words, out int parsedValue, out string? unrecognizedNumber);\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Localisation/WordsToNumber/IWordsToNumberConverter.cs",
    "content": "namespace Humanizer;\r\n\r\npublic interface IWordsToNumberConverter\r\n{\r\n    bool TryConvert(string words, out int parsedValue);\r\n    bool TryConvert(string words, out int parsedValue, out string? unrecognizedNumber);\r\n\r\n    int Convert(string words);\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/MetricNumeralExtensions.cs",
    "content": "// Wrote by Alois de Gouvello https://github.com/aloisdg\r\n\r\n// The MIT License (MIT)\r\n\r\n// Copyright (c) 2015 Alois de Gouvello\r\n\r\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n// this software and associated documentation files (the \"Software\"), to deal in\r\n// the Software without restriction, including without limitation the rights to\r\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n// the Software, and to permit persons to whom the Software is furnished to do so,\r\n// subject to the following conditions:\r\n\r\n// The above copyright notice and this permission notice shall be included in all\r\n// copies or substantial portions of the Software.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// Contains extension methods for changing a number to Metric representation (ToMetric)\r\n/// and from Metric representation back to the number (FromMetric)\r\n/// </summary>\r\npublic static class MetricNumeralExtensions\r\n{\r\n    const int Limit = 27;\r\n\r\n    static readonly double BigLimit = Math.Pow(10, Limit);\r\n    static readonly double SmallLimit = Math.Pow(10, -Limit);\r\n\r\n    /// <summary>\r\n    /// Symbols is a list of every symbols for the Metric system.\r\n    /// </summary>\r\n    static readonly List<char>[] Symbols =\r\n    [\r\n        ['k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'],\r\n        ['m', 'μ', 'n', 'p', 'f', 'a', 'z', 'y']\r\n    ];\r\n\r\n    /// <summary>\r\n    /// UnitPrefixes link a Metric symbol (as key) to its prefix (as value).\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// We dont support :\r\n    /// {'h', \"hecto\"},\r\n    /// {'da', \"deca\" }, // !string\r\n    /// {'d', \"deci\" },\r\n    /// {'c', \"centi\"},\r\n    /// </remarks>\r\n    static readonly FrozenDictionary<char, UnitPrefix> UnitPrefixes = new Dictionary<char, UnitPrefix>\r\n    {\r\n        {\r\n            'Y', new(\"yotta\", \"septillion\", \"quadrillion\")\r\n        },\r\n        {\r\n            'Z', new(\"zetta\", \"sextillion\", \"trilliard\")\r\n        },\r\n        {\r\n            'E', new(\"exa\", \"quintillion\", \"trillion\")\r\n        },\r\n        {\r\n            'P', new(\"peta\", \"quadrillion\", \"billiard\")\r\n        },\r\n        {\r\n            'T', new(\"tera\", \"trillion\", \"billion\")\r\n        },\r\n        {\r\n            'G', new(\"giga\", \"billion\", \"milliard\")\r\n        },\r\n        {\r\n            'M', new(\"mega\", \"million\")\r\n        },\r\n        {\r\n            'k', new(\"kilo\", \"thousand\")\r\n        },\r\n\r\n        {\r\n            'm', new(\"milli\", \"thousandth\")\r\n        },\r\n        {\r\n            'μ', new(\"micro\", \"millionth\")\r\n        },\r\n        {\r\n            'n', new(\"nano\", \"billionth\", \"milliardth\")\r\n        },\r\n        {\r\n            'p', new(\"pico\", \"trillionth\", \"billionth\")\r\n        },\r\n        {\r\n            'f', new(\"femto\", \"quadrillionth\", \"billiardth\")\r\n        },\r\n        {\r\n            'a', new(\"atto\", \"quintillionth\", \"trillionth\")\r\n        },\r\n        {\r\n            'z', new(\"zepto\", \"sextillionth\", \"trilliardth\")\r\n        },\r\n        {\r\n            'y', new(\"yocto\", \"septillionth\", \"quadrillionth\")\r\n        }\r\n    }.ToFrozenDictionary();\r\n\r\n    /// <summary>\r\n    /// Converts a Metric representation into a number.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// We don't support input in the format {number}{name} nor {number} {name}.\r\n    /// We only provide a solution for {number}{symbol} and {number} {symbol}.\r\n    /// </remarks>\r\n    /// <param name=\"input\">Metric representation to convert to a number</param>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"1k\".FromMetric() => 1000d\r\n    /// \"123\".FromMetric() => 123d\r\n    /// \"100m\".FromMetric() => 1E-1\r\n    /// </code>\r\n    /// </example>\r\n    /// <returns>A number after a conversion from a Metric representation.</returns>\r\n    public static double FromMetric(this string input)\r\n    {\r\n        input = CleanRepresentation(input);\r\n        return BuildNumber(input, input[^1]);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Converts a number into a valid and Human-readable Metric representation.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Inspired by a snippet from Thom Smith.\r\n    /// See <a href=\"http://stackoverflow.com/questions/12181024/formatting-a-number-with-a-metric-prefix\">this link</a> for more.\r\n    /// </remarks>\r\n    /// <param name=\"input\">Number to convert to a Metric representation.</param>\r\n    /// <param name=\"formats\">A bitwise combination of <see cref=\"MetricNumeralFormats\"/> enumeration values that format the metric representation.</param>\r\n    /// <param name=\"decimals\">If not null it is the numbers of decimals to round the number to</param>\r\n    /// <example>\r\n    /// <code>\r\n    /// 1000.ToMetric() => \"1k\"\r\n    /// 123.ToMetric() => \"123\"\r\n    /// 1E-1.ToMetric() => \"100m\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <returns>A valid Metric representation</returns>\r\n    public static string ToMetric(this int input, MetricNumeralFormats? formats = null, int? decimals = null) =>\r\n        ((double)input).ToMetric(formats, decimals);\r\n\r\n    /// <summary>\r\n    /// Converts a number into a valid and Human-readable Metric representation.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Inspired by a snippet from Thom Smith.\r\n    /// See <a href=\"http://stackoverflow.com/questions/12181024/formatting-a-number-with-a-metric-prefix\">this link</a> for more.\r\n    /// </remarks>\r\n    /// <param name=\"input\">Number to convert to a Metric representation.</param>\r\n    /// <param name=\"formats\">A bitwise combination of <see cref=\"MetricNumeralFormats\"/> enumeration values that format the metric representation.</param>\r\n    /// <param name=\"decimals\">If not null it is the numbers of decimals to round the number to</param>\r\n    /// <example>\r\n    /// <code>\r\n    /// 1000.ToMetric() => \"1k\"\r\n    /// 123.ToMetric() => \"123\"\r\n    /// 1E-1.ToMetric() => \"100m\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <returns>A valid Metric representation</returns>\r\n    public static string ToMetric(this long input, MetricNumeralFormats? formats = null, int? decimals = null)\r\n    {\r\n        if (input.Equals(0) && (!decimals.HasValue || (decimals == 0)))\r\n        {\r\n            return input.ToString();\r\n        }\r\n\r\n        return BuildRepresentation(input, formats, decimals);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Converts a number into a valid and Human-readable Metric representation.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Inspired by a snippet from Thom Smith.\r\n    /// See <a href=\"http://stackoverflow.com/questions/12181024/formatting-a-number-with-a-metric-prefix\">this link</a> for more.\r\n    /// </remarks>\r\n    /// <param name=\"input\">Number to convert to a Metric representation.</param>\r\n    /// <param name=\"formats\">A bitwise combination of <see cref=\"MetricNumeralFormats\"/> enumeration values that format the metric representation.</param>\r\n    /// <param name=\"decimals\">If not null it is the numbers of decimals to round the number to</param>\r\n    /// <example>\r\n    /// <code>\r\n    /// 1000d.ToMetric() => \"1k\"\r\n    /// 123d.ToMetric() => \"123\"\r\n    /// 1E-1.ToMetric() => \"100m\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <returns>A valid Metric representation</returns>\r\n    public static string ToMetric(this double input, MetricNumeralFormats? formats = null, int? decimals = null)\r\n    {\r\n        if (input.Equals(0))\r\n        {\r\n            return input.ToString();\r\n        }\r\n\r\n        if (input.IsOutOfRange())\r\n        {\r\n            throw new ArgumentOutOfRangeException(nameof(input));\r\n        }\r\n\r\n        return BuildRepresentation(input, formats, decimals);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Clean or handle any wrong input\r\n    /// </summary>\r\n    /// <param name=\"input\">Metric representation to clean</param>\r\n    /// <returns>A cleaned representation</returns>\r\n    static string CleanRepresentation(string input)\r\n    {\r\n        ArgumentNullException.ThrowIfNull(input);\r\n\r\n        input = input.Trim();\r\n        input = ReplaceNameBySymbol(input);\r\n        if (input.Length == 0 || input.IsInvalidMetricNumeral())\r\n        {\r\n            throw new ArgumentException(\"Empty or invalid Metric string.\", nameof(input));\r\n        }\r\n\r\n        return input.Replace(\" \", string.Empty);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Build a number from a metric representation or from a number\r\n    /// </summary>\r\n    /// <param name=\"input\">A Metric representation to parse to a number</param>\r\n    /// <param name=\"last\">The last character of input</param>\r\n    /// <returns>A number build from a Metric representation</returns>\r\n    static double BuildNumber(string input, char last) =>\r\n        char.IsLetter(last)\r\n            ? BuildMetricNumber(input, last)\r\n            : double.Parse(input);\r\n\r\n    /// <summary>\r\n    /// Build a number from a metric representation\r\n    /// </summary>\r\n    /// <param name=\"input\">A Metric representation to parse to a number</param>\r\n    /// <param name=\"last\">The last character of input</param>\r\n    /// <returns>A number build from a Metric representation</returns>\r\n    static double BuildMetricNumber(string input, char last)\r\n    {\r\n        var number = double.Parse(input[..^1]);\r\n        var indexInPositive = Symbols[0].IndexOf(last);\r\n        if (indexInPositive >= 0)\r\n        {\r\n            var exponent = (indexInPositive + 1) * 3.0;\r\n            return number * Math.Pow(10, exponent);\r\n        }\r\n        else\r\n        {\r\n            var indexInNegative = Symbols[1].IndexOf(last);\r\n            var exponent = (indexInNegative + 1) * 3.0;\r\n            return number * Math.Pow(10, -exponent);\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Replace every symbol's name by its symbol representation.\r\n    /// </summary>\r\n    /// <param name=\"input\">Metric representation with a name or a symbol</param>\r\n    /// <returns>A metric representation with a symbol</returns>\r\n    static string ReplaceNameBySymbol(string input) =>\r\n        UnitPrefixes.Aggregate(input, (current, unitPrefix) =>\r\n            current.Replace(unitPrefix.Value.Name, unitPrefix.Key.ToString()));\r\n\r\n    /// <summary>\r\n    /// Build a Metric representation of the number.\r\n    /// </summary>\r\n    /// <param name=\"input\">Number to convert to a Metric representation.</param>\r\n    /// <param name=\"formats\">A bitwise combination of <see cref=\"MetricNumeralFormats\"/> enumeration values that format the metric representation.</param>\r\n    /// <param name=\"decimals\">If not null it is the numbers of decimals to round the number to</param>\r\n    /// <returns>A number in a Metric representation</returns>\r\n    static string BuildRepresentation(long input, MetricNumeralFormats? formats, int? decimals)\r\n    {\r\n        var number = Math.Abs(input / 10);\r\n        var exponent = 0;\r\n\r\n        while (number > 0)\r\n        {\r\n            exponent++;\r\n            number /= 10;\r\n        }\r\n\r\n        var scale = exponent / 3;\r\n\r\n        if (!scale.Equals(0))\r\n        {\r\n            return BuildMetricRepresentation(input, scale, formats, decimals);\r\n        }\r\n\r\n        var representation = decimals > 0\r\n            ? $\"{input}.{new string('0', decimals.Value)}\"\r\n            : input.ToString();\r\n        var space = (formats & MetricNumeralFormats.WithSpace) == MetricNumeralFormats.WithSpace ? \" \" : string.Empty;\r\n        return representation + space;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Build a Metric representation of the number.\r\n    /// </summary>\r\n    /// <param name=\"input\">Number to convert to a Metric representation.</param>\r\n    /// <param name=\"scale\">Number of times number should be divided by 1000.</param>\r\n    /// <param name=\"formats\">A bitwise combination of <see cref=\"MetricNumeralFormats\"/> enumeration values that format the metric representation.</param>\r\n    /// <param name=\"decimals\">If not null it is the numbers of decimals to round the number to</param>\r\n    /// <returns>A number in a Metric representation</returns>\r\n    static string BuildMetricRepresentation(long input, int scale, MetricNumeralFormats? formats, int? decimals)\r\n    {\r\n        // Convert back to actual exponent (number of 10s places)\r\n        var exponent = scale * 3;\r\n\r\n        var divisor = 1L;\r\n\r\n        for (var i = 0; i < scale; i++)\r\n        {\r\n            divisor *= 1000;\r\n        }\r\n\r\n        var number = input / divisor;\r\n        var fractionalPart = Math.Abs(input % divisor); // input could be negative\r\n\r\n        if (Math.Abs(number) >= 1000 && exponent < Symbols[0].Count * 3)\r\n        {\r\n            exponent += 3;\r\n            scale++;\r\n            divisor *= 1000;\r\n\r\n            number = input / divisor;\r\n            fractionalPart = Math.Abs(input % divisor);\r\n        }\r\n\r\n        if (decimals.HasValue)\r\n        {\r\n            for (var i = decimals.Value; i < exponent; i++)\r\n            {\r\n                var roundUp = (i + 1 == exponent);\r\n\r\n                fractionalPart = (fractionalPart + (roundUp ? 5 : 0)) / 10;\r\n            }\r\n        }\r\n        else\r\n        {\r\n            decimals = exponent;\r\n        }\r\n\r\n        var symbol = Math.Sign(scale) == 1\r\n            ? Symbols[0][scale - 1]\r\n            : Symbols[1][-scale - 1];\r\n\r\n        if (decimals == 0)\r\n        {\r\n            var space = formats.HasValue && formats.Value.HasFlag(MetricNumeralFormats.WithSpace) ? \" \" : string.Empty;\r\n            return number + space + GetUnitText(symbol, formats);\r\n        }\r\n        else\r\n        {\r\n            var decimalPlaces = Math.Min(decimals.Value, exponent);\r\n            var extraZeroes = (decimals.Value - decimalPlaces);\r\n            var space = formats.HasValue && formats.Value.HasFlag(MetricNumeralFormats.WithSpace) ? \" \" : string.Empty;\r\n\r\n            return number\r\n                 + CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator\r\n                 + fractionalPart.ToString(\"d\" + decimalPlaces)\r\n                 + (extraZeroes <= 0 ? string.Empty : new string('0', extraZeroes))\r\n                 + space\r\n                 + GetUnitText(symbol, formats);\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Build a Metric representation of the number.\r\n    /// </summary>\r\n    /// <param name=\"input\">Number to convert to a Metric representation.</param>\r\n    /// <param name=\"formats\">A bitwise combination of <see cref=\"MetricNumeralFormats\"/> enumeration values that format the metric representation.</param>\r\n    /// <param name=\"decimals\">If not null it is the numbers of decimals to round the number to</param>\r\n    /// <returns>A number in a Metric representation</returns>\r\n    static string BuildRepresentation(double input, MetricNumeralFormats? formats, int? decimals)\r\n    {\r\n        var exponent = (int)Math.Floor(Math.Log10(Math.Abs(input)) / 3);\r\n\r\n        if (!exponent.Equals(0))\r\n        {\r\n            return BuildMetricRepresentation(input, exponent, formats, decimals);\r\n        }\r\n\r\n        var representation = decimals.HasValue\r\n            ? Math\r\n                .Round(input, decimals.Value)\r\n                .ToString()\r\n            : input.ToString();\r\n        var space = (formats & MetricNumeralFormats.WithSpace) == MetricNumeralFormats.WithSpace ? \" \" : string.Empty;\r\n        return representation + space;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Build a Metric representation of the number.\r\n    /// </summary>\r\n    /// <param name=\"input\">Number to convert to a Metric representation.</param>\r\n    /// <param name=\"exponent\">Exponent of the number in a scientific notation</param>\r\n    /// <param name=\"formats\">A bitwise combination of <see cref=\"MetricNumeralFormats\"/> enumeration values that format the metric representation.</param>\r\n    /// <param name=\"decimals\">If not null it is the numbers of decimals to round the number to</param>\r\n    /// <returns>A number in a Metric representation</returns>\r\n    static string BuildMetricRepresentation(double input, int exponent, MetricNumeralFormats? formats, int? decimals)\r\n    {\r\n        var number = input * Math.Pow(1000, -exponent);\r\n        if (decimals.HasValue)\r\n        {\r\n            number = Math.Round(number, decimals.Value);\r\n        }\r\n\r\n        if (Math.Abs(number) >= 1000 && exponent < Symbols[0].Count)\r\n        {\r\n            number /= 1000;\r\n            exponent += 1;\r\n        }\r\n\r\n        var symbol = Math.Sign(exponent) == 1\r\n            ? Symbols[0][exponent - 1]\r\n            : Symbols[1][-exponent - 1];\r\n        var space = formats.HasValue && formats.Value.HasFlag(MetricNumeralFormats.WithSpace) ? \" \" : string.Empty;\r\n        return number.ToString(\"G15\") + space + GetUnitText(symbol, formats);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Get the unit from a symbol of from the symbol's name.\r\n    /// </summary>\r\n    /// <param name=\"symbol\">The symbol linked to the unit</param>\r\n    /// <param name=\"formats\">A bitwise combination of <see cref=\"MetricNumeralFormats\"/> enumeration values that format the metric representation.</param>\r\n    /// <returns>A symbol, a symbol's name, a symbol's short scale word or a symbol's long scale word</returns>\r\n    static string GetUnitText(char symbol, MetricNumeralFormats? formats)\r\n    {\r\n        if (formats.HasValue)\r\n        {\r\n            var formatValue = formats.Value;\r\n            if (formatValue.HasFlag(MetricNumeralFormats.UseName))\r\n            {\r\n                return UnitPrefixes[symbol].Name;\r\n            }\r\n\r\n            if (formatValue.HasFlag(MetricNumeralFormats.UseShortScaleWord))\r\n            {\r\n                return UnitPrefixes[symbol].ShortScaleWord;\r\n            }\r\n\r\n            if (formatValue.HasFlag(MetricNumeralFormats.UseLongScaleWord))\r\n            {\r\n                return UnitPrefixes[symbol].LongScaleWord;\r\n            }\r\n        }\r\n\r\n        return symbol.ToString();\r\n    }\r\n\r\n    /// <summary>\r\n    /// Check if a Metric representation is out of the valid range.\r\n    /// </summary>\r\n    /// <param name=\"input\">A Metric representation that may be out of the valid range.</param>\r\n    /// <returns>True if input is out of the valid range.</returns>\r\n    static bool IsOutOfRange(this double input)\r\n    {\r\n        bool outside(double min, double max) => !(max > input && input > min);\r\n\r\n        return (Math.Sign(input) == 1 && outside(SmallLimit, BigLimit))\r\n               || (Math.Sign(input) == -1 && outside(-BigLimit, -SmallLimit));\r\n    }\r\n\r\n    /// <summary>\r\n    /// Check if a string is not a valid Metric representation.\r\n    /// A valid representation is in the format \"{0}{1}\" or \"{0} {1}\"\r\n    /// where {0} is a number and {1} is an allowed symbol.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// ToDo: Performance: Use (string input, out number) to escape the double use of Parse()\r\n    /// </remarks>\r\n    /// <param name=\"input\">>A string that may contain an invalid Metric representation.</param>\r\n    /// <returns>True if input is not a valid Metric representation.</returns>\r\n    static bool IsInvalidMetricNumeral(this string input)\r\n    {\r\n        var index = input.Length - 1;\r\n        var last = input[index];\r\n        var isSymbol = UnitPrefixes.ContainsKey(last);\r\n        return !double.TryParse(isSymbol ? input[..index] : input, out _);\r\n    }\r\n\r\n    struct UnitPrefix(string name, string shortScaleWord, string? longScaleWord = null)\r\n    {\r\n        public string Name { get; } = name;\r\n        public string ShortScaleWord { get; } = shortScaleWord;\r\n        public readonly string LongScaleWord => longScaleWord ?? ShortScaleWord;\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/MetricNumeralFormats.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Flags for formatting the metric representation of numerals.\r\n/// </summary>\r\n[Flags]\r\npublic enum MetricNumeralFormats\r\n{\r\n    /// <summary>\r\n    /// Use the metric prefix <a href=\"https://en.wikipedia.org/wiki/Long_and_short_scales\">long scale word</a>.\r\n    /// </summary>\r\n    UseLongScaleWord = 1,\r\n\r\n    /// <summary>\r\n    /// Use the metric prefix <a href=\"https://en.wikipedia.org/wiki/Metric_prefix#List_of_SI_prefixes\">name</a> instead of the symbol.\r\n    /// </summary>\r\n    UseName = 2,\r\n\r\n    /// <summary>\r\n    /// Use the metric prefix <a href=\"https://en.wikipedia.org/wiki/Long_and_short_scales\">short scale word</a>.\r\n    /// </summary>\r\n    UseShortScaleWord = 4,\r\n\r\n    /// <summary>\r\n    /// Include a space after the numeral.\r\n    /// </summary>\r\n    WithSpace = 8\r\n}"
  },
  {
    "path": "src/Humanizer/NoMatchFoundException.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// This is thrown on String.DehumanizeTo enum when the provided string cannot be mapped to the target enum\r\n/// </summary>\r\n#pragma warning disable 1591\r\npublic class NoMatchFoundException : Exception\r\n{\r\n    public NoMatchFoundException()\r\n    {\r\n    }\r\n\r\n    public NoMatchFoundException(string message)\r\n        : base(message)\r\n    {\r\n    }\r\n\r\n    public NoMatchFoundException(string message, Exception inner)\r\n        : base(message, inner)\r\n    {\r\n    }\r\n}\r\n#pragma warning restore 1591"
  },
  {
    "path": "src/Humanizer/NumberToNumberExtensions.cs",
    "content": "﻿using System.Runtime.CompilerServices;\r\n\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// Number to Number extensions\r\n/// </summary>\r\npublic static class NumberToNumberExtensions\r\n{\r\n    /// <summary>\r\n    /// Multiplies an integer by 10, providing a more readable way to express multiples of ten in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The integer value to multiply by 10.</param>\r\n    /// <returns>The input value multiplied by 10.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 5.Tens() => 50\r\n    /// 3.Tens() => 30\r\n    /// 10.Tens() => 100\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static int Tens(this int input) =>\r\n        input * 10;\r\n\r\n    /// <summary>\r\n    /// Multiplies an unsigned integer by 10, providing a more readable way to express multiples of ten in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The unsigned integer value to multiply by 10.</param>\r\n    /// <returns>The input value multiplied by 10.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 5U.Tens() => 50U\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static uint Tens(this uint input) =>\r\n        input * 10;\r\n\r\n    /// <summary>\r\n    /// Multiplies a long integer by 10, providing a more readable way to express multiples of ten in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The long integer value to multiply by 10.</param>\r\n    /// <returns>The input value multiplied by 10.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 5L.Tens() => 50L\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static long Tens(this long input) =>\r\n        input * 10;\r\n\r\n    /// <summary>\r\n    /// Multiplies an unsigned long integer by 10, providing a more readable way to express multiples of ten in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The unsigned long integer value to multiply by 10.</param>\r\n    /// <returns>The input value multiplied by 10.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 5UL.Tens() => 50UL\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static ulong Tens(this ulong input) =>\r\n        input * 10;\r\n\r\n    /// <summary>\r\n    /// Multiplies a double by 10, providing a more readable way to express multiples of ten in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The double value to multiply by 10.</param>\r\n    /// <returns>The input value multiplied by 10.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 5.5.Tens() => 55.0\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static double Tens(this double input) =>\r\n        input * 10;\r\n\r\n    /// <summary>\r\n    /// Multiplies an integer by 100, providing a more readable way to express hundreds in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The integer value to multiply by 100.</param>\r\n    /// <returns>The input value multiplied by 100.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 4.Hundreds() => 400\r\n    /// 2.Hundreds() => 200\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static int Hundreds(this int input) =>\r\n        input * 100;\r\n\r\n    /// <summary>\r\n    /// Multiplies an unsigned integer by 100, providing a more readable way to express hundreds in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The unsigned integer value to multiply by 100.</param>\r\n    /// <returns>The input value multiplied by 100.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 4U.Hundreds() => 400U\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static uint Hundreds(this uint input) =>\r\n        input * 100;\r\n\r\n    /// <summary>\r\n    /// Multiplies a long integer by 100, providing a more readable way to express hundreds in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The long integer value to multiply by 100.</param>\r\n    /// <returns>The input value multiplied by 100.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 4L.Hundreds() => 400L\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static long Hundreds(this long input) =>\r\n        input * 100;\r\n\r\n    /// <summary>\r\n    /// Multiplies an unsigned long integer by 100, providing a more readable way to express hundreds in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The unsigned long integer value to multiply by 100.</param>\r\n    /// <returns>The input value multiplied by 100.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 4UL.Hundreds() => 400UL\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static ulong Hundreds(this ulong input) =>\r\n        input * 100;\r\n\r\n    /// <summary>\r\n    /// Multiplies a double by 100, providing a more readable way to express hundreds in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The double value to multiply by 100.</param>\r\n    /// <returns>The input value multiplied by 100.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 4.0.Hundreds() => 400.0\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static double Hundreds(this double input) =>\r\n        input * 100;\r\n\r\n    /// <summary>\r\n    /// Multiplies an integer by 1000, providing a more readable way to express thousands in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The integer value to multiply by 1000.</param>\r\n    /// <returns>The input value multiplied by 1000.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 3.Thousands() => 3000\r\n    /// 10.Thousands() => 10000\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static int Thousands(this int input) =>\r\n        input * 1000;\r\n\r\n    /// <summary>\r\n    /// Multiplies an unsigned integer by 1000, providing a more readable way to express thousands in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The unsigned integer value to multiply by 1000.</param>\r\n    /// <returns>The input value multiplied by 1000.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 3U.Thousands() => 3000U\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static uint Thousands(this uint input) =>\r\n        input * 1000;\r\n\r\n    /// <summary>\r\n    /// Multiplies a long integer by 1000, providing a more readable way to express thousands in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The long integer value to multiply by 1000.</param>\r\n    /// <returns>The input value multiplied by 1000.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 3L.Thousands() => 3000L\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static long Thousands(this long input) =>\r\n        input * 1000;\r\n\r\n    /// <summary>\r\n    /// Multiplies an unsigned long integer by 1000, providing a more readable way to express thousands in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The unsigned long integer value to multiply by 1000.</param>\r\n    /// <returns>The input value multiplied by 1000.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 3UL.Thousands() => 3000UL\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static ulong Thousands(this ulong input) =>\r\n        input * 1000;\r\n\r\n    /// <summary>\r\n    /// Multiplies a double by 1000, providing a more readable way to express thousands in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The double value to multiply by 1000.</param>\r\n    /// <returns>The input value multiplied by 1000.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 3.0.Thousands() => 3000.0\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static double Thousands(this double input) =>\r\n        input * 1000;\r\n\r\n    /// <summary>\r\n    /// Multiplies an integer by 1,000,000, providing a more readable way to express millions in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The integer value to multiply by 1,000,000.</param>\r\n    /// <returns>The input value multiplied by 1,000,000.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2.Millions() => 2000000\r\n    /// 5.Millions() => 5000000\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static int Millions(this int input) =>\r\n        input * 1000000;\r\n\r\n    /// <summary>\r\n    /// Multiplies an unsigned integer by 1,000,000, providing a more readable way to express millions in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The unsigned integer value to multiply by 1,000,000.</param>\r\n    /// <returns>The input value multiplied by 1,000,000.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2U.Millions() => 2000000U\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static uint Millions(this uint input) =>\r\n        input * 1000000;\r\n\r\n    /// <summary>\r\n    /// Multiplies a long integer by 1,000,000, providing a more readable way to express millions in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The long integer value to multiply by 1,000,000.</param>\r\n    /// <returns>The input value multiplied by 1,000,000.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2L.Millions() => 2000000L\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static long Millions(this long input) =>\r\n        input * 1000000;\r\n\r\n    /// <summary>\r\n    /// Multiplies an unsigned long integer by 1,000,000, providing a more readable way to express millions in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The unsigned long integer value to multiply by 1,000,000.</param>\r\n    /// <returns>The input value multiplied by 1,000,000.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2UL.Millions() => 2000000UL\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static ulong Millions(this ulong input) =>\r\n        input * 1000000;\r\n\r\n    /// <summary>\r\n    /// Multiplies a double by 1,000,000, providing a more readable way to express millions in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The double value to multiply by 1,000,000.</param>\r\n    /// <returns>The input value multiplied by 1,000,000.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2.0.Millions() => 2000000.0\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static double Millions(this double input) =>\r\n        input * 1000000;\r\n\r\n    /// <summary>\r\n    /// Multiplies an integer by 1,000,000,000 (one billion in short scale), providing a more readable way to express billions in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The integer value to multiply by 1,000,000,000.</param>\r\n    /// <returns>The input value multiplied by 1,000,000,000.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 1.Billions() => 1000000000\r\n    /// 2.Billions() => 2000000000\r\n    /// </code>\r\n    /// </example>\r\n    /// <remarks>\r\n    /// Uses the short scale definition where 1 billion = 1,000,000,000 (10^9).\r\n    /// </remarks>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static int Billions(this int input) =>\r\n        input * 1000000000;\r\n\r\n    /// <summary>\r\n    /// Multiplies an unsigned integer by 1,000,000,000 (one billion in short scale), providing a more readable way to express billions in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The unsigned integer value to multiply by 1,000,000,000.</param>\r\n    /// <returns>The input value multiplied by 1,000,000,000.</returns>\r\n    /// <remarks>\r\n    /// Uses the short scale definition where 1 billion = 1,000,000,000 (10^9).\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// 1U.Billions() => 1000000000U\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static uint Billions(this uint input) =>\r\n        input * 1000000000;\r\n\r\n    /// <summary>\r\n    /// Multiplies a long integer by 1,000,000,000 (one billion in short scale), providing a more readable way to express billions in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The long integer value to multiply by 1,000,000,000.</param>\r\n    /// <returns>The input value multiplied by 1,000,000,000.</returns>\r\n    /// <remarks>\r\n    /// Uses the short scale definition where 1 billion = 1,000,000,000 (10^9).\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// 1L.Billions() => 1000000000L\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static long Billions(this long input) =>\r\n        input * 1000000000;\r\n\r\n    /// <summary>\r\n    /// Multiplies an unsigned long integer by 1,000,000,000 (one billion in short scale), providing a more readable way to express billions in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The unsigned long integer value to multiply by 1,000,000,000.</param>\r\n    /// <returns>The input value multiplied by 1,000,000,000.</returns>\r\n    /// <remarks>\r\n    /// Uses the short scale definition where 1 billion = 1,000,000,000 (10^9).\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// 1UL.Billions() => 1000000000UL\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static ulong Billions(this ulong input) =>\r\n        input * 1000000000;\r\n\r\n    /// <summary>\r\n    /// Multiplies a double by 1,000,000,000 (one billion in short scale), providing a more readable way to express billions in code.\r\n    /// </summary>\r\n    /// <param name=\"input\">The double value to multiply by 1,000,000,000.</param>\r\n    /// <returns>The input value multiplied by 1,000,000,000.</returns>\r\n    /// <remarks>\r\n    /// Uses the short scale definition where 1 billion = 1,000,000,000 (10^9).\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// 1.0.Billions() => 1000000000.0\r\n    /// </code>\r\n    /// </example>\r\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n    public static double Billions(this double input) =>\r\n        input * 1000000000;\r\n}"
  },
  {
    "path": "src/Humanizer/NumberToTimeSpanExtensions.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Provides extension methods for converting numeric values to <see cref=\"TimeSpan\"/> instances,\r\n/// enabling fluent and readable time duration creation (e.g., 5.Seconds(), 3.Hours(), 2.Weeks()).\r\n/// </summary>\r\n/// <remarks>\r\n/// These extensions make it easy to create TimeSpan values in a more natural, readable way:\r\n/// - Instead of TimeSpan.FromHours(3), you can write 3.Hours()\r\n/// - Instead of TimeSpan.FromMinutes(30), you can write 30.Minutes()\r\n/// - Supports all numeric types: byte, sbyte, short, ushort, int, uint, long, ulong, and double\r\n/// - Weeks are converted to days (1 week = 7 days)\r\n/// </remarks>\r\npublic static class NumberToTimeSpanExtensions\r\n{\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of milliseconds.\r\n    /// </summary>\r\n    /// <param name=\"ms\">The number of milliseconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"ms\"/> milliseconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 500.Milliseconds() => TimeSpan representing 500 milliseconds\r\n    /// 1000.Milliseconds() => TimeSpan representing 1 second\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Milliseconds(this byte ms) =>\r\n        Milliseconds((double)ms);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of milliseconds.\r\n    /// </summary>\r\n    /// <param name=\"ms\">The number of milliseconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"ms\"/> milliseconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((sbyte)500).Milliseconds() => TimeSpan.FromMilliseconds(500)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Milliseconds(this sbyte ms) =>\r\n        Milliseconds((double)ms);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of milliseconds.\r\n    /// </summary>\r\n    /// <param name=\"ms\">The number of milliseconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"ms\"/> milliseconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((short)500).Milliseconds() => TimeSpan.FromMilliseconds(500)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Milliseconds(this short ms) =>\r\n        Milliseconds((double)ms);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of milliseconds.\r\n    /// </summary>\r\n    /// <param name=\"ms\">The number of milliseconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"ms\"/> milliseconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((ushort)500).Milliseconds() => TimeSpan.FromMilliseconds(500)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Milliseconds(this ushort ms) =>\r\n        Milliseconds((double)ms);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of milliseconds.\r\n    /// </summary>\r\n    /// <param name=\"ms\">The number of milliseconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"ms\"/> milliseconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 500.Milliseconds() => TimeSpan.FromMilliseconds(500)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Milliseconds(this int ms) =>\r\n        Milliseconds((double)ms);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of milliseconds.\r\n    /// </summary>\r\n    /// <param name=\"ms\">The number of milliseconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"ms\"/> milliseconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 500U.Milliseconds() => TimeSpan.FromMilliseconds(500)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Milliseconds(this uint ms) =>\r\n        Milliseconds((double)ms);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of milliseconds.\r\n    /// </summary>\r\n    /// <param name=\"ms\">The number of milliseconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"ms\"/> milliseconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 500L.Milliseconds() => TimeSpan.FromMilliseconds(500)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Milliseconds(this long ms) =>\r\n        Milliseconds((double)ms);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of milliseconds.\r\n    /// </summary>\r\n    /// <param name=\"ms\">The number of milliseconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"ms\"/> milliseconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 500UL.Milliseconds() => TimeSpan.FromMilliseconds(500)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Milliseconds(this ulong ms) =>\r\n        Milliseconds((double)ms);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of milliseconds.\r\n    /// </summary>\r\n    /// <param name=\"ms\">The number of milliseconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"ms\"/> milliseconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 500.0.Milliseconds() => TimeSpan.FromMilliseconds(500)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Milliseconds(this double ms) =>\r\n        TimeSpan.FromMilliseconds(ms);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of seconds.\r\n    /// </summary>\r\n    /// <param name=\"seconds\">The number of seconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"seconds\"/> seconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((byte)30).Seconds() => TimeSpan.FromSeconds(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Seconds(this byte seconds) =>\r\n        Seconds((double)seconds);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of seconds.\r\n    /// </summary>\r\n    /// <param name=\"seconds\">The number of seconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"seconds\"/> seconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((sbyte)30).Seconds() => TimeSpan.FromSeconds(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Seconds(this sbyte seconds) =>\r\n        Seconds((double)seconds);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of seconds.\r\n    /// </summary>\r\n    /// <param name=\"seconds\">The number of seconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"seconds\"/> seconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((short)30).Seconds() => TimeSpan.FromSeconds(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Seconds(this short seconds) =>\r\n        Seconds((double)seconds);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of seconds.\r\n    /// </summary>\r\n    /// <param name=\"seconds\">The number of seconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"seconds\"/> seconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((ushort)30).Seconds() => TimeSpan.FromSeconds(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Seconds(this ushort seconds) =>\r\n        Seconds((double)seconds);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of seconds.\r\n    /// </summary>\r\n    /// <param name=\"seconds\">The number of seconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"seconds\"/> seconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 30.Seconds() => TimeSpan.FromSeconds(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Seconds(this int seconds) =>\r\n        Seconds((double)seconds);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of seconds.\r\n    /// </summary>\r\n    /// <param name=\"seconds\">The number of seconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"seconds\"/> seconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 30U.Seconds() => TimeSpan.FromSeconds(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Seconds(this uint seconds) =>\r\n        Seconds((double)seconds);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of seconds.\r\n    /// </summary>\r\n    /// <param name=\"seconds\">The number of seconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"seconds\"/> seconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 30L.Seconds() => TimeSpan.FromSeconds(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Seconds(this long seconds) =>\r\n        Seconds((double)seconds);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of seconds.\r\n    /// </summary>\r\n    /// <param name=\"seconds\">The number of seconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"seconds\"/> seconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 30UL.Seconds() => TimeSpan.FromSeconds(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Seconds(this ulong seconds) =>\r\n        Seconds((double)seconds);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of seconds.\r\n    /// </summary>\r\n    /// <param name=\"seconds\">The number of seconds.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"seconds\"/> seconds.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 30.Seconds() => TimeSpan representing 30 seconds\r\n    /// 90.Seconds() => TimeSpan representing 1 minute and 30 seconds\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Seconds(this double seconds) =>\r\n        TimeSpan.FromSeconds(seconds);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of minutes.\r\n    /// </summary>\r\n    /// <param name=\"minutes\">The number of minutes.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"minutes\"/> minutes.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((byte)30).Minutes() => TimeSpan.FromMinutes(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Minutes(this byte minutes) =>\r\n        Minutes((double)minutes);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of minutes.\r\n    /// </summary>\r\n    /// <param name=\"minutes\">The number of minutes.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"minutes\"/> minutes.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((sbyte)30).Minutes() => TimeSpan.FromMinutes(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Minutes(this sbyte minutes) =>\r\n        Minutes((double)minutes);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of minutes.\r\n    /// </summary>\r\n    /// <param name=\"minutes\">The number of minutes.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"minutes\"/> minutes.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((short)30).Minutes() => TimeSpan.FromMinutes(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Minutes(this short minutes) =>\r\n        Minutes((double)minutes);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of minutes.\r\n    /// </summary>\r\n    /// <param name=\"minutes\">The number of minutes.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"minutes\"/> minutes.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((ushort)30).Minutes() => TimeSpan.FromMinutes(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Minutes(this ushort minutes) =>\r\n        Minutes((double)minutes);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of minutes.\r\n    /// </summary>\r\n    /// <param name=\"minutes\">The number of minutes.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"minutes\"/> minutes.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 30.Minutes() => TimeSpan.FromMinutes(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Minutes(this int minutes) =>\r\n        Minutes((double)minutes);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of minutes.\r\n    /// </summary>\r\n    /// <param name=\"minutes\">The number of minutes.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"minutes\"/> minutes.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 30U.Minutes() => TimeSpan.FromMinutes(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Minutes(this uint minutes) =>\r\n        Minutes((double)minutes);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of minutes.\r\n    /// </summary>\r\n    /// <param name=\"minutes\">The number of minutes.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"minutes\"/> minutes.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 30L.Minutes() => TimeSpan.FromMinutes(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Minutes(this long minutes) =>\r\n        Minutes((double)minutes);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of minutes.\r\n    /// </summary>\r\n    /// <param name=\"minutes\">The number of minutes.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"minutes\"/> minutes.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 30UL.Minutes() => TimeSpan.FromMinutes(30)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Minutes(this ulong minutes) =>\r\n        Minutes((double)minutes);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of minutes.\r\n    /// </summary>\r\n    /// <param name=\"minutes\">The number of minutes.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"minutes\"/> minutes.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 30.Minutes() => TimeSpan representing 30 minutes\r\n    /// 90.Minutes() => TimeSpan representing 1 hour and 30 minutes\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Minutes(this double minutes) =>\r\n        TimeSpan.FromMinutes(minutes);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of hours.\r\n    /// </summary>\r\n    /// <param name=\"hours\">The number of hours.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"hours\"/> hours.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((byte)3).Hours() => TimeSpan.FromHours(3)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Hours(this byte hours) =>\r\n        Hours((double)hours);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of hours.\r\n    /// </summary>\r\n    /// <param name=\"hours\">The number of hours.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"hours\"/> hours.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((sbyte)3).Hours() => TimeSpan.FromHours(3)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Hours(this sbyte hours) =>\r\n        Hours((double)hours);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of hours.\r\n    /// </summary>\r\n    /// <param name=\"hours\">The number of hours.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"hours\"/> hours.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((short)3).Hours() => TimeSpan.FromHours(3)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Hours(this short hours) =>\r\n        Hours((double)hours);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of hours.\r\n    /// </summary>\r\n    /// <param name=\"hours\">The number of hours.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"hours\"/> hours.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((ushort)3).Hours() => TimeSpan.FromHours(3)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Hours(this ushort hours) =>\r\n        Hours((double)hours);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of hours.\r\n    /// </summary>\r\n    /// <param name=\"hours\">The number of hours.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"hours\"/> hours.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 3.Hours() => TimeSpan.FromHours(3)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Hours(this int hours) =>\r\n        Hours((double)hours);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of hours.\r\n    /// </summary>\r\n    /// <param name=\"hours\">The number of hours.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"hours\"/> hours.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 3U.Hours() => TimeSpan.FromHours(3)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Hours(this uint hours) =>\r\n        Hours((double)hours);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of hours.\r\n    /// </summary>\r\n    /// <param name=\"hours\">The number of hours.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"hours\"/> hours.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 3L.Hours() => TimeSpan.FromHours(3)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Hours(this long hours) =>\r\n        Hours((double)hours);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of hours.\r\n    /// </summary>\r\n    /// <param name=\"hours\">The number of hours.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"hours\"/> hours.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 3UL.Hours() => TimeSpan.FromHours(3)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Hours(this ulong hours) =>\r\n        Hours((double)hours);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of hours.\r\n    /// </summary>\r\n    /// <param name=\"hours\">The number of hours.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"hours\"/> hours.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 3.Hours() => TimeSpan representing 3 hours\r\n    /// 24.Hours() => TimeSpan representing 1 day\r\n    /// 1.5.Hours() => TimeSpan representing 1 hour and 30 minutes\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Hours(this double hours) =>\r\n        TimeSpan.FromHours(hours);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of days.\r\n    /// </summary>\r\n    /// <param name=\"days\">The number of days.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"days\"/> days.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((byte)2).Days() => TimeSpan.FromDays(2)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Days(this byte days) =>\r\n        Days((double)days);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of days.\r\n    /// </summary>\r\n    /// <param name=\"days\">The number of days.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"days\"/> days.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((sbyte)2).Days() => TimeSpan.FromDays(2)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Days(this sbyte days) =>\r\n        Days((double)days);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of days.\r\n    /// </summary>\r\n    /// <param name=\"days\">The number of days.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"days\"/> days.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((short)2).Days() => TimeSpan.FromDays(2)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Days(this short days) =>\r\n        Days((double)days);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of days.\r\n    /// </summary>\r\n    /// <param name=\"days\">The number of days.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"days\"/> days.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((ushort)2).Days() => TimeSpan.FromDays(2)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Days(this ushort days) =>\r\n        Days((double)days);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of days.\r\n    /// </summary>\r\n    /// <param name=\"days\">The number of days.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"days\"/> days.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2.Days() => TimeSpan.FromDays(2)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Days(this int days) =>\r\n        Days((double)days);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of days.\r\n    /// </summary>\r\n    /// <param name=\"days\">The number of days.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"days\"/> days.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2U.Days() => TimeSpan.FromDays(2)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Days(this uint days) =>\r\n        Days((double)days);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of days.\r\n    /// </summary>\r\n    /// <param name=\"days\">The number of days.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"days\"/> days.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2L.Days() => TimeSpan.FromDays(2)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Days(this long days) =>\r\n        Days((double)days);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of days.\r\n    /// </summary>\r\n    /// <param name=\"days\">The number of days.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"days\"/> days.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2UL.Days() => TimeSpan.FromDays(2)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Days(this ulong days) =>\r\n        Days((double)days);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of days.\r\n    /// </summary>\r\n    /// <param name=\"days\">The number of days.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"days\"/> days.</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2.Days() => TimeSpan representing 2 days  \r\n    /// 7.Days() => TimeSpan representing 1 week\r\n    /// 1.5.Days() => TimeSpan representing 1 day and 12 hours\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Days(this double days) =>\r\n        TimeSpan.FromDays(days);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of weeks.\r\n    /// </summary>\r\n    /// <param name=\"input\">The number of weeks.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"input\"/> weeks (converted to days: 1 week = 7 days).</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((byte)2).Weeks() => new TimeSpan(14, 0, 0, 0)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Weeks(this byte input) =>\r\n        Weeks((double)input);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of weeks.\r\n    /// </summary>\r\n    /// <param name=\"input\">The number of weeks.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"input\"/> weeks (converted to days: 1 week = 7 days).</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((sbyte)2).Weeks() => new TimeSpan(14, 0, 0, 0)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Weeks(this sbyte input) =>\r\n        Weeks((double)input);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of weeks.\r\n    /// </summary>\r\n    /// <param name=\"input\">The number of weeks.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"input\"/> weeks (converted to days: 1 week = 7 days).</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((short)2).Weeks() => new TimeSpan(14, 0, 0, 0)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Weeks(this short input) =>\r\n        Weeks((double)input);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of weeks.\r\n    /// </summary>\r\n    /// <param name=\"input\">The number of weeks.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"input\"/> weeks (converted to days: 1 week = 7 days).</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// ((ushort)2).Weeks() => new TimeSpan(14, 0, 0, 0)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Weeks(this ushort input) =>\r\n        Weeks((double)input);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of weeks.\r\n    /// </summary>\r\n    /// <param name=\"input\">The number of weeks.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"input\"/> weeks (converted to days: 1 week = 7 days).</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2.Weeks() => new TimeSpan(14, 0, 0, 0)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Weeks(this int input) =>\r\n        Weeks((double)input);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of weeks.\r\n    /// </summary>\r\n    /// <param name=\"input\">The number of weeks.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"input\"/> weeks (converted to days: 1 week = 7 days).</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2U.Weeks() => new TimeSpan(14, 0, 0, 0)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Weeks(this uint input) =>\r\n        Weeks((double)input);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of weeks.\r\n    /// </summary>\r\n    /// <param name=\"input\">The number of weeks.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"input\"/> weeks (converted to days: 1 week = 7 days).</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2L.Weeks() => new TimeSpan(14, 0, 0, 0)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Weeks(this long input) =>\r\n        Weeks((double)input);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of weeks.\r\n    /// </summary>\r\n    /// <param name=\"input\">The number of weeks.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"input\"/> weeks (converted to days: 1 week = 7 days).</returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2UL.Weeks() => new TimeSpan(14, 0, 0, 0)\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Weeks(this ulong input) =>\r\n        Weeks((double)input);\r\n\r\n    /// <summary>\r\n    /// Creates a <see cref=\"TimeSpan\"/> representing the specified number of weeks.\r\n    /// </summary>\r\n    /// <param name=\"input\">The number of weeks.</param>\r\n    /// <returns>A <see cref=\"TimeSpan\"/> representing <paramref name=\"input\"/> weeks (converted to days: 1 week = 7 days).</returns>\r\n    /// <remarks>\r\n    /// Since <see cref=\"TimeSpan\"/> doesn't have a native concept of weeks, this method converts\r\n    /// weeks to days (multiplying by 7).\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// 2.Weeks() => TimeSpan representing 14 days\r\n    /// 1.Weeks() => TimeSpan representing 7 days\r\n    /// 0.5.Weeks() => TimeSpan representing 3.5 days\r\n    /// </code>\r\n    /// </example>\r\n    public static TimeSpan Weeks(this double input) =>\r\n        Days(7 * input);\r\n}"
  },
  {
    "path": "src/Humanizer/NumberToWordsExtension.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Transform a number into words; e.g. 1 => one\r\n/// </summary>\r\npublic static class NumberToWordsExtension\r\n{\r\n    /// <summary>\r\n    /// 1.ToOrdinalWords() -> \"first\"\r\n    /// </summary>\r\n    /// <param name=\"number\">Number to be turned to ordinal words</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    public static string ToOrdinalWords(this int number, CultureInfo? culture = null) =>\r\n        Configurator.GetNumberToWordsConverter(culture).ConvertToOrdinal(number);\r\n\r\n    /// <summary>\r\n    /// Converts a number to ordinal words supporting locale's specific variations.\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish:\r\n    /// <code>\r\n    /// 1.ToOrdinalWords(WordForm.Normal) -> \"primero\" // As in \"He llegado el primero\".\r\n    /// 3.ToOrdinalWords(WordForm.Abbreviation) -> \"tercer\" // As in \"Vivo en el tercer piso\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"number\">Number to be turned to ordinal words</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <returns>The number converted into ordinal words</returns>\r\n    public static string ToOrdinalWords(this int number, WordForm wordForm, CultureInfo? culture = null) =>\r\n        Configurator.GetNumberToWordsConverter(culture).ConvertToOrdinal(number, wordForm);\r\n\r\n    /// <summary>\r\n    /// for Brazilian Portuguese locale\r\n    /// 1.ToOrdinalWords(GrammaticalGender.Masculine) -> \"primeiro\"\r\n    /// 1.ToOrdinalWords(GrammaticalGender.Feminine) -> \"primeira\"\r\n    /// </summary>\r\n    /// <param name=\"number\">Number to be turned to words</param>\r\n    /// <param name=\"gender\">The grammatical gender to use for output words</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    public static string ToOrdinalWords(this int number, GrammaticalGender gender, CultureInfo? culture = null) =>\r\n        Configurator.GetNumberToWordsConverter(culture).ConvertToOrdinal(number, gender);\r\n\r\n    /// <summary>\r\n    /// Converts a number to ordinal words supporting locale's specific variations.\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish:\r\n    /// <code>\r\n    /// 3.ToOrdinalWords(GrammaticalGender.Masculine, WordForm.Normal) -> \"tercero\"\r\n    /// 3.ToOrdinalWords(GrammaticalGender.Masculine, WordForm.Abbreviation) -> \"tercer\"\r\n    /// 3.ToOrdinalWords(GrammaticalGender.Feminine, WordForm.Normal) -> \"tercera\"\r\n    /// 3.ToOrdinalWords(GrammaticalGender.Feminine, WordForm.Abbreviation) -> \"tercera\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"number\">Number to be turned to ordinal words</param>\r\n    /// <param name=\"gender\">The grammatical gender to use for output words</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <returns>The number converted into ordinal words</returns>\r\n    public static string ToOrdinalWords(this int number, GrammaticalGender gender, WordForm wordForm, CultureInfo? culture = null) =>\r\n        Configurator.GetNumberToWordsConverter(culture).ConvertToOrdinal(number, gender, wordForm);\r\n\r\n    /// <summary>\r\n    /// 1.ToTuple() -> \"single\"\r\n    /// </summary>\r\n    /// <param name=\"number\">Number to be turned to tuple</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    public static string ToTuple(this int number, CultureInfo? culture = null) =>\r\n        Configurator.GetNumberToWordsConverter(culture).ConvertToTuple(number);\r\n\r\n    /// <summary>\r\n    /// 3501.ToWords() -> \"three thousand five hundred and one\"\r\n    /// </summary>\r\n    /// <param name=\"number\">Number to be turned to words</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    public static string ToWords(this int number, CultureInfo? culture = null) =>\r\n        ((long)number).ToWords(culture);\r\n\r\n    /// <summary>\r\n    /// Converts a number to words supporting specific word variations, including grammatical gender, of some locales.\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish, numbers ended in 1 change its form depending on their position in the sentence.\r\n    /// <code>\r\n    /// 21.ToWords(WordForm.Normal) -> veintiuno // as in \"Mi número favorito es el veintiuno\".\r\n    /// 21.ToWords(WordForm.Abbreviation) -> veintiún // as in \"En total, conté veintiún coches\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"number\">Number to be turned to words</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <returns>The number converted to words</returns>\r\n    public static string ToWords(this int number, WordForm wordForm, CultureInfo? culture = null) =>\r\n        ((long)number).ToWords(wordForm, culture);\r\n\r\n    /// <summary>\r\n    /// 3501.ToWords(false) -> \"three thousand five hundred one\"\r\n    /// </summary>\r\n    /// <param name=\"number\">Number to be turned to words</param>\r\n    /// <param name=\"addAnd\">To add 'and' before the last number.</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    public static string ToWords(this int number, bool addAnd, CultureInfo? culture = null) =>\r\n        ((long)number).ToWords(culture, addAnd);\r\n\r\n    /// <summary>\r\n    /// Converts a number to words supporting specific word variations of some locales.\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish, numbers ended in 1 changes its form depending on their position in the sentence.\r\n    /// <code>\r\n    /// 21.ToWords(WordForm.Normal) -> veintiuno // as in \"Mi número favorito es el veintiuno\".\r\n    /// 21.ToWords(WordForm.Abbreviation) -> veintiún // as in \"En total, conté veintiún coches\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"number\">Number to be turned to words</param>\r\n    /// <param name=\"addAnd\">To add 'and' before the last number</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <returns>The number converted to words</returns>\r\n    public static string ToWords(this int number, bool addAnd, WordForm wordForm, CultureInfo? culture = null) =>\r\n        ((long)number).ToWords(wordForm, culture, addAnd);\r\n\r\n    /// <summary>\r\n    /// For locales that support gender-specific forms\r\n    /// </summary>\r\n    /// <example>\r\n    /// Russian:\r\n    /// <code>\r\n    ///   1.ToWords(GrammaticalGender.Masculine) -> \"один\"\r\n    ///   1.ToWords(GrammaticalGender.Feminine) -> \"одна\"\r\n    /// </code>\r\n    /// Hebrew:\r\n    /// <code>\r\n    ///   1.ToWords(GrammaticalGender.Masculine) -> \"אחד\"\r\n    ///   1.ToWords(GrammaticalGender.Feminine) -> \"אחת\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"number\">Number to be turned to words</param>\r\n    /// <param name=\"gender\">The grammatical gender to use for output words</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    public static string ToWords(this int number, GrammaticalGender gender, CultureInfo? culture = null) =>\r\n        ((long)number).ToWords(gender, culture);\r\n\r\n    /// <summary>\r\n    /// Converts a number to words supporting specific word variations, including grammatical gender, of some locales.\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish, numbers ended in 1 change its form depending on their position in the sentence.\r\n    /// <code>\r\n    /// 21.ToWords(WordForm.Normal, GrammaticalGender.Masculine) -> veintiuno // as in \"Mi número favorito es el veintiuno\".\r\n    /// 21.ToWords(WordForm.Abbreviation, GrammaticalGender.Masculine) -> veintiún // as in \"En total, conté veintiún coches\"\r\n    /// 21.ToWords(WordForm.Normal, GrammaticalGender.Feminine) -> veintiuna // as in \"veintiuna personas\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"number\">Number to be turned to words</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <param name=\"gender\">The grammatical gender to use for output words</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <returns>The number converted to words</returns>\r\n    public static string ToWords(this int number, WordForm wordForm, GrammaticalGender gender, CultureInfo? culture = null) =>\r\n        ((long)number).ToWords(wordForm, gender, culture);\r\n\r\n    /// <summary>\r\n    /// 3501.ToWords() -> \"three thousand five hundred and one\"\r\n    /// </summary>\r\n    /// <param name=\"number\">Number to be turned to words</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <param name=\"addAnd\">Whether \"and\" should be included or not.</param>\r\n    public static string ToWords(this long number, CultureInfo? culture = null, bool addAnd = true) =>\r\n        Configurator.GetNumberToWordsConverter(culture).Convert(number, addAnd);\r\n\r\n    /// <summary>\r\n    /// Converts a number to words supporting specific word variations of some locales.\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish, numbers ended in 1 changes its form depending on their position in the sentence.\r\n    /// <code>\r\n    /// 21.ToWords(WordForm.Normal) -> veintiuno // as in \"Mi número favorito es el veintiuno\".\r\n    /// 21.ToWords(WordForm.Abbreviation) -> veintiún // as in \"En total, conté veintiún coches\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"number\">Number to be turned to words</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <param name=\"addAnd\">To add 'and' before the last number</param>\r\n    /// <returns>The number converted to words</returns>\r\n    public static string ToWords(this long number, WordForm wordForm, CultureInfo? culture = null, bool addAnd = false) =>\r\n        Configurator.GetNumberToWordsConverter(culture).Convert(number, addAnd, wordForm);\r\n\r\n    /// <summary>\r\n    /// For locales that support gender-specific forms\r\n    /// </summary>\r\n    /// <example>\r\n    /// Russian:\r\n    /// <code>\r\n    ///   1.ToWords(GrammaticalGender.Masculine) -> \"один\"\r\n    ///   1.ToWords(GrammaticalGender.Feminine) -> \"одна\"\r\n    /// </code>\r\n    /// Hebrew:\r\n    /// <code>\r\n    ///   1.ToWords(GrammaticalGender.Masculine) -> \"אחד\"\r\n    ///   1.ToWords(GrammaticalGender.Feminine) -> \"אחת\"\r\n    /// </code>\r\n    /// </example>\r\n    ///\r\n    /// <param name=\"number\">Number to be turned to words</param>\r\n    /// <param name=\"gender\">The grammatical gender to use for output words</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    public static string ToWords(this long number, GrammaticalGender gender, CultureInfo? culture = null) =>\r\n        Configurator.GetNumberToWordsConverter(culture).Convert(number, gender);\r\n\r\n    /// <summary>\r\n    /// Converts a number to words supporting specific word variations, including grammatical gender, of some locales.\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish, numbers ended in 1 changes its form depending on their position in the sentence.\r\n    /// <code>\r\n    /// 21.ToWords(WordForm.Normal, GrammaticalGender.Masculine) -> veintiuno // as in \"Mi número favorito es el veintiuno\".\r\n    /// 21.ToWords(WordForm.Abbreviation, GrammaticalGender.Masculine) -> veintiún // as in \"En total, conté veintiún coches\"\r\n    /// 21.ToWords(WordForm.Normal, GrammaticalGender.Feminine) -> veintiuna // as in \"veintiuna personas\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"number\">Number to be turned to words</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <param name=\"gender\">The grammatical gender to use for output words</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <returns>The number converted to words</returns>\r\n    public static string ToWords(this long number, WordForm wordForm, GrammaticalGender gender, CultureInfo? culture = null) =>\r\n        Configurator.GetNumberToWordsConverter(culture).Convert(number, wordForm, gender);\r\n}"
  },
  {
    "path": "src/Humanizer/OnNoMatch.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Dictating what should be done when a match is not found - currently used only for DehumanizeTo\r\n/// </summary>\r\npublic enum OnNoMatch\r\n{\r\n    /// <summary>\r\n    /// This is the default behavior which throws a NoMatchFoundException\r\n    /// </summary>\r\n    ThrowsException,\r\n\r\n    /// <summary>\r\n    /// If set to ReturnsNull the method returns null instead of throwing an exception\r\n    /// </summary>\r\n    ReturnsNull\r\n}"
  },
  {
    "path": "src/Humanizer/OrdinalizeExtensions.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Ordinalize extensions\r\n/// </summary>\r\npublic static class OrdinalizeExtensions\r\n{\r\n    /// <summary>\r\n    /// Turns a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.\r\n    /// </summary>\r\n    /// <param name=\"numberString\">The number, in string, to be ordinalized</param>\r\n    public static string Ordinalize(this string numberString) =>\r\n        Configurator.Ordinalizer.Convert(int.Parse(numberString), numberString);\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal number used to denote the position in an ordered sequence supporting specific locale's variations.\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish:\r\n    /// <code>\r\n    /// \"1\".Ordinalize(WordForm.Abbreviation) -> 1.er // As in \"Vivo en el 1.er piso\"\r\n    /// \"1\".Ordinalize(WordForm.Normal) -> 1.º // As in \"Fui el 1º de mi promoción\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"numberString\">The number, in string, to be ordinalized</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <returns>The number ordinalized</returns>\r\n    public static string Ordinalize(this string numberString, WordForm wordForm) =>\r\n        Configurator.Ordinalizer.Convert(int.Parse(numberString), numberString, wordForm);\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.\r\n    /// </summary>\r\n    /// <param name=\"numberString\">The number, in string, to be ordinalized</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    public static string Ordinalize(this string numberString, CultureInfo culture) =>\r\n        Configurator.Ordinalizers.ResolveForCulture(culture).Convert(int.Parse(numberString, culture), numberString);\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal number used to denote the position in an ordered sequence supporting specific locale's variations.\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish:\r\n    /// <code>\r\n    /// \"1\".Ordinalize(new CultureInfo(\"es-ES\"),WordForm.Abbreviation) -> 1.er // As in \"Vivo en el 1.er piso\"\r\n    /// \"1\".Ordinalize(new CultureInfo(\"es-ES\"), WordForm.Normal) -> 1.º // As in \"Fui el 1º de mi promoción\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"numberString\">The number to be ordinalized</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <returns>The number ordinalized</returns>\r\n    public static string Ordinalize(this string numberString, CultureInfo culture, WordForm wordForm) =>\r\n        Configurator.Ordinalizers.ResolveForCulture(culture).Convert(int.Parse(numberString, culture), numberString, wordForm);\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.\r\n    /// Gender for Brazilian Portuguese locale\r\n    /// \"1\".Ordinalize(GrammaticalGender.Masculine) -> \"1º\"\r\n    /// \"1\".Ordinalize(GrammaticalGender.Feminine) -> \"1ª\"\r\n    /// </summary>\r\n    /// <param name=\"numberString\">The number, in string, to be ordinalized</param>\r\n    /// <param name=\"gender\">The grammatical gender to use for output words</param>\r\n    public static string Ordinalize(this string numberString, GrammaticalGender gender) =>\r\n        Configurator.Ordinalizer.Convert(int.Parse(numberString), numberString, gender);\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal number used to denote the position in an ordered sequence supporting specific\r\n    /// locale's variations using the grammatical gender provided\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish:\r\n    /// <code>\r\n    /// \"1\".Ordinalize(GrammaticalGender.Masculine, WordForm.Abbreviation) -> 1.er // As in \"Vivo en el 1.er piso\"\r\n    /// \"1\".Ordinalize(GrammaticalGender.Masculine, WordForm.Normal) -> 1.º // As in \"Fui el 1º de mi promoción\"\r\n    /// \"1\".Ordinalize(GrammaticalGender.Feminine, WordForm.Normal) -> 1.ª // As in \"Es 1ª vez que hago esto\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"numberString\">The number to be ordinalized</param>\r\n    /// <param name=\"gender\">The grammatical gender to use for output words</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <returns>The number ordinalized</returns>\r\n    public static string Ordinalize(this string numberString, GrammaticalGender gender, WordForm wordForm) =>\r\n        Configurator.Ordinalizer.Convert(int.Parse(numberString), numberString, gender, wordForm);\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.\r\n    /// Gender for Brazilian Portuguese locale\r\n    /// \"1\".Ordinalize(GrammaticalGender.Masculine) -> \"1º\"\r\n    /// \"1\".Ordinalize(GrammaticalGender.Feminine) -> \"1ª\"\r\n    /// </summary>\r\n    /// <param name=\"numberString\">The number, in string, to be ordinalized</param>\r\n    /// <param name=\"gender\">The grammatical gender to use for output words</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    public static string Ordinalize(this string numberString, GrammaticalGender gender, CultureInfo culture) =>\r\n        Configurator.Ordinalizers.ResolveForCulture(culture).Convert(int.Parse(numberString, culture), numberString, gender);\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal number used to denote the position in an ordered sequence supporting specific\r\n    /// locale's variations using the grammatical gender provided\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish:\r\n    /// <code>\r\n    /// \"1\".Ordinalize(GrammaticalGender.Masculine, new CultureInfo(\"es-ES\"),WordForm.Abbreviation) -> 1.er // As in \"Vivo en el 1.er piso\"\r\n    /// \"1\".Ordinalize(GrammaticalGender.Masculine, new CultureInfo(\"es-ES\"), WordForm.Normal) -> 1.º // As in \"Fui el 1º de mi promoción\"\r\n    /// \"1\".Ordinalize(GrammaticalGender.Feminine, new CultureInfo(\"es-ES\"), WordForm.Normal) -> 1.º // As in \"Fui el 1º de mi promoción\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"numberString\">The number to be ordinalized</param>\r\n    /// <param name=\"gender\">The grammatical gender to use for output words</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <returns>The number ordinalized</returns>\r\n    public static string Ordinalize(this string numberString, GrammaticalGender gender, CultureInfo culture, WordForm wordForm) =>\r\n        Configurator.Ordinalizers.ResolveForCulture(culture).Convert(int.Parse(numberString, culture), numberString, gender, wordForm);\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal number used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.\r\n    /// </summary>\r\n    /// <param name=\"number\">The number to be ordinalized</param>\r\n    public static string Ordinalize(this int number) =>\r\n        Configurator.Ordinalizer.Convert(number, number.ToString(CultureInfo.InvariantCulture));\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal number used to denote the position in an ordered sequence supporting specific locale's variations.\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish:\r\n    /// <code>\r\n    /// 1.Ordinalize(WordForm.Abbreviation) -> 1.er // As in \"Vivo en el 1.er piso\"\r\n    /// 1.Ordinalize(WordForm.Normal) -> 1.º // As in \"Fui el 1º de mi promoción\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"number\">The number to be ordinalized</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <returns>The number ordinalized</returns>\r\n    public static string Ordinalize(this int number, WordForm wordForm) =>\r\n        Configurator.Ordinalizer.Convert(number, number.ToString(CultureInfo.InvariantCulture), wordForm);\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal number used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.\r\n    /// </summary>\r\n    /// <param name=\"number\">The number to be ordinalized</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    public static string Ordinalize(this int number, CultureInfo culture) =>\r\n        Configurator.Ordinalizers.ResolveForCulture(culture).Convert(number, number.ToString(culture));\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal number used to denote the position in an ordered sequence supporting specific locale's variations.\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish:\r\n    /// <code>\r\n    /// 1.Ordinalize(new CultureInfo(\"es-ES\"),WordForm.Abbreviation) -> 1.er // As in \"Vivo en el 1.er piso\"\r\n    /// 1.Ordinalize(new CultureInfo(\"es-ES\"), WordForm.Normal) -> 1.º // As in \"Fui el 1º de mi promoción\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"number\">The number to be ordinalized</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <returns>The number ordinalized</returns>\r\n    public static string Ordinalize(this int number, CultureInfo culture, WordForm wordForm) =>\r\n        Configurator.Ordinalizers.ResolveForCulture(culture).Convert(number, number.ToString(culture), wordForm);\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal number used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.\r\n    /// Gender for Brazilian Portuguese locale\r\n    /// 1.Ordinalize(GrammaticalGender.Masculine) -> \"1º\"\r\n    /// 1.Ordinalize(GrammaticalGender.Feminine) -> \"1ª\"\r\n    /// </summary>\r\n    /// <param name=\"number\">The number to be ordinalized</param>\r\n    /// <param name=\"gender\">The grammatical gender to use for output words</param>\r\n    public static string Ordinalize(this int number, GrammaticalGender gender) =>\r\n        Configurator.Ordinalizer.Convert(number, number.ToString(CultureInfo.InvariantCulture), gender);\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal number used to denote the position in an ordered sequence supporting specific\r\n    /// locale's variations using the grammatical gender provided\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish:\r\n    /// <code>\r\n    /// 1.Ordinalize(GrammaticalGender.Masculine, WordForm.Abbreviation) -> 1.er // As in \"Vivo en el 1.er piso\"\r\n    /// 1.Ordinalize(GrammaticalGender.Masculine, WordForm.Normal) -> 1.º // As in \"Fui el 1º de mi promoción\"\r\n    /// 1.Ordinalize(GrammaticalGender.Feminine, WordForm.Normal) -> 1.ª // As in \"Es 1ª vez que hago esto\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"number\">The number to be ordinalized</param>\r\n    /// <param name=\"gender\">The grammatical gender to use for output words</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <returns>The number ordinalized</returns>\r\n    public static string Ordinalize(this int number, GrammaticalGender gender, WordForm wordForm) =>\r\n        Configurator.Ordinalizer.Convert(number, number.ToString(CultureInfo.InvariantCulture), gender, wordForm);\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal number used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.\r\n    /// Gender for Brazilian Portuguese locale\r\n    /// 1.Ordinalize(GrammaticalGender.Masculine) -> \"1º\"\r\n    /// 1.Ordinalize(GrammaticalGender.Feminine) -> \"1ª\"\r\n    /// </summary>\r\n    /// <param name=\"number\">The number to be ordinalized</param>\r\n    /// <param name=\"gender\">The grammatical gender to use for output words</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    public static string Ordinalize(this int number, GrammaticalGender gender, CultureInfo culture) =>\r\n        Configurator.Ordinalizers.ResolveForCulture(culture).Convert(number, number.ToString(culture), gender);\r\n\r\n    /// <summary>\r\n    /// Turns a number into an ordinal number used to denote the position in an ordered sequence supporting specific\r\n    /// locale's variations using the grammatical gender provided\r\n    /// </summary>\r\n    /// <example>\r\n    /// In Spanish:\r\n    /// <code>\r\n    /// 1.Ordinalize(GrammaticalGender.Masculine, new CultureInfo(\"es-ES\"),WordForm.Abbreviation) -> 1.er // As in \"Vivo en el 1.er piso\"\r\n    /// 1.Ordinalize(GrammaticalGender.Masculine, new CultureInfo(\"es-ES\"), WordForm.Normal) -> 1.º // As in \"Fui el 1º de mi promoción\"\r\n    /// 1.Ordinalize(GrammaticalGender.Feminine, new CultureInfo(\"es-ES\"), WordForm.Normal) -> 1.º // As in \"Fui el 1º de mi promoción\"\r\n    /// </code>\r\n    /// </example>\r\n    /// <param name=\"number\">The number to be ordinalized</param>\r\n    /// <param name=\"gender\">The grammatical gender to use for output words</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <param name=\"wordForm\">Form of the word, i.e. abbreviation</param>\r\n    /// <returns>The number ordinalized</returns>\r\n    public static string Ordinalize(this int number, GrammaticalGender gender, CultureInfo culture, WordForm wordForm) =>\r\n        Configurator.Ordinalizers.ResolveForCulture(culture).Convert(number, number.ToString(culture), gender, wordForm);\r\n}"
  },
  {
    "path": "src/Humanizer/Plurality.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Provides hint for Humanizer as to whether a word is singular, plural or with unknown plurality\r\n/// </summary>\r\npublic enum Plurality\r\n{\r\n    /// <summary>\r\n    /// The word is singular\r\n    /// </summary>\r\n    Singular,\r\n    /// <summary>\r\n    /// The word is plural\r\n    /// </summary>\r\n    Plural,\r\n    /// <summary>\r\n    /// I am unsure of the plurality\r\n    /// </summary>\r\n    CouldBeEither\r\n}"
  },
  {
    "path": "src/Humanizer/PolyfillShims.cs",
    "content": "#if !(NET5_0_OR_GREATER)\r\n\r\nusing System.Runtime.CompilerServices;\r\n\r\nnamespace System;\r\n\r\n\r\n// C# 14 static extension members on the *type* itself.\r\n// Usage on old TFMs:  Double.IsFinite(x), Double.IsIntegral(x), Single.IsFinite(x), ...\r\nstatic class PolyfillShims\r\n{\r\n\r\n    // Extend the *type* ArgumentNullException with a static member\r\n    extension(ArgumentNullException)\r\n    {\r\n        [Intrinsic]\r\n        public static void ThrowIfNull(\r\n            object? argument,\r\n            [CallerArgumentExpression(nameof(argument))] string? paramName = null)\r\n            => _ = argument ?? throw new ArgumentNullException(paramName);\r\n    }\r\n\r\n    extension(ArgumentOutOfRangeException)\r\n    {\r\n        /// <summary>Throws an <see cref=\"ArgumentOutOfRangeException\"/> if <paramref name=\"value\"/> is negative.</summary>\r\n        /// <param name=\"value\">The argument to validate as non-negative.</param>\r\n        /// <param name=\"paramName\">The name of the parameter with which <paramref name=\"value\"/> corresponds.</param>\r\n        public static void ThrowIfNegative(int value, [CallerArgumentExpression(nameof(value))] string? paramName = null)\r\n        {\r\n            if (value < 0)\r\n            {\r\n                throw new ArgumentOutOfRangeException(paramName, value, \"Argument must be non-negative.\");\r\n            }\r\n        }\r\n    }\r\n\r\n    // ---- Double ----\r\n    extension(double)\r\n    {\r\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        public static bool IsFinite(double x)\r\n        {\r\n            var bits = (ulong)BitConverter.DoubleToInt64Bits(x);\r\n            return (bits & 0x7FF0_0000_0000_0000UL) != 0x7FF0_0000_0000_0000UL;\r\n        }\r\n\r\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        public static bool IsIntegral(double x)\r\n        {\r\n            if (!IsFinite(x))\r\n            {\r\n                return false;\r\n            }\r\n\r\n            return x == Math.Truncate(x);\r\n        }\r\n\r\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        public static bool IsInfinityFast(double x)\r\n        {\r\n            var bits = (ulong)BitConverter.DoubleToInt64Bits(x);\r\n            return (bits & 0x7FFF_FFFF_FFFF_FFFFUL) == 0x7FF0_0000_0000_0000UL;\r\n        }\r\n\r\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        public static bool IsNaNFast(double x)\r\n        {\r\n            var bits = (ulong)BitConverter.DoubleToInt64Bits(x);\r\n            return (bits & 0x7FF0_0000_0000_0000UL) == 0x7FF0_0000_0000_0000UL\r\n                && (bits & 0x000F_FFFF_FFFF_FFFFUL) != 0;\r\n        }\r\n\r\n\r\n    }\r\n\r\n    // ---- float ----\r\n    extension(float)\r\n    {\r\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        public static bool IsFinite(float x)\r\n        {\r\n            // netstandard2.0 / net48: fastest is unsafe bit-cast\r\n            unsafe { var bits = *(uint*)&x; return (bits & 0x7F80_0000u) != 0x7F80_0000u; }\r\n        }\r\n\r\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        public static bool IsIntegral(float x)\r\n        {\r\n            if (!IsFinite(x))\r\n            {\r\n                return false;\r\n            }\r\n\r\n            return x == Math.Truncate(x);\r\n        }\r\n\r\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        public static bool IsInfinityFast(float x)\r\n        {\r\n            unsafe { var bits = *(uint*)&x; return (bits & 0x7FFF_FFFFu) == 0x7F80_0000u; }\r\n        }\r\n\r\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        public static bool IsNaNFast(float x)\r\n        {\r\n            unsafe\r\n            {\r\n                var bits = *(uint*)&x;\r\n                var isExpAllOnes = (bits & 0x7F80_0000u) == 0x7F80_0000u;\r\n                var hasMantissa = (bits & 0x007F_FFFFu) != 0;\r\n                return isExpAllOnes && hasMantissa;\r\n            }\r\n        }\r\n    }\r\n}\r\n#endif"
  },
  {
    "path": "src/Humanizer/PolyfillShims2.cs",
    "content": "﻿#if !(NET5_0_OR_GREATER)\r\n\r\nnamespace System.Runtime.CompilerServices;\r\n\r\n[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method)]\r\ninternal sealed class IntrinsicAttribute : Attribute\r\n{\r\n}\r\n#endif"
  },
  {
    "path": "src/Humanizer/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Resources;\r\n\r\n[assembly: NeutralResourcesLanguage(\"en\")]\r\n"
  },
  {
    "path": "src/Humanizer/Properties/Resources.af.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} dae gelede</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>oor {0} dae</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} ure gelede</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>oor {0} ure</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} minute terug</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>oor {0} minute</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} maande gelede</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>oor {0} maande</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} sekondes terug</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>oor {0} sekondes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} jaar gelede</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>oor {0} jaar</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>nou</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>gister</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>môre</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>1 uur terug</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>oor 1 uur</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>1 minuut terug</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>oor 1 minuut</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>1 maand gelede</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>oor 1 maand</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>1 sekonde terug</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>oor 1 sekonde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>1 jaar gelede</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>oor 1 jaar</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dae</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} ure</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} millisekondes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minute</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} maande</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekondes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} weke</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} jaar</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 dag</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 uur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 millisekond</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minuut</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 maand</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 sekond</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 week</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 jaar</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>geen tyd</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.ar.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>منذ {0} يوم</value>\r\n    <comment>{0} days ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>منذ يومين</value>\r\n    <comment>two days ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>منذ {0} أيام</value>\r\n    <comment>{0} days ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>في غضون {0} يوم من الآن</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>في غضون يومين من الآن</value>\r\n    <comment>in 2 days</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>في غضون {0} أيام من الآن</value>\r\n    <comment>{0} days from now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>منذ {0} ساعة</value>\r\n    <comment>{0} hours ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>منذ ساعتين</value>\r\n    <comment>two hours ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>منذ {0} ساعات</value>\r\n    <comment>{0} hours ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>في غضون {0} ساعة من الآن</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>في غضون ساعتين من الآن</value>\r\n    <comment>in 2 hours</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>في غضون {0} ساعات من الآن</value>\r\n    <comment>in {0} hours</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>منذ {0} دقيقة</value>\r\n    <comment>{0} minutes ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>منذ دقيقتين</value>\r\n    <comment>two minutes ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>منذ {0} دقائق</value>\r\n    <comment>{0} minutes ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>في غضون {0} دقيقة من الآن</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>في غضون دقيقتين من الآن</value>\r\n    <comment>in 2 minutes</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>في غضون {0} دقائق من الآن</value>\r\n    <comment>in {0} minutes</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>منذ {0} شهر</value>\r\n    <comment>{0} months ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>منذ شهرين</value>\r\n    <comment>two months ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>منذ {0} أشهر</value>\r\n    <comment>{0} months ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>في غضون {0} شهر من الآن</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>في غضون شهرين من الآن</value>\r\n    <comment>in 2 months</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>في غضون {0} أشهر من الآن</value>\r\n    <comment>in {0} months</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>منذ {0} ثانية</value>\r\n    <comment>{0} seconds ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>منذ ثانيتين</value>\r\n    <comment>two  seconds ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>منذ {0} ثوان</value>\r\n    <comment>{0} seconds ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>في غضون {0} ثانية من الآن</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>في غضون ثانيتين من الآن</value>\r\n    <comment>in 2 seconds</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>في غضون {0} ثوان من الآن</value>\r\n    <comment>in {0} seconds</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>منذ {0} عام</value>\r\n    <comment>{0} years ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>منذ عامين</value>\r\n    <comment>two years ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>منذ {0} أعوام</value>\r\n    <comment>{0} years ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>في غضون {0} سنة من الآن</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>في غضون سنتين من الآن</value>\r\n    <comment>in 2 years</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>في غضون {0} سنوات من الآن</value>\r\n    <comment>in {0} years</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>الآن</value>\r\n    <comment>now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>أمس</value>\r\n    <comment>yesterday</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>في غضون يوم واحد من الآن</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>منذ ساعة واحدة</value>\r\n    <comment>an hour ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>في غضون ساعة واحدة من الآن</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>منذ دقيقة واحدة</value>\r\n    <comment>a minute ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>في غضون دقيقة واحدة من الآن</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>منذ شهر واحد</value>\r\n    <comment>one month ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>في غضون شهر واحد من الآن</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>منذ ثانية واحدة</value>\r\n    <comment>one second ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>في غضون ثانية واحدة من الآن</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>العام السابق</value>\r\n    <comment>one year ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>في غضون سنة واحدة من الآن</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} يوم</value>\r\n    <comment>{0} days</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>يومين</value>\r\n    <comment>two days</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} أيام</value>\r\n    <comment>{0} days</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} ساعة</value>\r\n    <comment>{0} hours</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>ساعتين</value>\r\n    <comment>two hours</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ساعات</value>\r\n    <comment>{0} hours</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} جزء من الثانية</value>\r\n    <comment>{0} milliseconds</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>جزئين من الثانية</value>\r\n    <comment>two milliseconds</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} أجزاء من الثانية</value>\r\n    <comment>{0} milliseconds</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} دقيقة</value>\r\n    <comment>{0} minutes</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>دقيقتين</value>\r\n    <comment>two minutes</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} دقائق</value>\r\n    <comment>{0} minutes</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} أشهر</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Dual\" xml:space=\"preserve\">\r\n    <value>شهرين</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Plural\" xml:space=\"preserve\">\r\n    <value>{0} أشهر</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} ثانية</value>\r\n    <comment>{0} seconds</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>ثانيتين</value>\r\n    <comment>two seconds</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ثوان</value>\r\n    <comment>{0} seconds</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} أسبوع</value>\r\n    <comment>{0} weeks</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>أسبوعين</value>\r\n    <comment>two weeks</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} أسابيع</value>\r\n    <comment>{0} weeks</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} سنة</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Dual\" xml:space=\"preserve\">\r\n    <value>سنتين</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Plural\" xml:space=\"preserve\">\r\n    <value>{0} سنة</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>يوم واحد</value>\r\n    <comment>single day</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>ساعة واحدة</value>\r\n    <comment>single hour</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>جزء من الثانية</value>\r\n    <comment>single millisecond</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>دقيقة واحدة</value>\r\n    <comment>single minute</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>شهر 1</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>ثانية واحدة</value>\r\n    <comment>single second</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>أسبوع واحد</value>\r\n    <comment>single week</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>السنة 1</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>حالاً</value>\r\n    <comment>no time</comment>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.az.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} gün əvvəl</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} gün sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} saat əvvəl</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} saat sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} dəqiqə əvvəl</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} dəqiqə sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} ay əvvəl</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ay sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} saniyə əvvəl</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} saniyə sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} il əvvəl</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} il sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>indi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>dünən</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>sabah</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>bir saat əvvəl</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>bir saat sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>bir dəqiqə əvvəl</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>bir dəqiqə sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>bir ay əvvəl</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>bir ay sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>bir saniyə əvvəl</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>bir saniyə sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>bir il əvvəl</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>bir il sonra</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} gün</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} saat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} millisaniyə</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} dəqiqə</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} ay</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} saniyə</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} həftə</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} il</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 gün</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 saat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 millisaniyə</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 dəqiqə</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 ay</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 saniyə</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 həftə</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 il</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>zaman fərqi yoxdur</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.bg.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>преди {0} дена</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>след {0} дена</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>преди {0} часа</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>след {0} часа</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>преди {0} минути</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>след {0} минути</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>преди {0} месеца</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>след {0} месеца</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>преди {0} секунди</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>след {0} секунди</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>преди {0} години</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>след {0} години</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>сега</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>вчера</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>утре</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>преди час</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>след час</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>преди минута</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>след минута</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>преди месец</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>след месец</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>преди секунда</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>след секунда</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>преди година</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>след година</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} дена</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} часа</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} милисекунди</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} минути</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} месеца</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} секунди</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} седмици</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} години</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 ден</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>един ден</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 час</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>един час</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 милисекунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>една милисекунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 минута</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>една минута</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 месец</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>един месец</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 секунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>една секунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 седмица</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>една седмица</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 година</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>една година</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>няма време</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.bn.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} দিন আগে</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} দিন পর</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} ঘণ্টা আগে</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ঘণ্টা পর</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} মিনিট আগে</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} মিনিট পর</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} মাস আগে</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} মাস পর</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} সেকেন্ড আগে</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} সেকেন্ড পর</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} বছর আগে</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} বছর পর</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>এখন</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>গতকাল</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>আগামিকাল</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>এক ঘণ্টা আগে</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>এক ঘণ্টা পর</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>এক মিনিট আগে</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>এক মিনিট পর</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>এক মাস আগে</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>এক মাস পর</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>এক সেকেন্ড আগে</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>এক সেকেন্ড পর</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>এক বছর আগে</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>এক বছর পর</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} দিন</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} ঘণ্টা</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} মিলিসেকেন্ড</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} মিনিট</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} মাস</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} সেকেন্ড</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} সপ্তাহ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} বছর</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>এক দিন</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>এক ঘণ্টা</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>এক মিলিসেকেন্ড</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>এক মিনিট</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>এক মাসের</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>এক সেকেন্ড</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>এক সপ্তাহ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>এক বছর</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>শূন্য সময়</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.ca.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>fa un segon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>fa {0} segons</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>fa un minut</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>fa {0} minuts</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>fa una hora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>fa {0} hores</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>ahir</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>fa {0} dies</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>fa un mes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>fa {0} mesos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>fa un any</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>fa {0} anys</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dies</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} hores</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} mil·lisegons</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minuts</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} segons</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} setmanes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 dia</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 hora</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 mil·lisegon</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minut</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 segon</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 setmana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>res</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>d'aquí {0} dies</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>d'aquí {0} hores</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>d'aquí {0} minuts</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>d'aquí {0} mesos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>d'aquí {0} segons</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>d'aquí {0} anys</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>demà</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>d'aquí una hora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>d'aquí un minut</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>d'aquí un mes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>d'aquí un segon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>d'aquí un any</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>ara</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} mesos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} anys</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 mes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 any</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} setmanes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>un dia</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>una hora</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>un mil·lisegon</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>un minut</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>un mes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>un segon</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>una setmana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>un any</value>\r\n  </data>\r\n  <data name=\"N\" xml:space=\"preserve\">\r\n    <value>nord</value>\r\n  </data>\r\n  <data name=\"NNE\" xml:space=\"preserve\">\r\n    <value>nord-nord-est</value>\r\n  </data>\r\n  <data name=\"NE\" xml:space=\"preserve\">\r\n    <value>nord-est</value>\r\n  </data>\r\n  <data name=\"ENE\" xml:space=\"preserve\">\r\n    <value>est-nord-est</value>\r\n  </data>\r\n  <data name=\"E\" xml:space=\"preserve\">\r\n    <value>est</value>\r\n  </data>\r\n  <data name=\"ESE\" xml:space=\"preserve\">\r\n    <value>est-sud-est</value>\r\n  </data>\r\n  <data name=\"SE\" xml:space=\"preserve\">\r\n    <value>sud-est</value>\r\n  </data>\r\n  <data name=\"SSE\" xml:space=\"preserve\">\r\n    <value>sud-sud-est</value>\r\n  </data>\r\n  <data name=\"S\" xml:space=\"preserve\">\r\n    <value>sud</value>\r\n  </data>\r\n  <data name=\"SSW\" xml:space=\"preserve\">\r\n    <value>sud-sud-oest</value>\r\n  </data>\r\n  <data name=\"SW\" xml:space=\"preserve\">\r\n    <value>sud-oest</value>\r\n  </data>\r\n  <data name=\"WSW\" xml:space=\"preserve\">\r\n    <value>oest-sud-oest</value>\r\n  </data>\r\n  <data name=\"W\" xml:space=\"preserve\">\r\n    <value>oest</value>\r\n  </data>\r\n  <data name=\"WNW\" xml:space=\"preserve\">\r\n    <value>oest-nord-oest</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Singular\" xml:space=\"preserve\">\r\n    <value>{0} any</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Plural\" xml:space=\"preserve\">\r\n    <value>{0} anys</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} anys</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} setmana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>fa {0} hores</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>d'aquí {0} hores</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>fa {0} minuts</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>d'aquí {0} minuts</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>fa {0} mesos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>d'aquí {0} mesos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>fa {0} segons</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>d'aquí {0} segons</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>fa {0} anys</value>\r\n  </data>\r\n  <data name=\"NW\" xml:space=\"preserve\">\r\n    <value>nord-oest</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>d'aquí {0} anys</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} mil·lisegons</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minuts</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} segons</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} setmanes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>mai</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Dual\" xml:space=\"preserve\">\r\n    <value>{0} mesos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} mesos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Plural\" xml:space=\"preserve\">\r\n    <value>{0} mesos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Singular\" xml:space=\"preserve\">\r\n    <value>{0} mes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Dual\" xml:space=\"preserve\">\r\n    <value>{0} anys</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} hores</value>\r\n  </data>\r\n  <data name=\"NNW\" xml:space=\"preserve\">\r\n    <value>nord-nord-oest</value>\r\n  </data>\r\n  <data name=\"N_Short\" xml:space=\"preserve\">\r\n    <value>N</value>\r\n  </data>\r\n  <data name=\"NNE_Short\" xml:space=\"preserve\">\r\n    <value>N-NE</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Minute\" xml:space=\"preserve\">\r\n    <value>min</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Hour\" xml:space=\"preserve\">\r\n    <value>h</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Day\" xml:space=\"preserve\">\r\n    <value>dia</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Week\" xml:space=\"preserve\">\r\n    <value>setmana</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Month\" xml:space=\"preserve\">\r\n    <value>mes</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Year\" xml:space=\"preserve\">\r\n    <value>any</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Second\" xml:space=\"preserve\">\r\n    <value>s</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Millisecond\" xml:space=\"preserve\">\r\n    <value>ms</value>\r\n  </data>\r\n  <data name=\"DataUnit_Terabyte\" xml:space=\"preserve\">\r\n    <value>terabyte</value>\r\n  </data>\r\n  <data name=\"NE_Short\" xml:space=\"preserve\">\r\n    <value>NE</value>\r\n  </data>\r\n  <data name=\"ENE_Short\" xml:space=\"preserve\">\r\n    <value>E-NE</value>\r\n  </data>\r\n  <data name=\"E_Short\" xml:space=\"preserve\">\r\n    <value>E</value>\r\n  </data>\r\n  <data name=\"ESE_Short\" xml:space=\"preserve\">\r\n    <value>E-SE</value>\r\n  </data>\r\n  <data name=\"SE_Short\" xml:space=\"preserve\">\r\n    <value>SE</value>\r\n  </data>\r\n  <data name=\"SSE_Short\" xml:space=\"preserve\">\r\n    <value>S-SE</value>\r\n  </data>\r\n  <data name=\"S_Short\" xml:space=\"preserve\">\r\n    <value>S</value>\r\n  </data>\r\n  <data name=\"SSW_Short\" xml:space=\"preserve\">\r\n    <value>S-SO</value>\r\n  </data>\r\n  <data name=\"SW_Short\" xml:space=\"preserve\">\r\n    <value>SO</value>\r\n  </data>\r\n  <data name=\"WSW_Short\" xml:space=\"preserve\">\r\n    <value>O-SO</value>\r\n  </data>\r\n  <data name=\"W_Short\" xml:space=\"preserve\">\r\n    <value>O</value>\r\n  </data>\r\n  <data name=\"DataUnit_TerabyteSymbol\" xml:space=\"preserve\">\r\n    <value>TB</value>\r\n  </data>\r\n  <data name=\"WNW_Short\" xml:space=\"preserve\">\r\n    <value>O-NO</value>\r\n  </data>\r\n  <data name=\"NNW_Short\" xml:space=\"preserve\">\r\n    <value>N-NO</value>\r\n  </data>\r\n  <data name=\"DataUnit_Bit\" xml:space=\"preserve\">\r\n    <value>bit</value>\r\n  </data>\r\n  <data name=\"DataUnit_BitSymbol\" xml:space=\"preserve\">\r\n    <value>b</value>\r\n  </data>\r\n  <data name=\"DataUnit_Byte\" xml:space=\"preserve\">\r\n    <value>byte</value>\r\n  </data>\r\n  <data name=\"DataUnit_ByteSymbol\" xml:space=\"preserve\">\r\n    <value>B</value>\r\n  </data>\r\n  <data name=\"DataUnit_Kilobyte\" xml:space=\"preserve\">\r\n    <value>kilobyte</value>\r\n  </data>\r\n  <data name=\"DataUnit_KilobyteSymbol\" xml:space=\"preserve\">\r\n    <value>KB</value>\r\n  </data>\r\n  <data name=\"DataUnit_Megabyte\" xml:space=\"preserve\">\r\n    <value>megabyte</value>\r\n  </data>\r\n  <data name=\"DataUnit_MegabyteSymbol\" xml:space=\"preserve\">\r\n    <value>MB</value>\r\n  </data>\r\n  <data name=\"DataUnit_Gigabyte\" xml:space=\"preserve\">\r\n    <value>gigabyte</value>\r\n  </data>\r\n  <data name=\"DataUnit_GigabyteSymbol\" xml:space=\"preserve\">\r\n    <value>GB</value>\r\n  </data>\r\n  <data name=\"NW_Short\" xml:space=\"preserve\">\r\n    <value>NO</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>{0} setmanes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} segon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} dia a partir d'ara</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>fa {0} hores</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>fa {0} hores</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>fa {0} hora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>d'aquí {0} hores</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>d'aquí {0} hora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>fa {0} minuts</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>fa {0} minuts</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>fa {0} minut</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} dies a partir d'ara</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>fa {0} dia</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>d'aquí {0} hores</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minuts a partir d'ara</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>fa {0} segons</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} segons a partir d'ara</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} anys a partir d'ara</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>{0} dies</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} dies</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minuts a partir d'ara</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} hores</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minuts</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minuts</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} segons</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} mil·lisegons</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>fa {0} dies</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>fa {0} dies</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} mil·lisegons</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minut a partir d'ara</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} dies a partir d'ara</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>fa {0} mesos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} anys a partir d'ara</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} any a partir d'ara</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} dia</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>fa {0} any</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>{0} hores</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minut</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} segons</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>fa {0} anys</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} mil·lisegon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>fa {0} anys</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>fa {0} mes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} mesos a partir d'ara</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} mesos a partir d'ara</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} mes a partir d'ara</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>fa {0} mesos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>fa {0} segons</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} segons a partir d'ara</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} segon a partir d'ara</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>fa {0} segon</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.cs.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>před {0} dny</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>před {0} dny</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} dnů</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} dny</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>před {0} hodinami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>před {0} hodinami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} hodin</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} hodiny</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>před {0} minutami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>před {0} minutami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} minut</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} minuty</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>před {0} měsíci</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>před {0} měsíci</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} měsíců</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} měsíce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>před {0} sekundami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>před {0} sekundami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} sekund</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} sekundy</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>před {0} lety</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>před {0} lety</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} let</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} roky</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>teď</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>včera</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>zítra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>před hodinou</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>za hodinu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>před minutou</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>za minutu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>před měsícem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>za měsíc</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>před sekundou</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>za sekundu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>před rokem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>za rok</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dnů</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} dny</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} hodin</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} hodiny</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milisekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} milisekundy</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minut</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minuty</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} měsíců</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} měsíce</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} sekundy</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} týdnů</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} týdny</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} let</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} roky</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 den</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 hodina</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milisekunda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minuta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 měsíc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 sekunda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 týden</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 rok</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>není čas</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.da.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} dage siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} dage fra nu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} timer siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} timer fra nu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} minutter siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} minutter fra nu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} måneder siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} måneder fra nu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} sekunder siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} sekunder fra nu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} år siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} år fra nu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>nu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>i går</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>i morgen</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>en time siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>en time fra nu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>et minut siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>et minut fra nu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>en måned siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>en måned fra nu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>et sekund siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>et sekund fra nu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>et år siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>et år fra nu</value>\r\n  </data>\r\n  <data name=\"E\" xml:space=\"preserve\">\r\n    <value>øst</value>\r\n  </data>\r\n  <data name=\"ENE\" xml:space=\"preserve\">\r\n    <value>østnordøst</value>\r\n  </data>\r\n  <data name=\"ENE_Short\" xml:space=\"preserve\">\r\n    <value>ØNØ</value>\r\n  </data>\r\n  <data name=\"ESE\" xml:space=\"preserve\">\r\n    <value>østsydøst</value>\r\n  </data>\r\n  <data name=\"ESE_Short\" xml:space=\"preserve\">\r\n    <value>ØSØ</value>\r\n  </data>\r\n  <data name=\"E_Short\" xml:space=\"preserve\">\r\n    <value>Ø</value>\r\n  </data>\r\n  <data name=\"N\" xml:space=\"preserve\">\r\n    <value>nord</value>\r\n  </data>\r\n  <data name=\"NE\" xml:space=\"preserve\">\r\n    <value>nordøst</value>\r\n  </data>\r\n  <data name=\"NE_Short\" xml:space=\"preserve\">\r\n    <value>NØ</value>\r\n  </data>\r\n  <data name=\"NNE\" xml:space=\"preserve\">\r\n    <value>nordnordøst</value>\r\n  </data>\r\n  <data name=\"NNE_Short\" xml:space=\"preserve\">\r\n    <value>NNØ</value>\r\n  </data>\r\n  <data name=\"NNW\" xml:space=\"preserve\">\r\n    <value>nordnordvest</value>\r\n  </data>\r\n  <data name=\"NNW_Short\" xml:space=\"preserve\">\r\n    <value>NNV</value>\r\n  </data>\r\n  <data name=\"NW\" xml:space=\"preserve\">\r\n    <value>nordvest</value>\r\n  </data>\r\n  <data name=\"NW_Short\" xml:space=\"preserve\">\r\n    <value>NV</value>\r\n  </data>\r\n  <data name=\"S\" xml:space=\"preserve\">\r\n    <value>syd</value>\r\n  </data>\r\n  <data name=\"SE\" xml:space=\"preserve\">\r\n    <value>sydøst</value>\r\n  </data>\r\n  <data name=\"SE_Short\" xml:space=\"preserve\">\r\n    <value>SØ</value>\r\n  </data>\r\n  <data name=\"SSE\" xml:space=\"preserve\">\r\n    <value>sydsydøst</value>\r\n  </data>\r\n  <data name=\"SSE_Short\" xml:space=\"preserve\">\r\n    <value>SSØ</value>\r\n  </data>\r\n  <data name=\"SSW\" xml:space=\"preserve\">\r\n    <value>sydsydvest</value>\r\n  </data>\r\n  <data name=\"SSW_Short\" xml:space=\"preserve\">\r\n    <value>SSV</value>\r\n  </data>\r\n  <data name=\"SW\" xml:space=\"preserve\">\r\n    <value>sydvest</value>\r\n  </data>\r\n  <data name=\"SW_Short\" xml:space=\"preserve\">\r\n    <value>SV</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dage</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} timer</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} millisekunder</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minutter</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} måneder</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekunder</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} uger</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} år</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>en dag</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>en time</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>et millisekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>et minut</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>en måned</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>et sekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>en uge</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>et år</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>ingen tid</value>\r\n  </data>\r\n  <data name=\"W\" xml:space=\"preserve\">\r\n    <value>vest</value>\r\n  </data>\r\n  <data name=\"WNW\" xml:space=\"preserve\">\r\n    <value>vestnordvest</value>\r\n  </data>\r\n  <data name=\"WNW_Short\" xml:space=\"preserve\">\r\n    <value>VNV</value>\r\n  </data>\r\n  <data name=\"WSW\" xml:space=\"preserve\">\r\n    <value>vestsydvest</value>\r\n  </data>\r\n  <data name=\"WSW_Short\" xml:space=\"preserve\">\r\n    <value>VSV</value>\r\n  </data>\r\n  <data name=\"W_Short\" xml:space=\"preserve\">\r\n    <value>V</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.de.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DataUnit_Bit\" xml:space=\"preserve\">\r\n    <value>Bit</value>\r\n  </data>\r\n  <data name=\"DataUnit_BitSymbol\" xml:space=\"preserve\">\r\n    <value>bit</value>\r\n  </data>\r\n  <data name=\"DataUnit_Byte\" xml:space=\"preserve\">\r\n    <value>Byte</value>\r\n  </data>\r\n  <data name=\"DataUnit_ByteSymbol\" xml:space=\"preserve\">\r\n    <value>B</value>\r\n  </data>\r\n  <data name=\"DataUnit_Gigabyte\" xml:space=\"preserve\">\r\n    <value>Gigabyte</value>\r\n  </data>\r\n  <data name=\"DataUnit_GigabyteSymbol\" xml:space=\"preserve\">\r\n    <value>GB</value>\r\n  </data>\r\n  <data name=\"DataUnit_Kilobyte\" xml:space=\"preserve\">\r\n    <value>Kilobyte</value>\r\n  </data>\r\n  <data name=\"DataUnit_KilobyteSymbol\" xml:space=\"preserve\">\r\n    <value>kB</value>\r\n  </data>\r\n  <data name=\"DataUnit_Megabyte\" xml:space=\"preserve\">\r\n    <value>Megabyte</value>\r\n  </data>\r\n  <data name=\"DataUnit_MegabyteSymbol\" xml:space=\"preserve\">\r\n    <value>MB</value>\r\n  </data>\r\n  <data name=\"DataUnit_Terabyte\" xml:space=\"preserve\">\r\n    <value>Terabyte</value>\r\n  </data>\r\n  <data name=\"DataUnit_TerabyteSymbol\" xml:space=\"preserve\">\r\n    <value>TB</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>vor {0} Tagen</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>in {0} Tagen</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>vor {0} Stunden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>in {0} Stunden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>vor {0} Minuten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>in {0} Minuten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>vor {0} Monaten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>in {0} Monaten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>vor {0} Sekunden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>in {0} Sekunden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>vor {0} Jahren</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>in {0} Jahren</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>nie</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>jetzt</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>gestern</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>morgen</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>vor einer Stunde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>in einer Stunde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>vor einer Minute</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>in einer Minute</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>vor einem Monat</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>in einem Monat</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>vor einer Sekunde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>in einer Sekunde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>vor einem Jahr</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>in einem Jahr</value>\r\n  </data>\r\n  <data name=\"E\" xml:space=\"preserve\">\r\n    <value>Ost</value>\r\n  </data>\r\n  <data name=\"ENE\" xml:space=\"preserve\">\r\n    <value>Ostnordost</value>\r\n  </data>\r\n  <data name=\"ENE_Short\" xml:space=\"preserve\">\r\n    <value>ONO</value>\r\n  </data>\r\n  <data name=\"ESE\" xml:space=\"preserve\">\r\n    <value>Ostsüdost</value>\r\n  </data>\r\n  <data name=\"ESE_Short\" xml:space=\"preserve\">\r\n    <value>OSO</value>\r\n  </data>\r\n  <data name=\"E_Short\" xml:space=\"preserve\">\r\n    <value>O</value>\r\n  </data>\r\n  <data name=\"N\" xml:space=\"preserve\">\r\n    <value>Nord</value>\r\n  </data>\r\n  <data name=\"NE\" xml:space=\"preserve\">\r\n    <value>Nordost</value>\r\n  </data>\r\n  <data name=\"NE_Short\" xml:space=\"preserve\">\r\n    <value>NO</value>\r\n  </data>\r\n  <data name=\"NNE\" xml:space=\"preserve\">\r\n    <value>Nordnordost</value>\r\n  </data>\r\n  <data name=\"NNE_Short\" xml:space=\"preserve\">\r\n    <value>NNO</value>\r\n  </data>\r\n  <data name=\"NNW\" xml:space=\"preserve\">\r\n    <value>Nordnordwest</value>\r\n  </data>\r\n  <data name=\"NNW_Short\" xml:space=\"preserve\">\r\n    <value>NNW</value>\r\n  </data>\r\n  <data name=\"NW\" xml:space=\"preserve\">\r\n    <value>Nordwest</value>\r\n  </data>\r\n  <data name=\"NW_Short\" xml:space=\"preserve\">\r\n    <value>NW</value>\r\n  </data>\r\n  <data name=\"N_Short\" xml:space=\"preserve\">\r\n    <value>N</value>\r\n  </data>\r\n  <data name=\"S\" xml:space=\"preserve\">\r\n    <value>Süd</value>\r\n  </data>\r\n  <data name=\"SE\" xml:space=\"preserve\">\r\n    <value>Südost</value>\r\n  </data>\r\n  <data name=\"SE_Short\" xml:space=\"preserve\">\r\n    <value>SO</value>\r\n  </data>\r\n  <data name=\"SSE\" xml:space=\"preserve\">\r\n    <value>Südsüdost</value>\r\n  </data>\r\n  <data name=\"SSE_Short\" xml:space=\"preserve\">\r\n    <value>SSO</value>\r\n  </data>\r\n  <data name=\"SSW\" xml:space=\"preserve\">\r\n    <value>Südsüdwest</value>\r\n  </data>\r\n  <data name=\"SSW_Short\" xml:space=\"preserve\">\r\n    <value>SSW</value>\r\n  </data>\r\n  <data name=\"SW\" xml:space=\"preserve\">\r\n    <value>Südwest</value>\r\n  </data>\r\n  <data name=\"SW_Short\" xml:space=\"preserve\">\r\n    <value>SW</value>\r\n  </data>\r\n  <data name=\"S_Short\" xml:space=\"preserve\">\r\n    <value>S</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} Tage</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} Stunden</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} Millisekunden</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} Minuten</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} Monate</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} Sekunden</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} Wochen</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} Jahre</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 Tag</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>ein Tag</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 Stunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>eine Stunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 Millisekunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>eine Millisekunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 Minute</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>eine Minute</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 Monat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>ein Monat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 Sekunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>eine Sekunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 Woche</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>eine Woche</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 Jahr</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>ein Jahr</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>Keine Zeit</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Day\" xml:space=\"preserve\">\r\n    <value>d</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Hour\" xml:space=\"preserve\">\r\n    <value>h</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Millisecond\" xml:space=\"preserve\">\r\n    <value>ms</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Minute\" xml:space=\"preserve\">\r\n    <value>min</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Month\" xml:space=\"preserve\">\r\n    <value>M</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Second\" xml:space=\"preserve\">\r\n    <value>s</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Week\" xml:space=\"preserve\">\r\n    <value>Woche</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Year\" xml:space=\"preserve\">\r\n    <value>a</value>\r\n  </data>\r\n  <data name=\"W\" xml:space=\"preserve\">\r\n    <value>West</value>\r\n  </data>\r\n  <data name=\"WNW\" xml:space=\"preserve\">\r\n    <value>Westnordwest</value>\r\n  </data>\r\n  <data name=\"WNW_Short\" xml:space=\"preserve\">\r\n    <value>WNW</value>\r\n  </data>\r\n  <data name=\"WSW\" xml:space=\"preserve\">\r\n    <value>Westsüdwest</value>\r\n  </data>\r\n  <data name=\"WSW_Short\" xml:space=\"preserve\">\r\n    <value>WSW</value>\r\n  </data>\r\n  <data name=\"W_Short\" xml:space=\"preserve\">\r\n    <value>W</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.el.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>πριν από {0} ημέρες</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ημέρες από τώρα</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>πριν από {0} ώρες</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ώρες από τώρα</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>πριν από {0} λεπτά</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} λεπτά από τώρα</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>πριν από {0} μήνες</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} μήνες από τώρα</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>πριν από {0} δευτερόλεπτα</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} δευτερόλεπτα από τώρα</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>πριν από {0} χρόνια</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} χρόνια από τώρα</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>ποτέ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>τώρα</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>χθες</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>αύριο</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>πριν από μία ώρα</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>πρίν από μία ώρα από τώρα</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>πριν από ένα λεπτό</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>πρίν από ένα λεπτό από τώρα</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>πριν από έναν μήνα</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>πριν από έναν μήνα από τώρα</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>πριν από ένα δευτερόλεπτο</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>πριν από ένα δευτερόλεπτο από τώρα</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>πριν από έναν χρόνο</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>πριν από έναν χρόνο από τώρα</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} μέρες</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} ώρες</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} χιλιοστά του δευτερολέπτου</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} λεπτά</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} μήνες</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} δευτερόλεπτα</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} βδομάδες</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} χρόνια</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 μέρα</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 ώρα</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 χιλιοσtό του δευτερολέπτου</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 λεπτό</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 μήνα</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 δευτερόλεπτο</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 βδομάδα</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 χρόνο</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>μηδέν χρόνος</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.es.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DataUnit_Bit\" xml:space=\"preserve\">\r\n    <value>bit</value>\r\n  </data>\r\n  <data name=\"DataUnit_BitSymbol\" xml:space=\"preserve\">\r\n    <value>b</value>\r\n  </data>\r\n  <data name=\"DataUnit_Byte\" xml:space=\"preserve\">\r\n    <value>byte</value>\r\n  </data>\r\n  <data name=\"DataUnit_ByteSymbol\" xml:space=\"preserve\">\r\n    <value>B</value>\r\n  </data>\r\n  <data name=\"DataUnit_Gigabyte\" xml:space=\"preserve\">\r\n    <value>gigabye</value>\r\n  </data>\r\n  <data name=\"DataUnit_GigabyteSymbol\" xml:space=\"preserve\">\r\n    <value>GB</value>\r\n  </data>\r\n  <data name=\"DataUnit_Kilobyte\" xml:space=\"preserve\">\r\n    <value>kilobyte</value>\r\n  </data>\r\n  <data name=\"DataUnit_KilobyteSymbol\" xml:space=\"preserve\">\r\n    <value>KB</value>\r\n  </data>\r\n  <data name=\"DataUnit_Megabyte\" xml:space=\"preserve\">\r\n    <value>megabyte</value>\r\n  </data>\r\n  <data name=\"DataUnit_MegabyteSymbol\" xml:space=\"preserve\">\r\n    <value>MB</value>\r\n  </data>\r\n  <data name=\"DataUnit_Terabyte\" xml:space=\"preserve\">\r\n    <value>terabyte</value>\r\n  </data>\r\n  <data name=\"DataUnit_TerabyteSymbol\" xml:space=\"preserve\">\r\n    <value>TB</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>hace {0} días</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>hace {0} días</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>hace {0} días</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>hace {0} día</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>en {0} días</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>hace {0} días desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>hace {0} días desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} día desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>hace {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>hace {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>hace {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>hace {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>hace {0} hora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>en {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>hace {0} horas desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>hace {0} horas desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>hace {0} horas desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>hace {0} hora desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>hace {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>hace {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>hace {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>hace {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>hace {0} minuto</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>en {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minutos desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>hace {0} minutos desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>hace {0} minutos desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>hace {0} minuto desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>hace {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>hace {0} meses desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>hace {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>hace {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>hace {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>en {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>hace {0} meses desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>hace {0} meses desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>hace {0} meses desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>hace {0} mes desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>hace {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>hace {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>hace {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>hace {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>hace {0} segundo</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>en {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>hace {0} segundos desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>hace {0} segundos desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>hace {0} segundos desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>hace {0} segundo desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>hace {0} años</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>hace {0} años</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>hace {0} años</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>hace {0} años</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>hace {0} año</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>en {0} años</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>hace {0} años desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>hace {0} años desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>hace {0} años desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>hace {0} año desde ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>nunca</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>ahora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>ayer</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>mañana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>hace una hora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>en una hora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>hace un minuto</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>en un minuto</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>hace un mes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>en un mes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>hace un segundo</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>en un segundo</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>hace un año</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>en un año</value>\r\n  </data>\r\n  <data name=\"E\" xml:space=\"preserve\">\r\n    <value>este</value>\r\n  </data>\r\n  <data name=\"ENE\" xml:space=\"preserve\">\r\n    <value>este-noreste</value>\r\n  </data>\r\n  <data name=\"ENE_Short\" xml:space=\"preserve\">\r\n    <value>E-NE</value>\r\n  </data>\r\n  <data name=\"ESE\" xml:space=\"preserve\">\r\n    <value>este-sudeste</value>\r\n  </data>\r\n  <data name=\"ESE_Short\" xml:space=\"preserve\">\r\n    <value>E-SE</value>\r\n  </data>\r\n  <data name=\"E_Short\" xml:space=\"preserve\">\r\n    <value>E</value>\r\n  </data>\r\n  <data name=\"N\" xml:space=\"preserve\">\r\n    <value>norte</value>\r\n  </data>\r\n  <data name=\"NE\" xml:space=\"preserve\">\r\n    <value>noreste</value>\r\n  </data>\r\n  <data name=\"NE_Short\" xml:space=\"preserve\">\r\n    <value>NE</value>\r\n  </data>\r\n  <data name=\"NNE\" xml:space=\"preserve\">\r\n    <value>norte-noreste</value>\r\n  </data>\r\n  <data name=\"NNE_Short\" xml:space=\"preserve\">\r\n    <value>N-NE</value>\r\n  </data>\r\n  <data name=\"NNW\" xml:space=\"preserve\">\r\n    <value>norte-noroeste</value>\r\n  </data>\r\n  <data name=\"NNW_Short\" xml:space=\"preserve\">\r\n    <value>N-NO</value>\r\n  </data>\r\n  <data name=\"NW\" xml:space=\"preserve\">\r\n    <value>noroeste</value>\r\n  </data>\r\n  <data name=\"NW_Short\" xml:space=\"preserve\">\r\n    <value>NO</value>\r\n  </data>\r\n  <data name=\"N_Short\" xml:space=\"preserve\">\r\n    <value>N</value>\r\n  </data>\r\n  <data name=\"S\" xml:space=\"preserve\">\r\n    <value>sur</value>\r\n  </data>\r\n  <data name=\"SE\" xml:space=\"preserve\">\r\n    <value>sudeste</value>\r\n  </data>\r\n  <data name=\"SE_Short\" xml:space=\"preserve\">\r\n    <value>SE</value>\r\n  </data>\r\n  <data name=\"SSE\" xml:space=\"preserve\">\r\n    <value>sur-sudeste</value>\r\n  </data>\r\n  <data name=\"SSE_Short\" xml:space=\"preserve\">\r\n    <value>S-SE</value>\r\n  </data>\r\n  <data name=\"SSW\" xml:space=\"preserve\">\r\n    <value>sur-sudoeste</value>\r\n  </data>\r\n  <data name=\"SSW_Short\" xml:space=\"preserve\">\r\n    <value>S-SO</value>\r\n  </data>\r\n  <data name=\"SW\" xml:space=\"preserve\">\r\n    <value>sudoeste</value>\r\n  </data>\r\n  <data name=\"SW_Short\" xml:space=\"preserve\">\r\n    <value>SO</value>\r\n  </data>\r\n  <data name=\"S_Short\" xml:space=\"preserve\">\r\n    <value>S</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} días</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>{0} días</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} días</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} día</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} horas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>{0} horas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} horas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} horas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hora</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milisegundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} milisegundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} milisegundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} milisegundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} milisegundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minutos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minutos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minutos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} mintuos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} meses</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Dual\" xml:space=\"preserve\">\r\n    <value>{0} meses</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} meses</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Plural\" xml:space=\"preserve\">\r\n    <value>{0} meses</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Singular\" xml:space=\"preserve\">\r\n    <value>{0} mes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} segundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} segundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} segundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} segundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} semanas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>{0} semanas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} semanas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} semanas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} semana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} años</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Dual\" xml:space=\"preserve\">\r\n    <value>{0} años</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} años</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Plural\" xml:space=\"preserve\">\r\n    <value>{0} años</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Singular\" xml:space=\"preserve\">\r\n    <value>{0} año</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 día</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>un día</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 hora</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>una hora</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milisegundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>un milisegundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>un minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 mes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>un mes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>un segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 semana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>una semana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 año</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>un año</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>nada</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Day\" xml:space=\"preserve\">\r\n    <value>d</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Hour\" xml:space=\"preserve\">\r\n    <value>h</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Millisecond\" xml:space=\"preserve\">\r\n    <value>ms</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Minute\" xml:space=\"preserve\">\r\n    <value>min</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Month\" xml:space=\"preserve\">\r\n    <value>mes</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Second\" xml:space=\"preserve\">\r\n    <value>s</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Week\" xml:space=\"preserve\">\r\n    <value>semana</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Year\" xml:space=\"preserve\">\r\n    <value>año</value>\r\n  </data>\r\n  <data name=\"W\" xml:space=\"preserve\">\r\n    <value>oeste</value>\r\n  </data>\r\n  <data name=\"WNW\" xml:space=\"preserve\">\r\n    <value>oeste-noroeste</value>\r\n  </data>\r\n  <data name=\"WNW_Short\" xml:space=\"preserve\">\r\n    <value>O-NO</value>\r\n  </data>\r\n  <data name=\"WSW\" xml:space=\"preserve\">\r\n    <value>oeste-sudoeste</value>\r\n  </data>\r\n  <data name=\"WSW_Short\" xml:space=\"preserve\">\r\n    <value>O-SO</value>\r\n  </data>\r\n  <data name=\"W_Short\" xml:space=\"preserve\">\r\n    <value>O</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.fa.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} روز پیش</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} روز بعد</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} ساعت پیش</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ساعت بعد</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} دقیقه پیش</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} دقیقه بعد</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} ماه پیش</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ماه بعد</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} ثانیه پیش</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ثانیه بعد</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} سال پیش</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} سال بعد</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>الآن</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>دیروز</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>فردا</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>یک ساعت پیش</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>یک ساعت بعد</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>یک دقیقه پیش</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>یک دقیقه بعد</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>یک ماه پیش</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>یک ماه بعد</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>یک ثانیه پیش</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>یک ثانیه بعد</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>یک سال پیش</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>یک سال بعد</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} روز</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} ساعت</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} میلی ثانیه</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} دقیقه</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} ماه</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} ثانیه</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} هفته</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} سال</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>یک روز</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>یک ساعت</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>یک میلی ثانیه</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>یک دقیقه</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>یک ماه</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>یک ثانیه</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>یک هفته</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>یک سال</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>الآن</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.fi.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} päivää sitten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} päivän päästä</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} tuntia sitten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} tunnin päästä</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} minuuttia sitten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} minuutin päästä</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} kuukautta sitten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} sekuntia sitten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} vuotta sitten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>eilen</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>huomenna</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>tunti sitten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>tunnin päästä</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>minuutti sitten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>minuutin päästä</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>kuukausi sitten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>kuukauden päästä</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>sekuntti sitten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>vuosi sitten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>vuoden päästä</value>\r\n  </data>\r\n  <data name=\"DateHumanize_TwoDaysAgo\" xml:space=\"preserve\">\r\n    <value>toissapäivänä</value>\r\n  </data>\r\n  <data name=\"DateHumanize_TwoDaysFromNow\" xml:space=\"preserve\">\r\n    <value>ylihuomenna</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>päivä</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>tunti</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>nyt</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.fil.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} isang araw ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} isang araw ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} isang araw ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} isang araw ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} araw mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} araw mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} araw mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} araw mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} isang oras ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} isang oras ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} isang oras ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} isang oras ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} oras ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} oras mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} oras mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} oras mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} oras mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} oras mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} minutong nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minutong nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minutong nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minutong nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minuto ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} minuto mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minuto mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minuto mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minuto mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minuto mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} isang buwan ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} isang buwan ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} isang buwan ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} isang buwan ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} buwan ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} buwan mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} buwan mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} buwan mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} buwan mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} buwan mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} segundong nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} segundong nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} segundong nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} segundong nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} segundo ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} segundo mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} segundo mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} segundo mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} segundo mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} segundo mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} isang taong nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} isang taong nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} taon mula sa nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} isang taong nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} taon ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} taon mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} taon mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} taon mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} taon mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} taon mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>hindi kailanman</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>kahapon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>bukas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>isang oras ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>isang oras mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>isang minutong nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>isang minuto mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>isang buwan ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>isang buwan mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>isang segundo ang nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>isang segundo mula ngayon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>isang taong nakalipas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>isang taon mula ngayon</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} araw</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>{0} araw</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} araw</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} araw</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} oras</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>{0} oras</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} oras</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} oras</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} oras</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milliseconds</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} milliseconds</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} milliseconds</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} milliseconds</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} millisecond</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} buwan</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} linggo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>{0} linggo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} linggo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} linggo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} linggo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} taon</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 araw</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 oras</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 millisecond</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 buwan</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 linggo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 taon</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>walang oras</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.fr.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DataUnit_Bit\" xml:space=\"preserve\">\r\n    <value>bit</value>\r\n  </data>\r\n  <data name=\"DataUnit_BitSymbol\" xml:space=\"preserve\">\r\n    <value>b</value>\r\n  </data>\r\n  <data name=\"DataUnit_Byte\" xml:space=\"preserve\">\r\n    <value>octet</value>\r\n  </data>\r\n  <data name=\"DataUnit_ByteSymbol\" xml:space=\"preserve\">\r\n    <value>o</value>\r\n  </data>\r\n  <data name=\"DataUnit_Gigabyte\" xml:space=\"preserve\">\r\n    <value>gigaoctet</value>\r\n  </data>\r\n  <data name=\"DataUnit_GigabyteSymbol\" xml:space=\"preserve\">\r\n    <value>Go</value>\r\n  </data>\r\n  <data name=\"DataUnit_Kilobyte\" xml:space=\"preserve\">\r\n    <value>kilooctet</value>\r\n  </data>\r\n  <data name=\"DataUnit_KilobyteSymbol\" xml:space=\"preserve\">\r\n    <value>Ko</value>\r\n  </data>\r\n  <data name=\"DataUnit_Megabyte\" xml:space=\"preserve\">\r\n    <value>mégaoctet</value>\r\n  </data>\r\n  <data name=\"DataUnit_MegabyteSymbol\" xml:space=\"preserve\">\r\n    <value>Mo</value>\r\n  </data>\r\n  <data name=\"DataUnit_Terabyte\" xml:space=\"preserve\">\r\n    <value>téraoctet</value>\r\n  </data>\r\n  <data name=\"DataUnit_TerabyteSymbol\" xml:space=\"preserve\">\r\n    <value>To</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>il y a {0} jours</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>avant-hier</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>dans {0} jours</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>après-demain</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>il y a {0} heures</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>dans {0} heures</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>il y a {0} minutes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>dans {0} minutes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>il y a {0} mois</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>dans {0} mois</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>il y a {0} secondes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>dans {0} secondes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>il y a {0} ans</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>dans {0} ans</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>jamais</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>maintenant</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>hier</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>demain</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>il y a une heure</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>dans une heure</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>il y a une minute</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>dans une minute</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>il y a un mois</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>dans un mois</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>il y a une seconde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>dans une seconde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>il y a un an</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>dans un an</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} jours</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} jour</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} heures</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} heure</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} millisecondes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} milliseconde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minutes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minute</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} mois</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Singular\" xml:space=\"preserve\">\r\n    <value>{0} mois</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} secondes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} seconde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} semaines</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} semaine</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} ans</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Singular\" xml:space=\"preserve\">\r\n    <value>{0} an</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 jour</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>un jour</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 heure</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>une heure</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milliseconde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>une milliseconde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minute</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>une minute</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 mois</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>un mois</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 seconde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>une seconde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 semaine</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>une semaine</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 an</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>un an</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>temps nul</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Day\" xml:space=\"preserve\">\r\n    <value>j</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Hour\" xml:space=\"preserve\">\r\n    <value>h</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Millisecond\" xml:space=\"preserve\">\r\n    <value>ms</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Minute\" xml:space=\"preserve\">\r\n    <value>min</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Month\" xml:space=\"preserve\">\r\n    <value>mois</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Second\" xml:space=\"preserve\">\r\n    <value>s</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Week\" xml:space=\"preserve\">\r\n    <value>semaine</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Year\" xml:space=\"preserve\">\r\n    <value>a</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.he.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>לפני {0} יום</value>\r\n    <comment>{0} days ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>לפני יומיים</value>\r\n    <comment>two days ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>לפני {0} ימים</value>\r\n    <comment>{0} days ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>בעוד {0} יום</value>\r\n    <comment>{0} days from now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>בעוד יומיים</value>\r\n    <comment>in 2 days</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>בעוד {0} ימים</value>\r\n    <comment>{0} days from now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>לפני {0} שעות</value>\r\n    <comment>{0} hours ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>לפני שעתיים</value>\r\n    <comment>two hours ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>לפני {0} שעות</value>\r\n    <comment>{0} hours ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>בעוד {0} שעות</value>\r\n    <comment>in {0} hours</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>בעוד שעתיים</value>\r\n    <comment>in 2 hours</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>בעוד {0} שעות</value>\r\n    <comment>in {0} hours</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>לפני {0} דקות</value>\r\n    <comment>{0} minutes ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>לפני {0} דקות</value>\r\n    <comment>two minutes ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>לפני {0} דקות</value>\r\n    <comment>{0} minutes ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>בעוד {0} דקות</value>\r\n    <comment>in {0} minutes</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>בעוד 2 דקות</value>\r\n    <comment>in 2 minutes</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>בעוד {0} דקות</value>\r\n    <comment>in {0} minutes</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>לפני {0} חודשים</value>\r\n    <comment>{0} months ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>לפני חודשיים</value>\r\n    <comment>two months ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>לפני {0} חודשים</value>\r\n    <comment>{0} months ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>בעוד {0} חודשים</value>\r\n    <comment>in {0} months</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>בעוד חודשיים</value>\r\n    <comment>in 2 months</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>בעוד {0} חודשים</value>\r\n    <comment>in {0} months</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>לפני {0} שניות</value>\r\n    <comment>{0} seconds ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>לפני {0} שניות</value>\r\n    <comment>two  seconds ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>לפני {0} שניות</value>\r\n    <comment>{0} seconds ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>בעוד {0} שניות</value>\r\n    <comment>in {0} seconds</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>בעוד 2 שניות</value>\r\n    <comment>in 2 seconds</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>בעוד {0} שניות</value>\r\n    <comment>in {0} seconds</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>לפני {0} שנה</value>\r\n    <comment>{0} years ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>לפני שנתיים</value>\r\n    <comment>two years ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>לפני {0} שנים</value>\r\n    <comment>{0} years ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>בעוד {0} שנה</value>\r\n    <comment>in {0} years</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>בעוד שנתיים</value>\r\n    <comment>in 2 years</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>בעוד {0} שנים</value>\r\n    <comment>in {0} years</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>כעת</value>\r\n    <comment>now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>אתמול</value>\r\n    <comment>yesterday</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>מחר</value>\r\n    <comment>tomorrow</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>לפני שעה</value>\r\n    <comment>an hour ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>בעוד שעה</value>\r\n    <comment>in an hour</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>לפני דקה</value>\r\n    <comment>a minute ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>בעוד דקה</value>\r\n    <comment>in a minute</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>לפני חודש</value>\r\n    <comment>one month ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>בעוד חודש</value>\r\n    <comment>in a month</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>לפני שנייה</value>\r\n    <comment>one second ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>בעוד שנייה</value>\r\n    <comment>in a second</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>לפני שנה</value>\r\n    <comment>one year ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>בעוד שנה</value>\r\n    <comment>in a year</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} ימים</value>\r\n    <comment>{0} days</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>יומיים</value>\r\n    <comment>two days</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ימים</value>\r\n    <comment>{0} days</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} שעות</value>\r\n    <comment>{0} hours</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>שעתיים</value>\r\n    <comment>two hours</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} שעות</value>\r\n    <comment>{0} hours</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} אלפיות שנייה</value>\r\n    <comment>{0} milliseconds</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>שתי אלפיות שנייה</value>\r\n    <comment>two milliseconds</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} אלפיות שנייה</value>\r\n    <comment>{0} milliseconds</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} דקות</value>\r\n    <comment>{0} minutes</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>שתי דקות</value>\r\n    <comment>two minutes</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} דקות</value>\r\n    <comment>{0} minutes</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} חודשים</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Dual\" xml:space=\"preserve\">\r\n    <value>חודשיים</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Plural\" xml:space=\"preserve\">\r\n    <value>{0} חודשים</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} שניות</value>\r\n    <comment>{0} seconds</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>שתי שניות</value>\r\n    <comment>two seconds</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} שניות</value>\r\n    <comment>{0} seconds</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} שבועות</value>\r\n    <comment>{0} weeks</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>שבועיים</value>\r\n    <comment>two weeks</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} שבועות</value>\r\n    <comment>{0} weeks</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} שנים</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Dual\" xml:space=\"preserve\">\r\n    <value>שנתיים</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Plural\" xml:space=\"preserve\">\r\n    <value>{0} שנים</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>יום</value>\r\n    <comment>single day</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>שעה</value>\r\n    <comment>single hour</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>אלפית שנייה</value>\r\n    <comment>single millisecond</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>דקה</value>\r\n    <comment>single minute</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>חודש</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>שנייה</value>\r\n    <comment>single second</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>שבוע</value>\r\n    <comment>single week</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>שנה</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>אין זמן</value>\r\n    <comment>no time</comment>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.hr.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>prije {0} dana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>prije {0} dana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} dana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>prije {0} sati</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>prije {0} sata</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} sati</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} sata</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>prije {0} minuta</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>prije {0} minute</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} minuta</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} minute</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>prije {0} mjeseci</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>prije {0} mjeseca</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} mjeseci</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} mjeseca</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>prije {0} sekundi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>prije {0} sekunde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} sekundi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} sekunde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>prije {0} godina</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>prije {0} godine</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} godina</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} godine</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>upravo sada</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>jučer</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>sutra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>prije sat vremena</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>za sat vremena</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>prije jedne minute</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>za jednu minutu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>prije mjesec dana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>za mjesec dana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>prije jedne sekunde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>za jednu sekundu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>prije godinu dana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>za godinu dana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} dana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} sati</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} sata</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milisekundi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} milisekunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minuta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minute</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} mjeseci</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} mjeseca</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekundi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} sekunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} tjedana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} tjedna</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} godina</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} godine</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 dan</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 sat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milisekunda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minuta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 mjesec</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 sekunda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 tjedan</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 godina</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>bez podatka o vremenu</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.hu.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} napja</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} napja</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} napja</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} napja</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} napja</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} nap múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} nap múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} nap múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} nap múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} nap múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} órája</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} órája</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} órája</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} órája</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} órája</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} óra múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} óra múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} óra múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} óra múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} óra múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} perce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} perce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} perce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} perce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} perce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} perc múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} perc múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} perc múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} perc múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} perc múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} hónapja</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} hónapja</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} hónapja</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} hónapja</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hónapja</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} hónap múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} hónap múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} hónap múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} hónap múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hónap múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} másodperce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} másodperce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} másodperce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} másodperce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} másodperce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} másodperc múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} másodperc múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} másodperc múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} másodperc múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} másodperc múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} éve</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} éve</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} éve</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} éve</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} éve</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} év múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} év múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} év múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} év múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} év múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>soha</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>most</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>tegnap</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>holnap</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>egy órája</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>egy óra múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>egy perce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>egy perc múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>egy hónapja</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>egy hónap múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>egy másodperce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>egy másodperc múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>egy éve</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>egy év múlva</value>\r\n  </data>\r\n  <data name=\"DateHumanize_TwoDaysAgo\" xml:space=\"preserve\">\r\n    <value>két éve</value>\r\n  </data>\r\n  <data name=\"DateHumanize_TwoDaysFromNow\" xml:space=\"preserve\">\r\n    <value>két év múlva</value>\r\n  </data>\r\n  <data name=\"E\" xml:space=\"preserve\">\r\n    <value>kelet</value>\r\n  </data>\r\n  <data name=\"ENE\" xml:space=\"preserve\">\r\n    <value>kelet-északkelet</value>\r\n  </data>\r\n  <data name=\"ENE_Short\" xml:space=\"preserve\">\r\n    <value>KÉK</value>\r\n  </data>\r\n  <data name=\"ESE\" xml:space=\"preserve\">\r\n    <value>kelet-délkelet</value>\r\n  </data>\r\n  <data name=\"ESE_Short\" xml:space=\"preserve\">\r\n    <value>KDK</value>\r\n  </data>\r\n  <data name=\"E_Short\" xml:space=\"preserve\">\r\n    <value>K</value>\r\n  </data>\r\n  <data name=\"N\" xml:space=\"preserve\">\r\n    <value>észak</value>\r\n  </data>\r\n  <data name=\"NE\" xml:space=\"preserve\">\r\n    <value>északkelet</value>\r\n  </data>\r\n  <data name=\"NE_Short\" xml:space=\"preserve\">\r\n    <value>ÉK</value>\r\n  </data>\r\n  <data name=\"NNE\" xml:space=\"preserve\">\r\n    <value>észak-északkelet</value>\r\n  </data>\r\n  <data name=\"NNE_Short\" xml:space=\"preserve\">\r\n    <value>ÉÉK</value>\r\n  </data>\r\n  <data name=\"NNW\" xml:space=\"preserve\">\r\n    <value>észak-északnyugat</value>\r\n  </data>\r\n  <data name=\"NNW_Short\" xml:space=\"preserve\">\r\n    <value>ÉÉNy</value>\r\n  </data>\r\n  <data name=\"NW\" xml:space=\"preserve\">\r\n    <value>északnyugat</value>\r\n  </data>\r\n  <data name=\"NW_Short\" xml:space=\"preserve\">\r\n    <value>ÉNy</value>\r\n  </data>\r\n  <data name=\"N_Short\" xml:space=\"preserve\">\r\n    <value>É</value>\r\n  </data>\r\n  <data name=\"S\" xml:space=\"preserve\">\r\n    <value>dél</value>\r\n  </data>\r\n  <data name=\"SE\" xml:space=\"preserve\">\r\n    <value>délkelet</value>\r\n  </data>\r\n  <data name=\"SE_Short\" xml:space=\"preserve\">\r\n    <value>DK</value>\r\n  </data>\r\n  <data name=\"SSE\" xml:space=\"preserve\">\r\n    <value>dél-délkelet</value>\r\n  </data>\r\n  <data name=\"SSE_Short\" xml:space=\"preserve\">\r\n    <value>DDK</value>\r\n  </data>\r\n  <data name=\"SSW\" xml:space=\"preserve\">\r\n    <value>dél-délnyugat</value>\r\n  </data>\r\n  <data name=\"SSW_Short\" xml:space=\"preserve\">\r\n    <value>DDNy</value>\r\n  </data>\r\n  <data name=\"SW\" xml:space=\"preserve\">\r\n    <value>délnyugat</value>\r\n  </data>\r\n  <data name=\"SW_Short\" xml:space=\"preserve\">\r\n    <value>DNy</value>\r\n  </data>\r\n  <data name=\"S_Short\" xml:space=\"preserve\">\r\n    <value>D</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} nap</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>{0} nap</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} nap</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} nap</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} nap</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} óra</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>{0} óra</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} óra</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} óra</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} óra</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} ezredmásodperc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} ezredmásodperc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} ezredmásodperc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ezredmásodperc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ezredmásodperc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} perc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0} perc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} perc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} perc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} perc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} hónap</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Dual\" xml:space=\"preserve\">\r\n    <value>{0} hónap</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} hónap</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Plural\" xml:space=\"preserve\">\r\n    <value>{0} hónap</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hónap</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} másodperc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} másodperc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} másodperc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} másodperc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} másodperc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} hét</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>{0} hét</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} hét</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} hét</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hét</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} év</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Dual\" xml:space=\"preserve\">\r\n    <value>{0} év</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} év</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Plural\" xml:space=\"preserve\">\r\n    <value>{0} év</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Singular\" xml:space=\"preserve\">\r\n    <value>{0} év</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 nap</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>egy nap</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 óra</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>egy óra</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 ezredmásodperc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>egy ezredmásodperc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 perc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>egy perc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 hónap</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>egy hónap</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 másodperc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>egy másodperc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 hét</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>egy hét</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 év</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>egy év</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>nincs idő</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Day\" xml:space=\"preserve\">\r\n    <value>n</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Hour\" xml:space=\"preserve\">\r\n    <value>ó</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Minute\" xml:space=\"preserve\">\r\n    <value>p</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Month\" xml:space=\"preserve\">\r\n    <value>h</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Second\" xml:space=\"preserve\">\r\n    <value>m</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Week\" xml:space=\"preserve\">\r\n    <value>hét</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Year\" xml:space=\"preserve\">\r\n    <value>é</value>\r\n  </data>\r\n  <data name=\"W\" xml:space=\"preserve\">\r\n    <value>nyugat</value>\r\n  </data>\r\n  <data name=\"WNW\" xml:space=\"preserve\">\r\n    <value>nyugat-északnyugat</value>\r\n  </data>\r\n  <data name=\"WNW_Short\" xml:space=\"preserve\">\r\n    <value>NyÉNy</value>\r\n  </data>\r\n  <data name=\"WSW\" xml:space=\"preserve\">\r\n    <value>nyugat-délnyugat</value>\r\n  </data>\r\n  <data name=\"WSW_Short\" xml:space=\"preserve\">\r\n    <value>NyDNy</value>\r\n  </data>\r\n  <data name=\"W_Short\" xml:space=\"preserve\">\r\n    <value>Ny</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.hy.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} օր առաջ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} օրից</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} ժամ առաջ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ժամից</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} րոպե առաջ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} րոպեից</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} ամիս առաջ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ամսից</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} վայրկյան առաջ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} վայրկյանից</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} տարի առաջ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} տարուց</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>հիմա</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>երեկ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>վաղը</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>մեկ ժամ առաջ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>մեկ ժամից</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>մեկ րոպե առաջ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>մեկ րոպեից</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>մեկ ամիս առաջ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>մեկ ամսից</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>մեկ վայրկյան առաջ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>մեկ վայրկյանից</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>մեկ տարի առաջ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>մեկ տարուց</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} օր</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} ժամ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} միլիվայրկյան</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} րոպե</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} ամիս</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} վայրկյան</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} շաբաթ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} տարի</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>մեկ օր</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>մեկ ժամ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>մեկ միլիվայրկյան</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>մեկ րոպե</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>մեկ ամիս</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>մեկ վայրկյան</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>մեկ շաբաթ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>մեկ տարի</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>ժամանակը բացակայում է</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.id.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} hari yang lalu</value>\r\n    <comment>{0} days ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} hari dari sekarang</value>\r\n    <comment>{0} days from now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} jam yang lalu</value>\r\n    <comment>{0} hours ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} jam dari sekarang</value>\r\n    <comment>{0} hours from now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} menit yang lalu</value>\r\n    <comment>{0} minutes ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} menit dari sekarang</value>\r\n    <comment>{0} minutes from now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} bulan yang lalu</value>\r\n    <comment>{0} months ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} bulan dari sekarang</value>\r\n    <comment>{0} months from now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} detik yang lalu</value>\r\n    <comment>{0} seconds ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} detik dari sekarang</value>\r\n    <comment>{0} seconds from now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} tahun yang lalu</value>\r\n    <comment>{0} years ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} tahun dari sekarang</value>\r\n    <comment>{0} years from now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>sekarang</value>\r\n    <comment>now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>kemarin</value>\r\n    <comment>yesterday</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>besok</value>\r\n    <comment>tomorrow</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>sejam yang lalu</value>\r\n    <comment>an hour ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>sejam dari sekarang</value>\r\n    <comment>an hour from now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>semenit yang lalu</value>\r\n    <comment>a minute ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>semenit dari sekarang</value>\r\n    <comment>a minute from now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>sebulan yang lalu</value>\r\n    <comment>one month ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>sebulan dari sekarang</value>\r\n    <comment>one month from now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>sedetik yang lalu</value>\r\n    <comment>one second ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>sedetik dari sekarang</value>\r\n    <comment>one second from now</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>setahun yang lalu</value>\r\n    <comment>one year ago</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>setahun dari sekarang</value>\r\n    <comment>one year from now</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} hari</value>\r\n    <comment>{0} days</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} jam</value>\r\n    <comment>{0} hours</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milidetik</value>\r\n    <comment>{0} milliseconds</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} menit</value>\r\n    <comment>{0} minutes</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} bulan</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} detik</value>\r\n    <comment>{0} seconds</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} minggu</value>\r\n    <comment>{0} weeks</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} tahun</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 hari</value>\r\n    <comment>1 day</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 jam</value>\r\n    <comment>1 hour</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milidetik</value>\r\n    <comment>1 millisecond</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 menit</value>\r\n    <comment>1 minute</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 bulan</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 detik</value>\r\n    <comment>1 second</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 minggu</value>\r\n    <comment>1 week</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 tahun</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>waktu kosong</value>\r\n    <comment>no time</comment>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.is.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DataUnit_Bit\" xml:space=\"preserve\">\r\n    <value>biti</value>\r\n  </data>\r\n  <data name=\"DataUnit_BitSymbol\" xml:space=\"preserve\">\r\n    <value>b</value>\r\n  </data>\r\n  <data name=\"DataUnit_Byte\" xml:space=\"preserve\">\r\n    <value>bæti</value>\r\n  </data>\r\n  <data name=\"DataUnit_ByteSymbol\" xml:space=\"preserve\">\r\n    <value>B</value>\r\n  </data>\r\n  <data name=\"DataUnit_Gigabyte\" xml:space=\"preserve\">\r\n    <value>gígabæti</value>\r\n  </data>\r\n  <data name=\"DataUnit_GigabyteSymbol\" xml:space=\"preserve\">\r\n    <value>GB</value>\r\n  </data>\r\n  <data name=\"DataUnit_Kilobyte\" xml:space=\"preserve\">\r\n    <value>kílóbæti</value>\r\n  </data>\r\n  <data name=\"DataUnit_KilobyteSymbol\" xml:space=\"preserve\">\r\n    <value>kB</value>\r\n  </data>\r\n  <data name=\"DataUnit_Megabyte\" xml:space=\"preserve\">\r\n    <value>megabæti</value>\r\n  </data>\r\n  <data name=\"DataUnit_MegabyteSymbol\" xml:space=\"preserve\">\r\n    <value>MB</value>\r\n  </data>\r\n  <data name=\"DataUnit_Terabyte\" xml:space=\"preserve\">\r\n    <value>terabæti</value>\r\n  </data>\r\n  <data name=\"DataUnit_TerabyteSymbol\" xml:space=\"preserve\">\r\n    <value>TB</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>fyrir {0} dögum</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>fyrir {0} dögum</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>fyrir {0} degi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>eftir {0} daga</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>eftir {0} daga</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>eftir {0} dag</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>fyrir {0} klukkustundum</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>fyrir {0} klukkustundum</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>fyrir {0} klukkustund</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>eftir {0} klukkustundir</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>eftir {0} klukkustundir</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>eftir {0} klukkustund</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>fyrir {0} mínútum</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>fyrir {0} mínútum</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>fyrir {0} mínútu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>eftir {0} mínútur</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>eftir {0} mínútur</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>eftir {0} mínútu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>fyrir {0} mánuðum</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>fyrir {0} mánuðum</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>fyrir {0} mánuði</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>eftir {0} mánuði</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>eftir {0} mánuði</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>eftir {0} mánuð</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>fyrir {0} sekúndum</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>fyrir {0} sekúndu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>fyrir {0} sekúndu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>eftir {0} sekúndur</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>eftir {0} sekúndur</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>eftir {0} sekúndu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>fyrir {0} árum</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>fyrir {0} árum</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>fyrir {0} ári</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>eftir {0} ár</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>eftir {0} ár</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>eftir {0} ár</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>aldrei</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>núna</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>í gær</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>á morgun</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>fyrir einni klukkustund</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>eftir eina klukkustund</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>fyrir einni mínútu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>eftir eina mínútu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>fyrir einum mánuði</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>eftir einn mánuð</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>fyrir einni sekúndu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>eftir eina sekúndu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>fyrir einu ári</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>eftir eitt ár</value>\r\n  </data>\r\n  <data name=\"E\" xml:space=\"preserve\">\r\n    <value>austur</value>\r\n  </data>\r\n  <data name=\"ENE\" xml:space=\"preserve\">\r\n    <value>austnorðaustur</value>\r\n  </data>\r\n  <data name=\"ENE_Short\" xml:space=\"preserve\">\r\n    <value>ANA</value>\r\n  </data>\r\n  <data name=\"ESE\" xml:space=\"preserve\">\r\n    <value>austsuðaustur</value>\r\n  </data>\r\n  <data name=\"ESE_Short\" xml:space=\"preserve\">\r\n    <value>ASA</value>\r\n  </data>\r\n  <data name=\"E_Short\" xml:space=\"preserve\">\r\n    <value>A</value>\r\n  </data>\r\n  <data name=\"N\" xml:space=\"preserve\">\r\n    <value>norður</value>\r\n  </data>\r\n  <data name=\"NE\" xml:space=\"preserve\">\r\n    <value>norðaustur</value>\r\n  </data>\r\n  <data name=\"NE_Short\" xml:space=\"preserve\">\r\n    <value>NA</value>\r\n  </data>\r\n  <data name=\"NNE\" xml:space=\"preserve\">\r\n    <value>norðnorðaustur</value>\r\n  </data>\r\n  <data name=\"NNE_Short\" xml:space=\"preserve\">\r\n    <value>NNA</value>\r\n  </data>\r\n  <data name=\"NNW\" xml:space=\"preserve\">\r\n    <value>norðnorðvestur</value>\r\n  </data>\r\n  <data name=\"NNW_Short\" xml:space=\"preserve\">\r\n    <value>NNV</value>\r\n  </data>\r\n  <data name=\"NW\" xml:space=\"preserve\">\r\n    <value>norðvestur</value>\r\n  </data>\r\n  <data name=\"NW_Short\" xml:space=\"preserve\">\r\n    <value>NV</value>\r\n  </data>\r\n  <data name=\"N_Short\" xml:space=\"preserve\">\r\n    <value>N</value>\r\n  </data>\r\n  <data name=\"S\" xml:space=\"preserve\">\r\n    <value>suður</value>\r\n  </data>\r\n  <data name=\"SE\" xml:space=\"preserve\">\r\n    <value>suðaustur</value>\r\n  </data>\r\n  <data name=\"SE_Short\" xml:space=\"preserve\">\r\n    <value>SA</value>\r\n  </data>\r\n  <data name=\"SSE\" xml:space=\"preserve\">\r\n    <value>suðsuðaustur</value>\r\n  </data>\r\n  <data name=\"SSE_Short\" xml:space=\"preserve\">\r\n    <value>SSA</value>\r\n  </data>\r\n  <data name=\"SSW\" xml:space=\"preserve\">\r\n    <value>suðsuðvestur</value>\r\n  </data>\r\n  <data name=\"SSW_Short\" xml:space=\"preserve\">\r\n    <value>SSV</value>\r\n  </data>\r\n  <data name=\"SW\" xml:space=\"preserve\">\r\n    <value>suðvestur</value>\r\n  </data>\r\n  <data name=\"SW_Short\" xml:space=\"preserve\">\r\n    <value>SV</value>\r\n  </data>\r\n  <data name=\"S_Short\" xml:space=\"preserve\">\r\n    <value>S</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dagar</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} dagar</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} dagur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} klukkustundir</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} klukkustundir</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} klukkustund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} millisekúndur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} millisekúndur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} millisekúnda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} mínútur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} mínútur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} mínúta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} mánuðir</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Plural\" xml:space=\"preserve\">\r\n    <value>{0} mánuðir</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Singular\" xml:space=\"preserve\">\r\n    <value>{0} mánuðir</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekúndur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} sekúndur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} sekúnda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} vikur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} vikur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} vika</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} ár</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ár</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ár</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>einn dagur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>einn dagur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>ein klukkustund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>ein klukkustund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>ein millisekúnda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>ein millisekúnda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>ein mínúta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>ein mínúta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 mánuður</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>einn mánuður</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>ein sekúnda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>ein sekúnda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>ein vika</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>ein vika</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 ár</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>eitt ár</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>engin stund</value>\r\n  </data>\r\n  <data name=\"W\" xml:space=\"preserve\">\r\n    <value>vestur</value>\r\n  </data>\r\n  <data name=\"WNW\" xml:space=\"preserve\">\r\n    <value>vestnorðvestur</value>\r\n  </data>\r\n  <data name=\"WNW_Short\" xml:space=\"preserve\">\r\n    <value>VNV</value>\r\n  </data>\r\n  <data name=\"WSW\" xml:space=\"preserve\">\r\n    <value>vestsuðvestur</value>\r\n  </data>\r\n  <data name=\"WSW_Short\" xml:space=\"preserve\">\r\n    <value>VSV</value>\r\n  </data>\r\n  <data name=\"W_Short\" xml:space=\"preserve\">\r\n    <value>V</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.it.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} giorni fa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>tra {0} giorni</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} ore fa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>tra {0} ore</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} minuti fa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>tra {0} minuti</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} mesi fa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>tra {0} mesi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} secondi fa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>tra {0} secondi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} anni fa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>tra {0} anni</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>adesso</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>ieri</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>domani</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>un'ora fa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>tra un'ora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>un minuto fa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>tra un minuto</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>un mese fa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>tra un mese</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>un secondo fa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>tra un secondo</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>un anno fa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>tra un anno</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} giorni</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} ore</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} millisecondi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minuti</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} mesi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} secondi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} settimane</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} anni</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 giorno</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>un giorno</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 ora</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>una ora</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 millisecondo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>un millisecondo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>un minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 mese</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>un mese</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 secondo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>un secondo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 settimana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>una settimana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 anno</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>un anno</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>0 secondi</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.ja.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format\r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} 日前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 日後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} 時間前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 時間後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} 分前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 分後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} か月前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} か月後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} 秒前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 秒後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} 年前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 年後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>今</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>昨日</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>明日</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>1 時間前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>1 時間後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>1 分前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>1 分後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>先月</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>来月</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>1 秒前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>1 秒後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>去年</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>来年</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} 日</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} 時間</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} ミリ秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} 分</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} ヶ月</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} 秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} 週間</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} 年</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 日</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 時間</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 ミリ秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 分</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 ヶ月</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 週間</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 年</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>0 秒</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.ko.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0}일 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0}일 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0}일 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0}일 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0}일 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0}일 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0}일 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0}일 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0}시간 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0}시간 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}시간 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0}시간 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0}시간 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0}시간 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0}시간 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}시간 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0}시간 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0}시간 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0}분 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0}분 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}분 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0}분 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0}분 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0}분 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0}분 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}분 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0}분 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0}분 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0}개월 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0}개월 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}개월 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0}개월 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0}개월 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0}개월 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0}개월 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}개월 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0}개월 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0}개월 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0}초 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0}초 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}초 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0}초 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0}초 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0}초 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0}초 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}초 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0}초 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0}초 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0}년 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0}년 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}년 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0}년 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0}년 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0}년 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0}년 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}년 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0}년 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0}년 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>사용 안 함</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>지금</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>어제</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>내일</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>1시간 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>1시간 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>1분 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>1분 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>1개월 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>1개월 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>1초 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>1초 후</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>1년 전</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>1년 후</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0}일</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>{0}일</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0}일</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0}일</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0}시간</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>{0}시간</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}시간</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0}시간</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0}시간</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0}밀리초</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0}밀리초</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}밀리초</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0}밀리초</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0}밀리초</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0}분</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0}분</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}분</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0}분</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0}분</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0}개월</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0}초</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0}초</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}초</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0}초</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0}초</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0}주</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>{0}주</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0}주</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0}주</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0}주</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0}년</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1일</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1시간</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1밀리초</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1분</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1개월</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1초</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1주</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1년</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>방금</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.ku.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} ڕۆژ لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} ڕۆژ لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ڕۆژ لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ڕۆژ لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ڕۆژی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} ڕۆژی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ڕۆژی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ڕۆژی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێر لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێر لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێر لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێر لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێر لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێری دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێری دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێری دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێری دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێری دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} خولەک لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} خولەک لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} خولەک لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} خولەک لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} خولەک لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} خولەکی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} خولەکی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} خولەکی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} خولەکی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} خولەکی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} مانگ لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} مانگ لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} مانگ لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} مانگ لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} مانگ لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} مانگی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} مانگی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} مانگی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} مانگی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} مانگی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} چرکە لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} چرکە لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} چرکە لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} چرکە لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} چرکە لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} چرکەی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} چرکەی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} چرکەی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} چرکەی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} چرکەی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} ساڵ لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} ساڵ لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} ساڵ لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ساڵ لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ساڵ لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ساڵی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} ساڵی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} ساڵی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ساڵی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ساڵی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>هەرگیز</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>ئێستا</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>دوێنێ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>بەیانی</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>کاتژمێرێک لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>کاتژمێرێکی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>خولەکێک لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>خولەکێکی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>مانگێک لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>مانگێکی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>چرکەیەک لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>چرکەیەکی دیکە</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>ساڵێک لەمەوبەر</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>ساڵێکی دیکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} ڕۆژ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>{0} ڕۆژ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} ڕۆژ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ڕۆژ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ڕۆژ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێر</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێر</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێر</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێر</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} کاتژمێر</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} میلیچرکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} میلیچرکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} میلیچرکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} میلیچرکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} میلیچرکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} خولەک</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0} خولەک</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} خولەک</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} خولەک</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} خولەک</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} مانگ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Dual\" xml:space=\"preserve\">\r\n    <value>{0} مانگ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} مانگ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Plural\" xml:space=\"preserve\">\r\n    <value>{0} مانگ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Singular\" xml:space=\"preserve\">\r\n    <value>{0} مانگ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} چرکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} چرکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} چرکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} چرکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} چرکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} هەفتە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>{0} هەفتە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} هەفتە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} هەفتە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} هەفتە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} ساڵ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Dual\" xml:space=\"preserve\">\r\n    <value>{0} ساڵ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} ساڵ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ساڵ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ساڵ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 ڕۆژ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>یەک ڕۆژ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 کاتژمێر</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>یەک کاتژمێر</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 میلیچرکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>یەک میلیچرکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 خولەک</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>یەک خولەک</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 مانگ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>یەک مانگ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 چرکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>یەک چرکە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 هەفتە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>یەک هەفتە</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 ساڵ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>یەک ساڵ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>ئێستا</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.lb.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\"></xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>1.3</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DataUnit_Bit\" xml:space=\"preserve\">\r\n    <value>Bit</value>\r\n  </data>\r\n  <data name=\"DataUnit_BitSymbol\" xml:space=\"preserve\">\r\n    <value>bit</value>\r\n  </data>\r\n  <data name=\"DataUnit_Byte\" xml:space=\"preserve\">\r\n    <value>Byte</value>\r\n  </data>\r\n  <data name=\"DataUnit_ByteSymbol\" xml:space=\"preserve\">\r\n    <value>B</value>\r\n  </data>\r\n  <data name=\"DataUnit_Gigabyte\" xml:space=\"preserve\">\r\n    <value>Gigabyte</value>\r\n  </data>\r\n  <data name=\"DataUnit_GigabyteSymbol\" xml:space=\"preserve\">\r\n    <value>GB</value>\r\n  </data>\r\n  <data name=\"DataUnit_Kilobyte\" xml:space=\"preserve\">\r\n    <value>Kilobyte</value>\r\n  </data>\r\n  <data name=\"DataUnit_KilobyteSymbol\" xml:space=\"preserve\">\r\n    <value>KB</value>\r\n  </data>\r\n  <data name=\"DataUnit_Megabyte\" xml:space=\"preserve\">\r\n    <value>Megabyte</value>\r\n  </data>\r\n  <data name=\"DataUnit_MegabyteSymbol\" xml:space=\"preserve\">\r\n    <value>MB</value>\r\n  </data>\r\n  <data name=\"DataUnit_Terabyte\" xml:space=\"preserve\">\r\n    <value>Terabyte</value>\r\n  </data>\r\n  <data name=\"DataUnit_TerabyteSymbol\" xml:space=\"preserve\">\r\n    <value>TB</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>viru{1} {0} Deeg</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>virgëschter</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>virun engem Dag</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>a{1} {0} Deeg</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>iwwermuer</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>viru{1} {0} Stonnen</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>a{1} {0} Stonnen</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>viru{1} {0} Minutten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>a{1} {0} Minutten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>viru{1} {0} Méint</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>a{1} {0} Méint</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>viru{1} {0} Sekonnen</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>a{1} {0} Sekonnen</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>viru{1} {0} Joer</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>a{1} {0} Joer</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>ni</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>elo</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>gëschter</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>muer</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>virun enger Stonn</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>an enger Stonn</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>virun enger Minutt</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>an enger Minutt</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>virun engem Mount</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>an engem Mount</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>virun enger Sekonn</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>an enger Sekonn</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>virun engem Joer</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>an engem Joer</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} Deeg</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} Stonnen</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} Millisekonnen</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} Minutten</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} Méint</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} Sekonnen</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} Wochen</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} Joer</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 Dag</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>een Dag</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 Stonn</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>eng Stonn</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 Millisekonn</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>eng Millisekonn</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 Minutt</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>eng Minutt</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 Mount</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>ee Mount</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 Sekonn</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>eng Sekonn</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 Woch</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>eng Woch</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 Joer</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>ee Joer</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>Keng Zäit</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.lt.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>1.3</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>prieš {0} dienas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>prieš {0} dienų</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>prieš {0} dieną</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>po {0} dienų</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>po {0} dienos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>prieš {0} valandas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>prieš {0} valandų</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>prieš {0} valandą</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>po {0} valandų</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>po {0} valandos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>prieš {0} minutes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>prieš {0} minučių</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>prieš {0} minutę</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>po {0} minučių</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>po {0} minutės</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>prieš {0} mėnesius</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>prieš {0} mėnesių</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>prieš {0} mėnesį</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>po {0} mėnesių</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>po {0} mėnesio</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>prieš {0} sekundes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>prieš {0} sekundžių</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>prieš {0} sekundę</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>po {0} sekundžių</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>po {0} sekundės</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>prieš {0} metus</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>prieš {0} metų</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>prieš {0} metus</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>po {0} metų</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>po {0} metų</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>po {0} metų</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>niekada</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>dabar</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>vakar</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>rytoj</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>prieš valandą</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>po valandos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>prieš minutę</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>po minutės</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>prieš vieną mėnesį</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>po vieno mėnesio</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>prieš vieną sekundę</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>po vienos sekundės</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>prieš vienerius metus</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>po vienerių metų</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dienos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} dienų</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} diena</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} valandos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} valandų</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} valanda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milisekundės</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} milisekundžių</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} milisekundė</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minutės</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minučių</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minutė</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} mėnesiai</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Plural\" xml:space=\"preserve\">\r\n    <value>{0} mėnesių</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Singular\" xml:space=\"preserve\">\r\n    <value>{0} mėnuo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekundės</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} sekundžių</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} sekundė</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} savaitės</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} savaičių</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} savaitė</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} metai</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Plural\" xml:space=\"preserve\">\r\n    <value>{0} metų</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Singular\" xml:space=\"preserve\">\r\n    <value>{0} metai</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 diena</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>viena diena</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 valanda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>viena valanda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milisekundė</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>viena milisekundė</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minutė</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>viena minutė</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 mėnuo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>vienas mėnuo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 sekundė</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>viena sekundė</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 savaitė</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>viena savaitė</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 metai</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>vieni metai</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>nėra laiko</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.lv.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>pirms {0} dienām</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>pirms {0} dienām</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>pirms {0} dienām</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>pirms {0} dienas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>pēc {0} dienām</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>pēc {0} dienām</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>pēc {0} dienām</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>pēc {0} dienas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>pirms {0} stundām</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>pirms {0} stundām</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pirms {0} stundām</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>pirms {0} stundām</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>pirms {0} stundas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>pēc {0} stundām</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>pēc {0} stundām</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>pēc {0} stundām</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>pēc {0} stundām</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>pēc {0} stundas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>pirms {0} minūtēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>pirms {0} minūtēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pirms {0} minūtēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>pirms {0} minūtēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>pirms {0} minūtes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>pēc {0} minūtēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>pēc {0} minūtēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>pēc {0} minūtēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>pēc {0} minūtēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>pēc {0} minūtes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>pirms {0} mēnešiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>pirms {0} mēnešiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pirms {0} mēnešiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>pirms {0} mēnešiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>pirms {0} mēneša</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>pēc {0} mēnešiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>pēc {0} mēnešiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>pēc {0} mēnešiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>pēc {0} mēnešiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>pēc {0} mēneša</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>pirms {0} sekundēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>pirms {0} sekundēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pirms {0} sekundēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>pirms {0} sekundēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>pirms {0} sekundes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>pēc {0} sekundēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>pēc {0} sekundēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>pēc {0} sekundēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>pēc {0} sekundēm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>pēc {0} sekundes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>pirms {0} gadiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>pirms {0} gadiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pirms {0} gadiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>pirms {0} gadiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>pirms {0} gada</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>pēc {0} gadiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>pēc {0} gadiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>pēc {0} gadiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>pēc {0} gadiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>pēc {0} gada</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>nekad</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>tagad</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>vakardien</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>rītdien</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>pirms stundas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>pēc stundas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>pirms minūtes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>pēc minūtēs</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>pirms mēneša</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>pēc mēneša</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>pirms sekundes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>pēc sekundes</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>pirms gada</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>pēc gada</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dienas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>{0} dienas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} dienas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} diena</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} stundas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>{0} stundas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} stundas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} stundas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} stunda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milisekundes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} milisekundes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} milisekundes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} milisekundes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} milisekunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minūtes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minūtes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minūtes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minūtes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minūte</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} mēneši</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekundes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} sekundes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} sekundes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} sekundes</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} sekunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} nedēļas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>{0} nedēļas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} nedēļas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} nedēļas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} nedēļa</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} gadi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 diena</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 stunda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milisekunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minūte</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 mēnesis</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 sekunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 nedēļa</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 gads</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>bez laika</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.ms.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} hari yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} hari yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} hari yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hari yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} hari dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} hari dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} hari dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hari dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} jam yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} jam yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} jam yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} jam yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} jam yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} jam dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} jam dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} jam dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} jam dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} jam dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} minit yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minit yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minit yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minit yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minit yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} minit dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minit dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minit dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minit dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minit dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} bulan yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} bulan yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} bulan yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} bulan yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} bulan yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} bulan dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} bulan dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} bulan dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} bulan dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} bulan dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} saat yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} saat yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} saat yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} saat yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} saat yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} saat dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} saat dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} saat dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} saat dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} saat dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} tahun yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} tahun yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} tahun dari yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} tahun yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} tahun yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} tahun dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} tahun dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} tahun dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} tahun dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} tahun dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>tidak pernah</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>semalam</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>esok</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>sejam yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>sejam dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>seminit yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>seminit dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>sebulan yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>sebulan dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>sesaat yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>sesaat dari sekarang</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>setahun yang lalu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>setahun dari sekarang</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} hari</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>{0} hari</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} hari</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hari</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} jam</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>{0} jam</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} jam</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} jam</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} jam</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milisaat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} milisaat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} milisaat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} milisaat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} milisaat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minit</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minit</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minit</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minit</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minit</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} bulan</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} saat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} saat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} saat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} saat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} saat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} minggu</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minggu</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minggu</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minggu</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minggu</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} tahun</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 hari</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 jam</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milisaat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minit</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 bulan</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 saat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 minggu</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 tahun</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>tiada masa</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.mt.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} jiem ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>jumejn ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} jiem ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>il-bieraħ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} jiem oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>pitgħada</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} jiem oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>għada</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} siegħat ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>sagħtejn ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} siegħat ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} siegħat ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>siegħa ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} siegħat oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>sagħtejn oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} siegħat oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} siegħat oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>siegħa oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} minuti ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minuti ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minuti ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minuti ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>minuta ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} minuti oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minuti oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minuti oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minuti oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>minuta oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} xhur ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>xahrejn ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} xhur ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} xhur ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>xahar ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} xhur oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>xahrejn oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} xhur oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} xhur oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>xahar ieħor</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} sekondi ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} sekondi ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} sekondi ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} sekondi ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>sekonda ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} sekondi oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} sekondi oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} sekondi oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} sekondi oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>sekonda oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} snin ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>sentejn ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} snin ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} snin ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>sena ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} snin oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>sentejn oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} snin oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} snin oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>sena oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>qatt</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>issa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>il-bieraħ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>għada</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>siegħa ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>siegħa oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>minuta ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>minuta oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>xahar ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>xahar ieħor</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>sekonda ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>sekonda oħra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>sena ilu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>sena oħra</value>\r\n  </data>\r\n  <data name=\"E\" xml:space=\"preserve\">\r\n    <value>lvant</value>\r\n  </data>\r\n  <data name=\"ENE\" xml:space=\"preserve\">\r\n    <value>grieg il-lvant</value>\r\n  </data>\r\n  <data name=\"ENE_Short\" xml:space=\"preserve\">\r\n    <value>GL</value>\r\n  </data>\r\n  <data name=\"ESE\" xml:space=\"preserve\">\r\n    <value>east-southeast</value>\r\n  </data>\r\n  <data name=\"ESE_Short\" xml:space=\"preserve\">\r\n    <value>xlokk il-lvant</value>\r\n  </data>\r\n  <data name=\"E_Short\" xml:space=\"preserve\">\r\n    <value>L</value>\r\n  </data>\r\n  <data name=\"N\" xml:space=\"preserve\">\r\n    <value>XL</value>\r\n  </data>\r\n  <data name=\"NE\" xml:space=\"preserve\">\r\n    <value>grigal</value>\r\n  </data>\r\n  <data name=\"NE_Short\" xml:space=\"preserve\">\r\n    <value>G</value>\r\n  </data>\r\n  <data name=\"NNE\" xml:space=\"preserve\">\r\n    <value>grieg it-tramuntana</value>\r\n  </data>\r\n  <data name=\"NNE_Short\" xml:space=\"preserve\">\r\n    <value>GT</value>\r\n  </data>\r\n  <data name=\"NNW\" xml:space=\"preserve\">\r\n    <value>majjistral it-tramuntana</value>\r\n  </data>\r\n  <data name=\"NNW_Short\" xml:space=\"preserve\">\r\n    <value>MT</value>\r\n  </data>\r\n  <data name=\"NW\" xml:space=\"preserve\">\r\n    <value>majjistral</value>\r\n  </data>\r\n  <data name=\"NW_Short\" xml:space=\"preserve\">\r\n    <value>M</value>\r\n  </data>\r\n  <data name=\"N_Short\" xml:space=\"preserve\">\r\n    <value>T</value>\r\n  </data>\r\n  <data name=\"S\" xml:space=\"preserve\">\r\n    <value>nofsinhar</value>\r\n  </data>\r\n  <data name=\"SE\" xml:space=\"preserve\">\r\n    <value>xlokk</value>\r\n  </data>\r\n  <data name=\"SE_Short\" xml:space=\"preserve\">\r\n    <value>X</value>\r\n  </data>\r\n  <data name=\"SSE\" xml:space=\"preserve\">\r\n    <value>nofsinhar ix-xlokk</value>\r\n  </data>\r\n  <data name=\"SSE_Short\" xml:space=\"preserve\">\r\n    <value>NX</value>\r\n  </data>\r\n  <data name=\"SSW\" xml:space=\"preserve\">\r\n    <value>nofsinhar il-lbiċ</value>\r\n  </data>\r\n  <data name=\"SSW_Short\" xml:space=\"preserve\">\r\n    <value>NL</value>\r\n  </data>\r\n  <data name=\"SW\" xml:space=\"preserve\">\r\n    <value>lbiċ</value>\r\n  </data>\r\n  <data name=\"SW_Short\" xml:space=\"preserve\">\r\n    <value>L</value>\r\n  </data>\r\n  <data name=\"S_Short\" xml:space=\"preserve\">\r\n    <value>N</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} jiem</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>jumejn</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} jiem</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} jiem</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>jum</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} siegħat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>sagħtejn</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} siegħat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} siegħat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>siegħa</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} millisekondi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} millisekondi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} millisekondi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} millisekondi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>millisekonda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minuti</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minuti</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minuti</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minuti</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minuta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} xhur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Dual\" xml:space=\"preserve\">\r\n    <value>xahrejn</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} xhur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Plural\" xml:space=\"preserve\">\r\n    <value>{0} xhur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Singular\" xml:space=\"preserve\">\r\n    <value>xahar</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekondi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} sekondi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} sekondi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} sekondi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>sekonda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} ġimgħat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>ġimgħatejn</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} ġimgħat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ġimgħat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>ġimgħa</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} snin</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Dual\" xml:space=\"preserve\">\r\n    <value>sentejn</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} snin</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Plural\" xml:space=\"preserve\">\r\n    <value>{0} snin</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Singular\" xml:space=\"preserve\">\r\n    <value>{0} snin</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>ġurnata</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>ġurnata</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>siegħa</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>siegħa</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>millisekonda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>millisekonda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>minuta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>minuta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>xahar</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>xahar</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>sekonda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>sekonda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>ġimgħa</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>ġimgħa</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>sena</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>sena</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>xejn</value>\r\n  </data>\r\n  <data name=\"W\" xml:space=\"preserve\">\r\n    <value>punent</value>\r\n  </data>\r\n  <data name=\"WNW\" xml:space=\"preserve\">\r\n    <value>punent majjistru</value>\r\n  </data>\r\n  <data name=\"WNW_Short\" xml:space=\"preserve\">\r\n    <value>PM</value>\r\n  </data>\r\n  <data name=\"WSW\" xml:space=\"preserve\">\r\n    <value>punent il-lbiċ</value>\r\n  </data>\r\n  <data name=\"WSW_Short\" xml:space=\"preserve\">\r\n    <value>PL</value>\r\n  </data>\r\n  <data name=\"W_Short\" xml:space=\"preserve\">\r\n    <value>P</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.nb.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} dager siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} dager fra nå</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} timer siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} timer fra nå</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} minutter siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} minutter fra nå</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} måneder siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} måneder fra nå</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} sekunder siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} sekunder fra nå</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} år siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} år fra nå</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>nå</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>i går</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>i morgen</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>en time siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>en time fra nå</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>ett minutt siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>ett minutt fra nå</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>en måned siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>en måned fra nå</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>ett sekund siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>ett sekund fra nå</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>ett år siden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>ett år fra nå</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dager</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} timer</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} millisekunder</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minutter</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} måneder</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekunder</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} uker</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} år</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 dag</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>en dag</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 time</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>en time</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 millisekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>ett millisekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minutt</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>ett minutt</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 måned</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>en måned</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 sekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>ett sekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 uke</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>en uke</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 år</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>ett år</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>ingen tid</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.nl.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} dagen geleden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>over {0} dagen</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} uur geleden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>over {0} uur</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} minuten geleden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>over {0} minuten</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} maanden geleden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>over {0} maanden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} seconden geleden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>over {0} seconden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} jaar geleden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>over {0} jaar</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>nu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>gisteren</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>morgen</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>1 uur geleden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>over 1 uur</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>1 minuut geleden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>over 1 minuut</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>1 maand geleden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>over 1 maand</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>1 seconde geleden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>over 1 seconde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>1 jaar geleden</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>over 1 jaar</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dagen</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} uur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milliseconden</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minuten</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} maanden</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} seconden</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} weken</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} jaar</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 dag</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 uur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milliseconde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minuut</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 maand</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 seconde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 week</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 jaar</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>geen tijd</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.pl.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>przed {0} dniami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>przed {0} dniami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} dni</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} dni</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>przed {0} godzinami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>przed {0} godzinami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} godzin</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} godziny</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>przed {0} minutami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>przed {0} minutami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} minut</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} minuty</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>przed {0} miesiącami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>przed {0} miesiącami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} miesięcy</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} miesiące</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>przed {0} sekundami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>przed {0} sekundami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} sekund</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} sekundy</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>przed {0} laty</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>przed {0} laty</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} lat</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} lata</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>teraz</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>wczoraj</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>jutro</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>przed godziną</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>za godzinę</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>przed minutą</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>za minutę</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>przed miesiącem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>za miesiąc</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>przed sekundą</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>za sekundę</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>przed rokiem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>za rok</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dni</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} dni</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} godzin</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} godziny</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milisekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} milisekundy</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minut</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minuty</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} miesięcy</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} miesiące</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} sekundy</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} tygodni</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} tygodnie</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} lat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} lata</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 dzień</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 godzina</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milisekunda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minuta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 miesiąc</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 sekunda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 tydzień</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 rok</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>brak czasu</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.pt-BR.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DataUnit_Bit\" xml:space=\"preserve\">\r\n    <value>bit</value>\r\n    <comment>Unidade de dados: bit</comment>\r\n  </data>\r\n  <data name=\"DataUnit_BitSymbol\" xml:space=\"preserve\">\r\n    <value>bit</value>\r\n    <comment>Símbolo da unidade de dados: bit</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Byte\" xml:space=\"preserve\">\r\n    <value>byte</value>\r\n    <comment>Unidade de dados: byte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_ByteSymbol\" xml:space=\"preserve\">\r\n    <value>B</value>\r\n    <comment>Símbolo da unidade de dados: byte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Gigabyte\" xml:space=\"preserve\">\r\n    <value>gigabyte</value>\r\n    <comment>Unidade de dados: gigabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_GigabyteSymbol\" xml:space=\"preserve\">\r\n    <value>GB</value>\r\n    <comment>Símbolo da unidade de dados: gigabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Kilobyte\" xml:space=\"preserve\">\r\n    <value>kilobyte</value>\r\n    <comment>Unidade de dados: kilobyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_KilobyteSymbol\" xml:space=\"preserve\">\r\n    <value>KB</value>\r\n    <comment>Símbolo da unidade de dados: kilobyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Megabyte\" xml:space=\"preserve\">\r\n    <value>megabyte</value>\r\n    <comment>Unidade de dados: megabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_MegabyteSymbol\" xml:space=\"preserve\">\r\n    <value>MB</value>\r\n    <comment>Símbolo da unidade de dados: megabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Terabyte\" xml:space=\"preserve\">\r\n    <value>terabyte</value>\r\n    <comment>Unidade de dados: terabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_TerabyteSymbol\" xml:space=\"preserve\">\r\n    <value>TB</value>\r\n    <comment>Símbolo da unidade de dados: terabyte</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} dias atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} dias atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} dias atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} dia atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>em {0} dias</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>em {0} dias</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>em {0} dias</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>em {0} dia</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} horas atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} horas atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} horas atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} horas atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hora atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>em {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>em {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>em {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>em {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>em {0} hora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} minutos atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minutos atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minutos atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minutos atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minuto atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>em {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>em {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>em {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>em {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>em {0} minuto</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} meses atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} meses atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} meses atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} meses atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} mês atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>em {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>em {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>em {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>em {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>em {0} mês</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} segundos atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} segundos atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} segundos atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} segundos atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} segundo atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>em {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>em {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>em {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>em {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>em {0} segundo</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} anos atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} anos atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} anos atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} anos atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ano atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>em {0} anos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>em {0} anos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>em {0} anos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>em {0} anos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>em {0} ano</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>nunca</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>agora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>ontem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>amanhã</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>uma hora atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>em uma hora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>um minuto atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>em um minuto</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>um mês atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>em um mês</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>um segundo atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>em um segundo</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>um ano atrás</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>em um ano</value>\r\n  </data>\r\n  <data name=\"E\" xml:space=\"preserve\">\r\n    <value>leste</value>\r\n  </data>\r\n  <data name=\"ENE\" xml:space=\"preserve\">\r\n    <value>leste-nordeste</value>\r\n  </data>\r\n  <data name=\"ENE_Short\" xml:space=\"preserve\">\r\n    <value>LNE</value>\r\n  </data>\r\n  <data name=\"ESE\" xml:space=\"preserve\">\r\n    <value>leste-sudeste</value>\r\n  </data>\r\n  <data name=\"ESE_Short\" xml:space=\"preserve\">\r\n    <value>LSE</value>\r\n  </data>\r\n  <data name=\"E_Short\" xml:space=\"preserve\">\r\n    <value>L</value>\r\n  </data>\r\n  <data name=\"N\" xml:space=\"preserve\">\r\n    <value>norte</value>\r\n  </data>\r\n  <data name=\"NE\" xml:space=\"preserve\">\r\n    <value>nordeste</value>\r\n  </data>\r\n  <data name=\"NE_Short\" xml:space=\"preserve\">\r\n    <value>NE</value>\r\n  </data>\r\n  <data name=\"NNE\" xml:space=\"preserve\">\r\n    <value>norte-nordeste</value>\r\n  </data>\r\n  <data name=\"NNE_Short\" xml:space=\"preserve\">\r\n    <value>NNE</value>\r\n  </data>\r\n  <data name=\"NNW\" xml:space=\"preserve\">\r\n    <value>norte-noroeste</value>\r\n  </data>\r\n  <data name=\"NNW_Short\" xml:space=\"preserve\">\r\n    <value>NNO</value>\r\n  </data>\r\n  <data name=\"NW\" xml:space=\"preserve\">\r\n    <value>noroeste</value>\r\n  </data>\r\n  <data name=\"NW_Short\" xml:space=\"preserve\">\r\n    <value>NO</value>\r\n  </data>\r\n  <data name=\"N_Short\" xml:space=\"preserve\">\r\n    <value>N</value>\r\n  </data>\r\n  <data name=\"S\" xml:space=\"preserve\">\r\n    <value>sul</value>\r\n  </data>\r\n  <data name=\"SE\" xml:space=\"preserve\">\r\n    <value>sudeste</value>\r\n  </data>\r\n  <data name=\"SE_Short\" xml:space=\"preserve\">\r\n    <value>SE</value>\r\n  </data>\r\n  <data name=\"SSE\" xml:space=\"preserve\">\r\n    <value>sul-sudeste</value>\r\n  </data>\r\n  <data name=\"SSE_Short\" xml:space=\"preserve\">\r\n    <value>SSE</value>\r\n  </data>\r\n  <data name=\"SSW\" xml:space=\"preserve\">\r\n    <value>sul-sudoeste</value>\r\n  </data>\r\n  <data name=\"SSW_Short\" xml:space=\"preserve\">\r\n    <value>SSO</value>\r\n  </data>\r\n  <data name=\"SW\" xml:space=\"preserve\">\r\n    <value>sudoeste</value>\r\n  </data>\r\n  <data name=\"SW_Short\" xml:space=\"preserve\">\r\n    <value>SO</value>\r\n  </data>\r\n  <data name=\"S_Short\" xml:space=\"preserve\">\r\n    <value>S</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dias</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>{0} dias</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} dias</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} dias</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} dia</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} horas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>{0} horas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} horas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} horas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hora</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milisegundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} milisegundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} milisegundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} milisegundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} milisegundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minutos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minutos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minutos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minutos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} meses</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Dual\" xml:space=\"preserve\">\r\n    <value>{0} meses</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} meses</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Plural\" xml:space=\"preserve\">\r\n    <value>{0} meses</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Singular\" xml:space=\"preserve\">\r\n    <value>{0} mês</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} segundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} segundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} segundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} segundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} semanas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>{0} semanas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} semanas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} semanas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} semana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} anos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Dual\" xml:space=\"preserve\">\r\n    <value>{0} anos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} anos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Plural\" xml:space=\"preserve\">\r\n    <value>{0} anos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ano</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 dia</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>um dia</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 hora</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>uma hora</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milisegundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>um milisegundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>um minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 mês</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>um mês</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>um segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 semana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>uma semana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 ano</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>um ano</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>sem horário</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Day\" xml:space=\"preserve\">\r\n    <value>d</value>\r\n    <comment>Unidade de tempo: dia</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Hour\" xml:space=\"preserve\">\r\n    <value>h</value>\r\n    <comment>Unidade de tempo: hora</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Millisecond\" xml:space=\"preserve\">\r\n    <value>ms</value>\r\n    <comment>Unidade de tempo: milisegundo</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Minute\" xml:space=\"preserve\">\r\n    <value>min</value>\r\n    <comment>Unidade de tempo: minuto</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Month\" xml:space=\"preserve\">\r\n    <value>m</value>\r\n    <comment>Unidade de tempo: mês</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Second\" xml:space=\"preserve\">\r\n    <value>s</value>\r\n    <comment>Unidade de tempo: segundo</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Week\" xml:space=\"preserve\">\r\n    <value>semana</value>\r\n    <comment>Unidade de tempo: semana</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Year\" xml:space=\"preserve\">\r\n    <value>a</value>\r\n    <comment>Unidade de tempo: ano</comment>\r\n  </data>\r\n  <data name=\"W\" xml:space=\"preserve\">\r\n    <value>oeste</value>\r\n  </data>\r\n  <data name=\"WNW\" xml:space=\"preserve\">\r\n    <value>oeste-noroeste</value>\r\n  </data>\r\n  <data name=\"WNW_Short\" xml:space=\"preserve\">\r\n    <value>ONO</value>\r\n  </data>\r\n  <data name=\"WSW\" xml:space=\"preserve\">\r\n    <value>oeste-sudoeste</value>\r\n  </data>\r\n  <data name=\"WSW_Short\" xml:space=\"preserve\">\r\n    <value>OSO</value>\r\n  </data>\r\n  <data name=\"W_Short\" xml:space=\"preserve\">\r\n    <value>O</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.pt.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DataUnit_Bit\" xml:space=\"preserve\">\r\n    <value>bit</value>\r\n    <comment>Unidade de dados: bit</comment>\r\n  </data>\r\n  <data name=\"DataUnit_BitSymbol\" xml:space=\"preserve\">\r\n    <value>bit</value>\r\n    <comment>Símbolo da unidade de dados: bit</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Byte\" xml:space=\"preserve\">\r\n    <value>byte</value>\r\n    <comment>Unidade de dados: byte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_ByteSymbol\" xml:space=\"preserve\">\r\n    <value>B</value>\r\n    <comment>Símbolo da unidade de dados: byte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Gigabyte\" xml:space=\"preserve\">\r\n    <value>gigabyte</value>\r\n    <comment>Unidade de dados: gigabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_GigabyteSymbol\" xml:space=\"preserve\">\r\n    <value>GB</value>\r\n    <comment>Símbolo da unidade de dados: gigabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Kilobyte\" xml:space=\"preserve\">\r\n    <value>kilobyte</value>\r\n    <comment>Unidade de dados: kilobyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_KilobyteSymbol\" xml:space=\"preserve\">\r\n    <value>KB</value>\r\n    <comment>Símbolo da unidade de dados: kilobyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Megabyte\" xml:space=\"preserve\">\r\n    <value>megabyte</value>\r\n    <comment>Unidade de dados: megabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_MegabyteSymbol\" xml:space=\"preserve\">\r\n    <value>MB</value>\r\n    <comment>Símbolo da unidade de dados: megabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Terabyte\" xml:space=\"preserve\">\r\n    <value>terabyte</value>\r\n    <comment>Unidade de dados: terabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_TerabyteSymbol\" xml:space=\"preserve\">\r\n    <value>TB</value>\r\n    <comment>Símbolo da unidade de dados: terabyte</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>há {0} dias</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>há {0} dias</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>há {0} dias</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>há {0} dia</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>daqui a {0} dias</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>daqui a {0} dias</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>daqui a {0} dias</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>daqui a {0} dia</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>há {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>há {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>há {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>há {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>há {0} hora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>daqui a {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>daqui a {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>daqui a {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>daqui a {0} horas</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>daqui a {0} hora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>há {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>há {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>há {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>há {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>há {0} minuto</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>daqui a {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>daqui a {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>daqui a {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>daqui a {0} minutos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>daqui a {0} minuto</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>há {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>há {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>há {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>há {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>há {0} mês</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>daqui a {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>daqui a {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>daqui a {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>daqui a {0} meses</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>daqui a {0} mês</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>há {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>há {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>há {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>há {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>há {0} segundo</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>daqui a {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>daqui a {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>daqui a {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>daqui a {0} segundos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>daqui a {0} segundo</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>há {0} anos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>há {0} anos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>há {0} anos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>há {0} anos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>há {0} ano</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>daqui a {0} anos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>daqui a {0} anos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>daqui a {0} anos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>daqui a {0} anos</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>daqui a {0} ano</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>nunca</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>agora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>ontem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>amanhã</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>há uma hora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>daqui a uma hora</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>há um minuto</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>daqui a um minuto</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>há um mês</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>daqui a um mês</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>há um segundo</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>daqui a um segundo</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>há um ano</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>daqui a um ano</value>\r\n  </data>\r\n  <data name=\"E\" xml:space=\"preserve\">\r\n    <value>leste</value>\r\n  </data>\r\n  <data name=\"ENE\" xml:space=\"preserve\">\r\n    <value>leste-nordeste</value>\r\n  </data>\r\n  <data name=\"ENE_Short\" xml:space=\"preserve\">\r\n    <value>LNE</value>\r\n  </data>\r\n  <data name=\"ESE\" xml:space=\"preserve\">\r\n    <value>leste-sudeste</value>\r\n  </data>\r\n  <data name=\"ESE_Short\" xml:space=\"preserve\">\r\n    <value>LSE</value>\r\n  </data>\r\n  <data name=\"E_Short\" xml:space=\"preserve\">\r\n    <value>L</value>\r\n  </data>\r\n  <data name=\"N\" xml:space=\"preserve\">\r\n    <value>norte</value>\r\n  </data>\r\n  <data name=\"NE\" xml:space=\"preserve\">\r\n    <value>nordeste</value>\r\n  </data>\r\n  <data name=\"NE_Short\" xml:space=\"preserve\">\r\n    <value>NE</value>\r\n  </data>\r\n  <data name=\"NNE\" xml:space=\"preserve\">\r\n    <value>norte-nordeste</value>\r\n  </data>\r\n  <data name=\"NNE_Short\" xml:space=\"preserve\">\r\n    <value>NNE</value>\r\n  </data>\r\n  <data name=\"NNW\" xml:space=\"preserve\">\r\n    <value>norte-noroeste</value>\r\n  </data>\r\n  <data name=\"NNW_Short\" xml:space=\"preserve\">\r\n    <value>NNO</value>\r\n  </data>\r\n  <data name=\"NW\" xml:space=\"preserve\">\r\n    <value>noroeste</value>\r\n  </data>\r\n  <data name=\"NW_Short\" xml:space=\"preserve\">\r\n    <value>NO</value>\r\n  </data>\r\n  <data name=\"N_Short\" xml:space=\"preserve\">\r\n    <value>N</value>\r\n  </data>\r\n  <data name=\"S\" xml:space=\"preserve\">\r\n    <value>sul</value>\r\n  </data>\r\n  <data name=\"SE\" xml:space=\"preserve\">\r\n    <value>sudeste</value>\r\n  </data>\r\n  <data name=\"SE_Short\" xml:space=\"preserve\">\r\n    <value>SE</value>\r\n  </data>\r\n  <data name=\"SSE\" xml:space=\"preserve\">\r\n    <value>sul-sudeste</value>\r\n  </data>\r\n  <data name=\"SSE_Short\" xml:space=\"preserve\">\r\n    <value>SSE</value>\r\n  </data>\r\n  <data name=\"SSW\" xml:space=\"preserve\">\r\n    <value>sul-sudoeste</value>\r\n  </data>\r\n  <data name=\"SSW_Short\" xml:space=\"preserve\">\r\n    <value>SSO</value>\r\n  </data>\r\n  <data name=\"SW\" xml:space=\"preserve\">\r\n    <value>sudoeste</value>\r\n  </data>\r\n  <data name=\"SW_Short\" xml:space=\"preserve\">\r\n    <value>SO</value>\r\n  </data>\r\n  <data name=\"S_Short\" xml:space=\"preserve\">\r\n    <value>S</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dias</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>{0} dias</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} dias</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} dias</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} dia</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} horas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>{0} horas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} horas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} horas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hora</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milisegundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} milisegundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} milisegundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} milisegundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} milisegundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minutos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minutos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minutos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minutos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} meses</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Dual\" xml:space=\"preserve\">\r\n    <value>{0} meses</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} meses</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Plural\" xml:space=\"preserve\">\r\n    <value>{0} meses</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Singular\" xml:space=\"preserve\">\r\n    <value>{0} mês</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} segundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} segundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} segundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} segundos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} semanas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>{0} semanas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} semanas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} semanas</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} semana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} anos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Dual\" xml:space=\"preserve\">\r\n    <value>{0} anos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} anos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Plural\" xml:space=\"preserve\">\r\n    <value>{0} anos</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ano</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 dia</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>um dia</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 hora</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>uma hora</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milisegundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>um milisegundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>um minuto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 mês</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>um mês</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>um segundo</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 semana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>uma semana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 ano</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>um ano</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>sem horário</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Day\" xml:space=\"preserve\">\r\n    <value>d</value>\r\n    <comment>Unidade de tempo: dia</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Hour\" xml:space=\"preserve\">\r\n    <value>h</value>\r\n    <comment>Unidade de tempo: hora</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Millisecond\" xml:space=\"preserve\">\r\n    <value>ms</value>\r\n    <comment>Unidade de tempo: milisegundo</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Minute\" xml:space=\"preserve\">\r\n    <value>min</value>\r\n    <comment>Unidade de tempo: minuto</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Month\" xml:space=\"preserve\">\r\n    <value>m</value>\r\n    <comment>Unidade de tempo: mês</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Second\" xml:space=\"preserve\">\r\n    <value>s</value>\r\n    <comment>Unidade de tempo: segundo</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Week\" xml:space=\"preserve\">\r\n    <value>semana</value>\r\n    <comment>Unidade de tempo: semana</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Year\" xml:space=\"preserve\">\r\n    <value>a</value>\r\n    <comment>Unidade de tempo: ano</comment>\r\n  </data>\r\n  <data name=\"W\" xml:space=\"preserve\">\r\n    <value>oeste</value>\r\n  </data>\r\n  <data name=\"WNW\" xml:space=\"preserve\">\r\n    <value>oeste-noroeste</value>\r\n  </data>\r\n  <data name=\"WNW_Short\" xml:space=\"preserve\">\r\n    <value>ONO</value>\r\n  </data>\r\n  <data name=\"WSW\" xml:space=\"preserve\">\r\n    <value>oeste-sudoeste</value>\r\n  </data>\r\n  <data name=\"WSW_Short\" xml:space=\"preserve\">\r\n    <value>OSO</value>\r\n  </data>\r\n  <data name=\"W_Short\" xml:space=\"preserve\">\r\n    <value>O</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DataUnit_Bit\" xml:space=\"preserve\">\r\n    <value>bit</value>\r\n    <comment>Data unit: bit</comment>\r\n  </data>\r\n  <data name=\"DataUnit_BitSymbol\" xml:space=\"preserve\">\r\n    <value>b</value>\r\n    <comment>Symbol for data unit: bit</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Byte\" xml:space=\"preserve\">\r\n    <value>byte</value>\r\n    <comment>Data unit: byte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_ByteSymbol\" xml:space=\"preserve\">\r\n    <value>B</value>\r\n    <comment>Symbol for data unit: byte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Gigabyte\" xml:space=\"preserve\">\r\n    <value>gigabyte</value>\r\n    <comment>Data unit: gigabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_GigabyteSymbol\" xml:space=\"preserve\">\r\n    <value>GB</value>\r\n    <comment>Symbol for data unit: gigabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Kilobyte\" xml:space=\"preserve\">\r\n    <value>kilobyte</value>\r\n    <comment>Data unit: kilobyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_KilobyteSymbol\" xml:space=\"preserve\">\r\n    <value>KB</value>\r\n    <comment>Symbol for data unit: kilobyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Megabyte\" xml:space=\"preserve\">\r\n    <value>megabyte</value>\r\n    <comment>Data unit: megabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_MegabyteSymbol\" xml:space=\"preserve\">\r\n    <value>MB</value>\r\n    <comment>Symbol for data unit: megabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_Terabyte\" xml:space=\"preserve\">\r\n    <value>terabyte</value>\r\n    <comment>Data unit: terabyte</comment>\r\n  </data>\r\n  <data name=\"DataUnit_TerabyteSymbol\" xml:space=\"preserve\">\r\n    <value>TB</value>\r\n    <comment>Symbol for data unit: terabyte</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} days ago</value>\r\n    <comment>Date, number in word form, ambiguous</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} days ago</value>\r\n    <comment>Date, number in word form, dual</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} days ago</value>\r\n    <comment>Date, number in word form, paucal</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} days ago</value>\r\n    <comment>Date, number in word form, plural</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} day ago</value>\r\n    <comment>Date, number in word form, singular</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} days from now</value>\r\n    <comment>Date, number in word form, ambiguous</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} days from now</value>\r\n    <comment>Date, number in word form, dual</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} days from now</value>\r\n    <comment>Date, number in word form, paucal</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} days from now</value>\r\n    <comment>Date, number in word form, plural</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} day from now</value>\r\n    <comment>Date, number in word form, singular</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} hours ago</value>\r\n    <comment>Time, number in word form, ambiguous</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} hours ago</value>\r\n    <comment>Time, number in word form, dual</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} hours ago</value>\r\n    <comment>Time, number in word form, paucal</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} hours ago</value>\r\n    <comment>Time, number in word form, plural</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hour ago</value>\r\n    <comment>Time, number in word form, singular</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} hours from now</value>\r\n    <comment>Time, number in word form, ambiguous</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} hours from now</value>\r\n    <comment>Time, number in word form, dual</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} hours from now</value>\r\n    <comment>Time, number in word form, paucal</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} hours from now</value>\r\n    <comment>Time, number in word form, plural</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hour from now</value>\r\n    <comment>Time, number in word form, singular</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} minutes ago</value>\r\n    <comment>Time, number in word form, ambiguous</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minutes ago</value>\r\n    <comment>Time, number in word form, dual</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minutes ago</value>\r\n    <comment>Time, number in word form, paucal</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minutes ago</value>\r\n    <comment>Time, number in word form, plural</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minute ago</value>\r\n    <comment>Time, number in word form, singular</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} minutes from now</value>\r\n    <comment>Time, number in word form, ambiguous</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minutes from now</value>\r\n    <comment>Time, number in word form, dual</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minutes from now</value>\r\n    <comment>Time, number in word form, paucal</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minutes from now</value>\r\n    <comment>Time, number in word form, plural</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minute from now</value>\r\n    <comment>Time, number in word form, singular</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} months ago</value>\r\n    <comment>Date, number in word form, ambiguous</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} months ago</value>\r\n    <comment>Date, number in word form, dual</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} months ago</value>\r\n    <comment>Date, number in word form, paucal</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} months ago</value>\r\n    <comment>Date, number in word form, plural</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} month ago</value>\r\n    <comment>Date, number in word form, singular</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} months from now</value>\r\n    <comment>Date, number in word form, ambiguous</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} months from now</value>\r\n    <comment>Date, number in word form, dual</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} months from now</value>\r\n    <comment>Date, number in word form, paucal</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} months from now</value>\r\n    <comment>Date, number in word form, plural</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} month from now</value>\r\n    <comment>Date, number in word form, singular</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} seconds ago</value>\r\n    <comment>Time, number in word form, ambiguous</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} seconds ago</value>\r\n    <comment>Time, number in word form, dual</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} seconds ago</value>\r\n    <comment>Time, number in word form, paucal</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} seconds ago</value>\r\n    <comment>Time, number in word form, plural</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} second ago</value>\r\n    <comment>Time, number in word form, singular</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} seconds from now</value>\r\n    <comment>Time, number in word form, ambiguous</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} seconds from now</value>\r\n    <comment>Time, number in word form, dual</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} seconds from now</value>\r\n    <comment>Time, number in word form, paucal</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} seconds from now</value>\r\n    <comment>Time, number in word form, plural</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} second from now</value>\r\n    <comment>Time, number in word form, singular</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} years ago</value>\r\n    <comment>Date, number in word form, ambiguous</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} years ago</value>\r\n    <comment>Date, number in word form, dual</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} years ago</value>\r\n    <comment>Date, number in word form, paucal</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} years ago</value>\r\n    <comment>Date, number in word form, plural</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} year ago</value>\r\n    <comment>Date, number in word form, singular</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} years from now</value>\r\n    <comment>Date, number in word form, ambiguous</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} years from now</value>\r\n    <comment>Date, number in word form, dual</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} years from now</value>\r\n    <comment>Date, number in word form, paucal</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} years from now</value>\r\n    <comment>Date, number in word form, plural</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} year from now</value>\r\n    <comment>Date, number in word form, singular</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>never</value>\r\n    <comment>Date/Time</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>now</value>\r\n    <comment>Date/Time</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>yesterday</value>\r\n    <comment>Date</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>tomorrow</value>\r\n    <comment>Date</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>an hour ago</value>\r\n    <comment>Time</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>an hour from now</value>\r\n    <comment>Time</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>a minute ago</value>\r\n    <comment>Time</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>a minute from now</value>\r\n    <comment>Time</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>one month ago</value>\r\n    <comment>Date</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>one month from now</value>\r\n    <comment>Date</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>one second ago</value>\r\n    <comment>Time</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>one second from now</value>\r\n    <comment>Time</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>one year ago</value>\r\n    <comment>Date</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>one year from now</value>\r\n    <comment>Date</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_TwoDaysAgo\" xml:space=\"preserve\">\r\n    <value>two days ago</value>\r\n    <comment>Date</comment>\r\n  </data>\r\n  <data name=\"DateHumanize_TwoDaysFromNow\" xml:space=\"preserve\">\r\n    <value>two days from now</value>\r\n    <comment>Date</comment>\r\n  </data>\r\n  <data name=\"E\" xml:space=\"preserve\">\r\n    <value>east</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"ENE\" xml:space=\"preserve\">\r\n    <value>east-northeast</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"ENE_Short\" xml:space=\"preserve\">\r\n    <value>ENE</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"ESE\" xml:space=\"preserve\">\r\n    <value>east-southeast</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"ESE_Short\" xml:space=\"preserve\">\r\n    <value>ESE</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"E_Short\" xml:space=\"preserve\">\r\n    <value>E</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"N\" xml:space=\"preserve\">\r\n    <value>north</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"NE\" xml:space=\"preserve\">\r\n    <value>northeast</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"NE_Short\" xml:space=\"preserve\">\r\n    <value>NE</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"NNE\" xml:space=\"preserve\">\r\n    <value>north-northeast</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"NNE_Short\" xml:space=\"preserve\">\r\n    <value>NNE</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"NNW\" xml:space=\"preserve\">\r\n    <value>north-northwest</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"NNW_Short\" xml:space=\"preserve\">\r\n    <value>NNW</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"NW\" xml:space=\"preserve\">\r\n    <value>northwest</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"NW_Short\" xml:space=\"preserve\">\r\n    <value>NW</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"N_Short\" xml:space=\"preserve\">\r\n    <value>N</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"S\" xml:space=\"preserve\">\r\n    <value>south</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"SE\" xml:space=\"preserve\">\r\n    <value>southeast</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"SE_Short\" xml:space=\"preserve\">\r\n    <value>SE</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"SSE\" xml:space=\"preserve\">\r\n    <value>south-southeast</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"SSE_Short\" xml:space=\"preserve\">\r\n    <value>SSE</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"SSW\" xml:space=\"preserve\">\r\n    <value>south-southwest</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"SSW_Short\" xml:space=\"preserve\">\r\n    <value>SSW</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"SW\" xml:space=\"preserve\">\r\n    <value>southwest</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"SW_Short\" xml:space=\"preserve\">\r\n    <value>SW</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"S_Short\" xml:space=\"preserve\">\r\n    <value>S</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Age\" xml:space=\"preserve\">\r\n    <value>{0} old</value>\r\n    <comment>Age as in 'three years old'</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} days</value>\r\n    <comment>Date, number as words, ambiguous</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>{0} days</value>\r\n    <comment>Date, number as words, dual</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} days</value>\r\n    <comment>Date, number as words, paucal</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} days</value>\r\n    <comment>Date, number as words, plural</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} day</value>\r\n    <comment>Date, number as words, singular</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} hours</value>\r\n    <comment>Time, number as words, ambiguous</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>{0} hours</value>\r\n    <comment>Time, number as words, dual</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} hours</value>\r\n    <comment>Time, number as words, paucal</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} hours</value>\r\n    <comment>Time, number as words, plural</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} hour</value>\r\n    <comment>Time, number as words, singular</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milliseconds</value>\r\n    <comment>Time, number as words, ambiguous</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} milliseconds</value>\r\n    <comment>Time, number as words, dual</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} milliseconds</value>\r\n    <comment>Time, number as words, paucal</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} milliseconds</value>\r\n    <comment>Time, number as words, plural</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} millisecond</value>\r\n    <comment>Time, number as words, singular</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minutes</value>\r\n    <comment>Date, number as words, ambiguous</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minutes</value>\r\n    <comment>Date, number as words, dual</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minutes</value>\r\n    <comment>Date, number as words, paucal</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} minutes</value>\r\n    <comment>Date, number as words, plural</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} minute</value>\r\n    <comment>Date, number as words, singular</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} months</value>\r\n    <comment>Date, number as words, ambiguous</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Dual\" xml:space=\"preserve\">\r\n    <value>{0} months</value>\r\n    <comment>Date, number as words, dual</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} months</value>\r\n    <comment>Date, number as words, paucal</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Plural\" xml:space=\"preserve\">\r\n    <value>{0} months</value>\r\n    <comment>Date, number as words, plural</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Singular\" xml:space=\"preserve\">\r\n    <value>{0} months</value>\r\n    <comment>Date, number as words, singular</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} seconds</value>\r\n    <comment>Time, number as words, ambiguous</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} seconds</value>\r\n    <comment>Time, number as words, dual</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} seconds</value>\r\n    <comment>Time, number as words, paucal</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} seconds</value>\r\n    <comment>Time, number as words, plural</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} second</value>\r\n    <comment>Time, number as words, singular</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} weeks</value>\r\n    <comment>Date, number as words, ambiguous</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>{0} weeks</value>\r\n    <comment>Date, number as words, dual</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} weeks</value>\r\n    <comment>Date, number as words, paucal</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} weeks</value>\r\n    <comment>Date, number as words, plural</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} week</value>\r\n    <comment>Date, number as words, singular</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} years</value>\r\n    <comment>Date, number as words, ambiguous</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Dual\" xml:space=\"preserve\">\r\n    <value>{0} years</value>\r\n    <comment>Date, number as words, dual</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} years</value>\r\n    <comment>Date, number as words, paucal</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Plural\" xml:space=\"preserve\">\r\n    <value>{0} years</value>\r\n    <comment>Date, number as words, plural</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Singular\" xml:space=\"preserve\">\r\n    <value>{0} years</value>\r\n    <comment>Date, number as words, singular</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 day</value>\r\n    <comment>Date single as number</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>one day</value>\r\n    <comment>Date words</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 hour</value>\r\n    <comment>Time single as number</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>one hour</value>\r\n    <comment>Time words</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 millisecond</value>\r\n    <comment>Time single as number</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>one millisecond</value>\r\n    <comment>Time words</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minute</value>\r\n    <comment>Time single as number</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>one minute</value>\r\n    <comment>Time words</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 month</value>\r\n    <comment>Date single as number</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>one month</value>\r\n    <comment>Date words</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 second</value>\r\n    <comment>Time single as number</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>one second</value>\r\n    <comment>Time words</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 week</value>\r\n    <comment>Date single as number</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>one week</value>\r\n    <comment>Date words</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 year</value>\r\n    <comment>Date single as number</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>one year</value>\r\n    <comment>Date words</comment>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>no time</value>\r\n    <comment>Time</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Day\" xml:space=\"preserve\">\r\n    <value>d</value>\r\n    <comment>Time unit: day</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Hour\" xml:space=\"preserve\">\r\n    <value>h</value>\r\n    <comment>Time unit: hour</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Millisecond\" xml:space=\"preserve\">\r\n    <value>ms</value>\r\n    <comment>Time unit: millisecond</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Minute\" xml:space=\"preserve\">\r\n    <value>min</value>\r\n    <comment>Time unit: minute</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Month\" xml:space=\"preserve\">\r\n    <value>mo</value>\r\n    <comment>Time unit: month</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Second\" xml:space=\"preserve\">\r\n    <value>s</value>\r\n    <comment>Time unit: second</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Week\" xml:space=\"preserve\">\r\n    <value>week</value>\r\n    <comment>Time unit: week</comment>\r\n  </data>\r\n  <data name=\"TimeUnit_Year\" xml:space=\"preserve\">\r\n    <value>y</value>\r\n    <comment>Time unit: year</comment>\r\n  </data>\r\n  <data name=\"W\" xml:space=\"preserve\">\r\n    <value>west</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"WNW\" xml:space=\"preserve\">\r\n    <value>west-northwest</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"WNW_Short\" xml:space=\"preserve\">\r\n    <value>WNW</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"WSW\" xml:space=\"preserve\">\r\n    <value>west-southwest</value>\r\n    <comment>Cardinal Direction</comment>\r\n  </data>\r\n  <data name=\"WSW_Short\" xml:space=\"preserve\">\r\n    <value>WSW</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n  <data name=\"W_Short\" xml:space=\"preserve\">\r\n    <value>W</value>\r\n    <comment>Cardinal Direction Abbreviation</comment>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.ro.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>acum {0}{1} zile</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>peste {0}{1} zile</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>acum {0}{1} ore</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>peste {0}{1} ore</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>acum {0}{1} minute</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>peste {0}{1} minute</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>acum {0}{1} luni</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>peste {0}{1} luni</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>acum {0}{1} secunde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>peste {0}{1} secunde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>acum {0}{1} ani</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>peste {0}{1} ani</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>acum</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>ieri</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>mâine</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>acum o oră</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>peste o oră</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>acum un minut</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>peste un minut</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>acum o lună</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>peste o lună</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>acum o secundă</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>peste o secundă</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>acum un an</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>peste un an</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0}{1} zile</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0}{1} ore</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0}{1} milisecunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0}{1} minute</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0}{1} luni</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0}{1} secunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0}{1} săptămâni</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0}{1} ani</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 zi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 oră</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milisecundă</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minut</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 lună</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 secundă</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 săptămână</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 an</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>0 secunde</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.ru.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DataUnit_Bit\" xml:space=\"preserve\">\r\n    <value>бит</value>\r\n  </data>\r\n  <data name=\"DataUnit_BitSymbol\" xml:space=\"preserve\">\r\n    <value>бит</value>\r\n  </data>\r\n  <data name=\"DataUnit_Byte\" xml:space=\"preserve\">\r\n    <value>байт</value>\r\n  </data>\r\n  <data name=\"DataUnit_ByteSymbol\" xml:space=\"preserve\">\r\n    <value>Б</value>\r\n  </data>\r\n  <data name=\"DataUnit_Gigabyte\" xml:space=\"preserve\">\r\n    <value>гигабайт</value>\r\n  </data>\r\n  <data name=\"DataUnit_GigabyteSymbol\" xml:space=\"preserve\">\r\n    <value>ГБ</value>\r\n  </data>\r\n  <data name=\"DataUnit_Kilobyte\" xml:space=\"preserve\">\r\n    <value>килобайт</value>\r\n  </data>\r\n  <data name=\"DataUnit_KilobyteSymbol\" xml:space=\"preserve\">\r\n    <value>КБ</value>\r\n  </data>\r\n  <data name=\"DataUnit_Megabyte\" xml:space=\"preserve\">\r\n    <value>мегабайт</value>\r\n  </data>\r\n  <data name=\"DataUnit_MegabyteSymbol\" xml:space=\"preserve\">\r\n    <value>МБ</value>\r\n  </data>\r\n  <data name=\"DataUnit_Terabyte\" xml:space=\"preserve\">\r\n    <value>терабайт</value>\r\n  </data>\r\n  <data name=\"DataUnit_TerabyteSymbol\" xml:space=\"preserve\">\r\n    <value>ТБ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} дней назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} дня назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} дня назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} дней назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} день назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>через {0} дней</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>через {0} дня</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>через {0} дня</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>через {0} дней</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>через {0} день</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} часов назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} часа назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} часа назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} часов назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} час назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>через {0} часов</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>через {0} часа</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>через {0} часа</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>через {0} часов</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>через {0} час</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} минут назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} минуты назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} минуты назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} минут назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} минуту назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>через {0} минут</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>через {0} минуты</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>через {0} минуты</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>через {0} минут</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>через {0} минуту</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} месяцев назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} месяца назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} месяца назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} месяцев назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} месяц назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>через {0} месяцев</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>через {0} месяца</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>через {0} месяца</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>через {0} месяцев</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>через {0} месяц</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} секунд назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} секунды назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} секунды назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} секунд назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} секунду назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>через {0} секунд</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>через {0} секунды</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>через {0} секунды</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>через {0} секунд</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>через {0} секунду</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} лет назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} года назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} года назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} лет назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} год назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>через {0} лет</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>через {0} года</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>через {0} года</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>через {0} лет</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>через {0} год</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>никогда</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>сейчас</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>вчера</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>завтра</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>час назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>через час</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>минуту назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>через минуту</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>месяц назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>через месяц</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>секунду назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>через секунду</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>год назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>через год</value>\r\n  </data>\r\n  <data name=\"DateHumanize_TwoDaysAgo\" xml:space=\"preserve\">\r\n    <value>два дня назад</value>\r\n  </data>\r\n  <data name=\"DateHumanize_TwoDaysFromNow\" xml:space=\"preserve\">\r\n    <value>через два дня</value>\r\n  </data>\r\n  <data name=\"E\" xml:space=\"preserve\">\r\n    <value>восток</value>\r\n  </data>\r\n  <data name=\"ENE\" xml:space=\"preserve\">\r\n    <value>востоко-северо-восток</value>\r\n  </data>\r\n  <data name=\"ENE_Short\" xml:space=\"preserve\">\r\n    <value>ВСВ</value>\r\n  </data>\r\n  <data name=\"ESE\" xml:space=\"preserve\">\r\n    <value>востоко-юго-восток</value>\r\n  </data>\r\n  <data name=\"ESE_Short\" xml:space=\"preserve\">\r\n    <value>ВЮВ</value>\r\n  </data>\r\n  <data name=\"E_Short\" xml:space=\"preserve\">\r\n    <value>В</value>\r\n  </data>\r\n  <data name=\"N\" xml:space=\"preserve\">\r\n    <value>север</value>\r\n  </data>\r\n  <data name=\"NE\" xml:space=\"preserve\">\r\n    <value>северо-восток</value>\r\n  </data>\r\n  <data name=\"NE_Short\" xml:space=\"preserve\">\r\n    <value>СВ</value>\r\n  </data>\r\n  <data name=\"NNE\" xml:space=\"preserve\">\r\n    <value>северо-северо-восток</value>\r\n  </data>\r\n  <data name=\"NNE_Short\" xml:space=\"preserve\">\r\n    <value>ССВ</value>\r\n  </data>\r\n  <data name=\"NNW\" xml:space=\"preserve\">\r\n    <value>северо-северо-запад</value>\r\n  </data>\r\n  <data name=\"NNW_Short\" xml:space=\"preserve\">\r\n    <value>ССЗ</value>\r\n  </data>\r\n  <data name=\"NW\" xml:space=\"preserve\">\r\n    <value>северо-запад</value>\r\n  </data>\r\n  <data name=\"NW_Short\" xml:space=\"preserve\">\r\n    <value>СЗ</value>\r\n  </data>\r\n  <data name=\"N_Short\" xml:space=\"preserve\">\r\n    <value>С</value>\r\n  </data>\r\n  <data name=\"S\" xml:space=\"preserve\">\r\n    <value>юг</value>\r\n  </data>\r\n  <data name=\"SE\" xml:space=\"preserve\">\r\n    <value>юго-восток</value>\r\n  </data>\r\n  <data name=\"SE_Short\" xml:space=\"preserve\">\r\n    <value>ЮВ</value>\r\n  </data>\r\n  <data name=\"SSE\" xml:space=\"preserve\">\r\n    <value>юго-юго-восток</value>\r\n  </data>\r\n  <data name=\"SSE_Short\" xml:space=\"preserve\">\r\n    <value>ЮЮВ</value>\r\n  </data>\r\n  <data name=\"SSW\" xml:space=\"preserve\">\r\n    <value>юго-юго-запад</value>\r\n  </data>\r\n  <data name=\"SSW_Short\" xml:space=\"preserve\">\r\n    <value>ЮЮЗ</value>\r\n  </data>\r\n  <data name=\"SW\" xml:space=\"preserve\">\r\n    <value>юго-запад</value>\r\n  </data>\r\n  <data name=\"SW_Short\" xml:space=\"preserve\">\r\n    <value>ЮЗ</value>\r\n  </data>\r\n  <data name=\"S_Short\" xml:space=\"preserve\">\r\n    <value>Ю</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} дней</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>{0} дня</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} дня</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} дней</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} день</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} часов</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>{0} часа</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} часа</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} часов</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} час</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} миллисекунд</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} миллисекунды</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} миллисекунды</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} миллисекунд</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} миллисекунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} минут</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0} минуты</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} минуты</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} минут</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} минута</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} месяцев</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Dual\" xml:space=\"preserve\">\r\n    <value>{0} месяца</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} месяца</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Plural\" xml:space=\"preserve\">\r\n    <value>{0} месяцев</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Singular\" xml:space=\"preserve\">\r\n    <value>{0} месяц</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} секунд</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} секунды</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} секунды</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} секунд</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} секунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} недель</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>{0} недели</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} недели</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} недель</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} неделя</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} лет</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Dual\" xml:space=\"preserve\">\r\n    <value>{0} года</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} года</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Plural\" xml:space=\"preserve\">\r\n    <value>{0} лет</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Singular\" xml:space=\"preserve\">\r\n    <value>{0} год</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 день</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>один день</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 час</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>один час</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 миллисекунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>одна миллисекунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 минута</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>одна минута</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 месяц</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>один месяц</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 секунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>одна секунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 неделя</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>одна неделя</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 год</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>один год</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>нет времени</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Day\" xml:space=\"preserve\">\r\n    <value>д.</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Hour\" xml:space=\"preserve\">\r\n    <value>ч.</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Millisecond\" xml:space=\"preserve\">\r\n    <value>мс.</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Minute\" xml:space=\"preserve\">\r\n    <value>мин.</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Month\" xml:space=\"preserve\">\r\n    <value>мес.</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Second\" xml:space=\"preserve\">\r\n    <value>сек.</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Week\" xml:space=\"preserve\">\r\n    <value>нед.</value>\r\n  </data>\r\n  <data name=\"TimeUnit_Year\" xml:space=\"preserve\">\r\n    <value>г.</value>\r\n  </data>\r\n  <data name=\"W\" xml:space=\"preserve\">\r\n    <value>запад</value>\r\n  </data>\r\n  <data name=\"WNW\" xml:space=\"preserve\">\r\n    <value>западо-северо-запад</value>\r\n  </data>\r\n  <data name=\"WNW_Short\" xml:space=\"preserve\">\r\n    <value>ЗСЗ</value>\r\n  </data>\r\n  <data name=\"WSW\" xml:space=\"preserve\">\r\n    <value>западо-юго-запад</value>\r\n  </data>\r\n  <data name=\"WSW_Short\" xml:space=\"preserve\">\r\n    <value>ЗЮЗ</value>\r\n  </data>\r\n  <data name=\"W_Short\" xml:space=\"preserve\">\r\n    <value>З</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.sk.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>pred {0} dňami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pred {0} dňami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>o {0} dní</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>o {0} dni</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>pred {0} hodinami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pred {0} hodinami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>o {0} hodín</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>o {0} hodiny</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>pred {0} minútami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pred {0} minútami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>o {0} minút</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>o {0} minúty</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>pred {0} mesiacmi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pred {0} mesiacmi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>o {0} mesiacov</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>o {0} mesiace</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>pred {0} sekundami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pred {0} sekundami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>o {0} sekúnd</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>o {0} sekundy</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>pred {0} rokmi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pred {0} rokmi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>o {0} rokov</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>o {0} roky</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>teraz</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>včera</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>zajtra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>pred hodinou</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>o hodinu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>pred minútou</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>o minútu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>pred mesiacom</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>o mesiac</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>pred sekundou</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>o sekundu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>pred rokom</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>o rok</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dní</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} dni</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} hodín</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} hodiny</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milisekúnd</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} milisekundy</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minút</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minúty</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} mesiacov</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} mesiace</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekúnd</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} sekundy</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} týždňov</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} týždne</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} rokov</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} roky</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 deň</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 hodina</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milisekunda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minúta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 mesiac</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 sekunda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 týždeň</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 rok</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>žiadny čas</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.sl.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>pred {0} dnevi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>pred {0} dnevoma</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pred {0} dnevi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>čez {0} dni</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>čez {0} dni</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>čez {0} dni</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>pred {0} urami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>pred {0} urama</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pred {0} urami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>čez {0} ur</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>čez {0} uri</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>čez {0} ure</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>pred {0} minutami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>pred {0} minutama</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pred {0} minutami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>čez {0} minut</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>čez {0} minuti</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>čez {0} minute</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>pred {0} meseci</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>pred {0} mesecema</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pred {0} meseci</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>čez {0} mesecev</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>čez {0} meseca</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>čez {0} mesece</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>pred {0} sekundami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>pred {0} sekundama</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pred {0} sekundami</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>čez {0} sekund</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>čez {0} sekundi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>čez {0} sekunde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>pred {0} leti</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>pred {0} letoma</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pred {0} leti</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>čez {0} let</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>čez {0} leti</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>čez {0} leta</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>nikoli</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>sedaj</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>včeraj</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>jutri</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>pred eno uro</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>čez eno uro</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>pred eno minuto</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>čez eno minuto</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>pred enim mesecem</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>čez en mesec</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>pred eno sekundo</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>čez eno sekundo</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>pred enim letom</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>čez eno leto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dni</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>{0} dneva</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} dni</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} ur</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>{0} uri</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} ure</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milisekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} milisekundi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} milisekunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minut</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0} minuti</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minute</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} mesecev</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Dual\" xml:space=\"preserve\">\r\n    <value>{0} meseca</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} mesece</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} sekundi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} sekunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} tednov</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>{0} tedna</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} tedne</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} let</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Dual\" xml:space=\"preserve\">\r\n    <value>{0} leti</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} leta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 dan</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 ura</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milisekunda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minuta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 mesec</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 sekunda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 teden</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 leto</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>nič časa</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.sr-Latn.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>pre {0} dana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pre {0} dana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} dana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} dana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>pre {0} sati</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pre {0} sata</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} sati</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} sata</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>pre {0} minuta</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pre {0} minuta</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} minuta</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} minuta</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>pre {0} meseci</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pre {0} meseca</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} meseci</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} meseca</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>pre {0} sekundi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pre {0} sekunde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} sekundi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} sekunde</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>pre {0} godina</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>pre {0} godine</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>za {0} godina</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>za {0} godine</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>sada</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>juče</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>sutra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>pre sat vremena</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>za sat vremena</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>pre minut</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>za minut</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>pre mesec dana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>za mesec dana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>pre sekund</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>za sekund</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>pre godinu dana</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>za godinu dana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} dana</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} sati</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} sata</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milisekundi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} milisekunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minuta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} minuta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} meseci</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} meseca</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekundi</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} sekunde</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} nedelja</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} nedelje</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} godina</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} godine</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 dan</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 sat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milisekunda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minut</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 mesec</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 sekunda</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 nedelja</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 godina</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>bez proteklog vremena</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.sr.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>пре {0} дана</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>пре {0} дана</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>за {0} дана</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>за {0} дана</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>пре {0} сати</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>пре {0} сата</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>за {0} сати</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>за {0} сата</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>пре {0} минута</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>пре {0} минута</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>за {0} минута</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>за {0} минута</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>пре {0} месеци</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>пре {0} месеца</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>за {0} месеци</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>за {0} месеца</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>пре {0} секунди</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>пре {0} секунде</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>за {0} секунди</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>за {0} секунде</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>пре {0} година</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>пре {0} године</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>за {0} година</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>за {0} године</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>сада</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>јуче</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>сутра</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>пре сат времена</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>за сат времена</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>пре минут</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>за минут</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>пре месец дана</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>за месец дана</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>пре секунд</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>за секунд</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>пре годину дана</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>за годину дана</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} дана</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} дана</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} сати</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} сата</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} милисекунди</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} милисекунде</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} минута</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} минута</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} месеци</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} месеца</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} секунди</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} секунде</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} недеља</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} недеље</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} година</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} године</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 дан</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 сат</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 милисекунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 минут</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 месец</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 секунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 недеља</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 година</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>без протеклог времена</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.sv.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>för {0} dagar sedan</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>om {0} dagar</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>för {0} timmar sedan</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>om {0} timmar</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>för {0} minuter sedan</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>om {0} minuter</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>för {0} månader sedan</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>om {0} månader</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>för {0} sekunder sedan</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>om {0} sekunder</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>för {0} år sedan</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>om {0} år</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>nu</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>igår</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>i morgon</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>en timme sedan</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>om en timme</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>en minut sedan</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>om en minut</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>en månad sedan</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>om en månad</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>en sekund sedan</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>om en sekund</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>ett år sedan</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>om ett år</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} dagar</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} timmar</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} millisekunder</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minuter</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} månader</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekunder</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} veckor</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} år</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 dag</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 timma</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 millisekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minut</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>en månad</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 sekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 vecka</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>ett år</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>ingen tid</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.th.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} วันที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} วันที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} วันที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} วันที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} วันจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} วันจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} วันจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} วันจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมงที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมงที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมงที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมงที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมงที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมงจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมงจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมงจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมงจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมงจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} นาทีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} นาทีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} นาทีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} นาทีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} นาทีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} นาทีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} นาทีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} นาทีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} นาทีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} นาทีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} เดือนที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} เดือนที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} เดือนที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} เดือนที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} เดือนที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} เดือนจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} เดือนจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} เดือนจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} เดือนจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} เดือนจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} วินาทีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} วินาทีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} วินาทีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} วินาทีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} วินาทีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} วินาทีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} วินาทีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} วินาทีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} วินาทีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} วินาทีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} ปีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Dual\" xml:space=\"preserve\">\r\n    <value>{0} ปีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} ปีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ปีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ปีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ปีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Dual\" xml:space=\"preserve\">\r\n    <value>{0} ปีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} ปีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ปีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ปีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Never\" xml:space=\"preserve\">\r\n    <value>ไม่เคย</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>ขณะนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>เมื่อวานนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>พรุ่งนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>หนึ่งชั่วโมงที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>หนึ่งชั่วโมงจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>หนึ่งนาทีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>หนึ่งนาทีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>หนึ่งเดือนที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>หนึ่งเดือนจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>หนึ่งวินาทีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>หนึ่งวินาทีจากนี้</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>หนึ่งปีที่แล้ว</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>หนึ่งปีจากนี้</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} วัน</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Dual\" xml:space=\"preserve\">\r\n    <value>{0} วัน</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Plural\" xml:space=\"preserve\">\r\n    <value>{0} วัน</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} วัน</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมง</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Dual\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมง</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมง</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Plural\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมง</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} ชั่วโมง</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} มิลลิวินาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} มิลลิวินาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} มิลลิวินาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} มิลลิวินาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} มิลลิวินาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} นาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Dual\" xml:space=\"preserve\">\r\n    <value>{0} นาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} นาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Plural\" xml:space=\"preserve\">\r\n    <value>{0} นาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} นาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} เดือน</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} วินาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Dual\" xml:space=\"preserve\">\r\n    <value>{0} วินาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} วินาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Plural\" xml:space=\"preserve\">\r\n    <value>{0} วินาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} วินาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} สัปดาห์</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Dual\" xml:space=\"preserve\">\r\n    <value>{0} สัปดาห์</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} สัปดาห์</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Plural\" xml:space=\"preserve\">\r\n    <value>{0} สัปดาห์</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} สัปดาห์</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} ปี</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 วัน</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 ชั่วโมง</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 มิลลิวินาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 นาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 เดือน</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 วินาที</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 สัปดาห์</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 ปี</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>ไม่มีเวลา</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.tr.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} gün önce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} gün sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} saat önce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} saat sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} dakika önce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} dakika sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} ay önce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ay sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} saniye önce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} saniye sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} yıl önce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} yıl sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>şimdi</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>dün</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>yarın</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>bir saat önce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>bir saat sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>bir dakika önce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>bir dakika sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>bir ay önce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>bir ay sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>bir saniye önce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>bir saniye sonra</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>bir yıl önce</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>bir yıl sonra</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} gün</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} saat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} milisaniye</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} dakika</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} ay</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} saniye</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} hafta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} yıl</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 gün</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 saat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 milisaniye</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 dakika</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 ay</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 saniye</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 hafta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 yıl</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>zaman farkı yok</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.uk.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} днів тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} дні тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} день тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>через {0} днів</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>через {0} дні</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>через {0} день</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} годин тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} години тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} годину тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>через {0} годин</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>через {0} години</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>через {0} годину</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} хвилин тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} хвилини тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} хвилину тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>через {0} хвилин</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>через {0} хвилини</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>через {0} хвилину</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} місяців тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} місяці тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} місяць тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>через {0} місяців</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>через {0} місяці</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>через {0} місяць</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} секунд тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} секунди тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} секунду тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>через {0} секунд</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>через {0} секунди</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>через {0} секунду</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} років тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} роки тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo_Singular\" xml:space=\"preserve\">\r\n    <value>{0} рік тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>через {0} років</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Paucal\" xml:space=\"preserve\">\r\n    <value>через {0} роки</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow_Singular\" xml:space=\"preserve\">\r\n    <value>через {0} рік</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>зараз</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>вчора</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>завтра</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>годину тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>через годину</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>хвилину тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>через хвилину</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>місяць тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>через місяць</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>секунду тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>через секунду</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>рік тому</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>через рік</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} днів</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} дні</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays_Singular\" xml:space=\"preserve\">\r\n    <value>{0} день</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} годин</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} години</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours_Singular\" xml:space=\"preserve\">\r\n    <value>{0} година</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} мілісекунд</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} мілісекунди</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} мілісекунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} хвилин</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} хвилини</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes_Singular\" xml:space=\"preserve\">\r\n    <value>{0} хвилина</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} місяців</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} місяці</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths_Singular\" xml:space=\"preserve\">\r\n    <value>{0} місяць</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} секунд</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} секунди</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds_Singular\" xml:space=\"preserve\">\r\n    <value>{0} секунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} тижнів</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} тижні</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks_Singular\" xml:space=\"preserve\">\r\n    <value>{0} тиждень</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} років</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Paucal\" xml:space=\"preserve\">\r\n    <value>{0} роки</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears_Singular\" xml:space=\"preserve\">\r\n    <value>{0} рік</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 день</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay_Words\" xml:space=\"preserve\">\r\n    <value>один день</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 година</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour_Words\" xml:space=\"preserve\">\r\n    <value>одна година</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 мілісекунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond_Words\" xml:space=\"preserve\">\r\n    <value>одна мілісекунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 хвилина</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute_Words\" xml:space=\"preserve\">\r\n    <value>одна хвилина</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 місяць</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth_Words\" xml:space=\"preserve\">\r\n    <value>один місяць</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 секунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond_Words\" xml:space=\"preserve\">\r\n    <value>одна секунда</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 тиждень</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek_Words\" xml:space=\"preserve\">\r\n    <value>один тиждень</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 рік</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear_Words\" xml:space=\"preserve\">\r\n    <value>один рік</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>без часу</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.uz-Cyrl-UZ.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} кун аввал</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} кундан сўнг</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} соат аввал</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} соатдан сўнг</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} минут аввал</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} минутдан сўнг</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} ой аввал</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ойдан сўнг</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} секунд аввал</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} секунддан сўнг</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} йил аввал</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} йилдан сўнг</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>ҳозир</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>кеча</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>эртага</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>бир соат аввал</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>бир соатдан сўнг</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>бир дақиқа аввал</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>бир дақиқадан сўнг</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>бир ой аввал</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>бир ойдан сўнг</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>бир сония аввал</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>бир сониядан сўнг</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>бир йил аввал</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>бир йилдан сўнг</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} кун</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} соат</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} миллисекунд</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} минут</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} ой</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} секунд</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} ҳафта</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} йил</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 кун</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 соат</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 миллисекунд</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 минут</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 ой</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 секунд</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 ҳафта</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 йил</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>вақт йўқ</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.uz-Latn-UZ.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} kun avval</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} kundan so`ng</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} soat avval</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} soatdan so`ng</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} minut avval</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} minutdan so`ng</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} oy avval</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} oydan so`ng</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} sekund avval</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} sekunddan so`ng</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} yil avval</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} yildan so`ng</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>hozir</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>kecha</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>ertaga</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>bir soat avval</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>bir soatdan so`ng</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>bir daqiqa avval</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>bir daqiqadan so`ng</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>bir oy avval</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>bir oydan so`ng</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>bir soniya avval</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>bir soniyadan so`ng</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>bir yil avval</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>bir yildan so`ng</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} kun</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} soat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} millisekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} minut</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} oy</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} sekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} hafta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} yil</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 kun</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 soat</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 millisekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 minut</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 oy</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 sekund</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 hafta</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 yil</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>vaqt yo`q</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.vi.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>cách đây {0} ngày</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} ngày nữa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>cách đây {0} tiếng</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} tiếng nữa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>cách đây {0} phút</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} phút nữa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>cách đây {0} tháng</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} tháng nữa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>cách đây {0} giây</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} giây nữa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>cách đây {0} năm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} năm nữa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>bây giờ</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>hôm qua</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>ngày mai</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>cách đây một tiếng</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>một tiếng nữa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>cách đây một phút</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>một phút nữa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>cách đây một tháng</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>một tháng nữa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>cách đây một giây</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>một giây nữa</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>cách đây một năm</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>một năm nữa</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} ngày</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} giờ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} phần ngàn giây</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} phút</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} tháng</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} giây</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} tuần</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} năm</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 ngày</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 giờ</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 phần ngàn giây</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 phút</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 tháng</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 giây</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 tuần</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 năm</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>không giờ</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.zh-CN.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} 天前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 天后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} 小时前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 小时后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} 分钟前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 分钟后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} 个月前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 个月后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} 秒钟前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 秒钟后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} 年前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 年后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>现在</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>昨天</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>明天</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>1 小时前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>1 小时后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>1 分钟前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>1 分钟后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>1 个月前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>1 个月后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>1 秒钟前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>1 秒钟后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>去年</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>明年</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} 天</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} 小时</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} 毫秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} 分</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} 个月</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} 秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} 周</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} 年</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 天</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 小时</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 毫秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 分</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 个月</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 周</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 年</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>没有时间</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.zh-Hans.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} 天前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 天后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} 小时前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 小时后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} 分钟前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 分钟后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} 个月前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 个月后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} 秒钟前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 秒钟后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} 年前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 年后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>现在</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>昨天</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>明天</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>1 小时前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>1 小时后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>1 分钟前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>1 分钟后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>1 个月前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>1 个月后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>1 秒钟前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>1 秒钟后</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>去年</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>明年</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} 天</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} 小时</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} 毫秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} 分</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} 个月</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} 秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} 周</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} 年</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 天</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 小时</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 毫秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 分</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 个月</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 周</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 年</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>没有时间</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/Properties/Resources.zh-Hant.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DateHumanize_MultipleDaysAgo\" xml:space=\"preserve\">\r\n    <value>{0} 天前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleDaysFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 天後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursAgo\" xml:space=\"preserve\">\r\n    <value>{0} 小時前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleHoursFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 小時後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesAgo\" xml:space=\"preserve\">\r\n    <value>{0} 分鐘前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMinutesFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 分鐘後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsAgo\" xml:space=\"preserve\">\r\n    <value>{0} 個月前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleMonthsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 個月後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsAgo\" xml:space=\"preserve\">\r\n    <value>{0} 秒鐘前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleSecondsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 秒鐘後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsAgo\" xml:space=\"preserve\">\r\n    <value>{0} 年前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_MultipleYearsFromNow\" xml:space=\"preserve\">\r\n    <value>{0} 年後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_Now\" xml:space=\"preserve\">\r\n    <value>現在</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayAgo\" xml:space=\"preserve\">\r\n    <value>昨天</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleDayFromNow\" xml:space=\"preserve\">\r\n    <value>明天</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourAgo\" xml:space=\"preserve\">\r\n    <value>1 小時前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleHourFromNow\" xml:space=\"preserve\">\r\n    <value>1 小時後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteAgo\" xml:space=\"preserve\">\r\n    <value>1 分鐘前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMinuteFromNow\" xml:space=\"preserve\">\r\n    <value>1 分鐘後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthAgo\" xml:space=\"preserve\">\r\n    <value>1 個月前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleMonthFromNow\" xml:space=\"preserve\">\r\n    <value>1 個月後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondAgo\" xml:space=\"preserve\">\r\n    <value>1 秒鐘前</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleSecondFromNow\" xml:space=\"preserve\">\r\n    <value>1 秒鐘後</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearAgo\" xml:space=\"preserve\">\r\n    <value>去年</value>\r\n  </data>\r\n  <data name=\"DateHumanize_SingleYearFromNow\" xml:space=\"preserve\">\r\n    <value>明年</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleDays\" xml:space=\"preserve\">\r\n    <value>{0} 天</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleHours\" xml:space=\"preserve\">\r\n    <value>{0} 小時</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMilliseconds\" xml:space=\"preserve\">\r\n    <value>{0} 毫秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMinutes\" xml:space=\"preserve\">\r\n    <value>{0} 分</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleMonths\" xml:space=\"preserve\">\r\n    <value>{0} 個月</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleSeconds\" xml:space=\"preserve\">\r\n    <value>{0} 秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleWeeks\" xml:space=\"preserve\">\r\n    <value>{0} 周</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_MultipleYears\" xml:space=\"preserve\">\r\n    <value>{0} 年</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleDay\" xml:space=\"preserve\">\r\n    <value>1 天</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleHour\" xml:space=\"preserve\">\r\n    <value>1 小時</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMillisecond\" xml:space=\"preserve\">\r\n    <value>1 毫秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMinute\" xml:space=\"preserve\">\r\n    <value>1 分</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleMonth\" xml:space=\"preserve\">\r\n    <value>1 個月</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleSecond\" xml:space=\"preserve\">\r\n    <value>1 秒</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleWeek\" xml:space=\"preserve\">\r\n    <value>1 周</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_SingleYear\" xml:space=\"preserve\">\r\n    <value>1 年</value>\r\n  </data>\r\n  <data name=\"TimeSpanHumanize_Zero\" xml:space=\"preserve\">\r\n    <value>沒有時間</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/Humanizer/RomanNumeralExtensions.cs",
    "content": "// Done by Jesse Slicer https://github.com/jslicer\r\n\r\nusing System.Diagnostics;\r\n\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// Contains extension methods for changing a number to Roman representation (ToRoman) and from Roman representation back to the number (FromRoman)\r\n/// </summary>\r\npublic static partial class RomanNumeralExtensions\r\n{\r\n    static readonly KeyValuePair<string, int>[] RomanNumeralsSequence =\r\n    [\r\n        new(\"M\", 1000),\r\n        new(\"CM\", 900),\r\n        new(\"D\", 500 ),\r\n        new(\"CD\", 400),\r\n        new(\"C\", 100 ),\r\n        new(\"XC\", 90 ),\r\n        new(\"L\", 50  ),\r\n        new(\"XL\", 40 ),\r\n        new(\"X\", 10  ),\r\n        new(\"IX\", 9  ),\r\n        new(\"V\", 5   ),\r\n        new(\"IV\", 4  ),\r\n        new(\"I\", 1   ),\r\n    ];\r\n\r\n    static int GetRomanNumeralCharValue(char c)\r\n    {\r\n        Debug.Assert(char.ToUpperInvariant(c) is 'M' or 'D' or 'C' or 'L' or 'X' or 'V' or 'I', \"Invalid Roman numeral character\");\r\n        return (c & ~0x20) switch\r\n        {\r\n            'M' => 1000,\r\n            'D' => 500,\r\n            'C' => 100,\r\n            'L' => 50,\r\n            'X' => 10,\r\n            'V' => 5,\r\n            _ => 1,\r\n        };\r\n    }\r\n\r\n    private const string ValidRomanNumeralPattern = @\"^(?i:(?=[MDCLXVI])((M{0,3})((C[DM])|(D?C{0,3}))?((X[LC])|(L?XX{0,2})|L)?((I[VX])|(V?(II{0,2}))|V)?))$\";\r\n\r\n#if NET7_0_OR_GREATER\r\n    [GeneratedRegex(ValidRomanNumeralPattern, RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant)]\r\n    private static partial Regex ValidRomanNumeralGenerated();\r\n    \r\n    private static Regex ValidRomanNumeral() => ValidRomanNumeralGenerated();\r\n#else\r\n    private static readonly Regex ValidRomanNumeralRegex = new(\r\n        ValidRomanNumeralPattern,\r\n        RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);\r\n\r\n    private static Regex ValidRomanNumeral() => ValidRomanNumeralRegex;\r\n#endif\r\n\r\n    /// <summary>\r\n    /// Converts a Roman numeral string to its integer representation.\r\n    /// </summary>\r\n    /// <param name=\"input\">The Roman numeral string to convert (e.g., \"XIV\", \"MCMXC\"). Must not be null.</param>\r\n    /// <returns>\r\n    /// The integer value represented by the Roman numeral.\r\n    /// </returns>\r\n    /// <exception cref=\"ArgumentNullException\">Thrown when <paramref name=\"input\"/> is null.</exception>\r\n    /// <exception cref=\"ArgumentException\">\r\n    /// Thrown when <paramref name=\"input\"/> is empty or contains an invalid Roman numeral format.\r\n    /// </exception>\r\n    /// <remarks>\r\n    /// Valid Roman numerals use the characters M, D, C, L, X, V, and I (case-insensitive).\r\n    /// Supports subtractive notation (e.g., IV = 4, IX = 9, XL = 40, XC = 90, CD = 400, CM = 900).\r\n    /// Valid range is 1 to 3999.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"XIV\".FromRoman() => 14\r\n    /// \"MCMXC\".FromRoman() => 1990\r\n    /// \"IV\".FromRoman() => 4\r\n    /// \"MMXXIII\".FromRoman() => 2023\r\n    /// </code>\r\n    /// </example>\r\n    public static int FromRoman(this string input)\r\n    {\r\n        ArgumentNullException.ThrowIfNull(input);\r\n\r\n        return FromRoman(input.AsSpan());\r\n    }\r\n\r\n    /// <summary>\r\n    /// Converts a Roman numeral character span to its integer representation.\r\n    /// </summary>\r\n    /// <param name=\"input\">The Roman numeral character span to convert. Must not be empty.</param>\r\n    /// <returns>\r\n    /// The integer value represented by the Roman numeral.\r\n    /// </returns>\r\n    /// <exception cref=\"ArgumentException\">\r\n    /// Thrown when <paramref name=\"input\"/> is empty (after trimming) or contains an invalid Roman numeral format.\r\n    /// </exception>\r\n    /// <remarks>\r\n    /// This is a memory-efficient overload that works with character spans to avoid string allocations.\r\n    /// Valid Roman numerals use the characters M, D, C, L, X, V, and I (case-insensitive).\r\n    /// Supports subtractive notation (e.g., IV = 4, IX = 9).\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"XIV\".AsSpan().FromRoman() => 14\r\n    /// \"MCMXC\".AsSpan().FromRoman() => 1990\r\n    /// </code>\r\n    /// </example>\r\n    public static int FromRoman(CharSpan input)\r\n    {\r\n        input = input.Trim();\r\n\r\n        var length = input.Length;\r\n\r\n        if (length == 0 || IsInvalidRomanNumeral(input))\r\n        {\r\n            throw new ArgumentException(\"Empty or invalid Roman numeral string.\", nameof(input));\r\n        }\r\n\r\n        var total = 0;\r\n        var i = length;\r\n\r\n        while (i > 0)\r\n        {\r\n            var digit = GetRomanNumeralCharValue(input[--i]);\r\n            if (i > 0)\r\n            {\r\n                var previousDigit = GetRomanNumeralCharValue(input[i - 1]);\r\n                if (previousDigit < digit)\r\n                {\r\n                    digit -= previousDigit;\r\n                    i--;\r\n                }\r\n            }\r\n\r\n            total += digit;\r\n        }\r\n\r\n        return total;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Converts an integer to its Roman numeral representation.\r\n    /// </summary>\r\n    /// <param name=\"input\">The integer value to convert. Must be between 1 and 3999 inclusive.</param>\r\n    /// <returns>\r\n    /// A string containing the Roman numeral representation of the input value.\r\n    /// </returns>\r\n    /// <exception cref=\"ArgumentOutOfRangeException\">\r\n    /// Thrown when <paramref name=\"input\"/> is less than 1 or greater than 3999.\r\n    /// Roman numerals are traditionally limited to this range.\r\n    /// </exception>\r\n    /// <remarks>\r\n    /// Uses standard Roman numeral notation including subtractive notation for 4, 9, 40, 90, 400, and 900.\r\n    /// The implementation is optimized for performance and avoids string allocations where possible.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// 14.ToRoman() => \"XIV\"\r\n    /// 1990.ToRoman() => \"MCMXC\"\r\n    /// 4.ToRoman() => \"IV\"\r\n    /// 2023.ToRoman() => \"MMXXIII\"\r\n    /// 3999.ToRoman() => \"MMMCMXCIX\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string ToRoman(this int input)\r\n    {\r\n        const int minValue = 1;\r\n        const int maxValue = 3999;\r\n        const int maxRomanNumeralLength = 15;\r\n\r\n        if (input is < minValue or > maxValue)\r\n        {\r\n            throw new ArgumentOutOfRangeException(nameof(input));\r\n        }\r\n\r\n        Span<char> builder = stackalloc char[maxRomanNumeralLength];\r\n        var pos = 0;\r\n\r\n        foreach (var pair in RomanNumeralsSequence)\r\n        {\r\n            while (input >= pair.Value)\r\n            {\r\n                pair.Key.AsSpan().CopyTo(builder[pos..]);\r\n                pos += pair.Key.Length;\r\n                input -= pair.Value;\r\n            }\r\n        }\r\n\r\n        return builder[..pos].ToString();\r\n    }\r\n\r\n    static bool IsInvalidRomanNumeral(CharSpan input) =>\r\n        !ValidRomanNumeral().IsMatch(input);\r\n}"
  },
  {
    "path": "src/Humanizer/StringDehumanizeExtensions.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Contains extension methods for dehumanizing strings.\r\n/// </summary>\r\npublic static class StringDehumanizeExtensions\r\n{\r\n    /// <summary>\r\n    /// Converts a humanized string back to PascalCase format by removing spaces and capitalizing each word.\r\n    /// </summary>\r\n    /// <param name=\"input\">The string to be dehumanized. Must not be null.</param>\r\n    /// <returns>\r\n    /// A PascalCase string with all spaces removed and each word capitalized.\r\n    /// If the input is already in PascalCase (contains no spaces), it is returned unchanged.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// This method reverses the humanization process by:\r\n    /// 1. Splitting the input on spaces\r\n    /// 2. Humanizing each word (to handle any edge cases)\r\n    /// 3. Pascalizing each word (capitalizing first letter)\r\n    /// 4. Removing all spaces\r\n    /// This is the inverse operation of <see cref=\"StringHumanizeExtensions.Humanize(string)\"/>.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"some string\".Dehumanize() => \"SomeString\"\r\n    /// \"Some String\".Dehumanize() => \"SomeString\"\r\n    /// \"Some string\".Dehumanize() => \"SomeString\"\r\n    /// \"SomeStringAndAnotherString\".Dehumanize() => \"SomeStringAndAnotherString\" // Already dehumanized, returned unchanged\r\n    /// </code>\r\n    /// </example>\r\n    public static string Dehumanize(this string input)\r\n    {\r\n        var words = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);\r\n        if (words.Length == 0)\r\n        {\r\n            return input;\r\n        }\r\n\r\n        if (words.Length == 1)\r\n        {\r\n            return words[0].Humanize().Pascalize();\r\n        }\r\n\r\n        return string.Concat(words.Select(word => word.Humanize().Pascalize()));\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/StringHumanizeExtensions.cs",
    "content": "using System.Runtime.InteropServices;\r\n\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// Contains extension methods for humanizing string values.\r\n/// </summary>\r\npublic static partial class StringHumanizeExtensions\r\n{\r\n    const string PascalCaseWordPartsPattern = @\"(\\p{Lu}?\\p{Ll}+|[0-9]+\\p{Ll}*|\\p{Lu}+(?=\\p{Lu}|[0-9]|\\b)|\\p{Lo}+)[,;]?\";\r\n    const string FreestandingSpacingCharPattern = @\"\\s[-_]|[-_]\\s\";\r\n\r\n#if NET7_0_OR_GREATER\r\n    [GeneratedRegex(PascalCaseWordPartsPattern, RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture)]\r\n    private static partial Regex PascalCaseWordPartsRegexGenerated();\r\n    \r\n    private static Regex PascalCaseWordPartsRegex() => PascalCaseWordPartsRegexGenerated();\r\n\r\n    [GeneratedRegex(FreestandingSpacingCharPattern)]\r\n    private static partial Regex FreestandingSpacingCharRegexGenerated();\r\n    \r\n    private static Regex FreestandingSpacingCharRegex() => FreestandingSpacingCharRegexGenerated();\r\n#else\r\n    private static readonly Regex PascalCaseWordPartsRegexField = new(\r\n        PascalCaseWordPartsPattern,\r\n        RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture | RegexOptions.Compiled);\r\n\r\n    private static Regex PascalCaseWordPartsRegex() => PascalCaseWordPartsRegexField;\r\n\r\n    private static readonly Regex FreestandingSpacingCharRegexField = new(FreestandingSpacingCharPattern, RegexOptions.Compiled);\r\n\r\n    private static Regex FreestandingSpacingCharRegex() => FreestandingSpacingCharRegexField;\r\n#endif\r\n\r\n    static string FromUnderscoreDashSeparatedWords(string input)\r\n    {\r\n#if NET7_0_OR_GREATER\r\n        return string.Create(input.Length, input, (span, state) =>\r\n        {\r\n            state.AsSpan().CopyTo(span);\r\n            span.Replace('_', ' ');\r\n            span.Replace('-', ' ');\r\n        });\r\n#else\r\n        return input.Replace('_', ' ').Replace('-', ' ');\r\n#endif\r\n    }\r\n\r\n    static string FromPascalCase(string input)\r\n    {\r\n        var result = string.Join(\" \", PascalCaseWordPartsRegex()\r\n            .Matches(input)\r\n            // ReSharper disable once RedundantEnumerableCastCall\r\n            .Cast<Match>()\r\n            .Select(match =>\r\n            {\r\n                var value = match.Value;\r\n                return value.All(char.IsUpper) &&\r\n                       (value.Length > 1 || (match.Index > 0 && input[match.Index - 1] == ' ') || value == \"I\")\r\n                    ? value\r\n                    : value.ToLower();\r\n            }));\r\n\r\n        if (result.All(c => c == ' ' || char.IsUpper(c)) && result.Contains(' '))\r\n        {\r\n            result = result.ToLower();\r\n        }\r\n\r\n        return result.Length > 0\r\n            ? Concat(char.ToUpper(result[0]), result.AsSpan(1, result.Length - 1))\r\n            : result;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Transforms a string into a human-readable format by intelligently handling PascalCase, camelCase,\r\n    /// underscored_strings, and dash-separated-strings, converting them into space-separated text with\r\n    /// appropriate capitalization.\r\n    /// </summary>\r\n    /// <param name=\"input\">The string to be humanized. Must not be null.</param>\r\n    /// <returns>\r\n    /// A humanized version of the input string with spaces inserted between words and appropriate\r\n    /// capitalization. Preserves all-uppercase acronyms unchanged.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// The method applies several rules in order:\r\n    /// - If the entire input is uppercase (an acronym), it returns unchanged\r\n    /// - Handles freestanding underscores/dashes (e.g., \"some _ string\")\r\n    /// - Splits on underscores and dashes\r\n    /// - Breaks up PascalCase and camelCase text\r\n    /// The first letter of the result is always capitalized.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"PascalCaseInputString\".Humanize() => \"Pascal case input string\"\r\n    /// \"Underscored_input_String_is_turned_INTO_sentence\".Humanize() => \"Underscored input String is turned INTO sentence\"\r\n    /// \"dash-separated-string\".Humanize() => \"Dash separated string\"\r\n    /// \"HTML\".Humanize() => \"HTML\"\r\n    /// \"camelCaseText\".Humanize() => \"Camel case text\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Humanize(this string input)\r\n    {\r\n        // if input is all capitals (e.g. an acronym) then return it without change\r\n        if (input.All(char.IsUpper))\r\n        {\r\n            return input;\r\n        }\r\n\r\n        // if input contains a dash or underscore which precedes or follows a space (or both, e.g. freestanding)\r\n        // remove the dash/underscore and run it through FromPascalCase\r\n        if (FreestandingSpacingCharRegex().IsMatch(input))\r\n        {\r\n            return FromPascalCase(FromUnderscoreDashSeparatedWords(input));\r\n        }\r\n\r\n        if (input.IndexOfAny(['_', '-']) >= 0)\r\n        {\r\n            return FromUnderscoreDashSeparatedWords(input);\r\n        }\r\n\r\n        return FromPascalCase(input);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Transforms a string into a human-readable format and applies the specified letter casing.\r\n    /// </summary>\r\n    /// <param name=\"input\">The string to be humanized. Must not be null.</param>\r\n    /// <param name=\"casing\">The desired letter casing to apply to the humanized result.</param>\r\n    /// <returns>\r\n    /// A humanized version of the input string with the specified casing applied.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// This is a convenience method that combines <see cref=\"Humanize(string)\"/> with <see cref=\"CasingExtensions.ApplyCase\"/>.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"PascalCaseInputString\".Humanize(LetterCasing.AllCaps) => \"PASCAL CASE INPUT STRING\"\r\n    /// \"PascalCaseInputString\".Humanize(LetterCasing.LowerCase) => \"pascal case input string\"\r\n    /// \"PascalCaseInputString\".Humanize(LetterCasing.Title) => \"Pascal Case Input String\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Humanize(this string input, LetterCasing casing) =>\r\n        input\r\n            .Humanize()\r\n            .ApplyCase(casing);\r\n\r\n#if NET\r\n    internal static string Concat(CharSpan left, CharSpan right) =>\r\n        string.Concat(left, right);\r\n\r\n    internal static string Concat(char left, CharSpan right) =>\r\n        string.Concat(MemoryMarshal.CreateReadOnlySpan(ref left, 1), right);\r\n\r\n    internal static string Concat(CharSpan left, char right) =>\r\n        string.Concat(left, MemoryMarshal.CreateReadOnlySpan(ref right, 1));\r\n#else\r\n    internal static unsafe string Concat(CharSpan left, CharSpan right)\r\n    {\r\n        var result = new string('\\0', left.Length + right.Length);\r\n        fixed (char* pResult = result)\r\n        {\r\n            left.CopyTo(new(pResult, left.Length));\r\n            right.CopyTo(new(pResult + left.Length, right.Length));\r\n        }\r\n        return result;\r\n    }\r\n\r\n    internal static unsafe string Concat(char left, CharSpan right) =>\r\n        Concat(new CharSpan(&left, 1), right);\r\n\r\n    internal static unsafe string Concat(CharSpan left, char right) =>\r\n        Concat(left, new CharSpan(&right, 1));\r\n#endif\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/TimeOnlyToClockNotationExtensions.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// Humanizes TimeOnly into human readable sentence\r\n/// </summary>\r\npublic static class TimeOnlyToClockNotationExtensions\r\n{\r\n    /// <summary>\r\n    /// Converts a <see cref=\"TimeOnly\"/> value to its clock notation string representation\r\n    /// (e.g., \"three o'clock\", \"half past four\", \"quarter to six\").\r\n    /// </summary>\r\n    /// <param name=\"input\">The time to be converted to clock notation.</param>\r\n    /// <param name=\"roundToNearestFive\">\r\n    /// Specifies whether and how to round the minutes. Default is <see cref=\"ClockNotationRounding.None\"/>.\r\n    /// - <see cref=\"ClockNotationRounding.None\"/>: Use exact minutes\r\n    /// - <see cref=\"ClockNotationRounding.NearestFiveMinutes\"/>: Round to nearest 5 minutes\r\n    /// </param>\r\n    /// <returns>\r\n    /// A culture-specific string representation of the time in clock notation.\r\n    /// For English: \"three o'clock\", \"ten past four\", \"quarter to six\", etc.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// The output format varies by culture. Some cultures express time differently than others.\r\n    /// This method is only available on .NET 6.0 and later.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// // English (en-US) examples:\r\n    /// new TimeOnly(15, 0).ToClockNotation() => \"three o'clock\"\r\n    /// new TimeOnly(15, 15).ToClockNotation() => \"quarter past three\"\r\n    /// new TimeOnly(15, 30).ToClockNotation() => \"half past three\"\r\n    /// new TimeOnly(15, 45).ToClockNotation() => \"quarter to four\"\r\n    /// new TimeOnly(15, 7).ToClockNotation(ClockNotationRounding.NearestFiveMinutes) => \"five past three\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string ToClockNotation(this TimeOnly input, ClockNotationRounding roundToNearestFive = ClockNotationRounding.None) =>\r\n        Configurator.TimeOnlyToClockNotationConverter.Convert(input, roundToNearestFive);\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "src/Humanizer/TimeSpanHumanizeExtensions.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Humanizes TimeSpan into human readable form\r\n/// </summary>\r\npublic static class TimeSpanHumanizeExtensions\r\n{\r\n    const int DaysInAWeek = 7;\r\n    const double DaysInAYear = 365.2425; // see https://en.wikipedia.org/wiki/Gregorian_calendar\r\n    const double DaysInAMonth = DaysInAYear / 12;\r\n\r\n    static readonly TimeUnit[] TimeUnits = [.. Enumerable.Reverse(Enum.GetValues<TimeUnit>())];\r\n\r\n    /// <summary>\r\n    /// Turns a TimeSpan into a human readable form. E.g. 1 day.\r\n    /// </summary>\r\n    /// <param name=\"precision\">The maximum number of time units to return. Defaulted is 1 which means the largest unit is returned</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <param name=\"maxUnit\">The maximum unit of time to output. The default value is <see cref=\"TimeUnit.Week\"/>. The time units <see cref=\"TimeUnit.Month\"/> and <see cref=\"TimeUnit.Year\"/> will give approximations for time spans bigger 30 days by calculating with 365.2425 days a year and 30.4369 days a month.</param>\r\n    /// <param name=\"minUnit\">The minimum unit of time to output.</param>\r\n    /// <param name=\"collectionSeparator\">The separator to use when combining humanized time parts. If null, the default collection formatter for the current culture is used.</param>\r\n    /// <param name=\"toWords\">Uses words instead of numbers if true. E.g. one day.</param>\r\n    public static string Humanize(this TimeSpan timeSpan, int precision = 1, CultureInfo? culture = null, TimeUnit maxUnit = TimeUnit.Week, TimeUnit minUnit = TimeUnit.Millisecond, string? collectionSeparator = \", \", bool toWords = false) =>\r\n        Humanize(timeSpan, precision, false, culture, maxUnit, minUnit, collectionSeparator, toWords);\r\n\r\n    /// <summary>\r\n    /// Turns a TimeSpan into a human readable form. E.g. 1 day.\r\n    /// </summary>\r\n    /// <param name=\"precision\">The maximum number of time units to return.</param>\r\n    /// <param name=\"countEmptyUnits\">Controls whether empty time units should be counted towards maximum number of time units. Leading empty time units never count.</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <param name=\"maxUnit\">The maximum unit of time to output. The default value is <see cref=\"TimeUnit.Week\"/>. The time units <see cref=\"TimeUnit.Month\"/> and <see cref=\"TimeUnit.Year\"/> will give approximations for time spans bigger than 30 days by calculating with 365.2425 days a year and 30.4369 days a month.</param>\r\n    /// <param name=\"minUnit\">The minimum unit of time to output.</param>\r\n    /// <param name=\"collectionSeparator\">The separator to use when combining humanized time parts. If null, the default collection formatter for the current culture is used.</param>\r\n    /// <param name=\"toWords\">Uses words instead of numbers if true. E.g. one day.</param>\r\n    public static string Humanize(this TimeSpan timeSpan, int precision, bool countEmptyUnits, CultureInfo? culture = null, TimeUnit maxUnit = TimeUnit.Week, TimeUnit minUnit = TimeUnit.Millisecond, string? collectionSeparator = \", \", bool toWords = false)\r\n    {\r\n        var timeParts = CreateTheTimePartsWithUpperAndLowerLimits(timeSpan, culture, maxUnit, minUnit, toWords);\r\n        timeParts = SetPrecisionOfTimeSpan(timeParts, precision, countEmptyUnits);\r\n\r\n        return ConcatenateTimeSpanParts(timeParts, culture, collectionSeparator);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Turns a TimeSpan into an age expression, e.g. \"40 years old\"\r\n    /// </summary>\r\n    /// <param name=\"timeSpan\">Elapsed time</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    /// <param name=\"maxUnit\">The maximum unit of time to output. The default value is <see cref=\"TimeUnit.Year\"/>.</param>\r\n    /// <param name=\"toWords\">Uses words instead of numbers if true. E.g. \"forty years old\".</param>\r\n    /// <returns>Age expression in the given culture/language</returns>\r\n    public static string ToAge(this TimeSpan timeSpan, CultureInfo? culture = null, TimeUnit maxUnit = TimeUnit.Year, bool toWords = false)\r\n    {\r\n        var timeSpanExpression = timeSpan.Humanize(culture: culture, maxUnit: maxUnit, toWords: toWords);\r\n\r\n        var cultureFormatter = Configurator.GetFormatter(culture);\r\n        var ageFormat = cultureFormatter.TimeSpanHumanize_Age();\r\n        \r\n        // Fast path: avoid string.Format for common \"{0} old\" pattern\r\n        if (ageFormat == \"{0} old\")\r\n        {\r\n            return string.Concat(timeSpanExpression, \" old\");\r\n        }\r\n        \r\n        return string.Format(ageFormat, timeSpanExpression);\r\n    }\r\n\r\n    static List<string?> CreateTheTimePartsWithUpperAndLowerLimits(TimeSpan timespan, CultureInfo? culture, TimeUnit maxUnit, TimeUnit minUnit, bool toWords = false)\r\n    {\r\n        var cultureFormatter = Configurator.GetFormatter(culture);\r\n        var firstValueFound = false;\r\n        var timeParts = new List<string?>();\r\n\r\n        foreach (var timeUnit in TimeUnits)\r\n        {\r\n            var timePart = GetTimeUnitPart(timeUnit, timespan, maxUnit, minUnit, cultureFormatter, toWords);\r\n\r\n            if (timePart != null || firstValueFound)\r\n            {\r\n                firstValueFound = true;\r\n                timeParts.Add(timePart);\r\n            }\r\n        }\r\n\r\n        if (IsContainingOnlyNullValue(timeParts))\r\n        {\r\n            var noTimeValueCultureFormatted = toWords\r\n                ? cultureFormatter.TimeSpanHumanize_Zero()\r\n                : cultureFormatter.TimeSpanHumanize(minUnit, 0);\r\n            timeParts = CreateTimePartsWithNoTimeValue(noTimeValueCultureFormatted);\r\n        }\r\n\r\n        return timeParts;\r\n    }\r\n\r\n    static string? GetTimeUnitPart(TimeUnit timeUnitToGet, TimeSpan timespan, TimeUnit maximumTimeUnit, TimeUnit minimumTimeUnit, IFormatter cultureFormatter, bool toWords = false)\r\n    {\r\n        if (timeUnitToGet <= maximumTimeUnit && timeUnitToGet >= minimumTimeUnit)\r\n        {\r\n            var numberOfTimeUnits = GetTimeUnitNumericalValue(timeUnitToGet, timespan, maximumTimeUnit);\r\n            return BuildFormatTimePart(cultureFormatter, timeUnitToGet, numberOfTimeUnits, toWords);\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    static int GetTimeUnitNumericalValue(TimeUnit timeUnitToGet, TimeSpan timespan, TimeUnit maximumTimeUnit)\r\n    {\r\n        var isTimeUnitToGetTheMaximumTimeUnit = timeUnitToGet == maximumTimeUnit;\r\n        return timeUnitToGet switch\r\n        {\r\n            TimeUnit.Millisecond => GetNormalCaseTimeAsInteger(timespan.Milliseconds, timespan.TotalMilliseconds, isTimeUnitToGetTheMaximumTimeUnit),\r\n            TimeUnit.Second => GetNormalCaseTimeAsInteger(timespan.Seconds, timespan.TotalSeconds, isTimeUnitToGetTheMaximumTimeUnit),\r\n            TimeUnit.Minute => GetNormalCaseTimeAsInteger(timespan.Minutes, timespan.TotalMinutes, isTimeUnitToGetTheMaximumTimeUnit),\r\n            TimeUnit.Hour => GetNormalCaseTimeAsInteger(timespan.Hours, timespan.TotalHours, isTimeUnitToGetTheMaximumTimeUnit),\r\n            TimeUnit.Day => GetSpecialCaseDaysAsInteger(timespan, maximumTimeUnit),\r\n            TimeUnit.Week => GetSpecialCaseWeeksAsInteger(timespan, isTimeUnitToGetTheMaximumTimeUnit),\r\n            TimeUnit.Month => GetSpecialCaseMonthAsInteger(timespan, isTimeUnitToGetTheMaximumTimeUnit),\r\n            TimeUnit.Year => GetSpecialCaseYearAsInteger(timespan),\r\n            _ => 0\r\n        };\r\n    }\r\n\r\n    static int GetSpecialCaseMonthAsInteger(TimeSpan timespan, bool isTimeUnitToGetTheMaximumTimeUnit)\r\n    {\r\n        if (isTimeUnitToGetTheMaximumTimeUnit)\r\n        {\r\n            return (int)(timespan.Days / DaysInAMonth);\r\n        }\r\n\r\n        var remainingDays = timespan.Days % DaysInAYear;\r\n        return (int)(remainingDays / DaysInAMonth);\r\n    }\r\n\r\n    static int GetSpecialCaseYearAsInteger(TimeSpan timespan) =>\r\n        (int)(timespan.Days / DaysInAYear);\r\n\r\n    static int GetSpecialCaseWeeksAsInteger(TimeSpan timespan, bool isTimeUnitToGetTheMaximumTimeUnit)\r\n    {\r\n        if (isTimeUnitToGetTheMaximumTimeUnit || timespan.Days < DaysInAMonth)\r\n        {\r\n            return timespan.Days / DaysInAWeek;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    static int GetSpecialCaseDaysAsInteger(TimeSpan timespan, TimeUnit maximumTimeUnit)\r\n    {\r\n        if (maximumTimeUnit == TimeUnit.Day)\r\n        {\r\n            return timespan.Days;\r\n        }\r\n\r\n        if (timespan.Days < DaysInAMonth || maximumTimeUnit == TimeUnit.Week)\r\n        {\r\n            var remainingDays = timespan.Days % DaysInAWeek;\r\n            return remainingDays;\r\n        }\r\n\r\n        return (int)(timespan.Days % DaysInAMonth);\r\n    }\r\n\r\n    static int GetNormalCaseTimeAsInteger(int timeNumberOfUnits, double totalTimeNumberOfUnits, bool isTimeUnitToGetTheMaximumTimeUnit)\r\n    {\r\n        if (isTimeUnitToGetTheMaximumTimeUnit)\r\n        {\r\n            try\r\n            {\r\n                return (int)totalTimeNumberOfUnits;\r\n            }\r\n            catch\r\n            {\r\n                //To be implemented so that TimeSpanHumanize method accepts double type as unit\r\n                return 0;\r\n            }\r\n        }\r\n\r\n        return timeNumberOfUnits;\r\n    }\r\n\r\n    static string? BuildFormatTimePart(IFormatter cultureFormatter, TimeUnit timeUnitType, int amountOfTimeUnits, bool toWords = false) =>\r\n        // Always use positive units to account for negative timespans\r\n        amountOfTimeUnits != 0\r\n            ? cultureFormatter.TimeSpanHumanize(timeUnitType, Math.Abs(amountOfTimeUnits), toWords)\r\n            : null;\r\n\r\n    static List<string?> CreateTimePartsWithNoTimeValue(string noTimeValue) =>\r\n        [noTimeValue];\r\n\r\n    static bool IsContainingOnlyNullValue(IEnumerable<string?> timeParts) =>\r\n        !timeParts.Any(x => x != null);\r\n\r\n    static List<string?> SetPrecisionOfTimeSpan(IEnumerable<string?> timeParts, int precision, bool countEmptyUnits)\r\n    {\r\n        if (!countEmptyUnits)\r\n        {\r\n            timeParts = timeParts.Where(x => x != null);\r\n        }\r\n\r\n        timeParts = timeParts.Take(precision);\r\n        if (countEmptyUnits)\r\n        {\r\n            timeParts = timeParts.Where(x => x != null);\r\n        }\r\n\r\n        return [.. timeParts];\r\n    }\r\n\r\n    static string ConcatenateTimeSpanParts(IEnumerable<string?> timeSpanParts, CultureInfo? culture, string? collectionSeparator)\r\n    {\r\n        if (collectionSeparator == null)\r\n        {\r\n            return Configurator\r\n                .CollectionFormatters.ResolveForCulture(culture)\r\n                .Humanize(timeSpanParts);\r\n        }\r\n\r\n        return string.Join(collectionSeparator, timeSpanParts);\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/TimeUnitToSymbolExtensions.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Transform a time unit into a symbol; e.g. <see cref=\"TimeUnit.Year\"/> => \"a\"\r\n/// </summary>\r\npublic static class TimeUnitToSymbolExtensions\r\n{\r\n    /// <summary>\r\n    /// TimeUnit.Day.ToSymbol() -> \"d\"\r\n    /// </summary>\r\n    /// <param name=\"unit\">Unit of time to be turned to a symbol</param>\r\n    /// <param name=\"culture\">Culture to use. If null, current thread's UI culture is used.</param>\r\n    public static string ToSymbol(this TimeUnit unit, CultureInfo? culture = null) =>\r\n        Configurator.GetFormatter(culture).TimeUnitHumanize(unit);\r\n}"
  },
  {
    "path": "src/Humanizer/ToQuantityExtensions.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Enumerates the ways of displaying a quantity value when converting\r\n/// a word to a quantity string.\r\n/// </summary>\r\npublic enum ShowQuantityAs\r\n{\r\n    /// <summary>\r\n    /// Indicates that no quantity will be included in the formatted string.\r\n    /// </summary>\r\n    None = 0,\r\n\r\n    /// <summary>\r\n    /// Indicates that the quantity will be included in the output, formatted\r\n    /// as its numeric value (e.g. \"1\").\r\n    /// </summary>\r\n    Numeric,\r\n\r\n    /// <summary>\r\n    /// Incidates that the quantity will be included in the output, formatted as\r\n    /// words (e.g. 123 => \"one hundred and twenty three\").\r\n    /// </summary>\r\n    Words\r\n}\r\n\r\n/// <summary>\r\n/// Provides extensions for formatting a <see cref=\"string\"/> word as a quantity.\r\n/// </summary>\r\npublic static class ToQuantityExtensions\r\n{\r\n    /// <summary>\r\n    /// Prefixes the provided word with the number and accordingly pluralizes or singularizes the word\r\n    /// </summary>\r\n    /// <param name=\"input\">The word to be prefixed</param>\r\n    /// <param name=\"quantity\">The quantity of the word</param>\r\n    /// <param name=\"showQuantityAs\">How to show the quantity. Numeric by default</param>\r\n    /// <example>\r\n    /// \"request\".ToQuantity(0) => \"0 requests\"\r\n    /// \"request\".ToQuantity(1) => \"1 request\"\r\n    /// \"request\".ToQuantity(2) => \"2 requests\"\r\n    /// \"men\".ToQuantity(2) => \"2 men\"\r\n    /// \"process\".ToQuantity(1200, ShowQuantityAs.Words) => \"one thousand two hundred processes\"\r\n    /// </example>\r\n    public static string ToQuantity(this string input, int quantity, ShowQuantityAs showQuantityAs = ShowQuantityAs.Numeric) =>\r\n        input.ToQuantity((long)quantity, showQuantityAs, format: null, formatProvider: null);\r\n\r\n    /// <summary>\r\n    /// Prefixes the provided word with the number and accordingly pluralizes or singularizes the word\r\n    /// </summary>\r\n    /// <param name=\"input\">The word to be prefixed</param>\r\n    /// <param name=\"quantity\">The quantity of the word</param>\r\n    /// <param name=\"format\">A standard or custom numeric format string.</param>\r\n    /// <param name=\"formatProvider\">An object that supplies culture-specific formatting information.</param>\r\n    /// <example>\r\n    /// \"request\".ToQuantity(0) => \"0 requests\"\r\n    /// \"request\".ToQuantity(10000, format: \"N0\") => \"10,000 requests\"\r\n    /// \"request\".ToQuantity(1, format: \"N0\") => \"1 request\"\r\n    /// </example>\r\n    public static string ToQuantity(this string input, int quantity, string? format, IFormatProvider? formatProvider = null) =>\r\n        input.ToQuantity((long)quantity, showQuantityAs: ShowQuantityAs.Numeric, format: format, formatProvider: formatProvider);\r\n\r\n    /// <summary>\r\n    /// Prefixes the provided word with the number and accordingly pluralizes or singularizes the word\r\n    /// </summary>\r\n    /// <param name=\"input\">The word to be prefixed</param>\r\n    /// <param name=\"quantity\">The quantity of the word</param>\r\n    /// <param name=\"showQuantityAs\">How to show the quantity. Numeric by default</param>\r\n    /// <example>\r\n    /// \"request\".ToQuantity(0) => \"0 requests\"\r\n    /// \"request\".ToQuantity(1) => \"1 request\"\r\n    /// \"request\".ToQuantity(2) => \"2 requests\"\r\n    /// \"men\".ToQuantity(2) => \"2 men\"\r\n    /// \"process\".ToQuantity(1200, ShowQuantityAs.Words) => \"one thousand two hundred processes\"\r\n    /// </example>\r\n    public static string ToQuantity(this string input, long quantity, ShowQuantityAs showQuantityAs = ShowQuantityAs.Numeric) =>\r\n        input.ToQuantity(quantity, showQuantityAs, format: null, formatProvider: null);\r\n\r\n    /// <summary>\r\n    /// Prefixes the provided word with the number and accordingly pluralizes or singularizes the word\r\n    /// </summary>\r\n    /// <param name=\"input\">The word to be prefixed</param>\r\n    /// <param name=\"quantity\">The quantity of the word</param>\r\n    /// <param name=\"format\">A standard or custom numeric format string.</param>\r\n    /// <param name=\"formatProvider\">An object that supplies culture-specific formatting information.</param>\r\n    /// <example>\r\n    /// \"request\".ToQuantity(0) => \"0 requests\"\r\n    /// \"request\".ToQuantity(10000, format: \"N0\") => \"10,000 requests\"\r\n    /// \"request\".ToQuantity(1, format: \"N0\") => \"1 request\"\r\n    /// </example>\r\n    public static string ToQuantity(this string input, long quantity, string? format, IFormatProvider? formatProvider = null) =>\r\n        input.ToQuantity(quantity, showQuantityAs: ShowQuantityAs.Numeric, format: format, formatProvider: formatProvider);\r\n\r\n    static string ToQuantity(this string input, long quantity, ShowQuantityAs showQuantityAs = ShowQuantityAs.Numeric, string? format = null, IFormatProvider? formatProvider = null)\r\n    {\r\n        var transformedInput = quantity is 1 or -1\r\n            ? input.Singularize(inputIsKnownToBePlural: false)\r\n            : input.Pluralize(inputIsKnownToBeSingular: false);\r\n\r\n        if (showQuantityAs == ShowQuantityAs.None)\r\n        {\r\n            return transformedInput;\r\n        }\r\n\r\n        if (showQuantityAs == ShowQuantityAs.Numeric)\r\n        {\r\n            var quantityStr = quantity.ToString(format, formatProvider);\r\n            return formatProvider != null\r\n                ? string.Format(formatProvider, \"{0} {1}\", quantityStr, transformedInput)\r\n                : ConcatWithSpace(quantityStr, transformedInput);\r\n        }\r\n\r\n        return ConcatWithSpace(quantity.ToWords(), transformedInput);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Prefixes the provided word with the number and accordingly pluralizes or singularizes the word\r\n    /// </summary>\r\n    /// <param name=\"input\">The word to be prefixed</param>\r\n    /// <param name=\"quantity\">The quantity of the word</param>\r\n    /// <param name=\"format\">A standard or custom numeric format string.</param>\r\n    /// <param name=\"formatProvider\">An object that supplies culture-specific formatting information.</param>\r\n    /// <example>\r\n    /// \"request\".ToQuantity(0.2) => \"0.2 requests\"\r\n    /// \"request\".ToQuantity(10.6, format: \"N0\") => \"10.6 requests\"\r\n    /// \"request\".ToQuantity(1.0, format: \"N0\") => \"1 request\"\r\n    /// </example>\r\n    public static string ToQuantity(this string input, double quantity, string? format = null, IFormatProvider? formatProvider = null)\r\n    {\r\n        var isFinite = !(double.IsNaN(quantity) || double.IsInfinity(quantity));\r\n        var isSingular = isFinite && quantity == Math.Truncate(quantity) && Math.Abs(quantity) == 1d;\r\n\r\n        var transformedInput = isSingular\r\n            ? input.Singularize(inputIsKnownToBePlural: false)\r\n            : input.Pluralize(inputIsKnownToBeSingular: false);\r\n\r\n        var quantityStr = quantity.ToString(format, formatProvider);\r\n        return formatProvider != null\r\n            ? string.Format(formatProvider, \"{0} {1}\", quantityStr, transformedInput)\r\n            : ConcatWithSpace(quantityStr, transformedInput);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Prefixes the provided word with the number and accordingly pluralizes or singularizes the word\r\n    /// </summary>\r\n    /// <param name=\"input\">The word to be prefixed</param>\r\n    /// <param name=\"quantity\">The quantity of the word</param>\r\n    /// <example>\r\n    /// \"request\".ToQuantity(0.2) => \"0.2 requests\"\r\n    /// </example>\r\n    public static string ToQuantity(this string input, double quantity) =>\r\n        ToQuantity(input, quantity, null, null);\r\n\r\n    static string ConcatWithSpace(string left, string right)\r\n    {\r\n#if NET6_0_OR_GREATER\r\n        return string.Create(left.Length + 1 + right.Length, (left, right), (span, state) =>\r\n        {\r\n            state.left.CopyTo(span);\r\n            span[state.left.Length] = ' ';\r\n            state.right.CopyTo(span[(state.left.Length + 1)..]);\r\n        });\r\n#else\r\n        return string.Concat(left, \" \", right);\r\n#endif\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Transformer/ICulturedStringTransformer.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Can transform a string with the given culture\r\n/// </summary>\r\npublic interface ICulturedStringTransformer : IStringTransformer\r\n{\r\n    /// <summary>\r\n    /// Transform the input\r\n    /// </summary>\r\n    /// <param name=\"input\">String to be transformed</param>\r\n    string Transform(string input, CultureInfo culture);\r\n}"
  },
  {
    "path": "src/Humanizer/Transformer/IStringTransformer.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Can transform a string\r\n/// </summary>\r\npublic interface IStringTransformer\r\n{\r\n    /// <summary>\r\n    /// Transform the input\r\n    /// </summary>\r\n    /// <param name=\"input\">String to be transformed</param>\r\n    string Transform(string input);\r\n}"
  },
  {
    "path": "src/Humanizer/Transformer/To.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// A portal to string transformation using IStringTransformer\r\n/// </summary>\r\npublic static class To\r\n{\r\n    /// <summary>\r\n    /// Transforms a string using the provided transformers. Transformations are applied in the provided order.\r\n    /// </summary>\r\n    public static string Transform(this string input, params IStringTransformer[] transformers) =>\r\n        transformers.Aggregate(input, (current, stringTransformer) => stringTransformer.Transform(current));\r\n\r\n    /// <summary>\r\n    /// Transforms a string using the provided transformers. Transformations are applied in the provided order.\r\n    /// </summary>\r\n    public static string Transform(this string input, CultureInfo culture, params ICulturedStringTransformer[] transformers) =>\r\n        transformers.Aggregate(input, (current, stringTransformer) => stringTransformer.Transform(current, culture));\r\n\r\n    /// <summary>\r\n    /// Changes string to title case\r\n    /// </summary>\r\n    /// <example>\r\n    /// \"INvalid caSEs arE corrected\" -> \"Invalid Cases Are Corrected\"\r\n    /// </example>\r\n    public static ICulturedStringTransformer TitleCase { get; } = new ToTitleCase();\r\n\r\n    /// <summary>\r\n    /// Changes the string to lower case\r\n    /// </summary>\r\n    /// <example>\r\n    /// \"Sentence casing\" -> \"sentence casing\"\r\n    /// </example>\r\n    public static ICulturedStringTransformer LowerCase { get; } = new ToLowerCase();\r\n\r\n    /// <summary>\r\n    /// Changes the string to upper case\r\n    /// </summary>\r\n    /// <example>\r\n    /// \"lower case statement\" -> \"LOWER CASE STATEMENT\"\r\n    /// </example>\r\n    public static ICulturedStringTransformer UpperCase { get; } = new ToUpperCase();\r\n\r\n    /// <summary>\r\n    /// Changes the string to sentence case\r\n    /// </summary>\r\n    /// <example>\r\n    /// \"lower case statement\" -> \"Lower case statement\"\r\n    /// </example>\r\n    public static ICulturedStringTransformer SentenceCase { get; } = new ToSentenceCase();\r\n}"
  },
  {
    "path": "src/Humanizer/Transformer/ToLowerCase.cs",
    "content": "namespace Humanizer;\r\n\r\nclass ToLowerCase : ICulturedStringTransformer\r\n{\r\n    public string Transform(string input) =>\r\n        Transform(input, CultureInfo.CurrentCulture);\r\n\r\n    public string Transform(string input, CultureInfo culture)\r\n    {\r\n        return culture.TextInfo.ToLower(input);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Transformer/ToSentenceCase.cs",
    "content": "namespace Humanizer;\r\n\r\nclass ToSentenceCase : ICulturedStringTransformer\r\n{\r\n    public string Transform(string input) =>\r\n        Transform(input, CultureInfo.CurrentCulture);\r\n\r\n    public string Transform(string input, CultureInfo culture)\r\n    {\r\n\r\n        if (input.Length >= 1)\r\n        {\r\n            if (char.IsUpper(input[0]))\r\n            {\r\n                return input;\r\n            }\r\n\r\n            return StringHumanizeExtensions.Concat(culture.TextInfo.ToUpper(input[0]), input.AsSpan(1));\r\n        }\r\n\r\n        return culture.TextInfo.ToUpper(input);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Transformer/ToTitleCase.cs",
    "content": "namespace Humanizer;\r\n\r\npartial class ToTitleCase : ICulturedStringTransformer\r\n{\r\n    public string Transform(string input) =>\r\n        Transform(input, CultureInfo.CurrentCulture);\r\n\r\n    private const string WordPattern = @\"(\\w|[^\\u0000-\\u007F])+'?\\w*\";\r\n\r\n#if NET7_0_OR_GREATER\r\n    [GeneratedRegex(WordPattern)]\r\n    private static partial Regex WordRegexGenerated();\r\n    \r\n    private static Regex WordRegex() => WordRegexGenerated();\r\n#else\r\n    private static readonly Regex WordRegexDefinition = new(WordPattern, RegexOptions.Compiled);\r\n\r\n    private static Regex WordRegex() => WordRegexDefinition;\r\n#endif\r\n\r\n    public string Transform(string input, CultureInfo culture)\r\n    {\r\n        var matches = WordRegex().Matches(input);\r\n        var builder = new StringBuilder(input);\r\n        var textInfo = culture.TextInfo;\r\n        for (var i = 0; i < matches.Count; i++)\r\n        {\r\n            var word = matches[i];\r\n            var value = word.Value;\r\n            if (AllCapitals(value) || (i > 0 && IsArticleOrConjunctionOrPreposition(value)))\r\n            {\r\n                continue;\r\n            }\r\n\r\n            builder[word.Index] = textInfo.ToUpper(value[0]);\r\n            Overwrite(builder, word.Index + 1, textInfo.ToLower(value[1..]));\r\n        }\r\n\r\n        return builder.ToString();\r\n    }\r\n\r\n    static void Overwrite(StringBuilder builder, int index, string replacement)\r\n    {\r\n        // Directly overwrite characters instead of Remove + Insert\r\n        for (var i = 0; i < replacement.Length; i++)\r\n        {\r\n            builder[index + i] = replacement[i];\r\n        }\r\n    }\r\n\r\n    static bool AllCapitals(string input)\r\n    {\r\n        foreach (var ch in input)\r\n        {\r\n            if (!char.IsUpper(ch))\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private static bool IsArticleOrConjunctionOrPreposition(string word) =>\r\n        word is\r\n\r\n            // articles\r\n            \"a\" or \"an\" or \"the\" or\r\n\r\n            // conjunctions\r\n            \"and\" or \"as\" or \"but\" or \"if\" or \"nor\" or \"or\" or \"so\" or \"yet\" or\r\n\r\n            // prepositions\r\n            \"as\" or \"at\" or \"by\" or \"for\" or \"in\" or \"of\" or \"off\" or \"on\" or \"to\" or \"up\" or \"via\";\r\n}\r\n"
  },
  {
    "path": "src/Humanizer/Transformer/ToUpperCase.cs",
    "content": "namespace Humanizer;\r\n\r\nclass ToUpperCase : ICulturedStringTransformer\r\n{\r\n    public string Transform(string input) =>\r\n        Transform(input, CultureInfo.CurrentCulture);\r\n\r\n    public string Transform(string input, CultureInfo culture)\r\n    {\r\n        return culture.TextInfo.ToUpper(input);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/TruncateExtensions.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Allow strings to be truncated\r\n/// </summary>\r\npublic static class TruncateExtensions\r\n{\r\n    /// <summary>\r\n    /// Truncates a string to a specified maximum length using the default truncation string (\"…\") and\r\n    /// fixed-length truncator.\r\n    /// </summary>\r\n    /// <param name=\"input\">The string to be truncated. Can be null.</param>\r\n    /// <param name=\"length\">The maximum length of the result string, including the truncation indicator.</param>\r\n    /// <returns>\r\n    /// The truncated string if its length exceeds <paramref name=\"length\"/>, otherwise the original string.\r\n    /// Returns null if <paramref name=\"input\"/> is null.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// The default truncation indicator is \"…\" (ellipsis), and truncation occurs from the right side of the string.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"This is a long string\".Truncate(10) => \"This is a…\"\r\n    /// \"Short\".Truncate(10) => \"Short\"\r\n    /// null.Truncate(10) => null\r\n    /// </code>\r\n    /// </example>\r\n    [return: NotNullIfNotNull(nameof(input))]\r\n    public static string? Truncate(this string? input, int length) =>\r\n        input.Truncate(length, \"…\", Truncator.FixedLength);\r\n\r\n    /// <summary>\r\n    /// Truncates a string to a specified maximum length using a custom truncator and truncation direction.\r\n    /// </summary>\r\n    /// <param name=\"input\">The string to be truncated. Can be null.</param>\r\n    /// <param name=\"length\">The maximum length of the result string, including the truncation indicator.</param>\r\n    /// <param name=\"truncator\">\r\n    /// The <see cref=\"ITruncator\"/> implementation to use for truncation logic.\r\n    /// Must not be null.\r\n    /// </param>\r\n    /// <param name=\"from\">\r\n    /// Specifies from which side of the string to truncate. Default is <see cref=\"TruncateFrom.Right\"/>.\r\n    /// </param>\r\n    /// <returns>\r\n    /// The truncated string if its length exceeds <paramref name=\"length\"/>, otherwise the original string.\r\n    /// Returns null if <paramref name=\"input\"/> is null.\r\n    /// </returns>\r\n    /// <exception cref=\"ArgumentNullException\">Thrown when <paramref name=\"truncator\"/> is null.</exception>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"This is a long string\".Truncate(10, Truncator.FixedLength, TruncateFrom.Left) => \"…ng string\"\r\n    /// \"This is a long string\".Truncate(10, Truncator.FixedNumberOfWords) => \"This is…\"\r\n    /// </code>\r\n    /// </example>\r\n    [return: NotNullIfNotNull(nameof(input))]\r\n    public static string? Truncate(this string? input, int length, ITruncator truncator, TruncateFrom from = TruncateFrom.Right) =>\r\n        input.Truncate(length, \"…\", truncator, from);\r\n\r\n    /// <summary>\r\n    /// Truncates a string to a specified maximum length using a custom truncation string and fixed-length truncator.\r\n    /// </summary>\r\n    /// <param name=\"input\">The string to be truncated. Can be null.</param>\r\n    /// <param name=\"length\">The maximum length of the result string, including the truncation indicator.</param>\r\n    /// <param name=\"truncationString\">\r\n    /// The string to use as the truncation indicator (e.g., \"...\", \"…\", or any custom string).\r\n    /// Can be null or empty.\r\n    /// </param>\r\n    /// <param name=\"from\">\r\n    /// Specifies from which side of the string to truncate. Default is <see cref=\"TruncateFrom.Right\"/>.\r\n    /// </param>\r\n    /// <returns>\r\n    /// The truncated string if its length exceeds <paramref name=\"length\"/>, otherwise the original string.\r\n    /// Returns null if <paramref name=\"input\"/> is null.\r\n    /// </returns>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"This is a long string\".Truncate(10, \"...\") => \"This is...\"\r\n    /// \"This is a long string\".Truncate(15, \"--\") => \"This is a lo--\"\r\n    /// \"This is a long string\".Truncate(10, \"...\", TruncateFrom.Left) => \"...string\"\r\n    /// </code>\r\n    /// </example>\r\n    [return: NotNullIfNotNull(nameof(input))]\r\n    public static string? Truncate(this string? input, int length, string? truncationString, TruncateFrom from = TruncateFrom.Right) =>\r\n        input.Truncate(length, truncationString, Truncator.FixedLength, from);\r\n\r\n    /// <summary>\r\n    /// Truncates a string to a specified maximum length using a custom truncation string, truncator, and direction.\r\n    /// </summary>\r\n    /// <param name=\"input\">The string to be truncated. Can be null.</param>\r\n    /// <param name=\"length\">The maximum length of the result string, including the truncation indicator.</param>\r\n    /// <param name=\"truncationString\">\r\n    /// The string to use as the truncation indicator (e.g., \"...\", \"…\", or any custom string).\r\n    /// Can be null or empty.\r\n    /// </param>\r\n    /// <param name=\"truncator\">\r\n    /// The <see cref=\"ITruncator\"/> implementation to use for truncation logic.\r\n    /// Must not be null.\r\n    /// </param>\r\n    /// <param name=\"from\">\r\n    /// Specifies from which side of the string to truncate. Default is <see cref=\"TruncateFrom.Right\"/>.\r\n    /// </param>\r\n    /// <returns>\r\n    /// The truncated string if its length exceeds <paramref name=\"length\"/>, otherwise the original string.\r\n    /// Returns null if <paramref name=\"input\"/> is null.\r\n    /// </returns>\r\n    /// <exception cref=\"ArgumentNullException\">Thrown when <paramref name=\"truncator\"/> is null.</exception>\r\n    /// <remarks>\r\n    /// This is the most flexible truncation method, allowing full customization of the truncation behavior.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// \"This is a long string\".Truncate(10, \"...\", Truncator.FixedLength, TruncateFrom.Right) => \"This is...\"\r\n    /// \"This is a long string\".Truncate(10, \"…\", Truncator.FixedNumberOfWords, TruncateFrom.Left) => \"… string\"\r\n    /// </code>\r\n    /// </example>\r\n    [return: NotNullIfNotNull(nameof(input))]\r\n    public static string? Truncate(this string? input, int length, string? truncationString, ITruncator truncator, TruncateFrom from = TruncateFrom.Right)\r\n    {\r\n        ArgumentNullException.ThrowIfNull(truncator);\r\n\r\n        if (input == null)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        return truncator.Truncate(input, length, truncationString, from);\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/TruncateFrom.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Truncation location for humanizer\r\n/// </summary>\r\npublic enum TruncateFrom\r\n{\r\n    /// <summary>\r\n    /// Truncate letters from the left (start) of the string\r\n    /// </summary>\r\n    Left,\r\n\r\n    /// <summary>\r\n    /// Truncate letters from the right (end) of the string\r\n    /// </summary>\r\n    Right\r\n}"
  },
  {
    "path": "src/Humanizer/Truncation/DynamicLengthAndPreserveWordsTruncator.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Truncate a string to a fixed length while preserving whole words.\r\n/// If the truncation point falls in the middle of a word,\r\n/// that word is dropped entirely and the delimiter is attached.\r\n/// For left-truncation, if no complete word fits in the allowed space,\r\n/// only the delimiter is returned.\r\n/// </summary>\r\nclass DynamicLengthAndPreserveWordsTruncator : ITruncator\r\n{\r\n    [return: NotNullIfNotNull(nameof(value))]\r\n    public string? Truncate(string? value, int length, string? truncationString, TruncateFrom truncateFrom = TruncateFrom.Right)\r\n    {\r\n        if (value == null)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        if (value.Length == 0)\r\n        {\r\n            return value;\r\n        }\r\n\r\n        // For this scenario we expect a single-character delimiter.\r\n        // If truncation string is null, treat it as empty.\r\n        truncationString ??= string.Empty;\r\n\r\n        // If the delimiter itself is longer than the allowed length, fall back to a basic substring.\r\n        if (truncationString.Length > length)\r\n        {\r\n            return truncateFrom == TruncateFrom.Right\r\n                ? value[..length]\r\n                : value[^length..];\r\n        }\r\n\r\n        // If the whole string fits, return it.\r\n        if (value.Length <= length)\r\n        {\r\n            return value;\r\n        }\r\n\r\n        return truncateFrom == TruncateFrom.Right\r\n            ? TruncateFromRight(value, length, truncationString)\r\n            : TruncateFromLeft(value, length, truncationString);\r\n    }\r\n\r\n    static string TruncateFromLeft(string value, int length, string truncationString)\r\n    {\r\n        // For left truncation, the final output is: delimiter + substring.\r\n        // Determine how many characters (after the delimiter) are allowed.\r\n        var allowedContentLength = length - truncationString.Length;\r\n        if (allowedContentLength <= 0)\r\n        {\r\n            return truncationString;\r\n        }\r\n\r\n        // We'll scan backward from the end of the string for a whitespace boundary\r\n        // such that the substring (after trimming) is no longer than allowedContentLength.\r\n        var candidateStart = value.Length;\r\n        for (var i = value.Length - 1; i >= 0; i--)\r\n        {\r\n            if (char.IsWhiteSpace(value[i]))\r\n            {\r\n                candidateStart = i + 1;\r\n                var candidateLength = value.Length - candidateStart;\r\n                if (candidateLength <= allowedContentLength)\r\n                {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        var candidate = value[candidateStart..].TrimStart();\r\n        // If the candidate word is too long (i.e. would be partial) or empty, return just the delimiter.\r\n        if (candidate.Length > allowedContentLength || candidate.Length == 0)\r\n        {\r\n            return truncationString;\r\n        }\r\n\r\n        return truncationString + candidate;\r\n    }\r\n\r\n    static string TruncateFromRight(string value, int length, string truncationString)\r\n    {\r\n        var effectiveLength = length - truncationString.Length;\r\n        if (effectiveLength <= 0)\r\n        {\r\n            return truncationString;\r\n        }\r\n        // If the cutoff falls in the middle of a word, backtrack to the last space.\r\n        if (effectiveLength < value.Length && !char.IsWhiteSpace(value[effectiveLength]))\r\n        {\r\n            var lastSpace = value.LastIndexOf(' ', effectiveLength);\r\n            if (lastSpace > 0)\r\n            {\r\n                effectiveLength = lastSpace;\r\n            }\r\n            else\r\n            {\r\n                return truncationString;\r\n            }\r\n        }\r\n        var prefix = value[..effectiveLength].TrimEnd();\r\n        if (prefix.Length == 0)\r\n        {\r\n            return truncationString;\r\n        }\r\n\r\n        return prefix + truncationString;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Truncation/DynamicNumberOfCharactersAndPreserveWordTruncator.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Truncate a string to a fixed number of letters or digits,\r\n/// preserving whole words by never cutting a word in half.\r\n/// If a complete word (plus the delimiter, if any) cannot fit, then only the delimiter is returned.\r\n/// When truncating from the left, the delimiter is prepended if a complete word can be preserved;\r\n/// otherwise, only the delimiter is returned.\r\n/// The allowed count is computed by counting only letters/digits.\r\n/// </summary>\r\npublic class DynamicNumberOfCharactersAndPreserveWordsTruncator : ITruncator\r\n{\r\n    [return: NotNullIfNotNull(nameof(value))]\r\n    public string? Truncate(string? value, int totalLength, string? delimiter, TruncateFrom truncateFrom = TruncateFrom.Right)\r\n    {\r\n        if (value == null)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        if (value.Length == 0)\r\n        {\r\n            return value;\r\n        }\r\n        // Treat a null delimiter as an empty string.\r\n        delimiter ??= string.Empty;\r\n        // If the delimiter itself is longer than totalLength, fallback to a plain substring.\r\n        if (delimiter.Length > totalLength && totalLength >= value.Length)\r\n        {\r\n            return value;\r\n        }\r\n\r\n        // Count all alphanumeric characters. If they already fit, return full string.\r\n        var totalAlpha = value.Count(char.IsLetterOrDigit);\r\n        if (totalAlpha <= totalLength)\r\n        {\r\n            return value;\r\n        }\r\n\r\n        // Delegate to the appropriate helper.\r\n        return truncateFrom == TruncateFrom.Right\r\n            ? TruncateRight(value, totalLength, delimiter)\r\n            : TruncateLeft(value, totalLength, delimiter);\r\n    }\r\n\r\n    static string TruncateRight(string value, int totalLength, string delimiter)\r\n    {\r\n        var dLen = delimiter.Length;\r\n\r\n        var alphaCount = 0;\r\n        var candidateIndex = -1;\r\n        var lastSpace = -1;\r\n\r\n        for (var i = 0; i < value.Length; i++)\r\n        {\r\n            if (char.IsWhiteSpace(value[i]))\r\n            {\r\n                lastSpace = i;\r\n            }\r\n\r\n            if (char.IsLetterOrDigit(value[i]))\r\n            {\r\n                alphaCount++;\r\n            }\r\n\r\n            if (alphaCount + dLen == totalLength)\r\n            {\r\n                candidateIndex = i + 1;\r\n                break;\r\n            }\r\n\r\n            if (alphaCount == totalLength) // if alpha count without delimiter reached total length\r\n            {\r\n                candidateIndex = i;\r\n                break;\r\n            }\r\n        }\r\n        if (candidateIndex == -1)\r\n        {\r\n            candidateIndex = value.Length;\r\n        }\r\n\r\n        // If the candidate index is in the middle of a word, backtrack to last whitespace.\r\n        if (candidateIndex < value.Length && !char.IsWhiteSpace(value[candidateIndex]))\r\n        {\r\n            if (lastSpace > 0)\r\n            {\r\n                candidateIndex = lastSpace;\r\n            }\r\n            else if (delimiter.Length > totalLength)\r\n            {\r\n                return string.Empty;\r\n            }\r\n            else\r\n            {\r\n                return delimiter; // no complete word fits\r\n            }\r\n        }\r\n\r\n        // Get the substring and trim trailing spaces.\r\n        var prefix = value[..candidateIndex].TrimEnd();\r\n\r\n        var prefixLength = 0;\r\n        for (var i = prefix.Length - 1; i >= 0; i--)\r\n        {\r\n            if (char.IsLetterOrDigit(prefix[i]))\r\n            {\r\n                prefixLength++;\r\n            }\r\n        }\r\n\r\n        if (prefixLength == 0)\r\n        {\r\n            return delimiter;\r\n        }\r\n\r\n        if (delimiter.Length > totalLength && prefixLength > totalLength)\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        if (delimiter.Length > prefixLength && delimiter.Length > totalLength)\r\n        {\r\n            return prefix;\r\n        }\r\n\r\n        if (delimiter.Length <= totalLength && delimiter.Length + prefixLength > totalLength)\r\n        {\r\n            return delimiter;\r\n        }\r\n\r\n        return prefix + delimiter;\r\n    }\r\n\r\n    static string TruncateLeft(string value, int totalLength, string delimiter)\r\n    {\r\n        var dLen = delimiter.Length;\r\n\r\n        var alphaCount = 0;\r\n        var candidateIndex = -1;\r\n        var nextSpace = -1;\r\n        // Iterate backwards.\r\n        for (var i = value.Length - 1; i >= 0; i--)\r\n        {\r\n            if (char.IsLetterOrDigit(value[i]))\r\n            {\r\n                alphaCount++;\r\n            }\r\n\r\n            if (char.IsWhiteSpace(value[i]))\r\n            {\r\n                nextSpace = i;\r\n            }\r\n\r\n            if (alphaCount + dLen == totalLength)\r\n            {\r\n                candidateIndex = i;\r\n                break;\r\n            }\r\n\r\n            if (alphaCount == totalLength) // if alpha count without delimiter reached total length\r\n            {\r\n                candidateIndex = i;\r\n                break;\r\n            }\r\n        }\r\n        if (candidateIndex == -1)\r\n        {\r\n            candidateIndex = 0;\r\n        }\r\n\r\n        // If candidateIndex is in the middle of a word, move forward to the next whitespace.\r\n        if (candidateIndex < value.Length && candidateIndex > 0 && !char.IsWhiteSpace(value[candidateIndex - 1]))\r\n        {\r\n            if (nextSpace >= candidateIndex)\r\n            {\r\n                candidateIndex = nextSpace + 1;\r\n            }\r\n            else if (delimiter.Length > totalLength)\r\n            {\r\n                return string.Empty;\r\n            }\r\n            else\r\n            {\r\n                return delimiter; // no complete word fits\r\n            }\r\n        }\r\n\r\n        var suffix = value[candidateIndex..].TrimStart();\r\n\r\n        var suffixLength = 0;\r\n        for (var i = suffix.Length - 1; i >= 0; i--)\r\n        {\r\n            if (char.IsLetterOrDigit(suffix[i]))\r\n            {\r\n                suffixLength++;\r\n            }\r\n        }\r\n\r\n        if (suffixLength == 0)\r\n        {\r\n            return delimiter;\r\n        }\r\n\r\n        if (delimiter.Length > totalLength && suffixLength > totalLength)\r\n        {\r\n            return string.Empty;\r\n        }\r\n\r\n        if (delimiter.Length > suffixLength && delimiter.Length > totalLength)\r\n        {\r\n            return suffix;\r\n        }\r\n\r\n        if (delimiter.Length <= totalLength && delimiter.Length + suffixLength > totalLength)\r\n        {\r\n            return delimiter;\r\n        }\r\n\r\n        return delimiter + suffix;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Truncation/FixedLengthTruncator.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Truncate a string to a fixed length\r\n/// </summary>\r\nclass FixedLengthTruncator : ITruncator\r\n{\r\n    [return: NotNullIfNotNull(nameof(value))]\r\n    public string? Truncate(string? value, int length, string? truncationString, TruncateFrom truncateFrom = TruncateFrom.Right)\r\n    {\r\n        if (value == null)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        if (value.Length == 0 || value.Length <= length)\r\n        {\r\n            return value;\r\n        }\r\n\r\n        if (truncationString == null || truncationString.Length > length)\r\n        {\r\n            return truncateFrom == TruncateFrom.Right\r\n                ? value[..length]\r\n                : value[^length..];\r\n        }\r\n\r\n        return truncateFrom == TruncateFrom.Left ? StringHumanizeExtensions.Concat(truncationString.AsSpan(), value.AsSpan(value.Length - length + truncationString.Length)) : StringHumanizeExtensions.Concat(value.AsSpan(0, length - truncationString.Length), truncationString.AsSpan());\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Truncation/FixedNumberOfCharactersTruncator.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Truncate a string to a fixed number of letters or digits\r\n/// </summary>\r\nclass FixedNumberOfCharactersTruncator : ITruncator\r\n{\r\n    [return: NotNullIfNotNull(nameof(value))]\r\n    public string? Truncate(string? value, int length, string? truncationString, TruncateFrom truncateFrom = TruncateFrom.Right)\r\n    {\r\n        if (value == null)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        if (value.Length == 0)\r\n        {\r\n            return value;\r\n        }\r\n\r\n        truncationString ??= string.Empty;\r\n\r\n        if (truncationString.Length > length)\r\n        {\r\n            return truncateFrom == TruncateFrom.Right ? value[..length] : value[^length..];\r\n        }\r\n\r\n        // Count letter or digit characters up to length + 1 to determine if truncation is needed\r\n        var alphaNumericalCount = 0;\r\n        foreach (var c in value)\r\n        {\r\n            if (char.IsLetterOrDigit(c))\r\n            {\r\n                alphaNumericalCount++;\r\n                if (alphaNumericalCount > length)\r\n                {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (alphaNumericalCount <= length)\r\n        {\r\n            return value;\r\n        }\r\n\r\n        var alphaNumericalCharactersProcessed = 0;\r\n        if (truncateFrom == TruncateFrom.Left)\r\n        {\r\n            for (var i = value.Length - 1; i > 0; i--)\r\n            {\r\n                if (char.IsLetterOrDigit(value[i]))\r\n                {\r\n                    alphaNumericalCharactersProcessed++;\r\n                }\r\n\r\n                if (alphaNumericalCharactersProcessed + truncationString.Length == length)\r\n                {\r\n                    return StringHumanizeExtensions.Concat(truncationString.AsSpan(), value.AsSpan(i));\r\n                }\r\n            }\r\n        }\r\n\r\n        for (var i = 0; i < value.Length - truncationString.Length; i++)\r\n        {\r\n            if (char.IsLetterOrDigit(value[i]))\r\n            {\r\n                alphaNumericalCharactersProcessed++;\r\n            }\r\n\r\n            if (alphaNumericalCharactersProcessed + truncationString.Length == length)\r\n            {\r\n                return StringHumanizeExtensions.Concat(value.AsSpan(0, i + 1), truncationString.AsSpan());\r\n            }\r\n        }\r\n\r\n        return value;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Truncation/FixedNumberOfWordsTruncator.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Truncate a string to a fixed number of words\r\n/// </summary>\r\nclass FixedNumberOfWordsTruncator : ITruncator\r\n{\r\n    [return: NotNullIfNotNull(nameof(value))]\r\n    public string? Truncate(string? value, int length, string? truncationString, TruncateFrom truncateFrom = TruncateFrom.Right)\r\n    {\r\n        if (value == null)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        if (value.Length == 0)\r\n        {\r\n            return value;\r\n        }\r\n\r\n        // Count words without allocating array\r\n        var numberOfWords = 0;\r\n        var wasWhiteSpace = true;\r\n        foreach (var c in value)\r\n        {\r\n            if (char.IsWhiteSpace(c))\r\n            {\r\n                wasWhiteSpace = true;\r\n            }\r\n            else if (wasWhiteSpace)\r\n            {\r\n                numberOfWords++;\r\n                wasWhiteSpace = false;\r\n            }\r\n        }\r\n\r\n        if (numberOfWords <= length)\r\n        {\r\n            return value;\r\n        }\r\n\r\n        return truncateFrom == TruncateFrom.Left\r\n            ? TruncateFromLeft(value, length, truncationString)\r\n            : TruncateFromRight(value, length, truncationString);\r\n    }\r\n\r\n    static string TruncateFromRight(string value, int length, string? truncationString)\r\n    {\r\n        var lastCharactersWasWhiteSpace = true;\r\n        var numberOfWordsProcessed = 0;\r\n        for (var i = 0; i < value.Length; i++)\r\n        {\r\n            if (char.IsWhiteSpace(value[i]))\r\n            {\r\n                if (!lastCharactersWasWhiteSpace)\r\n                {\r\n                    numberOfWordsProcessed++;\r\n                }\r\n\r\n                lastCharactersWasWhiteSpace = true;\r\n\r\n                if (numberOfWordsProcessed == length)\r\n                {\r\n                    return StringHumanizeExtensions.Concat(value.AsSpan(0, i), truncationString.AsSpan());\r\n                }\r\n            }\r\n            else\r\n            {\r\n                lastCharactersWasWhiteSpace = false;\r\n            }\r\n        }\r\n        return value + truncationString;\r\n    }\r\n\r\n    static string TruncateFromLeft(string value, int length, string? truncationString)\r\n    {\r\n        var lastCharactersWasWhiteSpace = true;\r\n        var numberOfWordsProcessed = 0;\r\n        for (var i = value.Length - 1; i > 0; i--)\r\n        {\r\n            if (char.IsWhiteSpace(value[i]))\r\n            {\r\n                if (!lastCharactersWasWhiteSpace)\r\n                {\r\n                    numberOfWordsProcessed++;\r\n                }\r\n\r\n                lastCharactersWasWhiteSpace = true;\r\n\r\n                if (numberOfWordsProcessed == length)\r\n                {\r\n                    return StringHumanizeExtensions.Concat(truncationString.AsSpan(), value.AsSpan(i + 1).TrimEnd());\r\n                }\r\n            }\r\n            else\r\n            {\r\n                lastCharactersWasWhiteSpace = false;\r\n            }\r\n        }\r\n        return truncationString + value;\r\n    }\r\n}"
  },
  {
    "path": "src/Humanizer/Truncation/ITruncator.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Can truncate a string.\r\n/// </summary>\r\npublic interface ITruncator\r\n{\r\n    /// <summary>\r\n    /// Truncate a string\r\n    /// </summary>\r\n    /// <param name=\"value\">The string to truncate</param>\r\n    /// <param name=\"length\">The length to truncate to</param>\r\n    /// <param name=\"truncationString\">The string used to truncate with</param>\r\n    /// <param name=\"truncateFrom\">The enum value used to determine from where to truncate the string</param>\r\n    /// <returns>The truncated string</returns>\r\n    [return: NotNullIfNotNull(nameof(value))]\r\n    string? Truncate(string? value, int length, string? truncationString, TruncateFrom truncateFrom = TruncateFrom.Right);\r\n}"
  },
  {
    "path": "src/Humanizer/Truncation/Truncator.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Gets a ITruncator\r\n/// </summary>\r\npublic static class Truncator\r\n{\r\n    /// <summary>\r\n    /// Fixed length truncator\r\n    /// </summary>\r\n    public static ITruncator FixedLength { get; } = new FixedLengthTruncator();\r\n\r\n    /// <summary>\r\n    /// Fixed number of characters truncator\r\n    /// </summary>\r\n    public static ITruncator FixedNumberOfCharacters { get; } = new FixedNumberOfCharactersTruncator();\r\n\r\n    /// <summary>\r\n    /// Fixed number of words truncator\r\n    /// </summary>\r\n    public static ITruncator FixedNumberOfWords { get; } = new FixedNumberOfWordsTruncator();\r\n\r\n    /// <summary>\r\n    /// Dynamic length And Preserve Words truncator\r\n    /// </summary>\r\n    public static ITruncator DynamicLengthAndPreserveWords { get; } = new DynamicLengthAndPreserveWordsTruncator();\r\n\r\n    /// <summary>\r\n    /// Dynamic number of characters And Preserve Words truncator\r\n    /// </summary>\r\n    public static ITruncator DynamicNumberOfCharactersAndPreserveWords { get; } = new DynamicNumberOfCharactersAndPreserveWordsTruncator();\r\n}"
  },
  {
    "path": "src/Humanizer/TupleizeExtensions.cs",
    "content": "// ReSharper disable IdentifierTypo\r\n// ReSharper disable StringLiteralTypo\r\nnamespace Humanizer;\r\n\r\n/// <summary>\r\n/// Convert int to named tuple strings (1 -> 'single', 2-> 'double' etc.).\r\n/// Only values 1-10, 100, and 1000 have specific names. All others will return 'n-tuple'.\r\n/// </summary>\r\npublic static class TupleizeExtensions\r\n{\r\n    /// <summary>\r\n    /// Converts an integer to its corresponding tuple name (e.g., 'single', 'double', 'triple').\r\n    /// </summary>\r\n    /// <param name=\"input\">The integer value to convert to a tuple name.</param>\r\n    /// <returns>\r\n    /// A string representing the tuple name:\r\n    /// - 1 returns \"single\"\r\n    /// - 2 returns \"double\"\r\n    /// - 3 returns \"triple\"\r\n    /// - 4 returns \"quadruple\"\r\n    /// - 5 returns \"quintuple\"\r\n    /// - 6 returns \"sextuple\"\r\n    /// - 7 returns \"septuple\"\r\n    /// - 8 returns \"octuple\"\r\n    /// - 9 returns \"nonuple\"\r\n    /// - 10 returns \"decuple\"\r\n    /// - 100 returns \"centuple\"\r\n    /// - 1000 returns \"milluple\"\r\n    /// - Any other value returns \"{value}-tuple\" (e.g., \"42-tuple\")\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// Only values 1-10, 100, and 1000 have specific named tuples. All other values return \r\n    /// a generic n-tuple format. Negative values and zero will return in the format \"{value}-tuple\".\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// 1.Tupleize() => \"single\"\r\n    /// 2.Tupleize() => \"double\"\r\n    /// 3.Tupleize() => \"triple\"\r\n    /// 10.Tupleize() => \"decuple\"\r\n    /// 100.Tupleize() => \"centuple\"\r\n    /// 42.Tupleize() => \"42-tuple\"\r\n    /// (-5).Tupleize() => \"-5-tuple\"\r\n    /// </code>\r\n    /// </example>\r\n    public static string Tupleize(this int input) =>\r\n        input switch\r\n        {\r\n            1 => \"single\",\r\n            2 => \"double\",\r\n            3 => \"triple\",\r\n            4 => \"quadruple\",\r\n            5 => \"quintuple\",\r\n            6 => \"sextuple\",\r\n            7 => \"septuple\",\r\n            8 => \"octuple\",\r\n            9 => \"nonuple\",\r\n            10 => \"decuple\",\r\n            100 => \"centuple\",\r\n            1000 => \"milluple\",\r\n            _ => $\"{input}-tuple\"\r\n        };\r\n}"
  },
  {
    "path": "src/Humanizer/WordForm.cs",
    "content": "﻿namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Options for specifying the form of the word when different variations of the same word exists.\r\n/// </summary>\r\npublic enum WordForm\r\n{\r\n    /// <summary>\r\n    /// Indicates the normal form of a written word.\r\n    /// </summary>\r\n    Normal,\r\n\r\n    /// <summary>\r\n    /// Indicates the shortened form of a written word.\r\n    /// </summary>\r\n    Abbreviation,\r\n\r\n    /// <summary>\r\n    /// Indicates the Eifeler Rule form of a word.\r\n    /// https://lb.wikipedia.org/wiki/Eifeler_Reegel\r\n    /// </summary>\r\n    Eifeler,\r\n}"
  },
  {
    "path": "src/Humanizer/WordsToNumberExtension.cs",
    "content": "namespace Humanizer;\r\n\r\n/// <summary>\r\n/// Transform humanized string to number; e.g. one => 1\r\n/// </summary>\r\npublic static class WordsToNumberExtension\r\n{\r\n    /// <summary>\r\n    /// Converts a spelled-out number string to its integer representation.\r\n    /// </summary>\r\n    /// <param name=\"words\">\r\n    /// The spelled-out number (e.g., \"three hundred twenty-one\", \"forty-two\").\r\n    /// Must not be null.\r\n    /// </param>\r\n    /// <param name=\"culture\">\r\n    /// The culture to use for parsing. Different cultures may have different word representations\r\n    /// for numbers (e.g., \"twenty\" in English vs. \"vingt\" in French).\r\n    /// </param>\r\n    /// <returns>\r\n    /// The integer value represented by the words.\r\n    /// </returns>\r\n    /// <exception cref=\"FormatException\">\r\n    /// Thrown when the input contains unrecognized words or cannot be parsed as a number.\r\n    /// </exception>\r\n    /// <exception cref=\"ArgumentNullException\">Thrown when <paramref name=\"words\"/> is null.</exception>\r\n    /// <remarks>\r\n    /// This method strictly parses the input and throws an exception if any word is not recognized.\r\n    /// For a non-throwing version, use <see cref=\"TryToNumber(string, out int, CultureInfo)\"/>.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// // English (en-US)\r\n    /// \"three hundred twenty-one\".ToNumber(new CultureInfo(\"en-US\")) => 321\r\n    /// \"forty-two\".ToNumber(new CultureInfo(\"en-US\")) => 42\r\n    /// \"one thousand\".ToNumber(new CultureInfo(\"en-US\")) => 1000\r\n    /// \r\n    /// // Invalid input throws exception\r\n    /// \"xyz\".ToNumber(new CultureInfo(\"en-US\")) => throws FormatException\r\n    /// </code>\r\n    /// </example>\r\n    public static int ToNumber(this string words, CultureInfo culture)\r\n        => Configurator.GetWordsToNumberConverter(culture).Convert(words);\r\n\r\n    /// <summary>\r\n    /// Attempts to convert a spelled-out number string to its integer representation without throwing exceptions.\r\n    /// </summary>\r\n    /// <param name=\"words\">\r\n    /// The spelled-out number (e.g., \"forty-two\", \"one hundred\").\r\n    /// Must not be null.\r\n    /// </param>\r\n    /// <param name=\"parsedNumber\">\r\n    /// When this method returns, contains the integer value represented by the words if the conversion succeeded,\r\n    /// or 0 if the conversion failed.\r\n    /// </param>\r\n    /// <param name=\"culture\">\r\n    /// The culture to use for parsing.\r\n    /// </param>\r\n    /// <returns>\r\n    /// <c>true</c> if the conversion was successful; otherwise, <c>false</c>.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// This is the recommended method for parsing when you're not sure if the input is valid.\r\n    /// It does not throw exceptions on invalid input.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// // Successful conversion\r\n    /// \"forty-two\".TryToNumber(out int result, new CultureInfo(\"en-US\")) => returns true, result = 42\r\n    /// \r\n    /// // Failed conversion\r\n    /// \"xyz\".TryToNumber(out int result, new CultureInfo(\"en-US\")) => returns false, result = 0\r\n    /// </code>\r\n    /// </example>\r\n    public static bool TryToNumber(this string words, out int parsedNumber, CultureInfo culture)\r\n        => Configurator.GetWordsToNumberConverter(culture).TryConvert(words, out parsedNumber);\r\n\r\n    /// <summary>\r\n    /// Attempts to convert a spelled-out number string to its integer representation and provides\r\n    /// the first unrecognized word if the conversion fails.\r\n    /// </summary>\r\n    /// <param name=\"words\">\r\n    /// The spelled-out number (e.g., \"one thousand one\").\r\n    /// Must not be null.\r\n    /// </param>\r\n    /// <param name=\"parsedNumber\">\r\n    /// When this method returns, contains the integer value represented by the words if the conversion succeeded,\r\n    /// or 0 if the conversion failed.\r\n    /// </param>\r\n    /// <param name=\"culture\">\r\n    /// The culture to use for parsing.\r\n    /// </param>\r\n    /// <param name=\"unrecognizedWord\">\r\n    /// When this method returns <c>false</c>, contains the first unrecognized word found in the input.\r\n    /// When this method returns <c>true</c>, this parameter is set to <c>null</c>.\r\n    /// </param>\r\n    /// <returns>\r\n    /// <c>true</c> if the conversion was successful; otherwise, <c>false</c>.\r\n    /// </returns>\r\n    /// <remarks>\r\n    /// This overload is useful for debugging or providing detailed error messages to users,\r\n    /// as it identifies which specific word caused the parsing failure.\r\n    /// </remarks>\r\n    /// <example>\r\n    /// <code>\r\n    /// // Successful conversion\r\n    /// \"one thousand\".TryToNumber(out int result, new CultureInfo(\"en-US\"), out string? badWord) \r\n    ///   => returns true, result = 1000, badWord = null\r\n    /// \r\n    /// // Failed conversion with unrecognized word\r\n    /// \"one xyz three\".TryToNumber(out int result, new CultureInfo(\"en-US\"), out string? badWord)\r\n    ///   => returns false, result = 0, badWord = \"xyz\"\r\n    /// </code>\r\n    /// </example>\r\n    public static bool TryToNumber(this string words, out int parsedNumber, CultureInfo culture, out string? unrecognizedWord)\r\n        => Configurator.GetWordsToNumberConverter(culture).TryConvert(words, out parsedNumber, out unrecognizedWord);\r\n\r\n}\r\n"
  },
  {
    "path": "src/Humanizer.Analyzers/AnalyzerReleases.Shipped.md",
    "content": "## Release 1.0.0\r\n\r\n### New Rules\r\n\r\nRule ID | Category | Severity | Notes\r\n--------|----------|----------|-------\r\nHUMANIZER001 | Usage | Warning | Old Humanizer namespace usage\r\n"
  },
  {
    "path": "src/Humanizer.Analyzers/AnalyzerReleases.Unshipped.md",
    "content": "; Unshipped analyzer release\r\n; https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md\r\n"
  },
  {
    "path": "src/Humanizer.Analyzers/Humanizer.Analyzers.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\r\n\r\n  <PropertyGroup>\r\n    <TargetFramework>netstandard2.0</TargetFramework>\r\n    <LangVersion>latest</LangVersion>\r\n    <Nullable>enable</Nullable>\r\n    <EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>\r\n    <IsRoslynComponent>true</IsRoslynComponent>\r\n    <NoWarn>$(NoWarn);RS2001;RS1038;RS1041;RS2003</NoWarn>\r\n    <AnalyzerLanguage>cs</AnalyzerLanguage>\r\n    <ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>\r\n    <CentralPackageTransitivePinningEnabled>false</CentralPackageTransitivePinningEnabled>\r\n    <RoslynVersion Condition=\"'$(RoslynVersion)' == ''\">3.8</RoslynVersion>\r\n    <AnalyzerVariant Condition=\"'$(AnalyzerVariant)' == ''\">roslyn$(RoslynVersion)</AnalyzerVariant>\r\n    <OutputPath Condition=\"'$(AnalyzerVariant)' != ''\">$(MSBuildProjectDirectory)\\bin\\$(Configuration)\\$(AnalyzerVariant)\\</OutputPath>\r\n    <RoslynCSharpVersion Condition=\"'$(RoslynVersion)' == '3.8'\">3.8.0</RoslynCSharpVersion>\r\n    <RoslynAnalyzerVersion Condition=\"'$(RoslynVersion)' == '3.8'\">3.0.0</RoslynAnalyzerVersion>\r\n    <RoslynCSharpVersion Condition=\"'$(RoslynVersion)' == '4.8'\">4.8.0</RoslynCSharpVersion>\r\n    <RoslynAnalyzerVersion Condition=\"'$(RoslynVersion)' == '4.8'\">3.3.4</RoslynAnalyzerVersion>\r\n    <RoslynCSharpVersion Condition=\"'$(RoslynVersion)' == '4.14'\">4.14.0</RoslynCSharpVersion>\r\n    <RoslynAnalyzerVersion Condition=\"'$(RoslynVersion)' == '4.14'\">3.11.0</RoslynAnalyzerVersion>\r\n    <RoslynCSharpVersion Condition=\"'$(RoslynCSharpVersion)' == ''\">3.8.0</RoslynCSharpVersion>\r\n    <RoslynAnalyzerVersion Condition=\"'$(RoslynAnalyzerVersion)' == ''\">3.0.0</RoslynAnalyzerVersion>\r\n  </PropertyGroup>\r\n\r\n  <PropertyGroup Condition=\"'$(RoslynVersion)' == '4.14'\">\r\n    <DefineConstants>$(DefineConstants);ROSLYN_4_14_OR_GREATER</DefineConstants>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.CodeAnalysis.CSharp\" Version=\"$(RoslynCSharpVersion)\" PrivateAssets=\"all\" />\r\n    <PackageReference Include=\"Microsoft.CodeAnalysis.CSharp.Workspaces\" Version=\"$(RoslynCSharpVersion)\" PrivateAssets=\"all\" />\r\n    <PackageReference Include=\"Microsoft.CodeAnalysis.Analyzers\" Version=\"$(RoslynAnalyzerVersion)\" PrivateAssets=\"all\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <None Include=\"$(OutputPath)\\$(AssemblyName).dll\" Pack=\"true\" PackagePath=\"analyzers/dotnet/roslyn$(RoslynVersion)/cs\" Visible=\"false\" />\r\n  </ItemGroup>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "src/Humanizer.Analyzers/NamespaceMigrationAnalyzer.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Collections.Immutable;\r\n\r\nusing Microsoft.CodeAnalysis;\r\nusing Microsoft.CodeAnalysis.CSharp;\r\nusing Microsoft.CodeAnalysis.CSharp.Syntax;\r\nusing Microsoft.CodeAnalysis.Diagnostics;\r\n\r\nnamespace Humanizer.Analyzers;\r\n\r\n[DiagnosticAnalyzer(LanguageNames.CSharp)]\r\npublic class NamespaceMigrationAnalyzer : DiagnosticAnalyzer\r\n{\r\n    public const string DiagnosticId = \"HUMANIZER001\";\r\n    private const string Category = \"Usage\";\r\n\r\n    private static readonly LocalizableString Title = \"Old Humanizer namespace usage\";\r\n    private static readonly LocalizableString MessageFormat = \"The namespace '{0}' has been consolidated into 'Humanizer' in v3. Update your using directive.\";\r\n    private static readonly LocalizableString Description = \"Humanizer v3 consolidates sub-namespaces into the root Humanizer namespace. This using directive should be updated to 'using Humanizer;'.\";\r\n\r\n    private static readonly DiagnosticDescriptor Rule = new(\r\n        DiagnosticId,\r\n        Title,\r\n        MessageFormat,\r\n        Category,\r\n        DiagnosticSeverity.Error,\r\n        isEnabledByDefault: true,\r\n        description: Description);\r\n\r\n    private static readonly string[] PrefixMatchingNamespaces =\r\n    [\r\n        \"Humanizer.Localisation.CollectionFormatters\",\r\n        \"Humanizer.Localisation.TimeToClockNotation\",\r\n        \"Humanizer.Localisation.DateToOrdinalWords\",\r\n        \"Humanizer.Localisation.NumberToWords\",\r\n        \"Humanizer.Localisation.Formatters\",\r\n        \"Humanizer.Localisation.Ordinalizers\",\r\n        \"Humanizer.DateTimeHumanizeStrategy\",\r\n        \"Humanizer.Configuration\",\r\n        \"Humanizer.Localisation\",\r\n        \"Humanizer.Inflections\",\r\n        \"Humanizer.Bytes\"\r\n    ];\r\n\r\n    private static readonly HashSet<string> OldNamespaces = new(PrefixMatchingNamespaces, StringComparer.Ordinal);\r\n\r\n    public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule);\r\n\r\n    public override void Initialize(AnalysisContext context)\r\n    {\r\n        context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);\r\n        context.EnableConcurrentExecution();\r\n\r\n        context.RegisterSyntaxNodeAction(AnalyzeUsingDirective, SyntaxKind.UsingDirective);\r\n        context.RegisterSyntaxNodeAction(AnalyzeQualifiedName, SyntaxKind.QualifiedName);\r\n    }\r\n\r\n    private static void AnalyzeUsingDirective(SyntaxNodeAnalysisContext context)\r\n    {\r\n        if (context.Node is not UsingDirectiveSyntax usingDirective)\r\n            return;\r\n\r\n        if (usingDirective.Name is null)\r\n            return;\r\n\r\n        var namespaceName = usingDirective.Name.ToString();\r\n\r\n        if (OldNamespaces.Contains(namespaceName))\r\n        {\r\n            var diagnostic = Diagnostic.Create(Rule, usingDirective.Name.GetLocation(), namespaceName);\r\n            context.ReportDiagnostic(diagnostic);\r\n        }\r\n    }\r\n\r\n    private static void AnalyzeQualifiedName(SyntaxNodeAnalysisContext context)\r\n    {\r\n        if (context.Node is not QualifiedNameSyntax qualifiedName)\r\n            return;\r\n\r\n        // Skip if this is part of a using directive (already handled above)\r\n        // Check all ancestors, not just immediate parent, because nested qualified names\r\n        // will have another qualified name as parent\r\n        if (qualifiedName.Ancestors().OfType<UsingDirectiveSyntax>().Any())\r\n            return;\r\n\r\n        // Skip if this qualified name has a parent qualified name that also matches\r\n        // We only want to report the outermost qualified name to avoid duplicate diagnostics\r\n        if (qualifiedName.Parent is QualifiedNameSyntax parentQualified)\r\n        {\r\n            var parentName = parentQualified.ToString();\r\n            if (HasMatchingNamespace(parentName))\r\n                return;\r\n        }\r\n\r\n        var fullName = qualifiedName.ToString();\r\n        if (!TryGetMatchingNamespace(fullName, out var matchingNamespace))\r\n            return;\r\n\r\n        var diagnostic = Diagnostic.Create(Rule, qualifiedName.GetLocation(), matchingNamespace);\r\n        context.ReportDiagnostic(diagnostic);\r\n    }\r\n\r\n#if ROSLYN_4_14_OR_GREATER\r\n    private static bool IsNamespaceMatch(ReadOnlySpan<char> fullName, ReadOnlySpan<char> oldNamespace)\r\n    {\r\n        // Exact match\r\n        if (fullName.Length == oldNamespace.Length)\r\n            return fullName.Equals(oldNamespace, StringComparison.Ordinal);\r\n\r\n        // Prefix match with dot separator\r\n        return fullName.Length > oldNamespace.Length\r\n            && fullName[oldNamespace.Length] == '.'\r\n            && fullName.StartsWith(oldNamespace, StringComparison.Ordinal);\r\n    }\r\n#else\r\n    private static bool IsNamespaceMatch(string fullName, string oldNamespace)\r\n    {\r\n        if (fullName.Length == oldNamespace.Length)\r\n            return string.Equals(fullName, oldNamespace, StringComparison.Ordinal);\r\n\r\n        return fullName.Length > oldNamespace.Length\r\n            && fullName[oldNamespace.Length] == '.'\r\n            && fullName.StartsWith(oldNamespace, StringComparison.Ordinal);\r\n    }\r\n#endif\r\n\r\n    private static bool HasMatchingNamespace(string namespaceName)\r\n    {\r\n#if ROSLYN_4_14_OR_GREATER\r\n        var nameSpan = namespaceName.AsSpan();\r\n        foreach (var ns in PrefixMatchingNamespaces)\r\n        {\r\n            if (IsNamespaceMatch(nameSpan, ns))\r\n                return true;\r\n        }\r\n#else\r\n        foreach (var ns in PrefixMatchingNamespaces)\r\n        {\r\n            if (IsNamespaceMatch(namespaceName, ns))\r\n                return true;\r\n        }\r\n#endif\r\n\r\n        return false;\r\n    }\r\n\r\n    private static bool TryGetMatchingNamespace(string fullName, out string? matchingNamespace)\r\n    {\r\n#if ROSLYN_4_14_OR_GREATER\r\n        var fullNameSpan = fullName.AsSpan();\r\n        foreach (var ns in PrefixMatchingNamespaces)\r\n        {\r\n            if (!IsNamespaceMatch(fullNameSpan, ns))\r\n                continue;\r\n\r\n            matchingNamespace = ns;\r\n            return true;\r\n        }\r\n#else\r\n        foreach (var ns in PrefixMatchingNamespaces)\r\n        {\r\n            if (!IsNamespaceMatch(fullName, ns))\r\n                continue;\r\n\r\n            matchingNamespace = ns;\r\n            return true;\r\n        }\r\n#endif\r\n\r\n        matchingNamespace = null;\r\n        return false;\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/Humanizer.Analyzers/NamespaceMigrationCodeFixProvider.cs",
    "content": "using System.Collections.Immutable;\r\nusing System.Composition;\r\n\r\nusing Microsoft.CodeAnalysis;\r\nusing Microsoft.CodeAnalysis.CodeActions;\r\nusing Microsoft.CodeAnalysis.CodeFixes;\r\nusing Microsoft.CodeAnalysis.CSharp;\r\nusing Microsoft.CodeAnalysis.CSharp.Syntax;\r\n\r\nnamespace Humanizer.Analyzers;\r\n\r\n[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(NamespaceMigrationCodeFixProvider)), Shared]\r\npublic class NamespaceMigrationCodeFixProvider : CodeFixProvider\r\n{\r\n    private const string Title = \"Update to Humanizer namespace\";\r\n\r\n    // Ordered by length (longest first) for optimal matching\r\n    private static readonly string[] OldNamespaces =\r\n    [\r\n        \"Humanizer.Localisation.CollectionFormatters\",\r\n        \"Humanizer.Localisation.TimeToClockNotation\",\r\n        \"Humanizer.Localisation.DateToOrdinalWords\",\r\n        \"Humanizer.Localisation.NumberToWords\",\r\n        \"Humanizer.Localisation.Formatters\",\r\n        \"Humanizer.Localisation.Ordinalizers\",\r\n        \"Humanizer.DateTimeHumanizeStrategy\",\r\n        \"Humanizer.Configuration\",\r\n        \"Humanizer.Localisation\",\r\n        \"Humanizer.Inflections\",\r\n        \"Humanizer.Bytes\"\r\n    ];\r\n\r\n    public sealed override ImmutableArray<string> FixableDiagnosticIds => ImmutableArray.Create(NamespaceMigrationAnalyzer.DiagnosticId);\r\n\r\n    public sealed override FixAllProvider GetFixAllProvider() => WellKnownFixAllProviders.BatchFixer;\r\n\r\n    public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context)\r\n    {\r\n        var root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false);\r\n        if (root is null)\r\n            return;\r\n\r\n        var diagnostic = context.Diagnostics.First();\r\n        var diagnosticSpan = diagnostic.Location.SourceSpan;\r\n        var node = root.FindNode(diagnosticSpan);\r\n\r\n        // The diagnostic is reported on the namespace name, so navigate up to the using directive\r\n        var usingDirective = node.FirstAncestorOrSelf<UsingDirectiveSyntax>();\r\n        if (usingDirective is not null)\r\n        {\r\n            context.RegisterCodeFix(\r\n                CodeAction.Create(\r\n                    title: Title,\r\n                    createChangedDocument: c => ReplaceUsingDirectiveAsync(context.Document, usingDirective, c),\r\n                    equivalenceKey: Title),\r\n                diagnostic);\r\n            return;\r\n        }\r\n\r\n        // Handle qualified names (e.g., Humanizer.Bytes.ByteSize)\r\n        if (node is QualifiedNameSyntax qualifiedName)\r\n        {\r\n            context.RegisterCodeFix(\r\n                CodeAction.Create(\r\n                    title: Title,\r\n                    createChangedDocument: c => ReplaceQualifiedNameAsync(context.Document, qualifiedName, c),\r\n                    equivalenceKey: Title),\r\n                diagnostic);\r\n        }\r\n    }\r\n\r\n    private static async Task<Document> ReplaceUsingDirectiveAsync(\r\n        Document document,\r\n        UsingDirectiveSyntax usingDirective, \r\n        CancellationToken cancellationToken)\r\n    {\r\n        var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false);\r\n        if (root is null)\r\n            return document;\r\n\r\n        // Replace the namespace with \"Humanizer\"\r\n        var newName = SyntaxFactory.IdentifierName(\"Humanizer\");\r\n        var newUsingDirective = usingDirective.WithName(newName);\r\n\r\n        var updatedRoot = root.ReplaceNode(usingDirective, newUsingDirective);\r\n        return document.WithSyntaxRoot(updatedRoot);\r\n    }\r\n\r\n    private static async Task<Document> ReplaceQualifiedNameAsync(Document document, QualifiedNameSyntax qualifiedName, CancellationToken cancellationToken)\r\n    {\r\n        var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false);\r\n        if (root is null)\r\n            return document;\r\n\r\n        // Find which old namespace this qualified name starts with\r\n        var fullName = qualifiedName.ToString();\r\n        if (!TryGetMatchingNamespace(fullName, out var matchedNamespace))\r\n            return document;\r\n\r\n        // Replace the old namespace prefix with \"Humanizer\"\r\n        var newNameText = GetReplacementName(fullName, matchedNamespace!);\r\n\r\n        var newQualifiedName = SyntaxFactory.ParseName(newNameText)\r\n            .WithLeadingTrivia(qualifiedName.GetLeadingTrivia())\r\n            .WithTrailingTrivia(qualifiedName.GetTrailingTrivia());\r\n\r\n        var updatedRoot = root.ReplaceNode(qualifiedName, newQualifiedName);\r\n        return document.WithSyntaxRoot(updatedRoot);\r\n    }\r\n\r\n#if ROSLYN_4_14_OR_GREATER\r\n    private static bool IsNamespaceMatch(ReadOnlySpan<char> fullName, ReadOnlySpan<char> oldNamespace)\r\n    {\r\n        // Exact match\r\n        if (fullName.Length == oldNamespace.Length)\r\n            return fullName.Equals(oldNamespace, StringComparison.Ordinal);\r\n\r\n        // Prefix match with dot separator\r\n        return fullName.Length > oldNamespace.Length\r\n            && fullName[oldNamespace.Length] == '.'\r\n            && fullName.StartsWith(oldNamespace, StringComparison.Ordinal);\r\n    }\r\n#else\r\n    private static bool IsNamespaceMatch(string fullName, string oldNamespace)\r\n    {\r\n        if (fullName.Length == oldNamespace.Length)\r\n            return string.Equals(fullName, oldNamespace, StringComparison.Ordinal);\r\n\r\n        return fullName.Length > oldNamespace.Length\r\n            && fullName[oldNamespace.Length] == '.'\r\n            && fullName.StartsWith(oldNamespace, StringComparison.Ordinal);\r\n    }\r\n#endif\r\n\r\n    private static string GetReplacementName(string fullName, string matchedNamespace)\r\n    {\r\n        if (fullName.Length == matchedNamespace.Length)\r\n            return \"Humanizer\";\r\n\r\n        // Skip the matched namespace and the dot\r\n        var startIndex = matchedNamespace.Length + 1;\r\n\r\n        if (startIndex >= fullName.Length)\r\n            return \"Humanizer\";\r\n\r\n#if NET10_0_OR_GREATER\r\n        return string.Concat(\"Humanizer.\", fullName.AsSpan(startIndex));\r\n#else\r\n        return string.Concat(\"Humanizer.\", fullName.Substring(startIndex));\r\n#endif\r\n    }\r\n\r\n    private static bool TryGetMatchingNamespace(string fullName, out string? matchedNamespace)\r\n    {\r\n#if ROSLYN_4_14_OR_GREATER\r\n        var fullNameSpan = fullName.AsSpan();\r\n        foreach (var ns in OldNamespaces)\r\n        {\r\n            if (!IsNamespaceMatch(fullNameSpan, ns))\r\n                continue;\r\n\r\n            matchedNamespace = ns;\r\n            return true;\r\n        }\r\n#else\r\n        foreach (var ns in OldNamespaces)\r\n        {\r\n            if (!IsNamespaceMatch(fullName, ns))\r\n                continue;\r\n\r\n            matchedNamespace = ns;\r\n            return true;\r\n        }\r\n#endif\r\n\r\n        matchedNamespace = null;\r\n        return false;\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/Humanizer.Analyzers/README.md",
    "content": "# Humanizer.Analyzers\r\n\r\nA Roslyn analyzer and code fix provider to help migrate code from Humanizer v2 to v3.\r\n\r\n`Humanizer.Core` ships analyzer assets per Roslyn version so compatible analyzers are selected automatically by modern SDK/IDE hosts.\r\n\r\n## What it does\r\n\r\nHumanizer v3 consolidates all sub-namespaces into the root `Humanizer` namespace. This analyzer:\r\n\r\n1. **Detects** old namespace usages (e.g., `Humanizer.Bytes`, `Humanizer.Localisation`)\r\n2. **Provides** automatic code fixes to update to `Humanizer`\r\n3. **Supports** batch fixing (Fix All) for entire projects or solutions\r\n\r\n## Deprecated Namespaces\r\n\r\nThe following namespaces have been consolidated into `Humanizer`:\r\n\r\n- `Humanizer.Bytes`\r\n- `Humanizer.Localisation`\r\n- `Humanizer.Localisation.Formatters`\r\n- `Humanizer.Localisation.NumberToWords`\r\n- `Humanizer.DateTimeHumanizeStrategy`\r\n- `Humanizer.Configuration`\r\n- `Humanizer.Localisation.DateToOrdinalWords`\r\n- `Humanizer.Localisation.Ordinalizers`\r\n- `Humanizer.Inflections`\r\n- `Humanizer.Localisation.CollectionFormatters`\r\n- `Humanizer.Localisation.TimeToClockNotation`\r\n\r\n## Usage\r\n\r\n### Automatic Fixes\r\n\r\nThe analyzer will highlight old namespace usages with warnings. You can:\r\n\r\n1. **Single fix**: Click the lightbulb 💡 icon and select \"Update to Humanizer namespace\"\r\n2. **Fix All in Document**: Right-click → Quick Actions → Fix All Occurrences in Document\r\n3. **Fix All in Project**: Right-click → Quick Actions → Fix All Occurrences in Project\r\n4. **Fix All in Solution**: Right-click → Quick Actions → Fix All Occurrences in Solution\r\n\r\n### Examples\r\n\r\n**Before:**\r\n```csharp\r\nusing Humanizer.Bytes;\r\nusing Humanizer.Localisation;\r\n\r\npublic class Example\r\n{\r\n    public void Method()\r\n    {\r\n        var size = ByteSize.FromKilobytes(10);\r\n        var formatter = new DefaultFormatter();\r\n    }\r\n}\r\n```\r\n\r\n**After (automatic fix):**\r\n```csharp\r\nusing Humanizer;\r\n\r\npublic class Example\r\n{\r\n    public void Method()\r\n    {\r\n        var size = ByteSize.FromKilobytes(10);\r\n        var formatter = new DefaultFormatter();\r\n    }\r\n}\r\n```\r\n\r\n## Command Line Usage\r\n\r\nYou can also use the .NET CLI to apply fixes:\r\n\r\n```bash\r\n# Analyze and show diagnostics\r\ndotnet build /p:TreatWarningsAsErrors=false\r\n\r\n# Apply code fixes (requires dotnet format or IDE)\r\ndotnet format analyzers --diagnostics HUMANIZER001\r\n```\r\n\r\n## Development\r\n\r\n### Building\r\n\r\n```bash\r\ncd src/Humanizer.Analyzers\r\ndotnet build\r\n```\r\n\r\n### Testing\r\n\r\n```bash\r\n# from the repository root\r\ncd tests/Humanizer.Analyzers.Tests\r\ndotnet test\r\n```\r\n\r\n## Diagnostic ID\r\n\r\n- **HUMANIZER001**: Old Humanizer namespace usage\r\n"
  },
  {
    "path": "src/Humanizer.Analyzers/build/Humanizer.Core.targets",
    "content": "<Project>\r\n  <!--\r\n    Older environments that don't support Roslyn-versioned analyzer selection can load all\r\n    analyzer variants. In that case, force the baseline roslyn3.8 analyzer only.\r\n  -->\r\n  <Target Name=\"SelectHumanizerAnalyzerFallback\"\r\n          BeforeTargets=\"CoreCompile\"\r\n          Condition=\"'$(SupportsRoslynComponentVersioning)' != 'true' and Exists('$(MSBuildThisFileDirectory)..\\analyzers\\dotnet\\roslyn3.8\\cs\\Humanizer.Analyzers.dll')\">\r\n    <ItemGroup>\r\n      <HumanizerAnalyzer Include=\"@(Analyzer)\" Condition=\"'%(Analyzer.Filename)%(Analyzer.Extension)' == 'Humanizer.Analyzers.dll'\" />\r\n      <Analyzer Remove=\"@(HumanizerAnalyzer)\" />\r\n      <Analyzer Include=\"$(MSBuildThisFileDirectory)..\\analyzers\\dotnet\\roslyn3.8\\cs\\Humanizer.Analyzers.dll\" />\r\n    </ItemGroup>\r\n  </Target>\r\n</Project>\r\n"
  },
  {
    "path": "src/scripts/split-benchmark-results.ps1",
    "content": "param(\r\n  [Parameter(Mandatory)] [string]$InputDir,\r\n  [string]$OutputRoot = \".\"\r\n)\r\n\r\n# ---- Editable short TFM map ----\r\n# Keys are substrings or regexes you expect in the runtime name.\r\n# Left to right match wins. Add or reorder as needed.\r\n$TfmMap = @(\r\n  @{ Pattern = '^\\.NET\\s+10(\\.0)?$';   Tfm = 'net10.0' }\r\n  @{ Pattern = '^\\.NET\\s+8(\\.0)?$';    Tfm = 'net8.0'  }\r\n  @{ Pattern = '^\\.NET\\s+Framework\\s*4\\.8$'; Tfm = 'net48'   }\r\n)\r\n$DefaultTfm = 'unknown'\r\n\r\n# ---- Helpers ----\r\nfunction Get-Runtime([object]$b) {\r\n  # 1) Old path\r\n  if ($b.PSObject.Properties.Name -contains 'Properties' -and $b.Properties.Runtime) { return [string]$b.Properties.Runtime }\r\n  # 2) New nested path\r\n  $rt = $b.BenchmarkCase.Job.Environment.Runtime.Name\r\n  if ($rt) { return [string]$rt }\r\n  # 3) Fallback from DisplayInfo, e.g. \"...(Runtime=.NET 10.0)\"\r\n  $di = [string]$b.DisplayInfo\r\n  if ($di -match 'Runtime=([^)]+)\\)') { return $Matches[1].Trim() }\r\n  return $null\r\n}\r\n\r\nfunction To-ShortTfm([string]$runtimeName) {\r\n  foreach ($m in $TfmMap) {\r\n    if ($runtimeName -match $m.Pattern) { return $m.Tfm }\r\n  }\r\n  return $DefaultTfm\r\n}\r\n\r\n# ---- Process all JSONs in directory ----\r\n$files = Get-ChildItem -LiteralPath $InputDir -File -Filter *.json\r\nif (-not $files) { throw \"No .json files found in '$InputDir'.\" }\r\n\r\nforeach ($f in $files) {\r\n  try {\r\n    $root = Get-Content -Raw -LiteralPath $f.FullName | ConvertFrom-Json -AsHashtable\r\n    if (-not $root.ContainsKey('Benchmarks')) { Write-Warning \"Skip '$($f.Name)': no 'Benchmarks'.\"; continue }\r\n\r\n    $byRuntime = @{}\r\n    foreach ($b in $root.Benchmarks) {\r\n      $rt = Get-Runtime $b\r\n      if (-not $rt) { Write-Warning \"Skip one entry in '$($f.Name)': runtime not detected.\"; continue }\r\n      if (-not $byRuntime.ContainsKey($rt)) { $byRuntime[$rt] = [System.Collections.ArrayList]::new() }\r\n      [void]$byRuntime[$rt].Add($b)\r\n    }\r\n\r\n    if ($byRuntime.Count -eq 0) { Write-Warning \"Skip '$($f.Name)': no entries with detectable runtime.\"; continue }\r\n\r\n    foreach ($rt in $byRuntime.Keys) {\r\n      $short = To-ShortTfm $rt\r\n      $outDir = Join-Path $OutputRoot $short\r\n      New-Item -ItemType Directory -Force -Path $outDir | Out-Null\r\n\r\n      # Build per-runtime JSON preserving top-level fields except Benchmarks\r\n      $out = [ordered]@{}\r\n      foreach ($k in $root.Keys) { if ($k -ne 'Benchmarks') { $out[$k] = $root[$k] } }\r\n      $out['Title']      = \"{0} ({1})\" -f $root['Title'], $rt\r\n      $out['Benchmarks'] = $byRuntime[$rt]\r\n\r\n      $json = $out | ConvertTo-Json -Depth 100\r\n      $dest = Join-Path $outDir $f.Name\r\n      Set-Content -LiteralPath $dest -Value $json -NoNewline\r\n      Write-Host \"Wrote $dest\"\r\n    }\r\n  }\r\n  catch {\r\n    Write-Warning \"Error processing '$($f.FullName)': $($_.Exception.Message)\"\r\n  }\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Analyzers.Tests/AnalyzerAssemblyCompatibilityTests.cs",
    "content": "using System.Reflection;\r\nusing System.Linq;\r\n\r\nusing Humanizer.Analyzers;\r\nusing Xunit;\r\n\r\nnamespace Humanizer.Analyzers.Tests;\r\n\r\npublic class AnalyzerAssemblyCompatibilityTests\r\n{\r\n    [Fact]\r\n    public void ShouldReferenceCompatibleSystemMemoryVersion()\r\n    {\r\n        var systemMemoryReference = GetAssemblyReferences().SingleOrDefault(reference => reference.Name == \"System.Memory\");\r\n        if (systemMemoryReference is null)\r\n            return;\r\n\r\n        var isCompatible = systemMemoryReference.Version is not null && systemMemoryReference.Version <= new Version(4, 0, 1, 2);\r\n        if (!isCompatible)\r\n            throw new InvalidOperationException($\"Expected System.Memory version <= 4.0.1.2 but found {systemMemoryReference.Version}.\");\r\n    }\r\n\r\n    [Fact]\r\n    public void ShouldReferenceCompatibleSystemCollectionsImmutableVersion()\r\n    {\r\n        var immutableReference = GetAssemblyReferences().SingleOrDefault(reference => reference.Name == \"System.Collections.Immutable\");\r\n        if (immutableReference is null)\r\n            throw new InvalidOperationException(\"Expected System.Collections.Immutable reference but none was found.\");\r\n\r\n        var isCompatible = immutableReference.Version is not null && immutableReference.Version.Major <= 7;\r\n        if (!isCompatible)\r\n            throw new InvalidOperationException($\"Expected System.Collections.Immutable major version <= 7 but found {immutableReference.Version}.\");\r\n    }\r\n\r\n    private static AssemblyName[] GetAssemblyReferences() =>\r\n        typeof(NamespaceMigrationAnalyzer).Assembly.GetReferencedAssemblies();\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Analyzers.Tests/Humanizer.Analyzers.Tests.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\r\n\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <OutputType>Exe</OutputType>\r\n    <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>\r\n    <UseMicrosoftTestingPlatformRunner>true</UseMicrosoftTestingPlatformRunner>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <Using Include=\"Xunit.v3\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.CodeAnalysis.CSharp.Analyzer.Testing\" />\r\n    <PackageReference Include=\"Microsoft.CodeAnalysis.CSharp.CodeFix.Testing\" />\r\n    <PackageReference Include=\"Microsoft.Testing.Extensions.CodeCoverage\" PrivateAssets=\"all\" />\r\n    <PackageReference Include=\"Microsoft.Testing.Extensions.TrxReport\" PrivateAssets=\"all\" />\r\n    <PackageReference Include=\"xunit.v3.mtp-v2\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\src\\Humanizer.Analyzers\\Humanizer.Analyzers.csproj\" />\r\n    <ProjectReference Include=\"..\\..\\src\\Humanizer\\Humanizer.csproj\" />\r\n  </ItemGroup>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "tests/Humanizer.Analyzers.Tests/NamespaceMigrationAnalyzerTests.cs",
    "content": "using Xunit;\r\nusing VerifyCS = Humanizer.Analyzers.Tests.CSharpCodeFixVerifier<\r\n    Humanizer.Analyzers.NamespaceMigrationAnalyzer,\r\n    Humanizer.Analyzers.NamespaceMigrationCodeFixProvider>;\r\n\r\nnamespace Humanizer.Analyzers.Tests;\r\n\r\npublic class NamespaceMigrationAnalyzerTests\r\n{\r\n    [Fact]\r\n    public async Task EmptyCode_NoDiagnostic()\r\n    {\r\n        var test = \"\";\r\n        await VerifyCS.VerifyAnalyzerAsync(test);\r\n    }\r\n\r\n    [Fact]\r\n    public async Task UsingHumanizer_NoDiagnostic()\r\n    {\r\n        var test = @\"\r\nusing Humanizer;\r\n\r\nclass TestClass { }\r\n\";\r\n        await VerifyCS.VerifyAnalyzerAsync(test);\r\n    }\r\n\r\n    [Fact]\r\n    public async Task UsingHumanizerBytes_Diagnostic()\r\n    {\r\n        var test = @\"\r\nusing {|#0:Humanizer.Bytes|};\r\n\r\nclass TestClass { }\r\n\";\r\n        await VerifyCS.VerifyAnalyzerAsync(test,\r\n            VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n                .WithLocation(0)\r\n                .WithArguments(\"Humanizer.Bytes\"));\r\n    }\r\n\r\n    [Fact]\r\n    public async Task UsingHumanizerLocalisation_Diagnostic()\r\n    {\r\n        var test = @\"\r\nusing {|#0:Humanizer.Localisation|};\r\n\r\nclass TestClass { }\r\n\";\r\n        await VerifyCS.VerifyAnalyzerAsync(test,\r\n            VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n                .WithLocation(0)\r\n                .WithArguments(\"Humanizer.Localisation\"));\r\n    }\r\n\r\n    [Fact]\r\n    public async Task UsingHumanizerLocalisationFormatters_Diagnostic()\r\n    {\r\n        var test = @\"\r\nusing {|#0:Humanizer.Localisation.Formatters|};\r\n\r\nclass TestClass { }\r\n\";\r\n        await VerifyCS.VerifyAnalyzerAsync(test,\r\n            VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n                .WithLocation(0)\r\n                .WithArguments(\"Humanizer.Localisation.Formatters\"));\r\n    }\r\n\r\n    [Fact]\r\n    public async Task UsingHumanizerConfiguration_Diagnostic()\r\n    {\r\n        var test = @\"\r\nusing {|#0:Humanizer.Configuration|};\r\n\r\nclass TestClass { }\r\n\";\r\n        await VerifyCS.VerifyAnalyzerAsync(test,\r\n            VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n                .WithLocation(0)\r\n                .WithArguments(\"Humanizer.Configuration\"));\r\n    }\r\n\r\n    [Fact]\r\n    public async Task UsingHumanizerInflections_Diagnostic()\r\n    {\r\n        var test = @\"\r\nusing {|#0:Humanizer.Inflections|};\r\n\r\nclass TestClass { }\r\n\";\r\n        await VerifyCS.VerifyAnalyzerAsync(test,\r\n            VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n                .WithLocation(0)\r\n                .WithArguments(\"Humanizer.Inflections\"));\r\n    }\r\n\r\n    [Fact]\r\n    public async Task MultipleOldUsings_MultipleDiagnostics()\r\n    {\r\n        var test = @\"\r\nusing {|#0:Humanizer.Bytes|};\r\nusing {|#1:Humanizer.Localisation|};\r\nusing {|#2:Humanizer.Configuration|};\r\n\r\nclass TestClass { }\r\n\";\r\n        await VerifyCS.VerifyAnalyzerAsync(test,\r\n            VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n                .WithLocation(0)\r\n                .WithArguments(\"Humanizer.Bytes\"),\r\n            VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n                .WithLocation(1)\r\n                .WithArguments(\"Humanizer.Localisation\"),\r\n            VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n                .WithLocation(2)\r\n                .WithArguments(\"Humanizer.Configuration\"));\r\n    }\r\n\r\n    [Fact]\r\n    public async Task QualifiedNameUsage_Diagnostic()\r\n    {\r\n        var test = @\"\r\nnamespace TestNamespace\r\n{\r\n    class TestClass \r\n    {\r\n        void Method()\r\n        {\r\n            var typeName = typeof({|#0:Humanizer.Bytes.IFormatter|}).Name;\r\n        }\r\n    }\r\n}\r\n\";\r\n        await VerifyCS.VerifyAnalyzerAsync(test,\r\n            VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n                .WithLocation(0)\r\n                .WithArguments(\"Humanizer.Bytes\"));\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Analyzers.Tests/NamespaceMigrationCodeFixTests.cs",
    "content": "using Xunit;\r\nusing VerifyCS = Humanizer.Analyzers.Tests.CSharpCodeFixVerifier<\r\n    Humanizer.Analyzers.NamespaceMigrationAnalyzer,\r\n    Humanizer.Analyzers.NamespaceMigrationCodeFixProvider>;\r\n\r\nnamespace Humanizer.Analyzers.Tests;\r\n\r\npublic class NamespaceMigrationCodeFixTests\r\n{\r\n    [Fact]\r\n    public async Task FixUsingHumanizerBytes()\r\n    {\r\n        var test = @\"\r\nusing Humanizer.Bytes;\r\n\r\nclass TestClass { }\r\n\";\r\n\r\n        var fixedCode = @\"\r\nusing Humanizer;\r\n\r\nclass TestClass { }\r\n\";\r\n\r\n        var expected = VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n            .WithSpan(2, 7, 2, 22)\r\n            .WithArguments(\"Humanizer.Bytes\");\r\n\r\n        await VerifyCS.VerifyCodeFixAsync(test, expected, fixedCode);\r\n    }\r\n\r\n    [Fact]\r\n    public async Task FixUsingHumanizerLocalisation()\r\n    {\r\n        var test = @\"\r\nusing Humanizer.Localisation;\r\n\r\nclass TestClass { }\r\n\";\r\n\r\n        var fixedCode = @\"\r\nusing Humanizer;\r\n\r\nclass TestClass { }\r\n\";\r\n\r\n        var expected = VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n            .WithSpan(2, 7, 2, 29)\r\n            .WithArguments(\"Humanizer.Localisation\");\r\n\r\n        await VerifyCS.VerifyCodeFixAsync(test, expected, fixedCode);\r\n    }\r\n\r\n    [Fact]\r\n    public async Task FixUsingHumanizerConfiguration()\r\n    {\r\n        var test = @\"\r\nusing Humanizer.Configuration;\r\n\r\nclass TestClass { }\r\n\";\r\n\r\n        var fixedCode = @\"\r\nusing Humanizer;\r\n\r\nclass TestClass { }\r\n\";\r\n\r\n        var expected = VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n            .WithSpan(2, 7, 2, 30)\r\n            .WithArguments(\"Humanizer.Configuration\");\r\n\r\n        await VerifyCS.VerifyCodeFixAsync(test, expected, fixedCode);\r\n    }\r\n\r\n\r\n\r\n    [Fact]\r\n    public async Task FixUsingHumanizerLocalisationFormatters()\r\n    {\r\n        var test = @\"\r\nusing Humanizer.Localisation.Formatters;\r\n\r\nclass TestClass { }\r\n\";\r\n\r\n        var fixedCode = @\"\r\nusing Humanizer;\r\n\r\nclass TestClass { }\r\n\";\r\n\r\n        var expected = VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n            .WithSpan(2, 7, 2, 40)\r\n            .WithArguments(\"Humanizer.Localisation.Formatters\");\r\n\r\n        await VerifyCS.VerifyCodeFixAsync(test, expected, fixedCode);\r\n    }\r\n\r\n    [Fact]\r\n    public async Task FixUsingHumanizerInflections()\r\n    {\r\n        var test = @\"\r\nusing Humanizer.Inflections;\r\n\r\nclass TestClass { }\r\n\";\r\n\r\n        var fixedCode = @\"\r\nusing Humanizer;\r\n\r\nclass TestClass { }\r\n\";\r\n\r\n        var expected = VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n            .WithSpan(2, 7, 2, 28)\r\n            .WithArguments(\"Humanizer.Inflections\");\r\n\r\n        await VerifyCS.VerifyCodeFixAsync(test, expected, fixedCode);\r\n    }\r\n\r\n    [Fact]\r\n    public async Task FixQualifiedNameUsage()\r\n    {\r\n        var test = @\"\r\nnamespace TestNamespace\r\n{\r\n    class TestClass \r\n    {\r\n        void Method()\r\n        {\r\n            var typeName = typeof(Humanizer.Bytes.IFormatter).Name;\r\n        }\r\n    }\r\n}\r\n\";\r\n\r\n        var fixedCode = @\"\r\nnamespace TestNamespace\r\n{\r\n    class TestClass \r\n    {\r\n        void Method()\r\n        {\r\n            var typeName = typeof(Humanizer.IFormatter).Name;\r\n        }\r\n    }\r\n}\r\n\";\r\n\r\n        var expected = VerifyCS.Diagnostic(NamespaceMigrationAnalyzer.DiagnosticId)\r\n            .WithSpan(8, 35, 8, 61)\r\n            .WithArguments(\"Humanizer.Bytes\");\r\n\r\n        await VerifyCS.VerifyCodeFixAsync(test, expected, fixedCode);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Analyzers.Tests/Verifiers.cs",
    "content": "using Microsoft.CodeAnalysis.Testing;\r\nusing Microsoft.CodeAnalysis.CSharp.Testing;\r\nusing Microsoft.CodeAnalysis.Diagnostics;\r\nusing Microsoft.CodeAnalysis.CodeFixes;\r\n\r\nnamespace Humanizer.Analyzers.Tests;\r\n\r\npublic static class CSharpCodeFixVerifier<TAnalyzer, TCodeFix>\r\n    where TAnalyzer : DiagnosticAnalyzer, new()\r\n    where TCodeFix : CodeFixProvider, new()\r\n{\r\n    public static DiagnosticResult Diagnostic(string diagnosticId)\r\n        => CSharpCodeFixVerifier<TAnalyzer, TCodeFix, DefaultVerifier>.Diagnostic(diagnosticId);\r\n\r\n    public static async Task VerifyAnalyzerAsync(string source, params DiagnosticResult[] expected)\r\n    {\r\n        var test = new CSharpAnalyzerTest<TAnalyzer, DefaultVerifier>\r\n        {\r\n            TestCode = source,\r\n            CompilerDiagnostics = CompilerDiagnostics.None,\r\n        };\r\n\r\n        test.TestState.AdditionalReferences.Add(typeof(Humanizer.ByteSize).Assembly);\r\n        test.ExpectedDiagnostics.AddRange(expected);\r\n        await test.RunAsync();\r\n    }\r\n\r\n    public static async Task VerifyCodeFixAsync(string source, string fixedSource)\r\n    {\r\n        await VerifyCodeFixAsync(source, DiagnosticResult.EmptyDiagnosticResults, fixedSource);\r\n    }\r\n\r\n    public static async Task VerifyCodeFixAsync(string source, DiagnosticResult expected, string fixedSource)\r\n    {\r\n        await VerifyCodeFixAsync(source, new[] { expected }, fixedSource);\r\n    }\r\n\r\n    public static async Task VerifyCodeFixAsync(string source, DiagnosticResult[] expected, string fixedSource)\r\n    {\r\n        var test = new CSharpCodeFixTest<TAnalyzer, TCodeFix, DefaultVerifier>\r\n        {\r\n            TestCode = source,\r\n            FixedCode = fixedSource,\r\n            CompilerDiagnostics = CompilerDiagnostics.None,\r\n        };\r\n\r\n        test.TestState.AdditionalReferences.Add(typeof(Humanizer.ByteSize).Assembly);\r\n        test.FixedState.AdditionalReferences.Add(typeof(Humanizer.ByteSize).Assembly);\r\n        test.ExpectedDiagnostics.AddRange(expected);\r\n        await test.RunAsync();\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/.editorconfig",
    "content": "\n[*.cs]\ndotnet_diagnostic.CA1050.severity = none # CA1050: Declare types in namespaces\n\n\n# CA1861: Avoid constant arrays as arguments\ndotnet_diagnostic.CA1861.severity = silent\n\n# IDE0060: Remove unused parameter\ndotnet_diagnostic.IDE0060.severity = none\n\n# IDE0022: Use expression body for method\ndotnet_diagnostic.IDE0130.severity = none"
  },
  {
    "path": "tests/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.Approve_Public_Api.DotNet10_0.verified.txt",
    "content": "﻿[assembly: System.Reflection.AssemblyMetadata(\"IsAotCompatible\", \"True\")]\n[assembly: System.Reflection.AssemblyMetadata(\"IsTrimmable\", \"True\")]\n[assembly: System.Resources.NeutralResourcesLanguage(\"en\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETCoreApp,Version=v10.0\", FrameworkDisplayName=\".NET 10.0\")]\nnamespace Humanizer\n{\n    public class ByteRate\n    {\n        public ByteRate(Humanizer.ByteSize size, System.TimeSpan interval) { }\n        public System.TimeSpan Interval { get; }\n        public Humanizer.ByteSize Size { get; }\n        public string Humanize(Humanizer.TimeUnit timeUnit = 1) { }\n        public string Humanize(string? format, Humanizer.TimeUnit timeUnit = 1, System.Globalization.CultureInfo? culture = null) { }\n    }\n    public struct ByteSize : System.IComparable, System.IComparable<Humanizer.ByteSize>, System.IEquatable<Humanizer.ByteSize>, System.IFormattable\n    {\n        public const string Bit = \"bit\";\n        public const string BitSymbol = \"b\";\n        public const long BitsInByte = 8;\n        public const string Byte = \"byte\";\n        public const string ByteSymbol = \"B\";\n        public const long BytesInGigabyte = 1073741824;\n        public const long BytesInKilobyte = 1024;\n        public const long BytesInMegabyte = 1048576;\n        public const long BytesInTerabyte = 1099511627776;\n        public const string Gigabyte = \"gigabyte\";\n        public const string GigabyteSymbol = \"GB\";\n        public const string Kilobyte = \"kilobyte\";\n        public const string KilobyteSymbol = \"KB\";\n        public const string Megabyte = \"megabyte\";\n        public const string MegabyteSymbol = \"MB\";\n        public const string Terabyte = \"terabyte\";\n        public const string TerabyteSymbol = \"TB\";\n        public static readonly Humanizer.ByteSize MaxValue;\n        public static readonly Humanizer.ByteSize MinValue;\n        public ByteSize(double byteSize) { }\n        public long Bits { get; }\n        public double Bytes { get; }\n        public double Gigabytes { get; }\n        public double Kilobytes { get; }\n        public string LargestWholeNumberFullWord { get; }\n        public string LargestWholeNumberSymbol { get; }\n        public double LargestWholeNumberValue { get; }\n        public double Megabytes { get; }\n        public double Terabytes { get; }\n        public Humanizer.ByteSize Add(Humanizer.ByteSize bs) { }\n        public Humanizer.ByteSize AddBits(long value) { }\n        public Humanizer.ByteSize AddBytes(double value) { }\n        public Humanizer.ByteSize AddGigabytes(double value) { }\n        public Humanizer.ByteSize AddKilobytes(double value) { }\n        public Humanizer.ByteSize AddMegabytes(double value) { }\n        public Humanizer.ByteSize AddTerabytes(double value) { }\n        public int CompareTo(Humanizer.ByteSize other) { }\n        public int CompareTo(object? obj) { }\n        public bool Equals(Humanizer.ByteSize value) { }\n        public override bool Equals(object? value) { }\n        public override int GetHashCode() { }\n        public string GetLargestWholeNumberFullWord(System.IFormatProvider? provider = null) { }\n        public string GetLargestWholeNumberSymbol(System.IFormatProvider? provider = null) { }\n        public Humanizer.ByteSize Subtract(Humanizer.ByteSize bs) { }\n        public string ToFullWords(string? format = null, System.IFormatProvider? provider = null) { }\n        public override string ToString() { }\n        public string ToString(System.IFormatProvider? provider) { }\n        public string ToString(string? format) { }\n        public string ToString(string? format, System.IFormatProvider? provider) { }\n        public static Humanizer.ByteSize FromBits(long value) { }\n        public static Humanizer.ByteSize FromBytes(double value) { }\n        public static Humanizer.ByteSize FromGigabytes(double value) { }\n        public static Humanizer.ByteSize FromKilobytes(double value) { }\n        public static Humanizer.ByteSize FromMegabytes(double value) { }\n        public static Humanizer.ByteSize FromTerabytes(double value) { }\n        public static Humanizer.ByteSize Parse(string s) { }\n        public static Humanizer.ByteSize Parse(string s, System.IFormatProvider? formatProvider) { }\n        public static bool TryParse(System.ReadOnlySpan<char> s, out Humanizer.ByteSize result) { }\n        public static bool TryParse(string? s, out Humanizer.ByteSize result) { }\n        public static bool TryParse(System.ReadOnlySpan<char> s, System.IFormatProvider? formatProvider, out Humanizer.ByteSize result) { }\n        public static bool TryParse(string? s, System.IFormatProvider? formatProvider, out Humanizer.ByteSize result) { }\n        public static bool operator !=(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static Humanizer.ByteSize operator +(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static Humanizer.ByteSize operator ++(Humanizer.ByteSize b) { }\n        public static Humanizer.ByteSize operator -(Humanizer.ByteSize b) { }\n        public static Humanizer.ByteSize operator -(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static Humanizer.ByteSize operator --(Humanizer.ByteSize b) { }\n        public static bool operator <(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static bool operator <=(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static bool operator ==(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static bool operator >(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static bool operator >=(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n    }\n    public static class ByteSizeExtensions\n    {\n        public static Humanizer.ByteSize Bits(this byte input) { }\n        public static Humanizer.ByteSize Bits(this int input) { }\n        public static Humanizer.ByteSize Bits(this long input) { }\n        public static Humanizer.ByteSize Bits(this sbyte input) { }\n        public static Humanizer.ByteSize Bits(this short input) { }\n        public static Humanizer.ByteSize Bits(this uint input) { }\n        public static Humanizer.ByteSize Bits(this ushort input) { }\n        public static Humanizer.ByteSize Bytes(this byte input) { }\n        public static Humanizer.ByteSize Bytes(this double input) { }\n        public static Humanizer.ByteSize Bytes(this int input) { }\n        public static Humanizer.ByteSize Bytes(this long input) { }\n        public static Humanizer.ByteSize Bytes(this sbyte input) { }\n        public static Humanizer.ByteSize Bytes(this short input) { }\n        public static Humanizer.ByteSize Bytes(this uint input) { }\n        public static Humanizer.ByteSize Bytes(this ushort input) { }\n        public static Humanizer.ByteSize Gigabytes(this byte input) { }\n        public static Humanizer.ByteSize Gigabytes(this double input) { }\n        public static Humanizer.ByteSize Gigabytes(this int input) { }\n        public static Humanizer.ByteSize Gigabytes(this long input) { }\n        public static Humanizer.ByteSize Gigabytes(this sbyte input) { }\n        public static Humanizer.ByteSize Gigabytes(this short input) { }\n        public static Humanizer.ByteSize Gigabytes(this uint input) { }\n        public static Humanizer.ByteSize Gigabytes(this ushort input) { }\n        public static string Humanize(this Humanizer.ByteSize input, System.IFormatProvider formatProvider) { }\n        public static string Humanize(this Humanizer.ByteSize input, string? format = null) { }\n        public static string Humanize(this Humanizer.ByteSize input, string? format, System.IFormatProvider? formatProvider) { }\n        public static Humanizer.ByteSize Kilobytes(this byte input) { }\n        public static Humanizer.ByteSize Kilobytes(this double input) { }\n        public static Humanizer.ByteSize Kilobytes(this int input) { }\n        public static Humanizer.ByteSize Kilobytes(this long input) { }\n        public static Humanizer.ByteSize Kilobytes(this sbyte input) { }\n        public static Humanizer.ByteSize Kilobytes(this short input) { }\n        public static Humanizer.ByteSize Kilobytes(this uint input) { }\n        public static Humanizer.ByteSize Kilobytes(this ushort input) { }\n        public static Humanizer.ByteSize Megabytes(this byte input) { }\n        public static Humanizer.ByteSize Megabytes(this double input) { }\n        public static Humanizer.ByteSize Megabytes(this int input) { }\n        public static Humanizer.ByteSize Megabytes(this long input) { }\n        public static Humanizer.ByteSize Megabytes(this sbyte input) { }\n        public static Humanizer.ByteSize Megabytes(this short input) { }\n        public static Humanizer.ByteSize Megabytes(this uint input) { }\n        public static Humanizer.ByteSize Megabytes(this ushort input) { }\n        public static Humanizer.ByteRate Per(this Humanizer.ByteSize size, System.TimeSpan interval) { }\n        public static Humanizer.ByteSize Terabytes(this byte input) { }\n        public static Humanizer.ByteSize Terabytes(this double input) { }\n        public static Humanizer.ByteSize Terabytes(this int input) { }\n        public static Humanizer.ByteSize Terabytes(this long input) { }\n        public static Humanizer.ByteSize Terabytes(this sbyte input) { }\n        public static Humanizer.ByteSize Terabytes(this short input) { }\n        public static Humanizer.ByteSize Terabytes(this uint input) { }\n        public static Humanizer.ByteSize Terabytes(this ushort input) { }\n    }\n    public static class CasingExtensions\n    {\n        public static string ApplyCase(this string input, Humanizer.LetterCasing casing) { }\n    }\n    public enum ClockNotationRounding\n    {\n        None = 0,\n        NearestFiveMinutes = 1,\n    }\n    public static class CollectionHumanizeExtensions\n    {\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, System.Func<T, object> displayFormatter) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, System.Func<T, string> displayFormatter) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, string separator) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, System.Func<T, object> displayFormatter, string separator) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, System.Func<T, string> displayFormatter, string separator) { }\n    }\n    public static class Configurator\n    {\n        public static Humanizer.LocaliserRegistry<Humanizer.ICollectionFormatter> CollectionFormatters { get; }\n        public static Humanizer.IDateOnlyHumanizeStrategy DateOnlyHumanizeStrategy { get; set; }\n        public static Humanizer.LocaliserRegistry<Humanizer.IDateOnlyToOrdinalWordConverter> DateOnlyToOrdinalWordsConverters { get; }\n        public static Humanizer.IDateTimeHumanizeStrategy DateTimeHumanizeStrategy { get; set; }\n        public static Humanizer.IDateTimeOffsetHumanizeStrategy DateTimeOffsetHumanizeStrategy { get; set; }\n        public static Humanizer.LocaliserRegistry<Humanizer.IDateToOrdinalWordConverter> DateToOrdinalWordsConverters { get; }\n        public static Humanizer.LocaliserRegistry<Humanizer.IFormatter> Formatters { get; }\n        public static Humanizer.LocaliserRegistry<Humanizer.INumberToWordsConverter> NumberToWordsConverters { get; }\n        public static Humanizer.LocaliserRegistry<Humanizer.IOrdinalizer> Ordinalizers { get; }\n        public static Humanizer.ITimeOnlyHumanizeStrategy TimeOnlyHumanizeStrategy { get; set; }\n        public static Humanizer.LocaliserRegistry<Humanizer.ITimeOnlyToClockNotationConverter> TimeOnlyToClockNotationConverters { get; }\n        public static void UseEnumDescriptionPropertyLocator(System.Func<System.Reflection.PropertyInfo, bool> func) { }\n    }\n    public enum DataUnit\n    {\n        Bit = 0,\n        Byte = 1,\n        Kilobyte = 2,\n        Megabyte = 3,\n        Gigabyte = 4,\n        Terabyte = 5,\n    }\n    public static class DateHumanizeExtensions\n    {\n        public static string Humanize(this System.DateOnly input, System.DateOnly? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.DateOnly? input, System.DateOnly? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.DateTimeOffset input, System.DateTimeOffset? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.DateTimeOffset? input, System.DateTimeOffset? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.DateTime input, bool? utcDate = default, System.DateTime? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.DateTime? input, bool? utcDate = default, System.DateTime? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.TimeOnly input, System.TimeOnly? timeToCompareAgainst = default, bool useUtc = true, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.TimeOnly? input, System.TimeOnly? timeToCompareAgainst = default, bool useUtc = true, System.Globalization.CultureInfo? culture = null) { }\n    }\n    public static class DateToOrdinalWordsExtensions\n    {\n        public static string ToOrdinalWords(this System.DateOnly input) { }\n        public static string ToOrdinalWords(this System.DateTime input) { }\n        public static string ToOrdinalWords(this System.DateOnly input, Humanizer.GrammaticalCase grammaticalCase) { }\n        public static string ToOrdinalWords(this System.DateTime input, Humanizer.GrammaticalCase grammaticalCase) { }\n    }\n    public class DefaultDateOnlyHumanizeStrategy : Humanizer.IDateOnlyHumanizeStrategy\n    {\n        public DefaultDateOnlyHumanizeStrategy() { }\n        public string Humanize(System.DateOnly input, System.DateOnly comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class DefaultDateTimeHumanizeStrategy : Humanizer.IDateTimeHumanizeStrategy\n    {\n        public DefaultDateTimeHumanizeStrategy() { }\n        public string Humanize(System.DateTime input, System.DateTime comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class DefaultDateTimeOffsetHumanizeStrategy : Humanizer.IDateTimeOffsetHumanizeStrategy\n    {\n        public DefaultDateTimeOffsetHumanizeStrategy() { }\n        public string Humanize(System.DateTimeOffset input, System.DateTimeOffset comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class DefaultFormatter : Humanizer.IFormatter\n    {\n        public DefaultFormatter(System.Globalization.CultureInfo culture) { }\n        public DefaultFormatter(string localeCode) { }\n        protected System.Globalization.CultureInfo Culture { get; }\n        public virtual string DataUnitHumanize(Humanizer.DataUnit dataUnit, double count, bool toSymbol = true) { }\n        public virtual string DateHumanize(Humanizer.TimeUnit timeUnit, Humanizer.Tense timeUnitTense, int unit) { }\n        public virtual string DateHumanize_Never() { }\n        public virtual string DateHumanize_Now() { }\n        protected virtual string Format(string resourceKey) { }\n        protected virtual string Format(Humanizer.TimeUnit unit, string resourceKey, int number, bool toWords = false) { }\n        protected virtual string GetResourceKey(string resourceKey) { }\n        protected virtual string GetResourceKey(string resourceKey, int number) { }\n        protected virtual string NumberToWords(Humanizer.TimeUnit unit, int number, System.Globalization.CultureInfo culture) { }\n        public virtual string TimeSpanHumanize(Humanizer.TimeUnit timeUnit, int unit, bool toWords = false) { }\n        public virtual string TimeSpanHumanize_Age() { }\n        public virtual string TimeSpanHumanize_Zero() { }\n        public virtual string TimeUnitHumanize(Humanizer.TimeUnit timeUnit) { }\n    }\n    public class DefaultTimeOnlyHumanizeStrategy : Humanizer.ITimeOnlyHumanizeStrategy\n    {\n        public DefaultTimeOnlyHumanizeStrategy() { }\n        public string Humanize(System.TimeOnly input, System.TimeOnly comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class DynamicNumberOfCharactersAndPreserveWordsTruncator : Humanizer.ITruncator\n    {\n        public DynamicNumberOfCharactersAndPreserveWordsTruncator() { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"value\")]\n        public string? Truncate(string? value, int totalLength, string? delimiter, Humanizer.TruncateFrom truncateFrom = 1) { }\n    }\n    public static class EnglishArticle\n    {\n        public static string[] AppendArticlePrefix(string[] items) { }\n        public static string[] PrependArticleSuffix(string[] appended) { }\n    }\n    public static class EnumDehumanizeExtensions\n    {\n        [System.Diagnostics.CodeAnalysis.DynamicDependency(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods, typeof(Humanizer.EnumDehumanizeExtensions))]\n        [System.Diagnostics.CodeAnalysis.RequiresDynamicCode(\"The native code for the target enumeration might not be available at runtime.\")]\n        [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode(\"The native code for the target enumeration might not be available at runtime.\")]\n        public static System.Enum DehumanizeTo(this string input, [System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)] System.Type targetEnum, Humanizer.OnNoMatch onNoMatch = 0) { }\n        public static TTargetEnum DehumanizeTo<[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)]  TTargetEnum>(this string input)\n            where TTargetEnum :  struct, System.Enum { }\n        public static TTargetEnum? DehumanizeTo<[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)]  TTargetEnum>(this string input, Humanizer.OnNoMatch onNoMatch = 0)\n            where TTargetEnum :  struct, System.Enum { }\n    }\n    public static class EnumHumanizeExtensions\n    {\n        public static string Humanize<[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)]  T>(this T input)\n            where T :  struct, System.Enum { }\n        public static string Humanize<[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)]  T>(this T input, Humanizer.LetterCasing casing)\n            where T :  struct, System.Enum { }\n    }\n    public enum GrammaticalCase\n    {\n        Nominative = 0,\n        Genitive = 1,\n        Dative = 2,\n        Accusative = 3,\n        Instrumental = 4,\n        Prepositional = 5,\n    }\n    public enum GrammaticalGender\n    {\n        Masculine = 0,\n        Feminine = 1,\n        Neuter = 2,\n    }\n    public static class HeadingExtensions\n    {\n        public static double FromAbbreviatedHeading(this string heading) { }\n        public static double FromAbbreviatedHeading(this string heading, System.Globalization.CultureInfo? culture = null) { }\n        public static double FromHeadingArrow(this char heading) { }\n        public static double FromHeadingArrow(this string heading) { }\n        public static string ToHeading(this double heading, Humanizer.HeadingStyle style = 0, System.Globalization.CultureInfo? culture = null) { }\n        public static char ToHeadingArrow(this double heading) { }\n    }\n    public enum HeadingStyle\n    {\n        Abbreviated = 0,\n        Full = 1,\n    }\n    public interface ICollectionFormatter\n    {\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, System.Func<T, object?> objectFormatter);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, System.Func<T, string?> objectFormatter);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, string separator);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, System.Func<T, object?> objectFormatter, string separator);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, System.Func<T, string?> objectFormatter, string separator);\n    }\n    public interface ICulturedStringTransformer : Humanizer.IStringTransformer\n    {\n        string Transform(string input, System.Globalization.CultureInfo culture);\n    }\n    public interface IDateOnlyHumanizeStrategy\n    {\n        string Humanize(System.DateOnly input, System.DateOnly comparisonBase, System.Globalization.CultureInfo? culture);\n    }\n    public interface IDateOnlyToOrdinalWordConverter\n    {\n        string Convert(System.DateOnly date);\n        string Convert(System.DateOnly date, Humanizer.GrammaticalCase grammaticalCase);\n    }\n    public interface IDateTimeHumanizeStrategy\n    {\n        string Humanize(System.DateTime input, System.DateTime comparisonBase, System.Globalization.CultureInfo? culture);\n    }\n    public interface IDateTimeOffsetHumanizeStrategy\n    {\n        string Humanize(System.DateTimeOffset input, System.DateTimeOffset comparisonBase, System.Globalization.CultureInfo? culture);\n    }\n    public interface IDateToOrdinalWordConverter\n    {\n        string Convert(System.DateTime date);\n        string Convert(System.DateTime date, Humanizer.GrammaticalCase grammaticalCase);\n    }\n    public interface IFormatter\n    {\n        string DataUnitHumanize(Humanizer.DataUnit dataUnit, double count, bool toSymbol = true);\n        string DateHumanize(Humanizer.TimeUnit timeUnit, Humanizer.Tense timeUnitTense, int unit);\n        string DateHumanize_Never();\n        string DateHumanize_Now();\n        string TimeSpanHumanize(Humanizer.TimeUnit timeUnit, int unit, bool toWords = false);\n        string TimeSpanHumanize_Age();\n        string TimeSpanHumanize_Zero();\n        string TimeUnitHumanize(Humanizer.TimeUnit timeUnit);\n    }\n    public interface INumberToWordsConverter\n    {\n        string Convert(long number);\n        string Convert(long number, Humanizer.WordForm wordForm);\n        string Convert(long number, bool addAnd);\n        string Convert(long number, Humanizer.GrammaticalGender gender, bool addAnd = true);\n        string Convert(long number, bool addAnd, Humanizer.WordForm wordForm);\n        string Convert(long number, Humanizer.WordForm wordForm, Humanizer.GrammaticalGender gender, bool addAnd = true);\n        string ConvertToOrdinal(int number);\n        string ConvertToOrdinal(int number, Humanizer.GrammaticalGender gender);\n        string ConvertToOrdinal(int number, Humanizer.WordForm wordForm);\n        string ConvertToOrdinal(int number, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm);\n        string ConvertToTuple(int number);\n    }\n    public interface IOrdinalizer\n    {\n        string Convert(int number, string numberString);\n        string Convert(int number, string numberString, Humanizer.GrammaticalGender gender);\n        string Convert(int number, string numberString, Humanizer.WordForm wordForm);\n        string Convert(int number, string numberString, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm);\n    }\n    public interface IStringTransformer\n    {\n        string Transform(string input);\n    }\n    public interface ITimeOnlyHumanizeStrategy\n    {\n        string Humanize(System.TimeOnly input, System.TimeOnly comparisonBase, System.Globalization.CultureInfo? culture);\n    }\n    public interface ITimeOnlyToClockNotationConverter\n    {\n        string Convert(System.TimeOnly time, Humanizer.ClockNotationRounding roundToNearestFive);\n    }\n    public interface ITruncator\n    {\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"value\")]\n        string? Truncate(string? value, int length, string? truncationString, Humanizer.TruncateFrom truncateFrom = 1);\n    }\n    public interface IWordsToNumberConverter\n    {\n        int Convert(string words);\n        bool TryConvert(string words, out int parsedValue);\n        bool TryConvert(string words, out int parsedValue, out string? unrecognizedNumber);\n    }\n    public class In\n    {\n        public In() { }\n        public static System.DateTime April { get; }\n        public static System.DateTime August { get; }\n        public static System.DateTime December { get; }\n        public static System.DateTime February { get; }\n        public static System.DateTime January { get; }\n        public static System.DateTime July { get; }\n        public static System.DateTime June { get; }\n        public static System.DateTime March { get; }\n        public static System.DateTime May { get; }\n        public static System.DateTime November { get; }\n        public static System.DateTime October { get; }\n        public static System.DateTime September { get; }\n        public static System.DateTime AprilOf(int year) { }\n        public static System.DateTime AugustOf(int year) { }\n        public static System.DateTime DecemberOf(int year) { }\n        public static System.DateTime FebruaryOf(int year) { }\n        public static System.DateTime JanuaryOf(int year) { }\n        public static System.DateTime JulyOf(int year) { }\n        public static System.DateTime JuneOf(int year) { }\n        public static System.DateTime MarchOf(int year) { }\n        public static System.DateTime MayOf(int year) { }\n        public static System.DateTime NovemberOf(int year) { }\n        public static System.DateTime OctoberOf(int year) { }\n        public static System.DateTime SeptemberOf(int year) { }\n        public static System.DateTime TheYear(int year) { }\n        public static class Eight\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Five\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Four\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Nine\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class One\n        {\n            public static System.DateTime Day { get; }\n            public static System.DateTime Hour { get; }\n            public static System.DateTime Minute { get; }\n            public static System.DateTime Month { get; }\n            public static System.DateTime Second { get; }\n            public static System.DateTime Week { get; }\n            public static System.DateTime Year { get; }\n            public static System.DateTime DayFrom(System.DateTime date) { }\n            public static System.DateTime HourFrom(System.DateTime date) { }\n            public static System.DateTime MinuteFrom(System.DateTime date) { }\n            public static System.DateTime MonthFrom(System.DateTime date) { }\n            public static System.DateTime SecondFrom(System.DateTime date) { }\n            public static System.DateTime WeekFrom(System.DateTime date) { }\n            public static System.DateTime YearFrom(System.DateTime date) { }\n        }\n        public static class Seven\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Six\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Ten\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Three\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Two\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n    }\n    public class InDate\n    {\n        public InDate() { }\n        public static System.DateOnly April { get; }\n        public static System.DateOnly August { get; }\n        public static System.DateOnly December { get; }\n        public static System.DateOnly February { get; }\n        public static System.DateOnly January { get; }\n        public static System.DateOnly July { get; }\n        public static System.DateOnly June { get; }\n        public static System.DateOnly March { get; }\n        public static System.DateOnly May { get; }\n        public static System.DateOnly November { get; }\n        public static System.DateOnly October { get; }\n        public static System.DateOnly September { get; }\n        public static System.DateOnly AprilOf(int year) { }\n        public static System.DateOnly AugustOf(int year) { }\n        public static System.DateOnly DecemberOf(int year) { }\n        public static System.DateOnly FebruaryOf(int year) { }\n        public static System.DateOnly JanuaryOf(int year) { }\n        public static System.DateOnly JulyOf(int year) { }\n        public static System.DateOnly JuneOf(int year) { }\n        public static System.DateOnly MarchOf(int year) { }\n        public static System.DateOnly MayOf(int year) { }\n        public static System.DateOnly NovemberOf(int year) { }\n        public static System.DateOnly OctoberOf(int year) { }\n        public static System.DateOnly SeptemberOf(int year) { }\n        public static System.DateOnly TheYear(int year) { }\n        public static class Eight\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class Five\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class Four\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class Nine\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class One\n        {\n            public static System.DateOnly Day { get; }\n            public static System.DateOnly Month { get; }\n            public static System.DateOnly Week { get; }\n            public static System.DateOnly Year { get; }\n            public static System.DateOnly DayFrom(System.DateOnly date) { }\n            public static System.DateOnly DayFrom(System.DateTime date) { }\n            public static System.DateOnly MonthFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthFrom(System.DateTime date) { }\n            public static System.DateOnly WeekFrom(System.DateOnly date) { }\n            public static System.DateOnly WeekFrom(System.DateTime date) { }\n            public static System.DateOnly YearFrom(System.DateOnly date) { }\n            public static System.DateOnly YearFrom(System.DateTime date) { }\n        }\n        public static class Seven\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class Six\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class Ten\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class Three\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class Two\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n    }\n    public static class InflectorExtensions\n    {\n        public static string Camelize(this string input) { }\n        public static string Dasherize(this string underscoredWord) { }\n        public static string Hyphenate(this string underscoredWord) { }\n        public static string Kebaberize(this string input) { }\n        public static string Pascalize(this string input) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"word\")]\n        public static string? Pluralize(this string? word, bool inputIsKnownToBeSingular = true) { }\n        public static string Singularize(this string word, bool inputIsKnownToBePlural = true, bool skipSimpleWords = false) { }\n        public static string Titleize(this string input) { }\n        public static string Underscore(this string input) { }\n    }\n    public enum LetterCasing\n    {\n        Title = 0,\n        AllCaps = 1,\n        LowerCase = 2,\n        Sentence = 3,\n    }\n    public class LocaliserRegistry<TLocaliser>\n        where TLocaliser :  class\n    {\n        public LocaliserRegistry(System.Func<System.Globalization.CultureInfo, TLocaliser> defaultLocaliser) { }\n        public LocaliserRegistry(TLocaliser defaultLocaliser) { }\n        public void Register(string localeCode, System.Func<System.Globalization.CultureInfo, TLocaliser> localiser) { }\n        public void Register(string localeCode, TLocaliser localiser) { }\n        public TLocaliser ResolveForCulture(System.Globalization.CultureInfo? culture) { }\n        public TLocaliser ResolveForUiCulture() { }\n    }\n    public static class MetricNumeralExtensions\n    {\n        public static double FromMetric(this string input) { }\n        public static string ToMetric(this double input, Humanizer.MetricNumeralFormats? formats = default, int? decimals = default) { }\n        public static string ToMetric(this int input, Humanizer.MetricNumeralFormats? formats = default, int? decimals = default) { }\n        public static string ToMetric(this long input, Humanizer.MetricNumeralFormats? formats = default, int? decimals = default) { }\n    }\n    [System.Flags]\n    public enum MetricNumeralFormats\n    {\n        UseLongScaleWord = 1,\n        UseName = 2,\n        UseShortScaleWord = 4,\n        WithSpace = 8,\n    }\n    public class NoMatchFoundException : System.Exception\n    {\n        public NoMatchFoundException() { }\n        public NoMatchFoundException(string message) { }\n        public NoMatchFoundException(string message, System.Exception inner) { }\n    }\n    public static class NumberToNumberExtensions\n    {\n        public static double Billions(this double input) { }\n        public static int Billions(this int input) { }\n        public static long Billions(this long input) { }\n        public static uint Billions(this uint input) { }\n        public static ulong Billions(this ulong input) { }\n        public static double Hundreds(this double input) { }\n        public static int Hundreds(this int input) { }\n        public static long Hundreds(this long input) { }\n        public static uint Hundreds(this uint input) { }\n        public static ulong Hundreds(this ulong input) { }\n        public static double Millions(this double input) { }\n        public static int Millions(this int input) { }\n        public static long Millions(this long input) { }\n        public static uint Millions(this uint input) { }\n        public static ulong Millions(this ulong input) { }\n        public static double Tens(this double input) { }\n        public static int Tens(this int input) { }\n        public static long Tens(this long input) { }\n        public static uint Tens(this uint input) { }\n        public static ulong Tens(this ulong input) { }\n        public static double Thousands(this double input) { }\n        public static int Thousands(this int input) { }\n        public static long Thousands(this long input) { }\n        public static uint Thousands(this uint input) { }\n        public static ulong Thousands(this ulong input) { }\n    }\n    public static class NumberToTimeSpanExtensions\n    {\n        public static System.TimeSpan Days(this byte days) { }\n        public static System.TimeSpan Days(this double days) { }\n        public static System.TimeSpan Days(this int days) { }\n        public static System.TimeSpan Days(this long days) { }\n        public static System.TimeSpan Days(this sbyte days) { }\n        public static System.TimeSpan Days(this short days) { }\n        public static System.TimeSpan Days(this uint days) { }\n        public static System.TimeSpan Days(this ulong days) { }\n        public static System.TimeSpan Days(this ushort days) { }\n        public static System.TimeSpan Hours(this byte hours) { }\n        public static System.TimeSpan Hours(this double hours) { }\n        public static System.TimeSpan Hours(this int hours) { }\n        public static System.TimeSpan Hours(this long hours) { }\n        public static System.TimeSpan Hours(this sbyte hours) { }\n        public static System.TimeSpan Hours(this short hours) { }\n        public static System.TimeSpan Hours(this uint hours) { }\n        public static System.TimeSpan Hours(this ulong hours) { }\n        public static System.TimeSpan Hours(this ushort hours) { }\n        public static System.TimeSpan Milliseconds(this byte ms) { }\n        public static System.TimeSpan Milliseconds(this double ms) { }\n        public static System.TimeSpan Milliseconds(this int ms) { }\n        public static System.TimeSpan Milliseconds(this long ms) { }\n        public static System.TimeSpan Milliseconds(this sbyte ms) { }\n        public static System.TimeSpan Milliseconds(this short ms) { }\n        public static System.TimeSpan Milliseconds(this uint ms) { }\n        public static System.TimeSpan Milliseconds(this ulong ms) { }\n        public static System.TimeSpan Milliseconds(this ushort ms) { }\n        public static System.TimeSpan Minutes(this byte minutes) { }\n        public static System.TimeSpan Minutes(this double minutes) { }\n        public static System.TimeSpan Minutes(this int minutes) { }\n        public static System.TimeSpan Minutes(this long minutes) { }\n        public static System.TimeSpan Minutes(this sbyte minutes) { }\n        public static System.TimeSpan Minutes(this short minutes) { }\n        public static System.TimeSpan Minutes(this uint minutes) { }\n        public static System.TimeSpan Minutes(this ulong minutes) { }\n        public static System.TimeSpan Minutes(this ushort minutes) { }\n        public static System.TimeSpan Seconds(this byte seconds) { }\n        public static System.TimeSpan Seconds(this double seconds) { }\n        public static System.TimeSpan Seconds(this int seconds) { }\n        public static System.TimeSpan Seconds(this long seconds) { }\n        public static System.TimeSpan Seconds(this sbyte seconds) { }\n        public static System.TimeSpan Seconds(this short seconds) { }\n        public static System.TimeSpan Seconds(this uint seconds) { }\n        public static System.TimeSpan Seconds(this ulong seconds) { }\n        public static System.TimeSpan Seconds(this ushort seconds) { }\n        public static System.TimeSpan Weeks(this byte input) { }\n        public static System.TimeSpan Weeks(this double input) { }\n        public static System.TimeSpan Weeks(this int input) { }\n        public static System.TimeSpan Weeks(this long input) { }\n        public static System.TimeSpan Weeks(this sbyte input) { }\n        public static System.TimeSpan Weeks(this short input) { }\n        public static System.TimeSpan Weeks(this uint input) { }\n        public static System.TimeSpan Weeks(this ulong input) { }\n        public static System.TimeSpan Weeks(this ushort input) { }\n    }\n    public static class NumberToWordsExtension\n    {\n        public static string ToOrdinalWords(this int number, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToOrdinalWords(this int number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToOrdinalWords(this int number, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToOrdinalWords(this int number, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToTuple(this int number, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, bool addAnd, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this long number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this long number, System.Globalization.CultureInfo? culture = null, bool addAnd = true) { }\n        public static string ToWords(this int number, Humanizer.WordForm wordForm, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, bool addAnd, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this long number, Humanizer.WordForm wordForm, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this long number, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null, bool addAnd = false) { }\n    }\n    public class On\n    {\n        public On() { }\n        public class April\n        {\n            public April() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class August\n        {\n            public August() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class December\n        {\n            public December() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class February\n        {\n            public February() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class January\n        {\n            public January() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class July\n        {\n            public July() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class June\n        {\n            public June() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class March\n        {\n            public March() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class May\n        {\n            public May() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class November\n        {\n            public November() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class October\n        {\n            public October() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class September\n        {\n            public September() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n    }\n    public class OnDate\n    {\n        public OnDate() { }\n        public class April\n        {\n            public April() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class August\n        {\n            public August() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The31st { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class December\n        {\n            public December() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The31st { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class February\n        {\n            public February() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class January\n        {\n            public January() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The31st { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class July\n        {\n            public July() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The31st { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class June\n        {\n            public June() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class March\n        {\n            public March() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The31st { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class May\n        {\n            public May() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The31st { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class November\n        {\n            public November() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class October\n        {\n            public October() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The31st { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class September\n        {\n            public September() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n    }\n    public enum OnNoMatch\n    {\n        ThrowsException = 0,\n        ReturnsNull = 1,\n    }\n    public static class OrdinalizeExtensions\n    {\n        public static string Ordinalize(this int number) { }\n        public static string Ordinalize(this string numberString) { }\n        public static string Ordinalize(this int number, Humanizer.GrammaticalGender gender) { }\n        public static string Ordinalize(this int number, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this int number, System.Globalization.CultureInfo culture) { }\n        public static string Ordinalize(this string numberString, Humanizer.GrammaticalGender gender) { }\n        public static string Ordinalize(this string numberString, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this string numberString, System.Globalization.CultureInfo culture) { }\n        public static string Ordinalize(this int number, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this int number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo culture) { }\n        public static string Ordinalize(this int number, System.Globalization.CultureInfo culture, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this string numberString, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this string numberString, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo culture) { }\n        public static string Ordinalize(this string numberString, System.Globalization.CultureInfo culture, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this int number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo culture, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this string numberString, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo culture, Humanizer.WordForm wordForm) { }\n    }\n    public enum Plurality\n    {\n        Singular = 0,\n        Plural = 1,\n        CouldBeEither = 2,\n    }\n    public class PrecisionDateOnlyHumanizeStrategy : Humanizer.IDateOnlyHumanizeStrategy\n    {\n        public PrecisionDateOnlyHumanizeStrategy(double precision = 0.75) { }\n        public string Humanize(System.DateOnly input, System.DateOnly comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class PrecisionDateTimeHumanizeStrategy : Humanizer.IDateTimeHumanizeStrategy\n    {\n        public PrecisionDateTimeHumanizeStrategy(double precision = 0.75) { }\n        public string Humanize(System.DateTime input, System.DateTime comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class PrecisionDateTimeOffsetHumanizeStrategy : Humanizer.IDateTimeOffsetHumanizeStrategy\n    {\n        public PrecisionDateTimeOffsetHumanizeStrategy(double precision = 0.75) { }\n        public string Humanize(System.DateTimeOffset input, System.DateTimeOffset comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class PrecisionTimeOnlyHumanizeStrategy : Humanizer.ITimeOnlyHumanizeStrategy\n    {\n        public PrecisionTimeOnlyHumanizeStrategy(double precision = 0.75) { }\n        public string Humanize(System.TimeOnly input, System.TimeOnly comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public static class PrepositionsExtensions\n    {\n        public static System.DateTime At(this System.DateTime date, int hour, int min = 0, int second = 0, int millisecond = 0) { }\n        public static System.DateTime AtMidnight(this System.DateTime date) { }\n        public static System.DateTime AtNoon(this System.DateTime date) { }\n        public static System.DateTime In(this System.DateTime date, int year) { }\n    }\n    public class ResourceKeys\n    {\n        public ResourceKeys() { }\n        public static class DateHumanize\n        {\n            public const string Never = \"DateHumanize_Never\";\n            public const string Now = \"DateHumanize_Now\";\n            public static string GetResourceKey(Humanizer.TimeUnit timeUnit, Humanizer.Tense timeUnitTense, int count = 1) { }\n        }\n        public static class TimeSpanHumanize\n        {\n            public static string GetResourceKey(Humanizer.TimeUnit unit, int count = 1, bool toWords = false) { }\n        }\n        public static class TimeUnitSymbol\n        {\n            public static string GetResourceKey(Humanizer.TimeUnit unit) { }\n        }\n    }\n    public static class Resources\n    {\n        public static string GetResource(string resourceKey, System.Globalization.CultureInfo? culture = null) { }\n        public static bool TryGetResource(string resourceKey, System.Globalization.CultureInfo? culture, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out string? result) { }\n    }\n    public static class RomanNumeralExtensions\n    {\n        public static int FromRoman(System.ReadOnlySpan<char> input) { }\n        public static int FromRoman(this string input) { }\n        public static string ToRoman(this int input) { }\n    }\n    public enum ShowQuantityAs\n    {\n        None = 0,\n        Numeric = 1,\n        Words = 2,\n    }\n    public static class StringDehumanizeExtensions\n    {\n        public static string Dehumanize(this string input) { }\n    }\n    public static class StringHumanizeExtensions\n    {\n        public static string Humanize(this string input) { }\n        public static string Humanize(this string input, Humanizer.LetterCasing casing) { }\n    }\n    public enum Tense\n    {\n        Future = 0,\n        Past = 1,\n    }\n    public static class TimeOnlyToClockNotationExtensions\n    {\n        public static string ToClockNotation(this System.TimeOnly input, Humanizer.ClockNotationRounding roundToNearestFive = 0) { }\n    }\n    public static class TimeSpanHumanizeExtensions\n    {\n        public static string Humanize(this System.TimeSpan timeSpan, int precision = 1, System.Globalization.CultureInfo? culture = null, Humanizer.TimeUnit maxUnit = 5, Humanizer.TimeUnit minUnit = 0, string? collectionSeparator = \", \", bool toWords = false) { }\n        public static string Humanize(this System.TimeSpan timeSpan, int precision, bool countEmptyUnits, System.Globalization.CultureInfo? culture = null, Humanizer.TimeUnit maxUnit = 5, Humanizer.TimeUnit minUnit = 0, string? collectionSeparator = \", \", bool toWords = false) { }\n        public static string ToAge(this System.TimeSpan timeSpan, System.Globalization.CultureInfo? culture = null, Humanizer.TimeUnit maxUnit = 7, bool toWords = false) { }\n    }\n    public enum TimeUnit\n    {\n        Millisecond = 0,\n        Second = 1,\n        Minute = 2,\n        Hour = 3,\n        Day = 4,\n        Week = 5,\n        Month = 6,\n        Year = 7,\n    }\n    public static class TimeUnitToSymbolExtensions\n    {\n        public static string ToSymbol(this Humanizer.TimeUnit unit, System.Globalization.CultureInfo? culture = null) { }\n    }\n    public static class To\n    {\n        public static Humanizer.ICulturedStringTransformer LowerCase { get; }\n        public static Humanizer.ICulturedStringTransformer SentenceCase { get; }\n        public static Humanizer.ICulturedStringTransformer TitleCase { get; }\n        public static Humanizer.ICulturedStringTransformer UpperCase { get; }\n        public static string Transform(this string input, params Humanizer.IStringTransformer[] transformers) { }\n        public static string Transform(this string input, System.Globalization.CultureInfo culture, params Humanizer.ICulturedStringTransformer[] transformers) { }\n    }\n    public static class ToQuantityExtensions\n    {\n        public static string ToQuantity(this string input, double quantity) { }\n        public static string ToQuantity(this string input, int quantity, Humanizer.ShowQuantityAs showQuantityAs = 1) { }\n        public static string ToQuantity(this string input, long quantity, Humanizer.ShowQuantityAs showQuantityAs = 1) { }\n        public static string ToQuantity(this string input, double quantity, string? format = null, System.IFormatProvider? formatProvider = null) { }\n        public static string ToQuantity(this string input, int quantity, string? format, System.IFormatProvider? formatProvider = null) { }\n        public static string ToQuantity(this string input, long quantity, string? format, System.IFormatProvider? formatProvider = null) { }\n    }\n    public static class TruncateExtensions\n    {\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"input\")]\n        public static string? Truncate(this string? input, int length) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"input\")]\n        public static string? Truncate(this string? input, int length, Humanizer.ITruncator truncator, Humanizer.TruncateFrom from = 1) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"input\")]\n        public static string? Truncate(this string? input, int length, string? truncationString, Humanizer.TruncateFrom from = 1) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"input\")]\n        public static string? Truncate(this string? input, int length, string? truncationString, Humanizer.ITruncator truncator, Humanizer.TruncateFrom from = 1) { }\n    }\n    public enum TruncateFrom\n    {\n        Left = 0,\n        Right = 1,\n    }\n    public static class Truncator\n    {\n        public static Humanizer.ITruncator DynamicLengthAndPreserveWords { get; }\n        public static Humanizer.ITruncator DynamicNumberOfCharactersAndPreserveWords { get; }\n        public static Humanizer.ITruncator FixedLength { get; }\n        public static Humanizer.ITruncator FixedNumberOfCharacters { get; }\n        public static Humanizer.ITruncator FixedNumberOfWords { get; }\n    }\n    public static class TupleizeExtensions\n    {\n        public static string Tupleize(this int input) { }\n    }\n    public static class Vocabularies\n    {\n        public static Humanizer.Vocabulary Default { get; }\n    }\n    public class Vocabulary\n    {\n        public void AddIrregular(string singular, string plural, bool matchEnding = true) { }\n        public void AddPlural(string rule, string replacement) { }\n        public void AddSingular(string rule, string replacement) { }\n        public void AddUncountable(string word) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"word\")]\n        public string? Pluralize(string? word, bool inputIsKnownToBeSingular = true) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"word\")]\n        public string? Singularize(string? word, bool inputIsKnownToBePlural = true, bool skipSimpleWords = false) { }\n    }\n    public enum WordForm\n    {\n        Normal = 0,\n        Abbreviation = 1,\n        Eifeler = 2,\n    }\n    public static class WordsToNumberExtension\n    {\n        public static int ToNumber(this string words, System.Globalization.CultureInfo culture) { }\n        public static bool TryToNumber(this string words, out int parsedNumber, System.Globalization.CultureInfo culture) { }\n        public static bool TryToNumber(this string words, out int parsedNumber, System.Globalization.CultureInfo culture, out string? unrecognizedWord) { }\n    }\n}\n"
  },
  {
    "path": "tests/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.Approve_Public_Api.DotNet8_0.verified.txt",
    "content": "﻿[assembly: System.Reflection.AssemblyMetadata(\"IsTrimmable\", \"True\")]\n[assembly: System.Resources.NeutralResourcesLanguage(\"en\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETCoreApp,Version=v8.0\", FrameworkDisplayName=\".NET 8.0\")]\nnamespace Humanizer\n{\n    public class ByteRate\n    {\n        public ByteRate(Humanizer.ByteSize size, System.TimeSpan interval) { }\n        public System.TimeSpan Interval { get; }\n        public Humanizer.ByteSize Size { get; }\n        public string Humanize(Humanizer.TimeUnit timeUnit = 1) { }\n        public string Humanize(string? format, Humanizer.TimeUnit timeUnit = 1, System.Globalization.CultureInfo? culture = null) { }\n    }\n    public struct ByteSize : System.IComparable, System.IComparable<Humanizer.ByteSize>, System.IEquatable<Humanizer.ByteSize>, System.IFormattable\n    {\n        public const string Bit = \"bit\";\n        public const string BitSymbol = \"b\";\n        public const long BitsInByte = 8;\n        public const string Byte = \"byte\";\n        public const string ByteSymbol = \"B\";\n        public const long BytesInGigabyte = 1073741824;\n        public const long BytesInKilobyte = 1024;\n        public const long BytesInMegabyte = 1048576;\n        public const long BytesInTerabyte = 1099511627776;\n        public const string Gigabyte = \"gigabyte\";\n        public const string GigabyteSymbol = \"GB\";\n        public const string Kilobyte = \"kilobyte\";\n        public const string KilobyteSymbol = \"KB\";\n        public const string Megabyte = \"megabyte\";\n        public const string MegabyteSymbol = \"MB\";\n        public const string Terabyte = \"terabyte\";\n        public const string TerabyteSymbol = \"TB\";\n        public static readonly Humanizer.ByteSize MaxValue;\n        public static readonly Humanizer.ByteSize MinValue;\n        public ByteSize(double byteSize) { }\n        public long Bits { get; }\n        public double Bytes { get; }\n        public double Gigabytes { get; }\n        public double Kilobytes { get; }\n        public string LargestWholeNumberFullWord { get; }\n        public string LargestWholeNumberSymbol { get; }\n        public double LargestWholeNumberValue { get; }\n        public double Megabytes { get; }\n        public double Terabytes { get; }\n        public Humanizer.ByteSize Add(Humanizer.ByteSize bs) { }\n        public Humanizer.ByteSize AddBits(long value) { }\n        public Humanizer.ByteSize AddBytes(double value) { }\n        public Humanizer.ByteSize AddGigabytes(double value) { }\n        public Humanizer.ByteSize AddKilobytes(double value) { }\n        public Humanizer.ByteSize AddMegabytes(double value) { }\n        public Humanizer.ByteSize AddTerabytes(double value) { }\n        public int CompareTo(Humanizer.ByteSize other) { }\n        public int CompareTo(object? obj) { }\n        public bool Equals(Humanizer.ByteSize value) { }\n        public override bool Equals(object? value) { }\n        public override int GetHashCode() { }\n        public string GetLargestWholeNumberFullWord(System.IFormatProvider? provider = null) { }\n        public string GetLargestWholeNumberSymbol(System.IFormatProvider? provider = null) { }\n        public Humanizer.ByteSize Subtract(Humanizer.ByteSize bs) { }\n        public string ToFullWords(string? format = null, System.IFormatProvider? provider = null) { }\n        public override string ToString() { }\n        public string ToString(System.IFormatProvider? provider) { }\n        public string ToString(string? format) { }\n        public string ToString(string? format, System.IFormatProvider? provider) { }\n        public static Humanizer.ByteSize FromBits(long value) { }\n        public static Humanizer.ByteSize FromBytes(double value) { }\n        public static Humanizer.ByteSize FromGigabytes(double value) { }\n        public static Humanizer.ByteSize FromKilobytes(double value) { }\n        public static Humanizer.ByteSize FromMegabytes(double value) { }\n        public static Humanizer.ByteSize FromTerabytes(double value) { }\n        public static Humanizer.ByteSize Parse(string s) { }\n        public static Humanizer.ByteSize Parse(string s, System.IFormatProvider? formatProvider) { }\n        public static bool TryParse(System.ReadOnlySpan<char> s, out Humanizer.ByteSize result) { }\n        public static bool TryParse(string? s, out Humanizer.ByteSize result) { }\n        public static bool TryParse(System.ReadOnlySpan<char> s, System.IFormatProvider? formatProvider, out Humanizer.ByteSize result) { }\n        public static bool TryParse(string? s, System.IFormatProvider? formatProvider, out Humanizer.ByteSize result) { }\n        public static bool operator !=(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static Humanizer.ByteSize operator +(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static Humanizer.ByteSize operator ++(Humanizer.ByteSize b) { }\n        public static Humanizer.ByteSize operator -(Humanizer.ByteSize b) { }\n        public static Humanizer.ByteSize operator -(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static Humanizer.ByteSize operator --(Humanizer.ByteSize b) { }\n        public static bool operator <(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static bool operator <=(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static bool operator ==(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static bool operator >(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static bool operator >=(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n    }\n    public static class ByteSizeExtensions\n    {\n        public static Humanizer.ByteSize Bits(this byte input) { }\n        public static Humanizer.ByteSize Bits(this int input) { }\n        public static Humanizer.ByteSize Bits(this long input) { }\n        public static Humanizer.ByteSize Bits(this sbyte input) { }\n        public static Humanizer.ByteSize Bits(this short input) { }\n        public static Humanizer.ByteSize Bits(this uint input) { }\n        public static Humanizer.ByteSize Bits(this ushort input) { }\n        public static Humanizer.ByteSize Bytes(this byte input) { }\n        public static Humanizer.ByteSize Bytes(this double input) { }\n        public static Humanizer.ByteSize Bytes(this int input) { }\n        public static Humanizer.ByteSize Bytes(this long input) { }\n        public static Humanizer.ByteSize Bytes(this sbyte input) { }\n        public static Humanizer.ByteSize Bytes(this short input) { }\n        public static Humanizer.ByteSize Bytes(this uint input) { }\n        public static Humanizer.ByteSize Bytes(this ushort input) { }\n        public static Humanizer.ByteSize Gigabytes(this byte input) { }\n        public static Humanizer.ByteSize Gigabytes(this double input) { }\n        public static Humanizer.ByteSize Gigabytes(this int input) { }\n        public static Humanizer.ByteSize Gigabytes(this long input) { }\n        public static Humanizer.ByteSize Gigabytes(this sbyte input) { }\n        public static Humanizer.ByteSize Gigabytes(this short input) { }\n        public static Humanizer.ByteSize Gigabytes(this uint input) { }\n        public static Humanizer.ByteSize Gigabytes(this ushort input) { }\n        public static string Humanize(this Humanizer.ByteSize input, System.IFormatProvider formatProvider) { }\n        public static string Humanize(this Humanizer.ByteSize input, string? format = null) { }\n        public static string Humanize(this Humanizer.ByteSize input, string? format, System.IFormatProvider? formatProvider) { }\n        public static Humanizer.ByteSize Kilobytes(this byte input) { }\n        public static Humanizer.ByteSize Kilobytes(this double input) { }\n        public static Humanizer.ByteSize Kilobytes(this int input) { }\n        public static Humanizer.ByteSize Kilobytes(this long input) { }\n        public static Humanizer.ByteSize Kilobytes(this sbyte input) { }\n        public static Humanizer.ByteSize Kilobytes(this short input) { }\n        public static Humanizer.ByteSize Kilobytes(this uint input) { }\n        public static Humanizer.ByteSize Kilobytes(this ushort input) { }\n        public static Humanizer.ByteSize Megabytes(this byte input) { }\n        public static Humanizer.ByteSize Megabytes(this double input) { }\n        public static Humanizer.ByteSize Megabytes(this int input) { }\n        public static Humanizer.ByteSize Megabytes(this long input) { }\n        public static Humanizer.ByteSize Megabytes(this sbyte input) { }\n        public static Humanizer.ByteSize Megabytes(this short input) { }\n        public static Humanizer.ByteSize Megabytes(this uint input) { }\n        public static Humanizer.ByteSize Megabytes(this ushort input) { }\n        public static Humanizer.ByteRate Per(this Humanizer.ByteSize size, System.TimeSpan interval) { }\n        public static Humanizer.ByteSize Terabytes(this byte input) { }\n        public static Humanizer.ByteSize Terabytes(this double input) { }\n        public static Humanizer.ByteSize Terabytes(this int input) { }\n        public static Humanizer.ByteSize Terabytes(this long input) { }\n        public static Humanizer.ByteSize Terabytes(this sbyte input) { }\n        public static Humanizer.ByteSize Terabytes(this short input) { }\n        public static Humanizer.ByteSize Terabytes(this uint input) { }\n        public static Humanizer.ByteSize Terabytes(this ushort input) { }\n    }\n    public static class CasingExtensions\n    {\n        public static string ApplyCase(this string input, Humanizer.LetterCasing casing) { }\n    }\n    public enum ClockNotationRounding\n    {\n        None = 0,\n        NearestFiveMinutes = 1,\n    }\n    public static class CollectionHumanizeExtensions\n    {\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, System.Func<T, object> displayFormatter) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, System.Func<T, string> displayFormatter) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, string separator) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, System.Func<T, object> displayFormatter, string separator) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, System.Func<T, string> displayFormatter, string separator) { }\n    }\n    public static class Configurator\n    {\n        public static Humanizer.LocaliserRegistry<Humanizer.ICollectionFormatter> CollectionFormatters { get; }\n        public static Humanizer.IDateOnlyHumanizeStrategy DateOnlyHumanizeStrategy { get; set; }\n        public static Humanizer.LocaliserRegistry<Humanizer.IDateOnlyToOrdinalWordConverter> DateOnlyToOrdinalWordsConverters { get; }\n        public static Humanizer.IDateTimeHumanizeStrategy DateTimeHumanizeStrategy { get; set; }\n        public static Humanizer.IDateTimeOffsetHumanizeStrategy DateTimeOffsetHumanizeStrategy { get; set; }\n        public static Humanizer.LocaliserRegistry<Humanizer.IDateToOrdinalWordConverter> DateToOrdinalWordsConverters { get; }\n        public static Humanizer.LocaliserRegistry<Humanizer.IFormatter> Formatters { get; }\n        public static Humanizer.LocaliserRegistry<Humanizer.INumberToWordsConverter> NumberToWordsConverters { get; }\n        public static Humanizer.LocaliserRegistry<Humanizer.IOrdinalizer> Ordinalizers { get; }\n        public static Humanizer.ITimeOnlyHumanizeStrategy TimeOnlyHumanizeStrategy { get; set; }\n        public static Humanizer.LocaliserRegistry<Humanizer.ITimeOnlyToClockNotationConverter> TimeOnlyToClockNotationConverters { get; }\n        public static void UseEnumDescriptionPropertyLocator(System.Func<System.Reflection.PropertyInfo, bool> func) { }\n    }\n    public enum DataUnit\n    {\n        Bit = 0,\n        Byte = 1,\n        Kilobyte = 2,\n        Megabyte = 3,\n        Gigabyte = 4,\n        Terabyte = 5,\n    }\n    public static class DateHumanizeExtensions\n    {\n        public static string Humanize(this System.DateOnly input, System.DateOnly? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.DateOnly? input, System.DateOnly? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.DateTimeOffset input, System.DateTimeOffset? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.DateTimeOffset? input, System.DateTimeOffset? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.DateTime input, bool? utcDate = default, System.DateTime? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.DateTime? input, bool? utcDate = default, System.DateTime? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.TimeOnly input, System.TimeOnly? timeToCompareAgainst = default, bool useUtc = true, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.TimeOnly? input, System.TimeOnly? timeToCompareAgainst = default, bool useUtc = true, System.Globalization.CultureInfo? culture = null) { }\n    }\n    public static class DateToOrdinalWordsExtensions\n    {\n        public static string ToOrdinalWords(this System.DateOnly input) { }\n        public static string ToOrdinalWords(this System.DateTime input) { }\n        public static string ToOrdinalWords(this System.DateOnly input, Humanizer.GrammaticalCase grammaticalCase) { }\n        public static string ToOrdinalWords(this System.DateTime input, Humanizer.GrammaticalCase grammaticalCase) { }\n    }\n    public class DefaultDateOnlyHumanizeStrategy : Humanizer.IDateOnlyHumanizeStrategy\n    {\n        public DefaultDateOnlyHumanizeStrategy() { }\n        public string Humanize(System.DateOnly input, System.DateOnly comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class DefaultDateTimeHumanizeStrategy : Humanizer.IDateTimeHumanizeStrategy\n    {\n        public DefaultDateTimeHumanizeStrategy() { }\n        public string Humanize(System.DateTime input, System.DateTime comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class DefaultDateTimeOffsetHumanizeStrategy : Humanizer.IDateTimeOffsetHumanizeStrategy\n    {\n        public DefaultDateTimeOffsetHumanizeStrategy() { }\n        public string Humanize(System.DateTimeOffset input, System.DateTimeOffset comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class DefaultFormatter : Humanizer.IFormatter\n    {\n        public DefaultFormatter(System.Globalization.CultureInfo culture) { }\n        public DefaultFormatter(string localeCode) { }\n        protected System.Globalization.CultureInfo Culture { get; }\n        public virtual string DataUnitHumanize(Humanizer.DataUnit dataUnit, double count, bool toSymbol = true) { }\n        public virtual string DateHumanize(Humanizer.TimeUnit timeUnit, Humanizer.Tense timeUnitTense, int unit) { }\n        public virtual string DateHumanize_Never() { }\n        public virtual string DateHumanize_Now() { }\n        protected virtual string Format(string resourceKey) { }\n        protected virtual string Format(Humanizer.TimeUnit unit, string resourceKey, int number, bool toWords = false) { }\n        protected virtual string GetResourceKey(string resourceKey) { }\n        protected virtual string GetResourceKey(string resourceKey, int number) { }\n        protected virtual string NumberToWords(Humanizer.TimeUnit unit, int number, System.Globalization.CultureInfo culture) { }\n        public virtual string TimeSpanHumanize(Humanizer.TimeUnit timeUnit, int unit, bool toWords = false) { }\n        public virtual string TimeSpanHumanize_Age() { }\n        public virtual string TimeSpanHumanize_Zero() { }\n        public virtual string TimeUnitHumanize(Humanizer.TimeUnit timeUnit) { }\n    }\n    public class DefaultTimeOnlyHumanizeStrategy : Humanizer.ITimeOnlyHumanizeStrategy\n    {\n        public DefaultTimeOnlyHumanizeStrategy() { }\n        public string Humanize(System.TimeOnly input, System.TimeOnly comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class DynamicNumberOfCharactersAndPreserveWordsTruncator : Humanizer.ITruncator\n    {\n        public DynamicNumberOfCharactersAndPreserveWordsTruncator() { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"value\")]\n        public string? Truncate(string? value, int totalLength, string? delimiter, Humanizer.TruncateFrom truncateFrom = 1) { }\n    }\n    public static class EnglishArticle\n    {\n        public static string[] AppendArticlePrefix(string[] items) { }\n        public static string[] PrependArticleSuffix(string[] appended) { }\n    }\n    public static class EnumDehumanizeExtensions\n    {\n        [System.Diagnostics.CodeAnalysis.DynamicDependency(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods, typeof(Humanizer.EnumDehumanizeExtensions))]\n        [System.Diagnostics.CodeAnalysis.RequiresDynamicCode(\"The native code for the target enumeration might not be available at runtime.\")]\n        [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode(\"The native code for the target enumeration might not be available at runtime.\")]\n        public static System.Enum DehumanizeTo(this string input, [System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)] System.Type targetEnum, Humanizer.OnNoMatch onNoMatch = 0) { }\n        public static TTargetEnum DehumanizeTo<[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)]  TTargetEnum>(this string input)\n            where TTargetEnum :  struct, System.Enum { }\n        public static TTargetEnum? DehumanizeTo<[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)]  TTargetEnum>(this string input, Humanizer.OnNoMatch onNoMatch = 0)\n            where TTargetEnum :  struct, System.Enum { }\n    }\n    public static class EnumHumanizeExtensions\n    {\n        public static string Humanize<[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)]  T>(this T input)\n            where T :  struct, System.Enum { }\n        public static string Humanize<[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)]  T>(this T input, Humanizer.LetterCasing casing)\n            where T :  struct, System.Enum { }\n    }\n    public enum GrammaticalCase\n    {\n        Nominative = 0,\n        Genitive = 1,\n        Dative = 2,\n        Accusative = 3,\n        Instrumental = 4,\n        Prepositional = 5,\n    }\n    public enum GrammaticalGender\n    {\n        Masculine = 0,\n        Feminine = 1,\n        Neuter = 2,\n    }\n    public static class HeadingExtensions\n    {\n        public static double FromAbbreviatedHeading(this string heading) { }\n        public static double FromAbbreviatedHeading(this string heading, System.Globalization.CultureInfo? culture = null) { }\n        public static double FromHeadingArrow(this char heading) { }\n        public static double FromHeadingArrow(this string heading) { }\n        public static string ToHeading(this double heading, Humanizer.HeadingStyle style = 0, System.Globalization.CultureInfo? culture = null) { }\n        public static char ToHeadingArrow(this double heading) { }\n    }\n    public enum HeadingStyle\n    {\n        Abbreviated = 0,\n        Full = 1,\n    }\n    public interface ICollectionFormatter\n    {\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, System.Func<T, object?> objectFormatter);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, System.Func<T, string?> objectFormatter);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, string separator);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, System.Func<T, object?> objectFormatter, string separator);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, System.Func<T, string?> objectFormatter, string separator);\n    }\n    public interface ICulturedStringTransformer : Humanizer.IStringTransformer\n    {\n        string Transform(string input, System.Globalization.CultureInfo culture);\n    }\n    public interface IDateOnlyHumanizeStrategy\n    {\n        string Humanize(System.DateOnly input, System.DateOnly comparisonBase, System.Globalization.CultureInfo? culture);\n    }\n    public interface IDateOnlyToOrdinalWordConverter\n    {\n        string Convert(System.DateOnly date);\n        string Convert(System.DateOnly date, Humanizer.GrammaticalCase grammaticalCase);\n    }\n    public interface IDateTimeHumanizeStrategy\n    {\n        string Humanize(System.DateTime input, System.DateTime comparisonBase, System.Globalization.CultureInfo? culture);\n    }\n    public interface IDateTimeOffsetHumanizeStrategy\n    {\n        string Humanize(System.DateTimeOffset input, System.DateTimeOffset comparisonBase, System.Globalization.CultureInfo? culture);\n    }\n    public interface IDateToOrdinalWordConverter\n    {\n        string Convert(System.DateTime date);\n        string Convert(System.DateTime date, Humanizer.GrammaticalCase grammaticalCase);\n    }\n    public interface IFormatter\n    {\n        string DataUnitHumanize(Humanizer.DataUnit dataUnit, double count, bool toSymbol = true);\n        string DateHumanize(Humanizer.TimeUnit timeUnit, Humanizer.Tense timeUnitTense, int unit);\n        string DateHumanize_Never();\n        string DateHumanize_Now();\n        string TimeSpanHumanize(Humanizer.TimeUnit timeUnit, int unit, bool toWords = false);\n        string TimeSpanHumanize_Age();\n        string TimeSpanHumanize_Zero();\n        string TimeUnitHumanize(Humanizer.TimeUnit timeUnit);\n    }\n    public interface INumberToWordsConverter\n    {\n        string Convert(long number);\n        string Convert(long number, Humanizer.WordForm wordForm);\n        string Convert(long number, bool addAnd);\n        string Convert(long number, Humanizer.GrammaticalGender gender, bool addAnd = true);\n        string Convert(long number, bool addAnd, Humanizer.WordForm wordForm);\n        string Convert(long number, Humanizer.WordForm wordForm, Humanizer.GrammaticalGender gender, bool addAnd = true);\n        string ConvertToOrdinal(int number);\n        string ConvertToOrdinal(int number, Humanizer.GrammaticalGender gender);\n        string ConvertToOrdinal(int number, Humanizer.WordForm wordForm);\n        string ConvertToOrdinal(int number, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm);\n        string ConvertToTuple(int number);\n    }\n    public interface IOrdinalizer\n    {\n        string Convert(int number, string numberString);\n        string Convert(int number, string numberString, Humanizer.GrammaticalGender gender);\n        string Convert(int number, string numberString, Humanizer.WordForm wordForm);\n        string Convert(int number, string numberString, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm);\n    }\n    public interface IStringTransformer\n    {\n        string Transform(string input);\n    }\n    public interface ITimeOnlyHumanizeStrategy\n    {\n        string Humanize(System.TimeOnly input, System.TimeOnly comparisonBase, System.Globalization.CultureInfo? culture);\n    }\n    public interface ITimeOnlyToClockNotationConverter\n    {\n        string Convert(System.TimeOnly time, Humanizer.ClockNotationRounding roundToNearestFive);\n    }\n    public interface ITruncator\n    {\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"value\")]\n        string? Truncate(string? value, int length, string? truncationString, Humanizer.TruncateFrom truncateFrom = 1);\n    }\n    public interface IWordsToNumberConverter\n    {\n        int Convert(string words);\n        bool TryConvert(string words, out int parsedValue);\n        bool TryConvert(string words, out int parsedValue, out string? unrecognizedNumber);\n    }\n    public class In\n    {\n        public In() { }\n        public static System.DateTime April { get; }\n        public static System.DateTime August { get; }\n        public static System.DateTime December { get; }\n        public static System.DateTime February { get; }\n        public static System.DateTime January { get; }\n        public static System.DateTime July { get; }\n        public static System.DateTime June { get; }\n        public static System.DateTime March { get; }\n        public static System.DateTime May { get; }\n        public static System.DateTime November { get; }\n        public static System.DateTime October { get; }\n        public static System.DateTime September { get; }\n        public static System.DateTime AprilOf(int year) { }\n        public static System.DateTime AugustOf(int year) { }\n        public static System.DateTime DecemberOf(int year) { }\n        public static System.DateTime FebruaryOf(int year) { }\n        public static System.DateTime JanuaryOf(int year) { }\n        public static System.DateTime JulyOf(int year) { }\n        public static System.DateTime JuneOf(int year) { }\n        public static System.DateTime MarchOf(int year) { }\n        public static System.DateTime MayOf(int year) { }\n        public static System.DateTime NovemberOf(int year) { }\n        public static System.DateTime OctoberOf(int year) { }\n        public static System.DateTime SeptemberOf(int year) { }\n        public static System.DateTime TheYear(int year) { }\n        public static class Eight\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Five\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Four\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Nine\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class One\n        {\n            public static System.DateTime Day { get; }\n            public static System.DateTime Hour { get; }\n            public static System.DateTime Minute { get; }\n            public static System.DateTime Month { get; }\n            public static System.DateTime Second { get; }\n            public static System.DateTime Week { get; }\n            public static System.DateTime Year { get; }\n            public static System.DateTime DayFrom(System.DateTime date) { }\n            public static System.DateTime HourFrom(System.DateTime date) { }\n            public static System.DateTime MinuteFrom(System.DateTime date) { }\n            public static System.DateTime MonthFrom(System.DateTime date) { }\n            public static System.DateTime SecondFrom(System.DateTime date) { }\n            public static System.DateTime WeekFrom(System.DateTime date) { }\n            public static System.DateTime YearFrom(System.DateTime date) { }\n        }\n        public static class Seven\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Six\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Ten\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Three\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Two\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n    }\n    public class InDate\n    {\n        public InDate() { }\n        public static System.DateOnly April { get; }\n        public static System.DateOnly August { get; }\n        public static System.DateOnly December { get; }\n        public static System.DateOnly February { get; }\n        public static System.DateOnly January { get; }\n        public static System.DateOnly July { get; }\n        public static System.DateOnly June { get; }\n        public static System.DateOnly March { get; }\n        public static System.DateOnly May { get; }\n        public static System.DateOnly November { get; }\n        public static System.DateOnly October { get; }\n        public static System.DateOnly September { get; }\n        public static System.DateOnly AprilOf(int year) { }\n        public static System.DateOnly AugustOf(int year) { }\n        public static System.DateOnly DecemberOf(int year) { }\n        public static System.DateOnly FebruaryOf(int year) { }\n        public static System.DateOnly JanuaryOf(int year) { }\n        public static System.DateOnly JulyOf(int year) { }\n        public static System.DateOnly JuneOf(int year) { }\n        public static System.DateOnly MarchOf(int year) { }\n        public static System.DateOnly MayOf(int year) { }\n        public static System.DateOnly NovemberOf(int year) { }\n        public static System.DateOnly OctoberOf(int year) { }\n        public static System.DateOnly SeptemberOf(int year) { }\n        public static System.DateOnly TheYear(int year) { }\n        public static class Eight\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class Five\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class Four\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class Nine\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class One\n        {\n            public static System.DateOnly Day { get; }\n            public static System.DateOnly Month { get; }\n            public static System.DateOnly Week { get; }\n            public static System.DateOnly Year { get; }\n            public static System.DateOnly DayFrom(System.DateOnly date) { }\n            public static System.DateOnly DayFrom(System.DateTime date) { }\n            public static System.DateOnly MonthFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthFrom(System.DateTime date) { }\n            public static System.DateOnly WeekFrom(System.DateOnly date) { }\n            public static System.DateOnly WeekFrom(System.DateTime date) { }\n            public static System.DateOnly YearFrom(System.DateOnly date) { }\n            public static System.DateOnly YearFrom(System.DateTime date) { }\n        }\n        public static class Seven\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class Six\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class Ten\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class Three\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n        public static class Two\n        {\n            public static System.DateOnly Days { get; }\n            public static System.DateOnly Months { get; }\n            public static System.DateOnly Weeks { get; }\n            public static System.DateOnly Years { get; }\n            public static System.DateOnly DaysFrom(System.DateOnly date) { }\n            public static System.DateOnly DaysFrom(System.DateTime date) { }\n            public static System.DateOnly MonthsFrom(System.DateOnly date) { }\n            public static System.DateOnly MonthsFrom(System.DateTime date) { }\n            public static System.DateOnly WeeksFrom(System.DateOnly date) { }\n            public static System.DateOnly WeeksFrom(System.DateTime date) { }\n            public static System.DateOnly YearsFrom(System.DateOnly date) { }\n            public static System.DateOnly YearsFrom(System.DateTime date) { }\n        }\n    }\n    public static class InflectorExtensions\n    {\n        public static string Camelize(this string input) { }\n        public static string Dasherize(this string underscoredWord) { }\n        public static string Hyphenate(this string underscoredWord) { }\n        public static string Kebaberize(this string input) { }\n        public static string Pascalize(this string input) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"word\")]\n        public static string? Pluralize(this string? word, bool inputIsKnownToBeSingular = true) { }\n        public static string Singularize(this string word, bool inputIsKnownToBePlural = true, bool skipSimpleWords = false) { }\n        public static string Titleize(this string input) { }\n        public static string Underscore(this string input) { }\n    }\n    public enum LetterCasing\n    {\n        Title = 0,\n        AllCaps = 1,\n        LowerCase = 2,\n        Sentence = 3,\n    }\n    public class LocaliserRegistry<TLocaliser>\n        where TLocaliser :  class\n    {\n        public LocaliserRegistry(System.Func<System.Globalization.CultureInfo, TLocaliser> defaultLocaliser) { }\n        public LocaliserRegistry(TLocaliser defaultLocaliser) { }\n        public void Register(string localeCode, System.Func<System.Globalization.CultureInfo, TLocaliser> localiser) { }\n        public void Register(string localeCode, TLocaliser localiser) { }\n        public TLocaliser ResolveForCulture(System.Globalization.CultureInfo? culture) { }\n        public TLocaliser ResolveForUiCulture() { }\n    }\n    public static class MetricNumeralExtensions\n    {\n        public static double FromMetric(this string input) { }\n        public static string ToMetric(this double input, Humanizer.MetricNumeralFormats? formats = default, int? decimals = default) { }\n        public static string ToMetric(this int input, Humanizer.MetricNumeralFormats? formats = default, int? decimals = default) { }\n        public static string ToMetric(this long input, Humanizer.MetricNumeralFormats? formats = default, int? decimals = default) { }\n    }\n    [System.Flags]\n    public enum MetricNumeralFormats\n    {\n        UseLongScaleWord = 1,\n        UseName = 2,\n        UseShortScaleWord = 4,\n        WithSpace = 8,\n    }\n    public class NoMatchFoundException : System.Exception\n    {\n        public NoMatchFoundException() { }\n        public NoMatchFoundException(string message) { }\n        public NoMatchFoundException(string message, System.Exception inner) { }\n    }\n    public static class NumberToNumberExtensions\n    {\n        public static double Billions(this double input) { }\n        public static int Billions(this int input) { }\n        public static long Billions(this long input) { }\n        public static uint Billions(this uint input) { }\n        public static ulong Billions(this ulong input) { }\n        public static double Hundreds(this double input) { }\n        public static int Hundreds(this int input) { }\n        public static long Hundreds(this long input) { }\n        public static uint Hundreds(this uint input) { }\n        public static ulong Hundreds(this ulong input) { }\n        public static double Millions(this double input) { }\n        public static int Millions(this int input) { }\n        public static long Millions(this long input) { }\n        public static uint Millions(this uint input) { }\n        public static ulong Millions(this ulong input) { }\n        public static double Tens(this double input) { }\n        public static int Tens(this int input) { }\n        public static long Tens(this long input) { }\n        public static uint Tens(this uint input) { }\n        public static ulong Tens(this ulong input) { }\n        public static double Thousands(this double input) { }\n        public static int Thousands(this int input) { }\n        public static long Thousands(this long input) { }\n        public static uint Thousands(this uint input) { }\n        public static ulong Thousands(this ulong input) { }\n    }\n    public static class NumberToTimeSpanExtensions\n    {\n        public static System.TimeSpan Days(this byte days) { }\n        public static System.TimeSpan Days(this double days) { }\n        public static System.TimeSpan Days(this int days) { }\n        public static System.TimeSpan Days(this long days) { }\n        public static System.TimeSpan Days(this sbyte days) { }\n        public static System.TimeSpan Days(this short days) { }\n        public static System.TimeSpan Days(this uint days) { }\n        public static System.TimeSpan Days(this ulong days) { }\n        public static System.TimeSpan Days(this ushort days) { }\n        public static System.TimeSpan Hours(this byte hours) { }\n        public static System.TimeSpan Hours(this double hours) { }\n        public static System.TimeSpan Hours(this int hours) { }\n        public static System.TimeSpan Hours(this long hours) { }\n        public static System.TimeSpan Hours(this sbyte hours) { }\n        public static System.TimeSpan Hours(this short hours) { }\n        public static System.TimeSpan Hours(this uint hours) { }\n        public static System.TimeSpan Hours(this ulong hours) { }\n        public static System.TimeSpan Hours(this ushort hours) { }\n        public static System.TimeSpan Milliseconds(this byte ms) { }\n        public static System.TimeSpan Milliseconds(this double ms) { }\n        public static System.TimeSpan Milliseconds(this int ms) { }\n        public static System.TimeSpan Milliseconds(this long ms) { }\n        public static System.TimeSpan Milliseconds(this sbyte ms) { }\n        public static System.TimeSpan Milliseconds(this short ms) { }\n        public static System.TimeSpan Milliseconds(this uint ms) { }\n        public static System.TimeSpan Milliseconds(this ulong ms) { }\n        public static System.TimeSpan Milliseconds(this ushort ms) { }\n        public static System.TimeSpan Minutes(this byte minutes) { }\n        public static System.TimeSpan Minutes(this double minutes) { }\n        public static System.TimeSpan Minutes(this int minutes) { }\n        public static System.TimeSpan Minutes(this long minutes) { }\n        public static System.TimeSpan Minutes(this sbyte minutes) { }\n        public static System.TimeSpan Minutes(this short minutes) { }\n        public static System.TimeSpan Minutes(this uint minutes) { }\n        public static System.TimeSpan Minutes(this ulong minutes) { }\n        public static System.TimeSpan Minutes(this ushort minutes) { }\n        public static System.TimeSpan Seconds(this byte seconds) { }\n        public static System.TimeSpan Seconds(this double seconds) { }\n        public static System.TimeSpan Seconds(this int seconds) { }\n        public static System.TimeSpan Seconds(this long seconds) { }\n        public static System.TimeSpan Seconds(this sbyte seconds) { }\n        public static System.TimeSpan Seconds(this short seconds) { }\n        public static System.TimeSpan Seconds(this uint seconds) { }\n        public static System.TimeSpan Seconds(this ulong seconds) { }\n        public static System.TimeSpan Seconds(this ushort seconds) { }\n        public static System.TimeSpan Weeks(this byte input) { }\n        public static System.TimeSpan Weeks(this double input) { }\n        public static System.TimeSpan Weeks(this int input) { }\n        public static System.TimeSpan Weeks(this long input) { }\n        public static System.TimeSpan Weeks(this sbyte input) { }\n        public static System.TimeSpan Weeks(this short input) { }\n        public static System.TimeSpan Weeks(this uint input) { }\n        public static System.TimeSpan Weeks(this ulong input) { }\n        public static System.TimeSpan Weeks(this ushort input) { }\n    }\n    public static class NumberToWordsExtension\n    {\n        public static string ToOrdinalWords(this int number, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToOrdinalWords(this int number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToOrdinalWords(this int number, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToOrdinalWords(this int number, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToTuple(this int number, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, bool addAnd, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this long number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this long number, System.Globalization.CultureInfo? culture = null, bool addAnd = true) { }\n        public static string ToWords(this int number, Humanizer.WordForm wordForm, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, bool addAnd, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this long number, Humanizer.WordForm wordForm, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this long number, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null, bool addAnd = false) { }\n    }\n    public class On\n    {\n        public On() { }\n        public class April\n        {\n            public April() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class August\n        {\n            public August() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class December\n        {\n            public December() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class February\n        {\n            public February() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class January\n        {\n            public January() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class July\n        {\n            public July() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class June\n        {\n            public June() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class March\n        {\n            public March() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class May\n        {\n            public May() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class November\n        {\n            public November() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class October\n        {\n            public October() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class September\n        {\n            public September() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n    }\n    public class OnDate\n    {\n        public OnDate() { }\n        public class April\n        {\n            public April() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class August\n        {\n            public August() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The31st { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class December\n        {\n            public December() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The31st { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class February\n        {\n            public February() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class January\n        {\n            public January() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The31st { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class July\n        {\n            public July() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The31st { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class June\n        {\n            public June() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class March\n        {\n            public March() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The31st { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class May\n        {\n            public May() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The31st { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class November\n        {\n            public November() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class October\n        {\n            public October() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The31st { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n        public class September\n        {\n            public September() { }\n            public static System.DateOnly The10th { get; }\n            public static System.DateOnly The11th { get; }\n            public static System.DateOnly The12th { get; }\n            public static System.DateOnly The13th { get; }\n            public static System.DateOnly The14th { get; }\n            public static System.DateOnly The15th { get; }\n            public static System.DateOnly The16th { get; }\n            public static System.DateOnly The17th { get; }\n            public static System.DateOnly The18th { get; }\n            public static System.DateOnly The19th { get; }\n            public static System.DateOnly The1st { get; }\n            public static System.DateOnly The20th { get; }\n            public static System.DateOnly The21st { get; }\n            public static System.DateOnly The22nd { get; }\n            public static System.DateOnly The23rd { get; }\n            public static System.DateOnly The24th { get; }\n            public static System.DateOnly The25th { get; }\n            public static System.DateOnly The26th { get; }\n            public static System.DateOnly The27th { get; }\n            public static System.DateOnly The28th { get; }\n            public static System.DateOnly The29th { get; }\n            public static System.DateOnly The2nd { get; }\n            public static System.DateOnly The30th { get; }\n            public static System.DateOnly The3rd { get; }\n            public static System.DateOnly The4th { get; }\n            public static System.DateOnly The5th { get; }\n            public static System.DateOnly The6th { get; }\n            public static System.DateOnly The7th { get; }\n            public static System.DateOnly The8th { get; }\n            public static System.DateOnly The9th { get; }\n            public static System.DateOnly The(int dayNumber) { }\n        }\n    }\n    public enum OnNoMatch\n    {\n        ThrowsException = 0,\n        ReturnsNull = 1,\n    }\n    public static class OrdinalizeExtensions\n    {\n        public static string Ordinalize(this int number) { }\n        public static string Ordinalize(this string numberString) { }\n        public static string Ordinalize(this int number, Humanizer.GrammaticalGender gender) { }\n        public static string Ordinalize(this int number, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this int number, System.Globalization.CultureInfo culture) { }\n        public static string Ordinalize(this string numberString, Humanizer.GrammaticalGender gender) { }\n        public static string Ordinalize(this string numberString, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this string numberString, System.Globalization.CultureInfo culture) { }\n        public static string Ordinalize(this int number, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this int number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo culture) { }\n        public static string Ordinalize(this int number, System.Globalization.CultureInfo culture, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this string numberString, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this string numberString, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo culture) { }\n        public static string Ordinalize(this string numberString, System.Globalization.CultureInfo culture, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this int number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo culture, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this string numberString, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo culture, Humanizer.WordForm wordForm) { }\n    }\n    public enum Plurality\n    {\n        Singular = 0,\n        Plural = 1,\n        CouldBeEither = 2,\n    }\n    public class PrecisionDateOnlyHumanizeStrategy : Humanizer.IDateOnlyHumanizeStrategy\n    {\n        public PrecisionDateOnlyHumanizeStrategy(double precision = 0.75) { }\n        public string Humanize(System.DateOnly input, System.DateOnly comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class PrecisionDateTimeHumanizeStrategy : Humanizer.IDateTimeHumanizeStrategy\n    {\n        public PrecisionDateTimeHumanizeStrategy(double precision = 0.75) { }\n        public string Humanize(System.DateTime input, System.DateTime comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class PrecisionDateTimeOffsetHumanizeStrategy : Humanizer.IDateTimeOffsetHumanizeStrategy\n    {\n        public PrecisionDateTimeOffsetHumanizeStrategy(double precision = 0.75) { }\n        public string Humanize(System.DateTimeOffset input, System.DateTimeOffset comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class PrecisionTimeOnlyHumanizeStrategy : Humanizer.ITimeOnlyHumanizeStrategy\n    {\n        public PrecisionTimeOnlyHumanizeStrategy(double precision = 0.75) { }\n        public string Humanize(System.TimeOnly input, System.TimeOnly comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public static class PrepositionsExtensions\n    {\n        public static System.DateTime At(this System.DateTime date, int hour, int min = 0, int second = 0, int millisecond = 0) { }\n        public static System.DateTime AtMidnight(this System.DateTime date) { }\n        public static System.DateTime AtNoon(this System.DateTime date) { }\n        public static System.DateTime In(this System.DateTime date, int year) { }\n    }\n    public class ResourceKeys\n    {\n        public ResourceKeys() { }\n        public static class DateHumanize\n        {\n            public const string Never = \"DateHumanize_Never\";\n            public const string Now = \"DateHumanize_Now\";\n            public static string GetResourceKey(Humanizer.TimeUnit timeUnit, Humanizer.Tense timeUnitTense, int count = 1) { }\n        }\n        public static class TimeSpanHumanize\n        {\n            public static string GetResourceKey(Humanizer.TimeUnit unit, int count = 1, bool toWords = false) { }\n        }\n        public static class TimeUnitSymbol\n        {\n            public static string GetResourceKey(Humanizer.TimeUnit unit) { }\n        }\n    }\n    public static class Resources\n    {\n        public static string GetResource(string resourceKey, System.Globalization.CultureInfo? culture = null) { }\n        public static bool TryGetResource(string resourceKey, System.Globalization.CultureInfo? culture, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out string? result) { }\n    }\n    public static class RomanNumeralExtensions\n    {\n        public static int FromRoman(System.ReadOnlySpan<char> input) { }\n        public static int FromRoman(this string input) { }\n        public static string ToRoman(this int input) { }\n    }\n    public enum ShowQuantityAs\n    {\n        None = 0,\n        Numeric = 1,\n        Words = 2,\n    }\n    public static class StringDehumanizeExtensions\n    {\n        public static string Dehumanize(this string input) { }\n    }\n    public static class StringHumanizeExtensions\n    {\n        public static string Humanize(this string input) { }\n        public static string Humanize(this string input, Humanizer.LetterCasing casing) { }\n    }\n    public enum Tense\n    {\n        Future = 0,\n        Past = 1,\n    }\n    public static class TimeOnlyToClockNotationExtensions\n    {\n        public static string ToClockNotation(this System.TimeOnly input, Humanizer.ClockNotationRounding roundToNearestFive = 0) { }\n    }\n    public static class TimeSpanHumanizeExtensions\n    {\n        public static string Humanize(this System.TimeSpan timeSpan, int precision = 1, System.Globalization.CultureInfo? culture = null, Humanizer.TimeUnit maxUnit = 5, Humanizer.TimeUnit minUnit = 0, string? collectionSeparator = \", \", bool toWords = false) { }\n        public static string Humanize(this System.TimeSpan timeSpan, int precision, bool countEmptyUnits, System.Globalization.CultureInfo? culture = null, Humanizer.TimeUnit maxUnit = 5, Humanizer.TimeUnit minUnit = 0, string? collectionSeparator = \", \", bool toWords = false) { }\n        public static string ToAge(this System.TimeSpan timeSpan, System.Globalization.CultureInfo? culture = null, Humanizer.TimeUnit maxUnit = 7, bool toWords = false) { }\n    }\n    public enum TimeUnit\n    {\n        Millisecond = 0,\n        Second = 1,\n        Minute = 2,\n        Hour = 3,\n        Day = 4,\n        Week = 5,\n        Month = 6,\n        Year = 7,\n    }\n    public static class TimeUnitToSymbolExtensions\n    {\n        public static string ToSymbol(this Humanizer.TimeUnit unit, System.Globalization.CultureInfo? culture = null) { }\n    }\n    public static class To\n    {\n        public static Humanizer.ICulturedStringTransformer LowerCase { get; }\n        public static Humanizer.ICulturedStringTransformer SentenceCase { get; }\n        public static Humanizer.ICulturedStringTransformer TitleCase { get; }\n        public static Humanizer.ICulturedStringTransformer UpperCase { get; }\n        public static string Transform(this string input, params Humanizer.IStringTransformer[] transformers) { }\n        public static string Transform(this string input, System.Globalization.CultureInfo culture, params Humanizer.ICulturedStringTransformer[] transformers) { }\n    }\n    public static class ToQuantityExtensions\n    {\n        public static string ToQuantity(this string input, double quantity) { }\n        public static string ToQuantity(this string input, int quantity, Humanizer.ShowQuantityAs showQuantityAs = 1) { }\n        public static string ToQuantity(this string input, long quantity, Humanizer.ShowQuantityAs showQuantityAs = 1) { }\n        public static string ToQuantity(this string input, double quantity, string? format = null, System.IFormatProvider? formatProvider = null) { }\n        public static string ToQuantity(this string input, int quantity, string? format, System.IFormatProvider? formatProvider = null) { }\n        public static string ToQuantity(this string input, long quantity, string? format, System.IFormatProvider? formatProvider = null) { }\n    }\n    public static class TruncateExtensions\n    {\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"input\")]\n        public static string? Truncate(this string? input, int length) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"input\")]\n        public static string? Truncate(this string? input, int length, Humanizer.ITruncator truncator, Humanizer.TruncateFrom from = 1) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"input\")]\n        public static string? Truncate(this string? input, int length, string? truncationString, Humanizer.TruncateFrom from = 1) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"input\")]\n        public static string? Truncate(this string? input, int length, string? truncationString, Humanizer.ITruncator truncator, Humanizer.TruncateFrom from = 1) { }\n    }\n    public enum TruncateFrom\n    {\n        Left = 0,\n        Right = 1,\n    }\n    public static class Truncator\n    {\n        public static Humanizer.ITruncator DynamicLengthAndPreserveWords { get; }\n        public static Humanizer.ITruncator DynamicNumberOfCharactersAndPreserveWords { get; }\n        public static Humanizer.ITruncator FixedLength { get; }\n        public static Humanizer.ITruncator FixedNumberOfCharacters { get; }\n        public static Humanizer.ITruncator FixedNumberOfWords { get; }\n    }\n    public static class TupleizeExtensions\n    {\n        public static string Tupleize(this int input) { }\n    }\n    public static class Vocabularies\n    {\n        public static Humanizer.Vocabulary Default { get; }\n    }\n    public class Vocabulary\n    {\n        public void AddIrregular(string singular, string plural, bool matchEnding = true) { }\n        public void AddPlural(string rule, string replacement) { }\n        public void AddSingular(string rule, string replacement) { }\n        public void AddUncountable(string word) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"word\")]\n        public string? Pluralize(string? word, bool inputIsKnownToBeSingular = true) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"word\")]\n        public string? Singularize(string? word, bool inputIsKnownToBePlural = true, bool skipSimpleWords = false) { }\n    }\n    public enum WordForm\n    {\n        Normal = 0,\n        Abbreviation = 1,\n        Eifeler = 2,\n    }\n    public static class WordsToNumberExtension\n    {\n        public static int ToNumber(this string words, System.Globalization.CultureInfo culture) { }\n        public static bool TryToNumber(this string words, out int parsedNumber, System.Globalization.CultureInfo culture) { }\n        public static bool TryToNumber(this string words, out int parsedNumber, System.Globalization.CultureInfo culture, out string? unrecognizedWord) { }\n    }\n}\n"
  },
  {
    "path": "tests/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.Approve_Public_Api.Net4_8.verified.txt",
    "content": "﻿[assembly: System.Resources.NeutralResourcesLanguage(\"en\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETFramework,Version=v4.8\", FrameworkDisplayName=\".NET Framework 4.8\")]\nnamespace Humanizer\n{\n    public class ByteRate\n    {\n        public ByteRate(Humanizer.ByteSize size, System.TimeSpan interval) { }\n        public System.TimeSpan Interval { get; }\n        public Humanizer.ByteSize Size { get; }\n        public string Humanize(Humanizer.TimeUnit timeUnit = 1) { }\n        public string Humanize(string? format, Humanizer.TimeUnit timeUnit = 1, System.Globalization.CultureInfo? culture = null) { }\n    }\n    public struct ByteSize : System.IComparable, System.IComparable<Humanizer.ByteSize>, System.IEquatable<Humanizer.ByteSize>, System.IFormattable\n    {\n        public const string Bit = \"bit\";\n        public const string BitSymbol = \"b\";\n        public const long BitsInByte = 8;\n        public const string Byte = \"byte\";\n        public const string ByteSymbol = \"B\";\n        public const long BytesInGigabyte = 1073741824;\n        public const long BytesInKilobyte = 1024;\n        public const long BytesInMegabyte = 1048576;\n        public const long BytesInTerabyte = 1099511627776;\n        public const string Gigabyte = \"gigabyte\";\n        public const string GigabyteSymbol = \"GB\";\n        public const string Kilobyte = \"kilobyte\";\n        public const string KilobyteSymbol = \"KB\";\n        public const string Megabyte = \"megabyte\";\n        public const string MegabyteSymbol = \"MB\";\n        public const string Terabyte = \"terabyte\";\n        public const string TerabyteSymbol = \"TB\";\n        public static readonly Humanizer.ByteSize MaxValue;\n        public static readonly Humanizer.ByteSize MinValue;\n        public ByteSize(double byteSize) { }\n        public long Bits { get; }\n        public double Bytes { get; }\n        public double Gigabytes { get; }\n        public double Kilobytes { get; }\n        public string LargestWholeNumberFullWord { get; }\n        public string LargestWholeNumberSymbol { get; }\n        public double LargestWholeNumberValue { get; }\n        public double Megabytes { get; }\n        public double Terabytes { get; }\n        public Humanizer.ByteSize Add(Humanizer.ByteSize bs) { }\n        public Humanizer.ByteSize AddBits(long value) { }\n        public Humanizer.ByteSize AddBytes(double value) { }\n        public Humanizer.ByteSize AddGigabytes(double value) { }\n        public Humanizer.ByteSize AddKilobytes(double value) { }\n        public Humanizer.ByteSize AddMegabytes(double value) { }\n        public Humanizer.ByteSize AddTerabytes(double value) { }\n        public int CompareTo(Humanizer.ByteSize other) { }\n        public int CompareTo(object? obj) { }\n        public bool Equals(Humanizer.ByteSize value) { }\n        public override bool Equals(object? value) { }\n        public override int GetHashCode() { }\n        public string GetLargestWholeNumberFullWord(System.IFormatProvider? provider = null) { }\n        public string GetLargestWholeNumberSymbol(System.IFormatProvider? provider = null) { }\n        public Humanizer.ByteSize Subtract(Humanizer.ByteSize bs) { }\n        public string ToFullWords(string? format = null, System.IFormatProvider? provider = null) { }\n        public override string ToString() { }\n        public string ToString(System.IFormatProvider? provider) { }\n        public string ToString(string? format) { }\n        public string ToString(string? format, System.IFormatProvider? provider) { }\n        public static Humanizer.ByteSize FromBits(long value) { }\n        public static Humanizer.ByteSize FromBytes(double value) { }\n        public static Humanizer.ByteSize FromGigabytes(double value) { }\n        public static Humanizer.ByteSize FromKilobytes(double value) { }\n        public static Humanizer.ByteSize FromMegabytes(double value) { }\n        public static Humanizer.ByteSize FromTerabytes(double value) { }\n        public static Humanizer.ByteSize Parse(string s) { }\n        public static Humanizer.ByteSize Parse(string s, System.IFormatProvider? formatProvider) { }\n        public static bool TryParse(System.ReadOnlySpan<char> s, out Humanizer.ByteSize result) { }\n        public static bool TryParse(string? s, out Humanizer.ByteSize result) { }\n        public static bool TryParse(System.ReadOnlySpan<char> s, System.IFormatProvider? formatProvider, out Humanizer.ByteSize result) { }\n        public static bool TryParse(string? s, System.IFormatProvider? formatProvider, out Humanizer.ByteSize result) { }\n        public static bool operator !=(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static Humanizer.ByteSize operator +(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static Humanizer.ByteSize operator ++(Humanizer.ByteSize b) { }\n        public static Humanizer.ByteSize operator -(Humanizer.ByteSize b) { }\n        public static Humanizer.ByteSize operator -(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static Humanizer.ByteSize operator --(Humanizer.ByteSize b) { }\n        public static bool operator <(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static bool operator <=(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static bool operator ==(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static bool operator >(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n        public static bool operator >=(Humanizer.ByteSize b1, Humanizer.ByteSize b2) { }\n    }\n    public static class ByteSizeExtensions\n    {\n        public static Humanizer.ByteSize Bits(this byte input) { }\n        public static Humanizer.ByteSize Bits(this int input) { }\n        public static Humanizer.ByteSize Bits(this long input) { }\n        public static Humanizer.ByteSize Bits(this sbyte input) { }\n        public static Humanizer.ByteSize Bits(this short input) { }\n        public static Humanizer.ByteSize Bits(this uint input) { }\n        public static Humanizer.ByteSize Bits(this ushort input) { }\n        public static Humanizer.ByteSize Bytes(this byte input) { }\n        public static Humanizer.ByteSize Bytes(this double input) { }\n        public static Humanizer.ByteSize Bytes(this int input) { }\n        public static Humanizer.ByteSize Bytes(this long input) { }\n        public static Humanizer.ByteSize Bytes(this sbyte input) { }\n        public static Humanizer.ByteSize Bytes(this short input) { }\n        public static Humanizer.ByteSize Bytes(this uint input) { }\n        public static Humanizer.ByteSize Bytes(this ushort input) { }\n        public static Humanizer.ByteSize Gigabytes(this byte input) { }\n        public static Humanizer.ByteSize Gigabytes(this double input) { }\n        public static Humanizer.ByteSize Gigabytes(this int input) { }\n        public static Humanizer.ByteSize Gigabytes(this long input) { }\n        public static Humanizer.ByteSize Gigabytes(this sbyte input) { }\n        public static Humanizer.ByteSize Gigabytes(this short input) { }\n        public static Humanizer.ByteSize Gigabytes(this uint input) { }\n        public static Humanizer.ByteSize Gigabytes(this ushort input) { }\n        public static string Humanize(this Humanizer.ByteSize input, System.IFormatProvider formatProvider) { }\n        public static string Humanize(this Humanizer.ByteSize input, string? format = null) { }\n        public static string Humanize(this Humanizer.ByteSize input, string? format, System.IFormatProvider? formatProvider) { }\n        public static Humanizer.ByteSize Kilobytes(this byte input) { }\n        public static Humanizer.ByteSize Kilobytes(this double input) { }\n        public static Humanizer.ByteSize Kilobytes(this int input) { }\n        public static Humanizer.ByteSize Kilobytes(this long input) { }\n        public static Humanizer.ByteSize Kilobytes(this sbyte input) { }\n        public static Humanizer.ByteSize Kilobytes(this short input) { }\n        public static Humanizer.ByteSize Kilobytes(this uint input) { }\n        public static Humanizer.ByteSize Kilobytes(this ushort input) { }\n        public static Humanizer.ByteSize Megabytes(this byte input) { }\n        public static Humanizer.ByteSize Megabytes(this double input) { }\n        public static Humanizer.ByteSize Megabytes(this int input) { }\n        public static Humanizer.ByteSize Megabytes(this long input) { }\n        public static Humanizer.ByteSize Megabytes(this sbyte input) { }\n        public static Humanizer.ByteSize Megabytes(this short input) { }\n        public static Humanizer.ByteSize Megabytes(this uint input) { }\n        public static Humanizer.ByteSize Megabytes(this ushort input) { }\n        public static Humanizer.ByteRate Per(this Humanizer.ByteSize size, System.TimeSpan interval) { }\n        public static Humanizer.ByteSize Terabytes(this byte input) { }\n        public static Humanizer.ByteSize Terabytes(this double input) { }\n        public static Humanizer.ByteSize Terabytes(this int input) { }\n        public static Humanizer.ByteSize Terabytes(this long input) { }\n        public static Humanizer.ByteSize Terabytes(this sbyte input) { }\n        public static Humanizer.ByteSize Terabytes(this short input) { }\n        public static Humanizer.ByteSize Terabytes(this uint input) { }\n        public static Humanizer.ByteSize Terabytes(this ushort input) { }\n    }\n    public static class CasingExtensions\n    {\n        public static string ApplyCase(this string input, Humanizer.LetterCasing casing) { }\n    }\n    public enum ClockNotationRounding\n    {\n        None = 0,\n        NearestFiveMinutes = 1,\n    }\n    public static class CollectionHumanizeExtensions\n    {\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, System.Func<T, object> displayFormatter) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, System.Func<T, string> displayFormatter) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, string separator) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, System.Func<T, object> displayFormatter, string separator) { }\n        public static string Humanize<T>(this System.Collections.Generic.IEnumerable<T> collection, System.Func<T, string> displayFormatter, string separator) { }\n    }\n    public static class Configurator\n    {\n        public static Humanizer.LocaliserRegistry<Humanizer.ICollectionFormatter> CollectionFormatters { get; }\n        public static Humanizer.IDateTimeHumanizeStrategy DateTimeHumanizeStrategy { get; set; }\n        public static Humanizer.IDateTimeOffsetHumanizeStrategy DateTimeOffsetHumanizeStrategy { get; set; }\n        public static Humanizer.LocaliserRegistry<Humanizer.IDateToOrdinalWordConverter> DateToOrdinalWordsConverters { get; }\n        public static Humanizer.LocaliserRegistry<Humanizer.IFormatter> Formatters { get; }\n        public static Humanizer.LocaliserRegistry<Humanizer.INumberToWordsConverter> NumberToWordsConverters { get; }\n        public static Humanizer.LocaliserRegistry<Humanizer.IOrdinalizer> Ordinalizers { get; }\n        public static void UseEnumDescriptionPropertyLocator(System.Func<System.Reflection.PropertyInfo, bool> func) { }\n    }\n    public enum DataUnit\n    {\n        Bit = 0,\n        Byte = 1,\n        Kilobyte = 2,\n        Megabyte = 3,\n        Gigabyte = 4,\n        Terabyte = 5,\n    }\n    public static class DateHumanizeExtensions\n    {\n        public static string Humanize(this System.DateTimeOffset input, System.DateTimeOffset? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.DateTimeOffset? input, System.DateTimeOffset? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.DateTime input, bool? utcDate = default, System.DateTime? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n        public static string Humanize(this System.DateTime? input, bool? utcDate = default, System.DateTime? dateToCompareAgainst = default, System.Globalization.CultureInfo? culture = null) { }\n    }\n    public static class DateToOrdinalWordsExtensions\n    {\n        public static string ToOrdinalWords(this System.DateTime input) { }\n        public static string ToOrdinalWords(this System.DateTime input, Humanizer.GrammaticalCase grammaticalCase) { }\n    }\n    public class DefaultDateTimeHumanizeStrategy : Humanizer.IDateTimeHumanizeStrategy\n    {\n        public DefaultDateTimeHumanizeStrategy() { }\n        public string Humanize(System.DateTime input, System.DateTime comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class DefaultDateTimeOffsetHumanizeStrategy : Humanizer.IDateTimeOffsetHumanizeStrategy\n    {\n        public DefaultDateTimeOffsetHumanizeStrategy() { }\n        public string Humanize(System.DateTimeOffset input, System.DateTimeOffset comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class DefaultFormatter : Humanizer.IFormatter\n    {\n        public DefaultFormatter(System.Globalization.CultureInfo culture) { }\n        public DefaultFormatter(string localeCode) { }\n        protected System.Globalization.CultureInfo Culture { get; }\n        public virtual string DataUnitHumanize(Humanizer.DataUnit dataUnit, double count, bool toSymbol = true) { }\n        public virtual string DateHumanize(Humanizer.TimeUnit timeUnit, Humanizer.Tense timeUnitTense, int unit) { }\n        public virtual string DateHumanize_Never() { }\n        public virtual string DateHumanize_Now() { }\n        protected virtual string Format(string resourceKey) { }\n        protected virtual string Format(Humanizer.TimeUnit unit, string resourceKey, int number, bool toWords = false) { }\n        protected virtual string GetResourceKey(string resourceKey) { }\n        protected virtual string GetResourceKey(string resourceKey, int number) { }\n        protected virtual string NumberToWords(Humanizer.TimeUnit unit, int number, System.Globalization.CultureInfo culture) { }\n        public virtual string TimeSpanHumanize(Humanizer.TimeUnit timeUnit, int unit, bool toWords = false) { }\n        public virtual string TimeSpanHumanize_Age() { }\n        public virtual string TimeSpanHumanize_Zero() { }\n        public virtual string TimeUnitHumanize(Humanizer.TimeUnit timeUnit) { }\n    }\n    public class DynamicNumberOfCharactersAndPreserveWordsTruncator : Humanizer.ITruncator\n    {\n        public DynamicNumberOfCharactersAndPreserveWordsTruncator() { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"value\")]\n        public string? Truncate(string? value, int totalLength, string? delimiter, Humanizer.TruncateFrom truncateFrom = 1) { }\n    }\n    public static class EnglishArticle\n    {\n        public static string[] AppendArticlePrefix(string[] items) { }\n        public static string[] PrependArticleSuffix(string[] appended) { }\n    }\n    public static class EnumDehumanizeExtensions\n    {\n        public static System.Enum DehumanizeTo(this string input, System.Type targetEnum, Humanizer.OnNoMatch onNoMatch = 0) { }\n        public static TTargetEnum DehumanizeTo<TTargetEnum>(this string input)\n            where TTargetEnum :  struct, System.Enum { }\n        public static TTargetEnum? DehumanizeTo<TTargetEnum>(this string input, Humanizer.OnNoMatch onNoMatch = 0)\n            where TTargetEnum :  struct, System.Enum { }\n    }\n    public static class EnumHumanizeExtensions\n    {\n        public static string Humanize<T>(this T input)\n            where T :  struct, System.Enum { }\n        public static string Humanize<T>(this T input, Humanizer.LetterCasing casing)\n            where T :  struct, System.Enum { }\n    }\n    public enum GrammaticalCase\n    {\n        Nominative = 0,\n        Genitive = 1,\n        Dative = 2,\n        Accusative = 3,\n        Instrumental = 4,\n        Prepositional = 5,\n    }\n    public enum GrammaticalGender\n    {\n        Masculine = 0,\n        Feminine = 1,\n        Neuter = 2,\n    }\n    public static class HeadingExtensions\n    {\n        public static double FromAbbreviatedHeading(this string heading) { }\n        public static double FromAbbreviatedHeading(this string heading, System.Globalization.CultureInfo? culture = null) { }\n        public static double FromHeadingArrow(this char heading) { }\n        public static double FromHeadingArrow(this string heading) { }\n        public static string ToHeading(this double heading, Humanizer.HeadingStyle style = 0, System.Globalization.CultureInfo? culture = null) { }\n        public static char ToHeadingArrow(this double heading) { }\n    }\n    public enum HeadingStyle\n    {\n        Abbreviated = 0,\n        Full = 1,\n    }\n    public interface ICollectionFormatter\n    {\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, System.Func<T, object?> objectFormatter);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, System.Func<T, string?> objectFormatter);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, string separator);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, System.Func<T, object?> objectFormatter, string separator);\n        string Humanize<T>(System.Collections.Generic.IEnumerable<T> collection, System.Func<T, string?> objectFormatter, string separator);\n    }\n    public interface ICulturedStringTransformer : Humanizer.IStringTransformer\n    {\n        string Transform(string input, System.Globalization.CultureInfo culture);\n    }\n    public interface IDateTimeHumanizeStrategy\n    {\n        string Humanize(System.DateTime input, System.DateTime comparisonBase, System.Globalization.CultureInfo? culture);\n    }\n    public interface IDateTimeOffsetHumanizeStrategy\n    {\n        string Humanize(System.DateTimeOffset input, System.DateTimeOffset comparisonBase, System.Globalization.CultureInfo? culture);\n    }\n    public interface IDateToOrdinalWordConverter\n    {\n        string Convert(System.DateTime date);\n        string Convert(System.DateTime date, Humanizer.GrammaticalCase grammaticalCase);\n    }\n    public interface IFormatter\n    {\n        string DataUnitHumanize(Humanizer.DataUnit dataUnit, double count, bool toSymbol = true);\n        string DateHumanize(Humanizer.TimeUnit timeUnit, Humanizer.Tense timeUnitTense, int unit);\n        string DateHumanize_Never();\n        string DateHumanize_Now();\n        string TimeSpanHumanize(Humanizer.TimeUnit timeUnit, int unit, bool toWords = false);\n        string TimeSpanHumanize_Age();\n        string TimeSpanHumanize_Zero();\n        string TimeUnitHumanize(Humanizer.TimeUnit timeUnit);\n    }\n    public interface INumberToWordsConverter\n    {\n        string Convert(long number);\n        string Convert(long number, Humanizer.WordForm wordForm);\n        string Convert(long number, bool addAnd);\n        string Convert(long number, Humanizer.GrammaticalGender gender, bool addAnd = true);\n        string Convert(long number, bool addAnd, Humanizer.WordForm wordForm);\n        string Convert(long number, Humanizer.WordForm wordForm, Humanizer.GrammaticalGender gender, bool addAnd = true);\n        string ConvertToOrdinal(int number);\n        string ConvertToOrdinal(int number, Humanizer.GrammaticalGender gender);\n        string ConvertToOrdinal(int number, Humanizer.WordForm wordForm);\n        string ConvertToOrdinal(int number, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm);\n        string ConvertToTuple(int number);\n    }\n    public interface IOrdinalizer\n    {\n        string Convert(int number, string numberString);\n        string Convert(int number, string numberString, Humanizer.GrammaticalGender gender);\n        string Convert(int number, string numberString, Humanizer.WordForm wordForm);\n        string Convert(int number, string numberString, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm);\n    }\n    public interface IStringTransformer\n    {\n        string Transform(string input);\n    }\n    public interface ITruncator\n    {\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"value\")]\n        string? Truncate(string? value, int length, string? truncationString, Humanizer.TruncateFrom truncateFrom = 1);\n    }\n    public interface IWordsToNumberConverter\n    {\n        int Convert(string words);\n        bool TryConvert(string words, out int parsedValue);\n        bool TryConvert(string words, out int parsedValue, out string? unrecognizedNumber);\n    }\n    public class In\n    {\n        public In() { }\n        public static System.DateTime April { get; }\n        public static System.DateTime August { get; }\n        public static System.DateTime December { get; }\n        public static System.DateTime February { get; }\n        public static System.DateTime January { get; }\n        public static System.DateTime July { get; }\n        public static System.DateTime June { get; }\n        public static System.DateTime March { get; }\n        public static System.DateTime May { get; }\n        public static System.DateTime November { get; }\n        public static System.DateTime October { get; }\n        public static System.DateTime September { get; }\n        public static System.DateTime AprilOf(int year) { }\n        public static System.DateTime AugustOf(int year) { }\n        public static System.DateTime DecemberOf(int year) { }\n        public static System.DateTime FebruaryOf(int year) { }\n        public static System.DateTime JanuaryOf(int year) { }\n        public static System.DateTime JulyOf(int year) { }\n        public static System.DateTime JuneOf(int year) { }\n        public static System.DateTime MarchOf(int year) { }\n        public static System.DateTime MayOf(int year) { }\n        public static System.DateTime NovemberOf(int year) { }\n        public static System.DateTime OctoberOf(int year) { }\n        public static System.DateTime SeptemberOf(int year) { }\n        public static System.DateTime TheYear(int year) { }\n        public static class Eight\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Five\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Four\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Nine\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class One\n        {\n            public static System.DateTime Day { get; }\n            public static System.DateTime Hour { get; }\n            public static System.DateTime Minute { get; }\n            public static System.DateTime Month { get; }\n            public static System.DateTime Second { get; }\n            public static System.DateTime Week { get; }\n            public static System.DateTime Year { get; }\n            public static System.DateTime DayFrom(System.DateTime date) { }\n            public static System.DateTime HourFrom(System.DateTime date) { }\n            public static System.DateTime MinuteFrom(System.DateTime date) { }\n            public static System.DateTime MonthFrom(System.DateTime date) { }\n            public static System.DateTime SecondFrom(System.DateTime date) { }\n            public static System.DateTime WeekFrom(System.DateTime date) { }\n            public static System.DateTime YearFrom(System.DateTime date) { }\n        }\n        public static class Seven\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Six\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Ten\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Three\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n        public static class Two\n        {\n            public static System.DateTime Days { get; }\n            public static System.DateTime Hours { get; }\n            public static System.DateTime Minutes { get; }\n            public static System.DateTime Months { get; }\n            public static System.DateTime Seconds { get; }\n            public static System.DateTime Weeks { get; }\n            public static System.DateTime Years { get; }\n            public static System.DateTime DaysFrom(System.DateTime date) { }\n            public static System.DateTime HoursFrom(System.DateTime date) { }\n            public static System.DateTime MinutesFrom(System.DateTime date) { }\n            public static System.DateTime MonthsFrom(System.DateTime date) { }\n            public static System.DateTime SecondsFrom(System.DateTime date) { }\n            public static System.DateTime WeeksFrom(System.DateTime date) { }\n            public static System.DateTime YearsFrom(System.DateTime date) { }\n        }\n    }\n    public static class InflectorExtensions\n    {\n        public static string Camelize(this string input) { }\n        public static string Dasherize(this string underscoredWord) { }\n        public static string Hyphenate(this string underscoredWord) { }\n        public static string Kebaberize(this string input) { }\n        public static string Pascalize(this string input) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"word\")]\n        public static string? Pluralize(this string? word, bool inputIsKnownToBeSingular = true) { }\n        public static string Singularize(this string word, bool inputIsKnownToBePlural = true, bool skipSimpleWords = false) { }\n        public static string Titleize(this string input) { }\n        public static string Underscore(this string input) { }\n    }\n    public enum LetterCasing\n    {\n        Title = 0,\n        AllCaps = 1,\n        LowerCase = 2,\n        Sentence = 3,\n    }\n    public class LocaliserRegistry<TLocaliser>\n        where TLocaliser :  class\n    {\n        public LocaliserRegistry(System.Func<System.Globalization.CultureInfo, TLocaliser> defaultLocaliser) { }\n        public LocaliserRegistry(TLocaliser defaultLocaliser) { }\n        public void Register(string localeCode, System.Func<System.Globalization.CultureInfo, TLocaliser> localiser) { }\n        public void Register(string localeCode, TLocaliser localiser) { }\n        public TLocaliser ResolveForCulture(System.Globalization.CultureInfo? culture) { }\n        public TLocaliser ResolveForUiCulture() { }\n    }\n    public static class MetricNumeralExtensions\n    {\n        public static double FromMetric(this string input) { }\n        public static string ToMetric(this double input, Humanizer.MetricNumeralFormats? formats = default, int? decimals = default) { }\n        public static string ToMetric(this int input, Humanizer.MetricNumeralFormats? formats = default, int? decimals = default) { }\n        public static string ToMetric(this long input, Humanizer.MetricNumeralFormats? formats = default, int? decimals = default) { }\n    }\n    [System.Flags]\n    public enum MetricNumeralFormats\n    {\n        UseLongScaleWord = 1,\n        UseName = 2,\n        UseShortScaleWord = 4,\n        WithSpace = 8,\n    }\n    public class NoMatchFoundException : System.Exception\n    {\n        public NoMatchFoundException() { }\n        public NoMatchFoundException(string message) { }\n        public NoMatchFoundException(string message, System.Exception inner) { }\n    }\n    public static class NumberToNumberExtensions\n    {\n        public static double Billions(this double input) { }\n        public static int Billions(this int input) { }\n        public static long Billions(this long input) { }\n        public static uint Billions(this uint input) { }\n        public static ulong Billions(this ulong input) { }\n        public static double Hundreds(this double input) { }\n        public static int Hundreds(this int input) { }\n        public static long Hundreds(this long input) { }\n        public static uint Hundreds(this uint input) { }\n        public static ulong Hundreds(this ulong input) { }\n        public static double Millions(this double input) { }\n        public static int Millions(this int input) { }\n        public static long Millions(this long input) { }\n        public static uint Millions(this uint input) { }\n        public static ulong Millions(this ulong input) { }\n        public static double Tens(this double input) { }\n        public static int Tens(this int input) { }\n        public static long Tens(this long input) { }\n        public static uint Tens(this uint input) { }\n        public static ulong Tens(this ulong input) { }\n        public static double Thousands(this double input) { }\n        public static int Thousands(this int input) { }\n        public static long Thousands(this long input) { }\n        public static uint Thousands(this uint input) { }\n        public static ulong Thousands(this ulong input) { }\n    }\n    public static class NumberToTimeSpanExtensions\n    {\n        public static System.TimeSpan Days(this byte days) { }\n        public static System.TimeSpan Days(this double days) { }\n        public static System.TimeSpan Days(this int days) { }\n        public static System.TimeSpan Days(this long days) { }\n        public static System.TimeSpan Days(this sbyte days) { }\n        public static System.TimeSpan Days(this short days) { }\n        public static System.TimeSpan Days(this uint days) { }\n        public static System.TimeSpan Days(this ulong days) { }\n        public static System.TimeSpan Days(this ushort days) { }\n        public static System.TimeSpan Hours(this byte hours) { }\n        public static System.TimeSpan Hours(this double hours) { }\n        public static System.TimeSpan Hours(this int hours) { }\n        public static System.TimeSpan Hours(this long hours) { }\n        public static System.TimeSpan Hours(this sbyte hours) { }\n        public static System.TimeSpan Hours(this short hours) { }\n        public static System.TimeSpan Hours(this uint hours) { }\n        public static System.TimeSpan Hours(this ulong hours) { }\n        public static System.TimeSpan Hours(this ushort hours) { }\n        public static System.TimeSpan Milliseconds(this byte ms) { }\n        public static System.TimeSpan Milliseconds(this double ms) { }\n        public static System.TimeSpan Milliseconds(this int ms) { }\n        public static System.TimeSpan Milliseconds(this long ms) { }\n        public static System.TimeSpan Milliseconds(this sbyte ms) { }\n        public static System.TimeSpan Milliseconds(this short ms) { }\n        public static System.TimeSpan Milliseconds(this uint ms) { }\n        public static System.TimeSpan Milliseconds(this ulong ms) { }\n        public static System.TimeSpan Milliseconds(this ushort ms) { }\n        public static System.TimeSpan Minutes(this byte minutes) { }\n        public static System.TimeSpan Minutes(this double minutes) { }\n        public static System.TimeSpan Minutes(this int minutes) { }\n        public static System.TimeSpan Minutes(this long minutes) { }\n        public static System.TimeSpan Minutes(this sbyte minutes) { }\n        public static System.TimeSpan Minutes(this short minutes) { }\n        public static System.TimeSpan Minutes(this uint minutes) { }\n        public static System.TimeSpan Minutes(this ulong minutes) { }\n        public static System.TimeSpan Minutes(this ushort minutes) { }\n        public static System.TimeSpan Seconds(this byte seconds) { }\n        public static System.TimeSpan Seconds(this double seconds) { }\n        public static System.TimeSpan Seconds(this int seconds) { }\n        public static System.TimeSpan Seconds(this long seconds) { }\n        public static System.TimeSpan Seconds(this sbyte seconds) { }\n        public static System.TimeSpan Seconds(this short seconds) { }\n        public static System.TimeSpan Seconds(this uint seconds) { }\n        public static System.TimeSpan Seconds(this ulong seconds) { }\n        public static System.TimeSpan Seconds(this ushort seconds) { }\n        public static System.TimeSpan Weeks(this byte input) { }\n        public static System.TimeSpan Weeks(this double input) { }\n        public static System.TimeSpan Weeks(this int input) { }\n        public static System.TimeSpan Weeks(this long input) { }\n        public static System.TimeSpan Weeks(this sbyte input) { }\n        public static System.TimeSpan Weeks(this short input) { }\n        public static System.TimeSpan Weeks(this uint input) { }\n        public static System.TimeSpan Weeks(this ulong input) { }\n        public static System.TimeSpan Weeks(this ushort input) { }\n    }\n    public static class NumberToWordsExtension\n    {\n        public static string ToOrdinalWords(this int number, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToOrdinalWords(this int number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToOrdinalWords(this int number, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToOrdinalWords(this int number, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToTuple(this int number, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, bool addAnd, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this long number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this long number, System.Globalization.CultureInfo? culture = null, bool addAnd = true) { }\n        public static string ToWords(this int number, Humanizer.WordForm wordForm, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this int number, bool addAnd, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this long number, Humanizer.WordForm wordForm, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo? culture = null) { }\n        public static string ToWords(this long number, Humanizer.WordForm wordForm, System.Globalization.CultureInfo? culture = null, bool addAnd = false) { }\n    }\n    public class On\n    {\n        public On() { }\n        public class April\n        {\n            public April() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class August\n        {\n            public August() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class December\n        {\n            public December() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class February\n        {\n            public February() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class January\n        {\n            public January() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class July\n        {\n            public July() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class June\n        {\n            public June() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class March\n        {\n            public March() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class May\n        {\n            public May() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class November\n        {\n            public November() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class October\n        {\n            public October() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The31st { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n        public class September\n        {\n            public September() { }\n            public static System.DateTime The10th { get; }\n            public static System.DateTime The11th { get; }\n            public static System.DateTime The12th { get; }\n            public static System.DateTime The13th { get; }\n            public static System.DateTime The14th { get; }\n            public static System.DateTime The15th { get; }\n            public static System.DateTime The16th { get; }\n            public static System.DateTime The17th { get; }\n            public static System.DateTime The18th { get; }\n            public static System.DateTime The19th { get; }\n            public static System.DateTime The1st { get; }\n            public static System.DateTime The20th { get; }\n            public static System.DateTime The21st { get; }\n            public static System.DateTime The22nd { get; }\n            public static System.DateTime The23rd { get; }\n            public static System.DateTime The24th { get; }\n            public static System.DateTime The25th { get; }\n            public static System.DateTime The26th { get; }\n            public static System.DateTime The27th { get; }\n            public static System.DateTime The28th { get; }\n            public static System.DateTime The29th { get; }\n            public static System.DateTime The2nd { get; }\n            public static System.DateTime The30th { get; }\n            public static System.DateTime The3rd { get; }\n            public static System.DateTime The4th { get; }\n            public static System.DateTime The5th { get; }\n            public static System.DateTime The6th { get; }\n            public static System.DateTime The7th { get; }\n            public static System.DateTime The8th { get; }\n            public static System.DateTime The9th { get; }\n            public static System.DateTime The(int dayNumber) { }\n        }\n    }\n    public enum OnNoMatch\n    {\n        ThrowsException = 0,\n        ReturnsNull = 1,\n    }\n    public static class OrdinalizeExtensions\n    {\n        public static string Ordinalize(this int number) { }\n        public static string Ordinalize(this string numberString) { }\n        public static string Ordinalize(this int number, Humanizer.GrammaticalGender gender) { }\n        public static string Ordinalize(this int number, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this int number, System.Globalization.CultureInfo culture) { }\n        public static string Ordinalize(this string numberString, Humanizer.GrammaticalGender gender) { }\n        public static string Ordinalize(this string numberString, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this string numberString, System.Globalization.CultureInfo culture) { }\n        public static string Ordinalize(this int number, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this int number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo culture) { }\n        public static string Ordinalize(this int number, System.Globalization.CultureInfo culture, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this string numberString, Humanizer.GrammaticalGender gender, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this string numberString, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo culture) { }\n        public static string Ordinalize(this string numberString, System.Globalization.CultureInfo culture, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this int number, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo culture, Humanizer.WordForm wordForm) { }\n        public static string Ordinalize(this string numberString, Humanizer.GrammaticalGender gender, System.Globalization.CultureInfo culture, Humanizer.WordForm wordForm) { }\n    }\n    public enum Plurality\n    {\n        Singular = 0,\n        Plural = 1,\n        CouldBeEither = 2,\n    }\n    public class PrecisionDateTimeHumanizeStrategy : Humanizer.IDateTimeHumanizeStrategy\n    {\n        public PrecisionDateTimeHumanizeStrategy(double precision = 0.75) { }\n        public string Humanize(System.DateTime input, System.DateTime comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public class PrecisionDateTimeOffsetHumanizeStrategy : Humanizer.IDateTimeOffsetHumanizeStrategy\n    {\n        public PrecisionDateTimeOffsetHumanizeStrategy(double precision = 0.75) { }\n        public string Humanize(System.DateTimeOffset input, System.DateTimeOffset comparisonBase, System.Globalization.CultureInfo? culture) { }\n    }\n    public static class PrepositionsExtensions\n    {\n        public static System.DateTime At(this System.DateTime date, int hour, int min = 0, int second = 0, int millisecond = 0) { }\n        public static System.DateTime AtMidnight(this System.DateTime date) { }\n        public static System.DateTime AtNoon(this System.DateTime date) { }\n        public static System.DateTime In(this System.DateTime date, int year) { }\n    }\n    public class ResourceKeys\n    {\n        public ResourceKeys() { }\n        public static class DateHumanize\n        {\n            public const string Never = \"DateHumanize_Never\";\n            public const string Now = \"DateHumanize_Now\";\n            public static string GetResourceKey(Humanizer.TimeUnit timeUnit, Humanizer.Tense timeUnitTense, int count = 1) { }\n        }\n        public static class TimeSpanHumanize\n        {\n            public static string GetResourceKey(Humanizer.TimeUnit unit, int count = 1, bool toWords = false) { }\n        }\n        public static class TimeUnitSymbol\n        {\n            public static string GetResourceKey(Humanizer.TimeUnit unit) { }\n        }\n    }\n    public static class Resources\n    {\n        public static string GetResource(string resourceKey, System.Globalization.CultureInfo? culture = null) { }\n        public static bool TryGetResource(string resourceKey, System.Globalization.CultureInfo? culture, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out string? result) { }\n    }\n    public static class RomanNumeralExtensions\n    {\n        public static int FromRoman(System.ReadOnlySpan<char> input) { }\n        public static int FromRoman(this string input) { }\n        public static string ToRoman(this int input) { }\n    }\n    public enum ShowQuantityAs\n    {\n        None = 0,\n        Numeric = 1,\n        Words = 2,\n    }\n    public static class StringDehumanizeExtensions\n    {\n        public static string Dehumanize(this string input) { }\n    }\n    public static class StringHumanizeExtensions\n    {\n        public static string Humanize(this string input) { }\n        public static string Humanize(this string input, Humanizer.LetterCasing casing) { }\n    }\n    public enum Tense\n    {\n        Future = 0,\n        Past = 1,\n    }\n    public static class TimeSpanHumanizeExtensions\n    {\n        public static string Humanize(this System.TimeSpan timeSpan, int precision = 1, System.Globalization.CultureInfo? culture = null, Humanizer.TimeUnit maxUnit = 5, Humanizer.TimeUnit minUnit = 0, string? collectionSeparator = \", \", bool toWords = false) { }\n        public static string Humanize(this System.TimeSpan timeSpan, int precision, bool countEmptyUnits, System.Globalization.CultureInfo? culture = null, Humanizer.TimeUnit maxUnit = 5, Humanizer.TimeUnit minUnit = 0, string? collectionSeparator = \", \", bool toWords = false) { }\n        public static string ToAge(this System.TimeSpan timeSpan, System.Globalization.CultureInfo? culture = null, Humanizer.TimeUnit maxUnit = 7, bool toWords = false) { }\n    }\n    public enum TimeUnit\n    {\n        Millisecond = 0,\n        Second = 1,\n        Minute = 2,\n        Hour = 3,\n        Day = 4,\n        Week = 5,\n        Month = 6,\n        Year = 7,\n    }\n    public static class TimeUnitToSymbolExtensions\n    {\n        public static string ToSymbol(this Humanizer.TimeUnit unit, System.Globalization.CultureInfo? culture = null) { }\n    }\n    public static class To\n    {\n        public static Humanizer.ICulturedStringTransformer LowerCase { get; }\n        public static Humanizer.ICulturedStringTransformer SentenceCase { get; }\n        public static Humanizer.ICulturedStringTransformer TitleCase { get; }\n        public static Humanizer.ICulturedStringTransformer UpperCase { get; }\n        public static string Transform(this string input, params Humanizer.IStringTransformer[] transformers) { }\n        public static string Transform(this string input, System.Globalization.CultureInfo culture, params Humanizer.ICulturedStringTransformer[] transformers) { }\n    }\n    public static class ToQuantityExtensions\n    {\n        public static string ToQuantity(this string input, double quantity) { }\n        public static string ToQuantity(this string input, int quantity, Humanizer.ShowQuantityAs showQuantityAs = 1) { }\n        public static string ToQuantity(this string input, long quantity, Humanizer.ShowQuantityAs showQuantityAs = 1) { }\n        public static string ToQuantity(this string input, double quantity, string? format = null, System.IFormatProvider? formatProvider = null) { }\n        public static string ToQuantity(this string input, int quantity, string? format, System.IFormatProvider? formatProvider = null) { }\n        public static string ToQuantity(this string input, long quantity, string? format, System.IFormatProvider? formatProvider = null) { }\n    }\n    public static class TruncateExtensions\n    {\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"input\")]\n        public static string? Truncate(this string? input, int length) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"input\")]\n        public static string? Truncate(this string? input, int length, Humanizer.ITruncator truncator, Humanizer.TruncateFrom from = 1) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"input\")]\n        public static string? Truncate(this string? input, int length, string? truncationString, Humanizer.TruncateFrom from = 1) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"input\")]\n        public static string? Truncate(this string? input, int length, string? truncationString, Humanizer.ITruncator truncator, Humanizer.TruncateFrom from = 1) { }\n    }\n    public enum TruncateFrom\n    {\n        Left = 0,\n        Right = 1,\n    }\n    public static class Truncator\n    {\n        public static Humanizer.ITruncator DynamicLengthAndPreserveWords { get; }\n        public static Humanizer.ITruncator DynamicNumberOfCharactersAndPreserveWords { get; }\n        public static Humanizer.ITruncator FixedLength { get; }\n        public static Humanizer.ITruncator FixedNumberOfCharacters { get; }\n        public static Humanizer.ITruncator FixedNumberOfWords { get; }\n    }\n    public static class TupleizeExtensions\n    {\n        public static string Tupleize(this int input) { }\n    }\n    public static class Vocabularies\n    {\n        public static Humanizer.Vocabulary Default { get; }\n    }\n    public class Vocabulary\n    {\n        public void AddIrregular(string singular, string plural, bool matchEnding = true) { }\n        public void AddPlural(string rule, string replacement) { }\n        public void AddSingular(string rule, string replacement) { }\n        public void AddUncountable(string word) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"word\")]\n        public string? Pluralize(string? word, bool inputIsKnownToBeSingular = true) { }\n        [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"word\")]\n        public string? Singularize(string? word, bool inputIsKnownToBePlural = true, bool skipSimpleWords = false) { }\n    }\n    public enum WordForm\n    {\n        Normal = 0,\n        Abbreviation = 1,\n        Eifeler = 2,\n    }\n    public static class WordsToNumberExtension\n    {\n        public static int ToNumber(this string words, System.Globalization.CultureInfo culture) { }\n        public static bool TryToNumber(this string words, out int parsedNumber, System.Globalization.CultureInfo culture) { }\n        public static bool TryToNumber(this string words, out int parsedNumber, System.Globalization.CultureInfo culture, out string? unrecognizedWord) { }\n    }\n}\n"
  },
  {
    "path": "tests/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.cs",
    "content": "using PublicApiGenerator;\r\n\r\npublic class PublicApiApprovalTest\r\n{\r\n    [Fact]\r\n    public Task Approve_Public_Api()\r\n    {\r\n        var publicApi = typeof(StringHumanizeExtensions).Assembly.GeneratePublicApi();\r\n\r\n        return Verify(publicApi)\r\n            .ScrubLinesContaining(\"CommitHash\", \"RepositoryUrl\", \"InternalsVisibleTo\", \"CloudBuildNumber\")\r\n            .UniqueForTargetFrameworkAndVersion();\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/ArticlePrefixSortTests.cs",
    "content": "﻿public class ArticlePrefixSortTests\r\n{\r\n    [Theory]\r\n    [InlineData(new[] { \"Ant\", \"The Theater\", \"The apple\", \"Fox\", \"Bear\" }, new[] { \"Ant\", \"The apple\", \"Bear\", \"Fox\", \"The Theater\" })]\r\n    [InlineData(new[] { \"An Ant\", \"The Theater\", \"the apple\", \"a Fox\", \"Bear\" }, new[] { \"An Ant\", \"the apple\", \"Bear\", \"a Fox\", \"The Theater\" })]\r\n    [InlineData(new[] { \"Ant\", \"A Theater\", \"an apple\", \"Fox\", \"Bear\" }, new[] { \"Ant\", \"an apple\", \"Bear\", \"Fox\", \"A Theater\" })]\r\n    [InlineData(new[] { \" Ant \", \" A  Theater \", \"  an apple  \", \" Fox\", \"Bear \" }, new[] { \"A  Theater\", \"an apple\", \"Ant\", \"Bear\", \"Fox\" })]\r\n    [InlineData(new[] { \"The General Theory of Relativity\" }, new[] { \"The General Theory of Relativity\" })]\r\n    public void SortStringArrayIgnoringArticlePrefixes(string[] input, string[] expectedOutput) =>\r\n        Assert.Equal(expectedOutput, EnglishArticle.PrependArticleSuffix(EnglishArticle.AppendArticlePrefix(input)));\r\n\r\n    [Fact]\r\n    public void An_Empty_String_Array_Throws_ArgumentOutOfRangeException()\r\n    {\r\n        string[] items = [];\r\n        void action() => EnglishArticle.AppendArticlePrefix(items);\r\n        Assert.Throws<ArgumentOutOfRangeException>(action);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/BitFieldEnumHumanizeTests.cs",
    "content": "﻿[UseCulture(\"en\")]\r\npublic class BitFieldEnumHumanizeTests\r\n{\r\n    [Fact]\r\n    public void CanHumanizeSingleWordDescriptionAttribute() =>\r\n        Assert.Equal(BitFlagEnumTestsResources.MemberWithSingleWordDisplayAttribute, BitFieldEnumUnderTest.RED.Humanize());\r\n\r\n    [Fact]\r\n    public void CanHumanizeMultipleWordDescriptionAttribute() =>\r\n        Assert.Equal(BitFlagEnumTestsResources.MemberWithMultipleWordDisplayAttribute, BitFieldEnumUnderTest.DARK_GRAY.Humanize());\r\n\r\n    [Fact]\r\n    public void CanHumanizeMultipleValueBitFieldEnum()\r\n    {\r\n        var xoredBitFlag = BitFieldEnumUnderTest.RED | BitFieldEnumUnderTest.DARK_GRAY;\r\n        Assert.Equal(BitFlagEnumTestsResources.ExpectedResultWhenBothValuesXored, xoredBitFlag.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void CanHumanizeShortSingleWordDescriptionAttribute() =>\r\n        Assert.Equal(BitFlagEnumTestsResources.MemberWithSingleWordDisplayAttribute, ShortBitFieldEnumUnderTest.RED.Humanize());\r\n\r\n    [Fact]\r\n    public void CanHumanizeShortMultipleWordDescriptionAttribute() =>\r\n        Assert.Equal(BitFlagEnumTestsResources.MemberWithMultipleWordDisplayAttribute, ShortBitFieldEnumUnderTest.DARK_GRAY.Humanize());\r\n\r\n    [Fact]\r\n    public void CanHumanizeShortMultipleValueBitFieldEnum()\r\n    {\r\n        var xoredBitFlag = ShortBitFieldEnumUnderTest.RED | ShortBitFieldEnumUnderTest.DARK_GRAY;\r\n        Assert.Equal(BitFlagEnumTestsResources.ExpectedResultWhenBothValuesXored, xoredBitFlag.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void CanHumanizeBitFieldEnumWithZeroValue() =>\r\n        Assert.Equal(BitFlagEnumTestsResources.None, BitFieldEnumUnderTest.NONE.Humanize());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/BitFieldEnumUnderTest.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\r\n\r\n[Flags]\r\npublic enum BitFieldEnumUnderTest : int\r\n{\r\n    [Display(Description = BitFlagEnumTestsResources.None)]\r\n    NONE = 0,\r\n    [Display(Description = BitFlagEnumTestsResources.MemberWithSingleWordDisplayAttribute)]\r\n    RED = 1,\r\n    [Display(Description = BitFlagEnumTestsResources.MemberWithMultipleWordDisplayAttribute)]\r\n    DARK_GRAY = 2\r\n}\r\n\r\n[Flags]\r\npublic enum ShortBitFieldEnumUnderTest : short\r\n{\r\n    [Display(Description = BitFlagEnumTestsResources.MemberWithSingleWordDisplayAttribute)]\r\n    RED = 1,\r\n    [Display(Description = BitFlagEnumTestsResources.MemberWithMultipleWordDisplayAttribute)]\r\n    DARK_GRAY = 2\r\n}\r\n\r\npublic class BitFlagEnumTestsResources\r\n{\r\n    public const string None = \"None\";\r\n    public const string MemberWithSingleWordDisplayAttribute = \"Red\";\r\n    public const string MemberWithMultipleWordDisplayAttribute = \"Dark Gray\";\r\n\r\n    public const string ExpectedResultWhenBothValuesXored = \"Red and Dark Gray\";\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Bytes/ArithmeticTests.cs",
    "content": "﻿public class ArithmeticTests\r\n{\r\n    [Fact]\r\n    public void Add()\r\n    {\r\n        var size1 = ByteSize.FromBytes(1);\r\n        var result = size1.Add(size1);\r\n\r\n        Assert.Equal(2, result.Bytes);\r\n        Assert.Equal(16, result.Bits);\r\n    }\r\n\r\n    [Fact]\r\n    public void AddBits()\r\n    {\r\n        var size = ByteSize\r\n            .FromBytes(1)\r\n            .AddBits(8);\r\n\r\n        Assert.Equal(2, size.Bytes);\r\n        Assert.Equal(16, size.Bits);\r\n    }\r\n\r\n    [Fact]\r\n    public void AddBytes()\r\n    {\r\n        var size = ByteSize\r\n            .FromBytes(1)\r\n            .AddBytes(1);\r\n\r\n        Assert.Equal(2, size.Bytes);\r\n        Assert.Equal(16, size.Bits);\r\n    }\r\n\r\n    [Fact]\r\n    public void AddKilobytes()\r\n    {\r\n        var size = ByteSize\r\n            .FromKilobytes(2)\r\n            .AddKilobytes(2);\r\n\r\n        Assert.Equal(4 * 1024 * 8, size.Bits);\r\n        Assert.Equal(4 * 1024, size.Bytes);\r\n        Assert.Equal(4, size.Kilobytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void AddMegabytes()\r\n    {\r\n        var size = ByteSize\r\n            .FromMegabytes(2)\r\n            .AddMegabytes(2);\r\n\r\n        Assert.Equal(4 * 1024 * 1024 * 8, size.Bits);\r\n        Assert.Equal(4 * 1024 * 1024, size.Bytes);\r\n        Assert.Equal(4 * 1024, size.Kilobytes);\r\n        Assert.Equal(4, size.Megabytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void AddGigabytes()\r\n    {\r\n        var size = ByteSize\r\n            .FromGigabytes(2)\r\n            .AddGigabytes(2);\r\n\r\n        Assert.Equal(4d * 1024 * 1024 * 1024 * 8, size.Bits);\r\n        Assert.Equal(4d * 1024 * 1024 * 1024, size.Bytes);\r\n        Assert.Equal(4d * 1024 * 1024, size.Kilobytes);\r\n        Assert.Equal(4d * 1024, size.Megabytes);\r\n        Assert.Equal(4d, size.Gigabytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void AddTerabytes()\r\n    {\r\n        var size = ByteSize\r\n            .FromTerabytes(2)\r\n            .AddTerabytes(2);\r\n\r\n        Assert.Equal(4d * 1024 * 1024 * 1024 * 1024 * 8, size.Bits);\r\n        Assert.Equal(4d * 1024 * 1024 * 1024 * 1024, size.Bytes);\r\n        Assert.Equal(4d * 1024 * 1024 * 1024, size.Kilobytes);\r\n        Assert.Equal(4d * 1024 * 1024, size.Megabytes);\r\n        Assert.Equal(4d * 1024, size.Gigabytes);\r\n        Assert.Equal(4d, size.Terabytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void Subtract()\r\n    {\r\n        var size = ByteSize\r\n            .FromBytes(4)\r\n            .Subtract(ByteSize.FromBytes(2));\r\n\r\n        Assert.Equal(16, size.Bits);\r\n        Assert.Equal(2, size.Bytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void IncrementOperator()\r\n    {\r\n        var size = ByteSize.FromBytes(2);\r\n        size++;\r\n\r\n        Assert.Equal(24, size.Bits);\r\n        Assert.Equal(3, size.Bytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void NegativeOperator()\r\n    {\r\n        var size = ByteSize.FromBytes(2);\r\n\r\n        size = -size;\r\n\r\n        Assert.Equal(-16, size.Bits);\r\n        Assert.Equal(-2, size.Bytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void DecrementOperator()\r\n    {\r\n        var size = ByteSize.FromBytes(2);\r\n        size--;\r\n\r\n        Assert.Equal(8, size.Bits);\r\n        Assert.Equal(1, size.Bytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void PlusOperator()\r\n    {\r\n        var size1 = ByteSize.FromBytes(1);\r\n        var size2 = ByteSize.FromBytes(1);\r\n\r\n        var result = size1 + size2;\r\n\r\n        Assert.Equal(2, result.Bytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void MinusOperator()\r\n    {\r\n        var size1 = ByteSize.FromBytes(2);\r\n        var size2 = ByteSize.FromBytes(1);\r\n\r\n        var result = size1 - size2;\r\n\r\n        Assert.Equal(1, result.Bytes);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Bytes/ByteRateTests.cs",
    "content": "﻿[UseCulture(\"en\")]\r\npublic class ByteRateTests\r\n{\r\n    [Theory]\r\n    [InlineData(400, 1, \"400 B/s\")]\r\n    [InlineData(4 * 1024, 1, \"4 KB/s\")]\r\n    [InlineData(4 * 1024 * 1024, 1, \"4 MB/s\")]\r\n    [InlineData(4 * 2 * 1024 * 1024, 2, \"4 MB/s\")]\r\n    [InlineData(4 * 1024, 0.1, \"40 KB/s\")]\r\n    [InlineData(15 * 60 * 1024 * 1024, 60, \"15 MB/s\")]\r\n    public void HumanizesRates(long inputBytes, double perSeconds, string expectedValue)\r\n    {\r\n        var size = new ByteSize(inputBytes);\r\n        var interval = TimeSpan.FromSeconds(perSeconds);\r\n\r\n        var rate = size\r\n            .Per(interval)\r\n            .Humanize();\r\n\r\n        Assert.Equal(expectedValue, rate);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, 1, TimeUnit.Second, \"1 MB/s\")]\r\n    [InlineData(1, 60, TimeUnit.Minute, \"1 MB/min\")]\r\n    [InlineData(1, 60 * 60, TimeUnit.Hour, \"1 MB/h\")]\r\n    [InlineData(10, 1, TimeUnit.Second, \"10 MB/s\")]\r\n    [InlineData(10, 60, TimeUnit.Minute, \"10 MB/min\")]\r\n    [InlineData(10, 60 * 60, TimeUnit.Hour, \"10 MB/h\")]\r\n    [InlineData(1, 10 * 1, TimeUnit.Second, \"102.4 KB/s\")]\r\n    [InlineData(1, 10 * 60, TimeUnit.Minute, \"102.4 KB/min\")]\r\n    [InlineData(1, 10 * 60 * 60, TimeUnit.Hour, \"102.4 KB/h\")]\r\n    public void TimeUnitTests(long megabytes, double measurementIntervalSeconds, TimeUnit displayInterval, string expectedValue)\r\n    {\r\n        var size = ByteSize.FromMegabytes(megabytes);\r\n        var measurementInterval = TimeSpan.FromSeconds(measurementIntervalSeconds);\r\n\r\n        var rate = size.Per(measurementInterval);\r\n        var text = rate.Humanize(displayInterval);\r\n\r\n        Assert.Equal(expectedValue, text);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(19854651984, 1, TimeUnit.Second, null, \"18.49 GB/s\")]\r\n    [InlineData(19854651984, 1, TimeUnit.Second, \"#.##\", \"18.49 GB/s\")]\r\n    public void FormattedTimeUnitTests(long bytes, int measurementIntervalSeconds, TimeUnit displayInterval, string? format, string expectedValue)\r\n    {\r\n        var size = ByteSize.FromBytes(bytes);\r\n        var measurementInterval = TimeSpan.FromSeconds(measurementIntervalSeconds);\r\n        var rate = size.Per(measurementInterval);\r\n        var text = rate.Humanize(format, displayInterval);\r\n\r\n        Assert.Equal(expectedValue, text);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(TimeUnit.Millisecond)]\r\n    [InlineData(TimeUnit.Day)]\r\n    [InlineData(TimeUnit.Month)]\r\n    [InlineData(TimeUnit.Week)]\r\n    [InlineData(TimeUnit.Year)]\r\n    public void ThrowsOnUnsupportedData(TimeUnit units)\r\n    {\r\n        var dummyRate = ByteSize\r\n            .FromBits(1)\r\n            .Per(TimeSpan.FromSeconds(1));\r\n\r\n        Assert.Throws<NotSupportedException>(() => dummyRate.Humanize(units));\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Bytes/ByteSizeExtensionsTests.cs",
    "content": "﻿[UseCulture(\"en\")]\r\npublic class ByteSizeExtensionsTests\r\n{\r\n    [Fact]\r\n    public void ByteTerabytes()\r\n    {\r\n        const byte size = 2;\r\n        Assert.Equal(ByteSize.FromTerabytes(size), size.Terabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void SbyteTerabytes()\r\n    {\r\n        const sbyte size = 2;\r\n        Assert.Equal(ByteSize.FromTerabytes(size), size.Terabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void ShortTerabytes()\r\n    {\r\n        const short size = 2;\r\n        Assert.Equal(ByteSize.FromTerabytes(size), size.Terabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void UshortTerabytes()\r\n    {\r\n        const ushort size = 2;\r\n        Assert.Equal(ByteSize.FromTerabytes(size), size.Terabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntTerabytes()\r\n    {\r\n        const int size = 2;\r\n        Assert.Equal(ByteSize.FromTerabytes(size), size.Terabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintTerabytes()\r\n    {\r\n        const uint size = 2;\r\n        Assert.Equal(ByteSize.FromTerabytes(size), size.Terabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void DoubleTerabytes()\r\n    {\r\n        const double size = 2;\r\n        Assert.Equal(ByteSize.FromTerabytes(size), size.Terabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongTerabytes()\r\n    {\r\n        const long size = 2;\r\n        Assert.Equal(ByteSize.FromTerabytes(size), size.Terabytes());\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, null, \"en\", \"2 TB\")]\r\n    [InlineData(2, null, \"fr\", \"2 To\")]\r\n    [InlineData(2, \"GB\", \"en\", \"2048 GB\")]\r\n    [InlineData(2.1, null, \"en\", \"2.1 TB\")]\r\n    [InlineData(2.123, \"#.#\", \"en\", \"2.1 TB\")]\r\n    public void HumanizesTerabytes(double input, string? format, string cultureName, string expectedValue)\r\n    {\r\n        var culture = new CultureInfo(cultureName);\r\n\r\n        Assert.Equal(expectedValue, input\r\n            .Terabytes()\r\n            .Humanize(format, culture));\r\n    }\r\n\r\n    [Fact]\r\n    public void ByteGigabytes()\r\n    {\r\n        const byte size = 2;\r\n        Assert.Equal(ByteSize.FromGigabytes(size), size.Gigabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void SbyteGigabytes()\r\n    {\r\n        const sbyte size = 2;\r\n        Assert.Equal(ByteSize.FromGigabytes(size), size.Gigabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void ShortGigabytes()\r\n    {\r\n        const short size = 2;\r\n        Assert.Equal(ByteSize.FromGigabytes(size), size.Gigabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void UshortGigabytes()\r\n    {\r\n        const ushort size = 2;\r\n        Assert.Equal(ByteSize.FromGigabytes(size), size.Gigabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntGigabytes()\r\n    {\r\n        const int size = 2;\r\n        Assert.Equal(ByteSize.FromGigabytes(size), size.Gigabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintGigabytes()\r\n    {\r\n        const uint size = 2;\r\n        Assert.Equal(ByteSize.FromGigabytes(size), size.Gigabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void DoubleGigabytes()\r\n    {\r\n        const double size = 2;\r\n        Assert.Equal(ByteSize.FromGigabytes(size), size.Gigabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongGigabytes()\r\n    {\r\n        const long size = 2;\r\n        Assert.Equal(ByteSize.FromGigabytes(size), size.Gigabytes());\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"en\", \"0 b\")]\r\n    [InlineData(0, \"GB\", \"en\", \"0 GB\")]\r\n    [InlineData(2, null, \"en\", \"2 GB\")]\r\n    [InlineData(2, null, \"fr\", \"2 Go\")]\r\n    [InlineData(2, \"MB\", \"en\", \"2048 MB\")]\r\n    [InlineData(2.123, \"#.##\", \"en\", \"2.12 GB\")]\r\n    public void HumanizesGigabytes(double input, string? format, string cultureName, string expectedValue)\r\n    {\r\n        var cultureInfo = new CultureInfo(cultureName);\r\n\r\n        Assert.Equal(expectedValue, input\r\n            .Gigabytes()\r\n            .Humanize(format, cultureInfo));\r\n    }\r\n\r\n    [Fact]\r\n    public void ByteMegabytes()\r\n    {\r\n        const byte size = 2;\r\n        Assert.Equal(ByteSize.FromMegabytes(size), size.Megabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void SbyteMegabytes()\r\n    {\r\n        const sbyte size = 2;\r\n        Assert.Equal(ByteSize.FromMegabytes(size), size.Megabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void ShortMegabytes()\r\n    {\r\n        const short size = 2;\r\n        Assert.Equal(ByteSize.FromMegabytes(size), size.Megabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void UshortMegabytes()\r\n    {\r\n        const ushort size = 2;\r\n        Assert.Equal(ByteSize.FromMegabytes(size), size.Megabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntMegabytes()\r\n    {\r\n        const int size = 2;\r\n        Assert.Equal(ByteSize.FromMegabytes(size), size.Megabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintMegabytes()\r\n    {\r\n        const uint size = 2;\r\n        Assert.Equal(ByteSize.FromMegabytes(size), size.Megabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void DoubleMegabytes()\r\n    {\r\n        const double size = 2;\r\n        Assert.Equal(ByteSize.FromMegabytes(size), size.Megabytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongMegabytes()\r\n    {\r\n        const long size = 2;\r\n        Assert.Equal(ByteSize.FromMegabytes(size), size.Megabytes());\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"en\", \"0 b\")]\r\n    [InlineData(0, \"MB\", \"en\", \"0 MB\")]\r\n    [InlineData(2, null, \"en\", \"2 MB\")]\r\n    [InlineData(2, null, \"fr\", \"2 Mo\")]\r\n    [InlineData(2, \"KB\", \"en\", \"2048 KB\")]\r\n    [InlineData(2.123, \"#\", \"en\", \"2 MB\")]\r\n    public void HumanizesMegabytes(double input, string? format, string cultureName, string expectedValue)\r\n    {\r\n        var cultureInfo = new CultureInfo(cultureName);\r\n\r\n        Assert.Equal(expectedValue, input\r\n            .Megabytes()\r\n            .Humanize(format, cultureInfo));\r\n    }\r\n\r\n    [Fact]\r\n    public void ByteKilobytes()\r\n    {\r\n        const byte size = 2;\r\n        Assert.Equal(ByteSize.FromKilobytes(size), size.Kilobytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void SbyteKilobytes()\r\n    {\r\n        const sbyte size = 2;\r\n        Assert.Equal(ByteSize.FromKilobytes(size), size.Kilobytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void ShortKilobytes()\r\n    {\r\n        const short size = 2;\r\n        Assert.Equal(ByteSize.FromKilobytes(size), size.Kilobytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void UshortKilobytes()\r\n    {\r\n        const ushort size = 2;\r\n        Assert.Equal(ByteSize.FromKilobytes(size), size.Kilobytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntKilobytes()\r\n    {\r\n        const int size = 2;\r\n        Assert.Equal(ByteSize.FromKilobytes(size), size.Kilobytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintKilobytes()\r\n    {\r\n        const uint size = 2;\r\n        Assert.Equal(ByteSize.FromKilobytes(size), size.Kilobytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void DoubleKilobytes()\r\n    {\r\n        const double size = 2;\r\n        Assert.Equal(ByteSize.FromKilobytes(size), size.Kilobytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongKilobytes()\r\n    {\r\n        const long size = 2;\r\n        Assert.Equal(ByteSize.FromKilobytes(size), size.Kilobytes());\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"en\", \"0 b\")]\r\n    [InlineData(0, \"KB\", \"en\", \"0 KB\")]\r\n    [InlineData(2, null, \"en\", \"2 KB\")]\r\n    [InlineData(2, null, \"fr\", \"2 Ko\")]\r\n    [InlineData(2, \"B\", \"en\", \"2048 B\")]\r\n    [InlineData(2.123, \"#.####\", \"en\", \"2.123 KB\")]\r\n    public void HumanizesKilobytes(double input, string? format, string cultureName, string expectedValue)\r\n    {\r\n        var cultureInfo = new CultureInfo(cultureName);\r\n\r\n        Assert.Equal(expectedValue, input\r\n            .Kilobytes()\r\n            .Humanize(format, cultureInfo));\r\n    }\r\n\r\n    [Fact]\r\n    public void ByteBytes()\r\n    {\r\n        const byte size = 2;\r\n        Assert.Equal(ByteSize.FromBytes(size), size.Bytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void SbyteBytes()\r\n    {\r\n        const sbyte size = 2;\r\n        Assert.Equal(ByteSize.FromBytes(size), size.Bytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void ShortBytes()\r\n    {\r\n        const short size = 2;\r\n        Assert.Equal(ByteSize.FromBytes(size), size.Bytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void UshortBytes()\r\n    {\r\n        const ushort size = 2;\r\n        Assert.Equal(ByteSize.FromBytes(size), size.Bytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntBytes()\r\n    {\r\n        const int size = 2;\r\n        Assert.Equal(ByteSize.FromBytes(size), size.Bytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintBytes()\r\n    {\r\n        const uint size = 2;\r\n        Assert.Equal(ByteSize.FromBytes(size), size.Bytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void DoubleBytes()\r\n    {\r\n        const double size = 2;\r\n        Assert.Equal(ByteSize.FromBytes(size), size.Bytes());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongBytes()\r\n    {\r\n        const long size = 2;\r\n        Assert.Equal(ByteSize.FromBytes(size), size.Bytes());\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"en\", \"0 b\")]\r\n    [InlineData(0, \"#.##\", \"en\", \"0 b\")]\r\n    [InlineData(0, \"#.## B\", \"en\", \"0 B\")]\r\n    [InlineData(0, \"B\", \"en\", \"0 B\")]\r\n    [InlineData(2, null, \"en\", \"2 B\")]\r\n    [InlineData(2, null, \"fr\", \"2 o\")]\r\n    [InlineData(2000, \"KB\", \"en\", \"1.95 KB\")]\r\n    [InlineData(2123, \"#.##\", \"en\", \"2.07 KB\")]\r\n    [InlineData(10000000, \"KB\", \"en\", \"9765.63 KB\")]\r\n    [InlineData(10000000, \"#,##0 KB\", \"en\", \"9,766 KB\")]\r\n    [InlineData(10000000, \"#,##0.# KB\", \"en\", \"9,765.6 KB\")]\r\n    public void HumanizesBytes(double input, string? format, string cultureName, string expectedValue)\r\n    {\r\n        var cultureInfo = new CultureInfo(cultureName);\r\n\r\n        Assert.Equal(expectedValue, input\r\n            .Bytes()\r\n            .Humanize(format, cultureInfo));\r\n    }\r\n\r\n    [Fact]\r\n    public void ByteBits()\r\n    {\r\n        const byte size = 2;\r\n        Assert.Equal(ByteSize.FromBits(size), size.Bits());\r\n    }\r\n\r\n    [Fact]\r\n    public void SbyteBits()\r\n    {\r\n        const sbyte size = 2;\r\n        Assert.Equal(ByteSize.FromBits(size), size.Bits());\r\n    }\r\n\r\n    [Fact]\r\n    public void ShortBits()\r\n    {\r\n        const short size = 2;\r\n        Assert.Equal(ByteSize.FromBits(size), size.Bits());\r\n    }\r\n\r\n    [Fact]\r\n    public void UshortBits()\r\n    {\r\n        const ushort size = 2;\r\n        Assert.Equal(ByteSize.FromBits(size), size.Bits());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntBits()\r\n    {\r\n        const int size = 2;\r\n        Assert.Equal(ByteSize.FromBits(size), size.Bits());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintBits()\r\n    {\r\n        const uint size = 2;\r\n        Assert.Equal(ByteSize.FromBits(size), size.Bits());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongBits()\r\n    {\r\n        const long size = 2;\r\n        Assert.Equal(ByteSize.FromBits(size), size.Bits());\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"en\", \"0 b\")]\r\n    [InlineData(0, \"b\", \"en\", \"0 b\")]\r\n    [InlineData(2, null, \"en\", \"2 b\")]\r\n    [InlineData(2, null, \"fr\", \"2 b\")]\r\n    [InlineData(12, \"B\", \"en\", \"1.5 B\")]\r\n    [InlineData(10000, \"#.# KB\", \"en\", \"1.2 KB\")]\r\n    public void HumanizesBits(long input, string? format, string cultureName, string expectedValue)\r\n    {\r\n        var cultureInfo = new CultureInfo(cultureName);\r\n\r\n        Assert.Equal(expectedValue, input\r\n            .Bits()\r\n            .Humanize(format, cultureInfo));\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Bytes/ComparingTests.cs",
    "content": "﻿public class ComparingTests\r\n{\r\n    [Theory]\r\n    [InlineData(13, 23, -1)]\r\n    [InlineData(23, 23, 0)]\r\n    [InlineData(45, 23, 1)]\r\n    public void CompareStrongTyped(double value, double valueToCompareWith, int expectedResult)\r\n    {\r\n        var valueSize = new ByteSize(value);\r\n        var otherSize = new ByteSize(valueToCompareWith);\r\n        var result = valueSize.CompareTo(otherSize);\r\n\r\n        Assert.Equal(expectedResult, result);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(13, 23, -1)]\r\n    [InlineData(23, 23, 0)]\r\n    [InlineData(45, 23, 1)]\r\n    public void CompareUntyped(double value, double valueToCompareWith, int expectedResult)\r\n    {\r\n        var valueSize = new ByteSize(value);\r\n        object otherSize = new ByteSize(valueToCompareWith);\r\n        var result = valueSize.CompareTo(otherSize);\r\n\r\n        Assert.Equal(expectedResult, result);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(new[] { \"1GB\", \"3KB\", \"5MB\" }, new[] { \"3KB\", \"5MB\", \"1GB\" })]\r\n    [InlineData(new[] { \"1MB\", \"3KB\", \"5MB\" }, new[] { \"3KB\", \"1MB\", \"5MB\" })]\r\n    public void SortList(IEnumerable<string> values, IEnumerable<string> expected)\r\n    {\r\n        var list = values.Select(ByteSize.Parse).ToList();\r\n        list.Sort();\r\n\r\n        Assert.Equal(expected.Select(ByteSize.Parse), list);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Bytes/CreatingTests.cs",
    "content": "﻿//The MIT License (MIT)\r\n\r\n//Copyright (c) 2013-2014 Omar Khudeira (http://omar.io)\r\n\r\n//Permission is hereby granted, free of charge, to any person obtaining a copy\r\n//of this software and associated documentation files (the \"Software\"), to deal\r\n//in the Software without restriction, including without limitation the rights\r\n//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n//copies of the Software, and to permit persons to whom the Software is\r\n//furnished to do so, subject to the following conditions:\r\n\r\n//The above copyright notice and this permission notice shall be included in\r\n//all copies or substantial portions of the Software.\r\n\r\n//THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n//THE SOFTWARE.\r\n\r\npublic class CreatingTests\r\n{\r\n    [Fact]\r\n    public void Constructor()\r\n    {\r\n        var result = new ByteSize(1099511627776);\r\n\r\n        Assert.Equal(8.796093022208e12, result.Bits);\r\n        Assert.Equal(1099511627776, result.Bytes);\r\n        Assert.Equal(1073741824, result.Kilobytes);\r\n        Assert.Equal(1048576, result.Megabytes);\r\n        Assert.Equal(1024, result.Gigabytes);\r\n        Assert.Equal(1, result.Terabytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void FromBits()\r\n    {\r\n        var result = ByteSize.FromBits(8);\r\n\r\n        Assert.Equal(8, result.Bits);\r\n        Assert.Equal(1, result.Bytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void FromBytes()\r\n    {\r\n        var result = ByteSize.FromBytes(1.5);\r\n\r\n        Assert.Equal(12, result.Bits);\r\n        Assert.Equal(1.5, result.Bytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void FromKilobytes()\r\n    {\r\n        var result = ByteSize.FromKilobytes(1.5);\r\n\r\n        Assert.Equal(1536, result.Bytes);\r\n        Assert.Equal(1.5, result.Kilobytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void FromMegabytes()\r\n    {\r\n        var result = ByteSize.FromMegabytes(1.5);\r\n\r\n        Assert.Equal(1572864, result.Bytes);\r\n        Assert.Equal(1.5, result.Megabytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void FromGigabytes()\r\n    {\r\n        var result = ByteSize.FromGigabytes(1.5);\r\n\r\n        Assert.Equal(1610612736, result.Bytes);\r\n        Assert.Equal(1.5, result.Gigabytes);\r\n    }\r\n\r\n    [Fact]\r\n    public void FromTerabytes()\r\n    {\r\n        var result = ByteSize.FromTerabytes(1.5);\r\n\r\n        Assert.Equal(1649267441664, result.Bytes);\r\n        Assert.Equal(1.5, result.Terabytes);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Bytes/ParsingTests.cs",
    "content": "//The MIT License (MIT)\r\n\r\n//Copyright (c) 2013-2014 Omar Khudeira (http://omar.io)\r\n\r\n//Permission is hereby granted, free of charge, to any person obtaining a copy\r\n//of this software and associated documentation files (the \"Software\"), to deal\r\n//in the Software without restriction, including without limitation the rights\r\n//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n//copies of the Software, and to permit persons to whom the Software is\r\n//furnished to do so, subject to the following conditions:\r\n\r\n//The above copyright notice and this permission notice shall be included in\r\n//all copies or substantial portions of the Software.\r\n\r\n//THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n//THE SOFTWARE.\r\n\r\n[UseCulture(\"en\")]\r\npublic class ParsingTests\r\n{\r\n    [Fact]\r\n    public void Parse() =>\r\n        Assert.Equal(ByteSize.FromKilobytes(1020), ByteSize.Parse(\"1020KB\"));\r\n\r\n    [Fact]\r\n    public void TryParseReturnsFalseOnNullOrEmpty()\r\n    {\r\n        string? stringNull = null; // Get rid of redundant cast error\r\n        Assert.False(ByteSize.TryParse(stringNull, out var result));\r\n        Assert.Equal(default, result);\r\n\r\n        Assert.False(ByteSize.TryParse(string.Empty, out result));\r\n        Assert.Equal(default, result);\r\n\r\n        Assert.False(ByteSize.TryParse(\" \\r\\n\\t\", out result));\r\n        Assert.Equal(default, result);\r\n\r\n        Assert.False(ByteSize.TryParse(\" \\r\\n\\t\".AsSpan(), out result));\r\n        Assert.Equal(default, result);\r\n    }\r\n\r\n    [Fact]\r\n    public void TryParse()\r\n    {\r\n        var resultBool = ByteSize.TryParse(\"1020KB\", out var resultByteSize);\r\n        Assert.True(resultBool);\r\n        Assert.Equal(ByteSize.FromKilobytes(1020), resultByteSize);\r\n\r\n        resultBool = ByteSize.TryParse(\"1020KB\".AsSpan(), out resultByteSize);\r\n        Assert.True(resultBool);\r\n        Assert.Equal(ByteSize.FromKilobytes(1020), resultByteSize);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(\"2000.01KB\", \"\")] // Invariant\r\n    [InlineData(\"2,000.01KB\", \"\")]\r\n    [InlineData(\"+2000.01KB\", \"\")]\r\n    [InlineData(\"2000.01KB\", \"en\")]\r\n    [InlineData(\"2,000.01KB\", \"en\")]\r\n    [InlineData(\"+2000.01KB\", \"en\")]\r\n    [InlineData(\"2000,01KB\", \"de\")]\r\n    [InlineData(\"2.000,01KB\", \"de\")]\r\n    [InlineData(\"+2000,01KB\", \"de\")]\r\n    public void TryParseWithCultureInfo(string value, string cultureName)\r\n    {\r\n        var culture = new CultureInfo(cultureName);\r\n\r\n        Assert.True(ByteSize.TryParse(value, culture, out var resultByteSize));\r\n        Assert.Equal(ByteSize.FromKilobytes(2000.01), resultByteSize);\r\n        Assert.Equal(resultByteSize, ByteSize.Parse(value, culture));\r\n\r\n        Assert.True(ByteSize.TryParse(value.AsSpan(), culture, out resultByteSize));\r\n        Assert.Equal(ByteSize.FromKilobytes(2000.01), resultByteSize);\r\n        Assert.Equal(resultByteSize, ByteSize.Parse(value, culture));\r\n    }\r\n\r\n    [Fact]\r\n    public void TryParseWithNumberFormatInfo()\r\n    {\r\n        var numberFormat = new NumberFormatInfo\r\n        {\r\n            NumberDecimalSeparator = \"_\",\r\n            NumberGroupSeparator = \";\",\r\n            NegativeSign = \"−\", // proper minus, not hyphen-minus\r\n        };\r\n\r\n        var value = \"−2;000_01KB\";\r\n\r\n        Assert.True(ByteSize.TryParse(value, numberFormat, out var resultByteSize));\r\n        Assert.Equal(ByteSize.FromKilobytes(-2000.01), resultByteSize);\r\n        Assert.Equal(resultByteSize, ByteSize.Parse(value, numberFormat));\r\n\r\n        Assert.True(ByteSize.TryParse(value.AsSpan(), numberFormat, out resultByteSize));\r\n        Assert.Equal(ByteSize.FromKilobytes(-2000.01), resultByteSize);\r\n        Assert.Equal(resultByteSize, ByteSize.Parse(value, numberFormat));\r\n    }\r\n\r\n    [Fact]\r\n    public void TryParseWithArabicCulture()\r\n    {\r\n        var arabic = new CultureInfo(\"ar\");\r\n\r\n        Assert.True(ByteSize.TryParse(\"0 b\", arabic, out var resultByteSize));\r\n        Assert.Equal(ByteSize.FromBits(0), resultByteSize);\r\n\r\n        Assert.True(ByteSize.TryParse(\"100KB\", arabic, out resultByteSize));\r\n        Assert.Equal(ByteSize.FromKilobytes(100), resultByteSize);\r\n\r\n        Assert.True(ByteSize.TryParse(\"0 b\".AsSpan(), arabic, out resultByteSize));\r\n        Assert.Equal(ByteSize.FromBits(0), resultByteSize);\r\n    }\r\n\r\n    [Fact]\r\n    public void ParseDecimalMegabytes() =>\r\n        Assert.Equal(ByteSize.FromMegabytes(100.5), ByteSize.Parse(\"100.5MB\"));\r\n\r\n    [Theory]\r\n    [InlineData(\"\")]\r\n    [InlineData(\" \")]\r\n    [InlineData(\"\\t\")]\r\n    [InlineData(\"Unexpected Value\")]\r\n    [InlineData(\"1000\")]\r\n    [InlineData(\" 1000 \")]\r\n    [InlineData(\"KB\")]\r\n    [InlineData(\"1000.5b\")] // Partial bits\r\n    [InlineData(\"1000KBB\")] // Bad suffix\r\n    public void TryParseReturnsFalseOnBadValue(string input)\r\n    {\r\n        var resultBool = ByteSize.TryParse(input, out var resultByteSize);\r\n        Assert.False(resultBool);\r\n        Assert.Equal(new(), resultByteSize);\r\n\r\n        resultBool = ByteSize.TryParse(input.AsSpan(), out resultByteSize);\r\n        Assert.False(resultBool);\r\n        Assert.Equal(new(), resultByteSize);\r\n\r\n        Assert.Throws<FormatException>(() => ByteSize.Parse(input));\r\n    }\r\n\r\n    [Fact]\r\n    public void TryParseWorksWithLotsOfSpaces() =>\r\n        Assert.Equal(ByteSize.FromKilobytes(100), ByteSize.Parse(\" 100 KB \"));\r\n\r\n    [Fact]\r\n    public void ParseThrowsOnNull() =>\r\n        Assert.Throws<ArgumentNullException>(() => ByteSize.Parse(null!));\r\n\r\n    [Fact]\r\n    public void ParseBits() =>\r\n        Assert.Equal(ByteSize.FromBits(1), ByteSize.Parse(\"1b\"));\r\n\r\n    [Fact]\r\n    public void ParseBytes() =>\r\n        Assert.Equal(ByteSize.FromBytes(1), ByteSize.Parse(\"1B\"));\r\n\r\n    [Fact]\r\n    public void ParseKilobytes() =>\r\n        Assert.Equal(ByteSize.FromKilobytes(1020), ByteSize.Parse(\"1020KB\"));\r\n\r\n    [Fact]\r\n    public void ParseMegabytes() =>\r\n        Assert.Equal(ByteSize.FromMegabytes(1000), ByteSize.Parse(\"1000MB\"));\r\n\r\n    [Fact]\r\n    public void ParseGigabytes() =>\r\n        Assert.Equal(ByteSize.FromGigabytes(805), ByteSize.Parse(\"805GB\"));\r\n\r\n    [Fact]\r\n    public void ParseTerabytes() =>\r\n        Assert.Equal(ByteSize.FromTerabytes(100), ByteSize.Parse(\"100TB\"));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Bytes/ToFullWordsTests.cs",
    "content": "﻿//The MIT License (MIT)\r\n\r\n//Copyright (c) 2013-2014 Omar Khudeira (http://omar.io)\r\n\r\n//Permission is hereby granted, free of charge, to any person obtaining a copy\r\n//of this software and associated documentation files (the \"Software\"), to deal\r\n//in the Software without restriction, including without limitation the rights\r\n//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n//copies of the Software, and to permit persons to whom the Software is\r\n//furnished to do so, subject to the following conditions:\r\n\r\n//The above copyright notice and this permission notice shall be included in\r\n//all copies or substantial portions of the Software.\r\n\r\n//THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n//THE SOFTWARE.\r\n\r\n[UseCulture(\"en\")]\r\npublic class ToFullWordsTests\r\n{\r\n    [Fact]\r\n    public void ReturnsSingularBit() =>\r\n        Assert.Equal(\"1 bit\", ByteSize.FromBits(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralBits() =>\r\n        Assert.Equal(\"2 bits\", ByteSize.FromBits(2).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularByte() =>\r\n        Assert.Equal(\"1 byte\", ByteSize.FromBytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralBytes() =>\r\n        Assert.Equal(\"10 bytes\", ByteSize.FromBytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularKiloByte() =>\r\n        Assert.Equal(\"1 kilobyte\", ByteSize.FromKilobytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralKilobytes() =>\r\n        Assert.Equal(\"10 kilobytes\", ByteSize.FromKilobytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularMegabyte() =>\r\n        Assert.Equal(\"1 megabyte\", ByteSize.FromMegabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralMegabytes() =>\r\n        Assert.Equal(\"10 megabytes\", ByteSize.FromMegabytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularGigabyte() =>\r\n        Assert.Equal(\"1 gigabyte\", ByteSize.FromGigabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralGigabytes() =>\r\n        Assert.Equal(\"10 gigabytes\", ByteSize.FromGigabytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularTerabyte() =>\r\n        Assert.Equal(\"1 terabyte\", ByteSize.FromTerabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralTerabytes() =>\r\n        Assert.Equal(\"10 terabytes\", ByteSize.FromTerabytes(10).ToFullWords());\r\n\r\n    [Theory]\r\n    [InlineData(229376, \"B\", \"229376 bytes\")]\r\n    [InlineData(229376, \"# KB\", \"224 kilobytes\")]\r\n    public void ToFullWordsFormatted(double input, string format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, ByteSize.FromBytes(input).ToFullWords(format));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Bytes/ToStringTests.cs",
    "content": "﻿//The MIT License (MIT)\r\n\r\n//Copyright (c) 2013-2014 Omar Khudeira (http://omar.io)\r\n\r\n//Permission is hereby granted, free of charge, to any person obtaining a copy\r\n//of this software and associated documentation files (the \"Software\"), to deal\r\n//in the Software without restriction, including without limitation the rights\r\n//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n//copies of the Software, and to permit persons to whom the Software is\r\n//furnished to do so, subject to the following conditions:\r\n\r\n//The above copyright notice and this permission notice shall be included in\r\n//all copies or substantial portions of the Software.\r\n\r\n//THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n//THE SOFTWARE.\r\n\r\n[UseCulture(\"en\")]\r\npublic class ToStringTests\r\n{\r\n    [Fact]\r\n    public void ReturnsLargestMetricSuffix() =>\r\n        Assert.Equal(\"10.5 KB\", ByteSize.FromKilobytes(10.5).ToString());\r\n\r\n    [Fact]\r\n    public void ReturnsDefaultNumberFormat()\r\n    {\r\n        Assert.Equal(\"10.5 KB\", ByteSize.FromKilobytes(10.501).ToString());\r\n        Assert.Equal(\"10.5 KB\", ByteSize.FromKilobytes(10.5).ToString(\"KB\"));\r\n    }\r\n\r\n    [Fact]\r\n    public void ReturnsProvidedNumberFormat() =>\r\n        Assert.Equal(\"10.1234 KB\", ByteSize.FromKilobytes(10.1234).ToString(\"#.#### KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBits() =>\r\n        Assert.Equal(\"10 b\", ByteSize.FromBits(10).ToString(\"##.#### b\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBytes() =>\r\n        Assert.Equal(\"10 B\", ByteSize.FromBytes(10).ToString(\"##.#### B\"));\r\n\r\n    [Fact]\r\n    public void ReturnsKilobytes() =>\r\n        Assert.Equal(\"10 KB\", ByteSize.FromKilobytes(10).ToString(\"##.#### KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsMegabytes() =>\r\n        Assert.Equal(\"10 MB\", ByteSize.FromMegabytes(10).ToString(\"##.#### MB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsGigabytes() =>\r\n        Assert.Equal(\"10 GB\", ByteSize.FromGigabytes(10).ToString(\"##.#### GB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsTerabytes() =>\r\n        Assert.Equal(\"10 TB\", ByteSize.FromTerabytes(10).ToString(\"##.#### TB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsSelectedFormat() =>\r\n        Assert.Equal(\"10.0 TB\", ByteSize.FromTerabytes(10).ToString(\"0.0 TB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsLargestMetricPrefixLargerThanZero() =>\r\n        Assert.Equal(\"512 KB\", ByteSize.FromMegabytes(.5).ToString(\"#.#\"));\r\n\r\n    [Fact]\r\n    public void ReturnsLargestMetricPrefixLargerThanZeroForNegativeValues() =>\r\n        Assert.Equal(\"-512 KB\", ByteSize.FromMegabytes(-.5).ToString(\"#.#\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBytesViaGeneralFormat() =>\r\n        Assert.Equal(\"10 B\", $\"{ByteSize.FromBytes(10)}\");\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/CasingTests.cs",
    "content": "﻿public class CasingTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"lower case statement\", \"Lower Case Statement\")]\r\n    [InlineData(\"Sentence casing\", \"Sentence Casing\")]\r\n    [InlineData(\"honors UPPER case\", \"Honors UPPER Case\")]\r\n    [InlineData(\"Title Case\", \"Title Case\")]\r\n    [InlineData(\"title case (with parenthesis)\", \"Title Case (With Parenthesis)\")]\r\n    public void ApplyCaseTitle(string input, string expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.ApplyCase(LetterCasing.Title));\r\n\r\n    [Theory]\r\n    [InlineData(\"lower case statement\", \"lower case statement\")]\r\n    [InlineData(\"Sentence casing\", \"sentence casing\")]\r\n    [InlineData(\"No honor for UPPER case\", \"no honor for upper case\")]\r\n    [InlineData(\"Title Case\", \"title case\")]\r\n    public void ApplyCaseLower(string input, string expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.ApplyCase(LetterCasing.LowerCase));\r\n\r\n    [Theory]\r\n    [InlineData(\"lower case statement\", \"Lower case statement\")]\r\n    [InlineData(\"Sentence casing\", \"Sentence casing\")]\r\n    [InlineData(\"honors UPPER case\", \"Honors UPPER case\")]\r\n    public void ApplyCaseSentence(string input, string expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.ApplyCase(LetterCasing.Sentence));\r\n\r\n    [Theory]\r\n    [InlineData(\"lower case statement\", \"LOWER CASE STATEMENT\")]\r\n    [InlineData(\"Sentence casing\", \"SENTENCE CASING\")]\r\n    [InlineData(\"Title Case\", \"TITLE CASE\")]\r\n    public void ApplyCaseAllCaps(string input, string expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.ApplyCase(LetterCasing.AllCaps));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/CollectionHumanizeTests.cs",
    "content": "public class SomeClass\r\n{\r\n    public string? SomeString;\r\n    public int SomeInt;\r\n    public override string ToString() =>\r\n        \"ToString\";\r\n}\r\n\r\n[UseCulture(\"en\")]\r\npublic class CollectionHumanizeTests\r\n{\r\n    [Fact]\r\n    public void HumanizeReturnsOnlyNameWhenCollectionContainsOneItem()\r\n    {\r\n        var collection = new List<string> { \"A String\" };\r\n\r\n        Assert.Equal(\"A String\", collection.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void HumanizeUsesSeparatorWhenMoreThanOneItemIsInCollection()\r\n    {\r\n        var collection = new List<string>\r\n        {\r\n            \"A String\",\r\n            \"Another String\",\r\n        };\r\n\r\n        Assert.Equal(\"A String or Another String\", collection.Humanize(\"or\"));\r\n    }\r\n\r\n    [Fact]\r\n    public void HumanizeDefaultsSeparatorToAnd()\r\n    {\r\n        var collection = new List<string>\r\n        {\r\n            \"A String\",\r\n            \"Another String\",\r\n        };\r\n\r\n        Assert.Equal(\"A String and Another String\", collection.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void HumanizeUsesOxfordComma()\r\n    {\r\n        var collection = new List<string>\r\n        {\r\n            \"A String\",\r\n            \"Another String\",\r\n            \"A Third String\",\r\n        };\r\n\r\n        Assert.Equal(\"A String, Another String, or A Third String\", collection.Humanize(\"or\"));\r\n    }\r\n\r\n    readonly List<SomeClass> testCollection =\r\n    [\r\n        new() { SomeInt = 1, SomeString = \"One\" },\r\n        new() { SomeInt = 2, SomeString = \"Two\" },\r\n        new() { SomeInt = 3, SomeString = \"Three\" }\r\n    ];\r\n\r\n    [Fact]\r\n    public void HumanizeDefaultsToToString() =>\r\n        Assert.Equal(\"ToString, ToString, or ToString\", testCollection.Humanize(\"or\"));\r\n\r\n    [Fact]\r\n    public void HumanizeUsesStringDisplayFormatter()\r\n    {\r\n        var humanized = testCollection.Humanize(sc => $\"SomeObject #{sc.SomeInt} - {sc.SomeString}\");\r\n        Assert.Equal(\"SomeObject #1 - One, SomeObject #2 - Two, and SomeObject #3 - Three\", humanized);\r\n    }\r\n\r\n    [Fact]\r\n    public void HumanizeUsesObjectDisplayFormatter()\r\n    {\r\n        var humanized = testCollection.Humanize(sc => sc.SomeInt);\r\n        Assert.Equal(\"1, 2, and 3\", humanized);\r\n    }\r\n\r\n    [Fact]\r\n    public void HumanizeUsesStringDisplayFormatterWhenSeparatorIsProvided()\r\n    {\r\n        var humanized = testCollection.Humanize(sc => $\"SomeObject #{sc.SomeInt} - {sc.SomeString}\", \"or\");\r\n        Assert.Equal(\"SomeObject #1 - One, SomeObject #2 - Two, or SomeObject #3 - Three\", humanized);\r\n    }\r\n\r\n    [Fact]\r\n    public void HumanizeUsesObjectDisplayFormatterWhenSeparatorIsProvided()\r\n    {\r\n        var humanized = testCollection.Humanize(sc => sc.SomeInt, \"or\");\r\n        Assert.Equal(\"1, 2, or 3\", humanized);\r\n    }\r\n\r\n    [Fact]\r\n    public void HumanizeHandlesNullItemsWithoutAnException() =>\r\n        Assert.Null(Record.Exception(() => new object?[] { null, null }.Humanize()));\r\n\r\n    [Fact]\r\n    public void HumanizeHandlesNullStringDisplayFormatterReturnsWithoutAnException() =>\r\n        Assert.Null(Record.Exception(() => new[] { \"A\", \"B\", \"C\" }.Humanize(_ => null!)));\r\n\r\n    [Fact]\r\n    public void HumanizeHandlesNullObjectDisplayFormatterReturnsWithoutAnException() =>\r\n        Assert.Null(Record.Exception(() => new[] { \"A\", \"B\", \"C\" }.Humanize(_ => (object)null!)));\r\n\r\n    [Fact]\r\n    public void HumanizeRunsStringDisplayFormatterOnNulls() =>\r\n        Assert.Equal(\"1, (null), and 3\", new int?[] { 1, null, 3 }.Humanize(_ => _?.ToString() ?? \"(null)\"));\r\n\r\n    [Fact]\r\n    public void HumanizeRunsObjectDisplayFormatterOnNulls() =>\r\n        Assert.Equal(\"1, 2, and 3\", new int?[] { 1, null, 3 }.Humanize(_ => _ ?? 2));\r\n\r\n    [Fact]\r\n    public void HumanizeRemovesEmptyItemsByDefault() =>\r\n        Assert.Equal(\"A and C\", new[] { \"A\", \" \", \"C\" }.Humanize(DummyFormatter));\r\n\r\n    [Fact]\r\n    public void HumanizeTrimsItemsByDefault() =>\r\n        Assert.Equal(\"A, B, and C\", new[] { \"A\", \"  B  \", \"C\" }.Humanize(DummyFormatter));\r\n\r\n    /// <summary>\r\n    /// Use the dummy formatter to ensure tests are testing formatter output rather than input\r\n    /// </summary>\r\n    static readonly Func<string, string> DummyFormatter = input => input;\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/DateHumanize.cs",
    "content": "\r\npublic class DateHumanize\r\n{\r\n    static readonly Lock LockObject = new();\r\n\r\n    static void VerifyWithCurrentDate(string expectedString, TimeSpan deltaFromNow, CultureInfo? culture)\r\n    {\r\n        var utcNow = DateTime.UtcNow;\r\n        var localNow = DateTime.Now;\r\n\r\n        // feels like the only way to avoid breaking tests because CPU ticks over is to inject the base date\r\n        VerifyWithDate(expectedString, deltaFromNow, culture, localNow, utcNow);\r\n    }\r\n\r\n    static void VerifyWithDateInjection(string expectedString, TimeSpan deltaFromNow, CultureInfo? culture)\r\n    {\r\n        var utcNow = new DateTime(2013, 6, 20, 9, 58, 22, DateTimeKind.Utc);\r\n        var now = new DateTime(2013, 6, 20, 11, 58, 22, DateTimeKind.Local);\r\n\r\n        VerifyWithDate(expectedString, deltaFromNow, culture, now, utcNow);\r\n    }\r\n\r\n    static void VerifyWithDate(string expectedString, TimeSpan deltaFromBase, CultureInfo? culture, DateTime baseDate, DateTime baseDateUtc)\r\n    {\r\n        Assert.Equal(expectedString, baseDateUtc\r\n            .Add(deltaFromBase)\r\n            .Humanize(utcDate: true, dateToCompareAgainst: baseDateUtc, culture: culture));\r\n        Assert.Equal(expectedString, baseDate\r\n            .Add(deltaFromBase)\r\n            .Humanize(false, baseDate, culture: culture));\r\n\r\n        // Compared with default utcDate\r\n        Assert.Equal(expectedString, baseDateUtc\r\n            .Add(deltaFromBase)\r\n            .Humanize(utcDate: null, dateToCompareAgainst: baseDateUtc, culture: culture));\r\n        Assert.Equal(expectedString, baseDate\r\n            .Add(deltaFromBase)\r\n            .Humanize(null, baseDate, culture: culture));\r\n    }\r\n\r\n    public static void Verify(string expectedString, int unit, TimeUnit timeUnit, Tense tense, double? precision = null, CultureInfo? culture = null, DateTime? baseDate = null, DateTime? baseDateUtc = null)\r\n    {\r\n        // We lock this as these tests can be multi-threaded and we're setting a static\r\n        lock (LockObject)\r\n        {\r\n            if (precision.HasValue)\r\n            {\r\n                Configurator.DateTimeHumanizeStrategy = new PrecisionDateTimeHumanizeStrategy(precision.Value);\r\n            }\r\n            else\r\n            {\r\n                Configurator.DateTimeHumanizeStrategy = new DefaultDateTimeHumanizeStrategy();\r\n            }\r\n\r\n            unit = Math.Abs(unit);\r\n\r\n            if (tense == Tense.Past)\r\n            {\r\n                unit = -unit;\r\n            }\r\n\r\n            var deltaFromNow = timeUnit switch\r\n            {\r\n                TimeUnit.Millisecond => TimeSpan.FromMilliseconds(unit),\r\n                TimeUnit.Second => TimeSpan.FromSeconds(unit),\r\n                TimeUnit.Minute => TimeSpan.FromMinutes(unit),\r\n                TimeUnit.Hour => TimeSpan.FromHours(unit),\r\n                TimeUnit.Day => TimeSpan.FromDays(unit),\r\n                TimeUnit.Month => TimeSpan.FromDays(unit * 31),\r\n                TimeUnit.Year => TimeSpan.FromDays(unit * 366),\r\n                _ => new()\r\n            };\r\n\r\n            if (baseDate == null)\r\n            {\r\n                VerifyWithCurrentDate(expectedString, deltaFromNow, culture);\r\n                VerifyWithDateInjection(expectedString, deltaFromNow, culture);\r\n            }\r\n            else\r\n            {\r\n                VerifyWithDate(expectedString, deltaFromNow, culture, baseDate.Value, baseDateUtc!.Value);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/DateHumanizeDefaultStrategyTests.cs",
    "content": "﻿[UseCulture(\"en-US\")]\r\npublic class DateHumanizeDefaultStrategyTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"one second ago\")]\r\n    [InlineData(10, \"10 seconds ago\")]\r\n    [InlineData(59, \"59 seconds ago\")]\r\n    [InlineData(60, \"a minute ago\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"one second from now\")]\r\n    [InlineData(10, \"10 seconds from now\")]\r\n    [InlineData(59, \"59 seconds from now\")]\r\n    [InlineData(60, \"a minute from now\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"a minute ago\")]\r\n    [InlineData(10, \"10 minutes ago\")]\r\n    [InlineData(44, \"44 minutes ago\")]\r\n    [InlineData(45, \"45 minutes ago\")]\r\n    [InlineData(59, \"59 minutes ago\")]\r\n    [InlineData(60, \"an hour ago\")]\r\n    [InlineData(119, \"an hour ago\")]\r\n    [InlineData(120, \"2 hours ago\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"a minute from now\")]\r\n    [InlineData(10, \"10 minutes from now\")]\r\n    [InlineData(44, \"44 minutes from now\")]\r\n    [InlineData(45, \"45 minutes from now\")]\r\n    [InlineData(119, \"an hour from now\")]\r\n    [InlineData(120, \"2 hours from now\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"an hour ago\")]\r\n    [InlineData(10, \"10 hours ago\")]\r\n    [InlineData(23, \"23 hours ago\")]\r\n    [InlineData(24, \"yesterday\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"an hour from now\")]\r\n    [InlineData(10, \"10 hours from now\")]\r\n    [InlineData(23, \"23 hours from now\")]\r\n    [InlineData(24, \"tomorrow\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(38, \"tomorrow\")]\r\n    [InlineData(40, \"2 days from now\")]\r\n    public void HoursFromNowNotTomorrow(int hours, string expected)\r\n    {\r\n        //Only test with injected date, as results are dependent on time of day\r\n        var utcNow = new DateTime(2014, 6, 28, 9, 58, 22, DateTimeKind.Utc);\r\n        var now = new DateTime(2014, 6, 28, 9, 58, 22, DateTimeKind.Local);\r\n\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future, null, null, now, utcNow);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, \"yesterday\")]\r\n    [InlineData(10, \"10 days ago\")]\r\n    [InlineData(27, \"27 days ago\")]\r\n    [InlineData(32, \"one month ago\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"tomorrow\")]\r\n    [InlineData(10, \"10 days from now\")]\r\n    [InlineData(27, \"27 days from now\")]\r\n    [InlineData(32, \"one month from now\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"one month ago\")]\r\n    [InlineData(10, \"10 months ago\")]\r\n    [InlineData(11, \"11 months ago\")]\r\n    [InlineData(12, \"one year ago\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"one month from now\")]\r\n    [InlineData(10, \"10 months from now\")]\r\n    [InlineData(11, \"11 months from now\")]\r\n    [InlineData(12, \"one year from now\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"one year ago\")]\r\n    [InlineData(2, \"2 years ago\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"one year from now\")]\r\n    [InlineData(2, \"2 years from now\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"now\", 0, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Never()\r\n    {\r\n        DateTime? never = null;\r\n        Assert.Equal(\"never\", never.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void Nullable_ExpectSame()\r\n    {\r\n        DateTime? never = new DateTime(2015, 12, 7, 9, 0, 0);\r\n\r\n        Assert.Equal(never.Value.Humanize(), never.Humanize());\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, TimeUnit.Year, Tense.Future, \"en-US\", \"one year from now\")]\r\n    [InlineData(40, TimeUnit.Second, Tense.Past, \"ru-RU\", \"40 секунд назад\")]\r\n    [InlineData(2, TimeUnit.Day, Tense.Past, \"sv-SE\", \"för 2 dagar sedan\")]\r\n    public void CanSpecifyCultureExplicitly(int unit, TimeUnit timeUnit, Tense tense, string culture, string expected) =>\r\n        DateHumanize.Verify(expected, unit, timeUnit, tense, culture: new(culture));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/DateOnlyHumanizeTests.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\n[UseCulture(\"en-US\")]\r\npublic class DateOnlyHumanizeTests\r\n{\r\n    [Fact]\r\n    public void DefaultStrategy_SameDate()\r\n    {\r\n        Configurator.DateOnlyHumanizeStrategy = new DefaultDateOnlyHumanizeStrategy();\r\n\r\n        var inputTime = new DateOnly(2015, 07, 05);\r\n        var baseTime = new DateOnly(2015, 07, 05);\r\n\r\n        const string expectedResult = \"now\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void DefaultStrategy_MonthApart()\r\n    {\r\n        Configurator.DateOnlyHumanizeStrategy = new DefaultDateOnlyHumanizeStrategy();\r\n\r\n        var inputTime = new DateOnly(2015, 08, 05);\r\n        var baseTime = new DateOnly(2015, 07, 05);\r\n\r\n        const string expectedResult = \"one month from now\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void DefaultStrategy_DaysAgo()\r\n    {\r\n        Configurator.DateOnlyHumanizeStrategy = new DefaultDateOnlyHumanizeStrategy();\r\n\r\n        var inputTime = new DateOnly(2015, 07, 02);\r\n        var baseTime = new DateOnly(2015, 07, 05);\r\n\r\n        const string expectedResult = \"3 days ago\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void DefaultStrategy_YearsAgo()\r\n    {\r\n        Configurator.DateOnlyHumanizeStrategy = new DefaultDateOnlyHumanizeStrategy();\r\n\r\n        var baseDate = DateTime.Now;\r\n        var inputTime = DateOnly.FromDateTime(baseDate.AddMonths(-24));\r\n        var baseTime = DateOnly.FromDateTime(baseDate);\r\n\r\n        const string expectedResult = \"2 years ago\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void PrecisionStrategy_NextDay()\r\n    {\r\n        Configurator.DateOnlyHumanizeStrategy = new PrecisionDateOnlyHumanizeStrategy(0.75);\r\n\r\n        var inputTime = new DateOnly(2015, 07, 05);\r\n        var baseTime = new DateOnly(2015, 07, 04);\r\n\r\n        const string expectedResult = \"tomorrow\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void Never()\r\n    {\r\n        DateOnly? never = null;\r\n        Assert.Equal(\"never\", never.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void Nullable_ExpectSame()\r\n    {\r\n        DateOnly? never = new DateOnly(2015, 12, 7);\r\n\r\n        Assert.Equal(never.Value.Humanize(), never.Humanize());\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/DateTimeHumanizePrecisionStrategyTests.cs",
    "content": "﻿[UseCulture(\"en-US\")]\r\npublic class DateTimeHumanizePrecisionStrategyTests\r\n{\r\n    const double DefaultPrecision = .75;\r\n\r\n    [Theory]\r\n    [InlineData(1, \"now\")]\r\n    [InlineData(749, \"now\")]\r\n    [InlineData(750, \"one second ago\")]\r\n    [InlineData(1000, \"one second ago\")]\r\n    [InlineData(1749, \"one second ago\")]\r\n    [InlineData(1750, \"2 seconds ago\")]\r\n    public void MillisecondsAgo(int milliseconds, string expected) =>\r\n        DateHumanize.Verify(expected, milliseconds, TimeUnit.Millisecond, Tense.Past, DefaultPrecision);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"now\")]\r\n    [InlineData(749, \"now\")]\r\n    [InlineData(750, \"one second from now\")]\r\n    [InlineData(1000, \"one second from now\")]\r\n    [InlineData(1749, \"one second from now\")]\r\n    [InlineData(1750, \"2 seconds from now\")]\r\n    public void MillisecondsFromNow(int milliseconds, string expected) =>\r\n        DateHumanize.Verify(expected, milliseconds, TimeUnit.Millisecond, Tense.Future, DefaultPrecision);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"one second ago\")]\r\n    [InlineData(10, \"10 seconds ago\")]\r\n    [InlineData(44, \"44 seconds ago\")]\r\n    [InlineData(45, \"a minute ago\")]\r\n    [InlineData(60, \"a minute ago\")]\r\n    [InlineData(104, \"a minute ago\")]\r\n    [InlineData(105, \"2 minutes ago\")]\r\n    [InlineData(120, \"2 minutes ago\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past, DefaultPrecision);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"one second from now\")]\r\n    [InlineData(10, \"10 seconds from now\")]\r\n    [InlineData(44, \"44 seconds from now\")]\r\n    [InlineData(45, \"a minute from now\")]\r\n    [InlineData(60, \"a minute from now\")]\r\n    [InlineData(104, \"a minute from now\")]\r\n    [InlineData(105, \"2 minutes from now\")]\r\n    [InlineData(120, \"2 minutes from now\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future, DefaultPrecision);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"a minute ago\")]\r\n    [InlineData(10, \"10 minutes ago\")]\r\n    [InlineData(44, \"44 minutes ago\")]\r\n    [InlineData(45, \"an hour ago\")]\r\n    [InlineData(60, \"an hour ago\")]\r\n    [InlineData(104, \"an hour ago\")]\r\n    [InlineData(105, \"2 hours ago\")]\r\n    [InlineData(120, \"2 hours ago\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past, DefaultPrecision);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"a minute from now\")]\r\n    [InlineData(10, \"10 minutes from now\")]\r\n    [InlineData(44, \"44 minutes from now\")]\r\n    [InlineData(45, \"an hour from now\")]\r\n    [InlineData(60, \"an hour from now\")]\r\n    [InlineData(104, \"an hour from now\")]\r\n    [InlineData(105, \"2 hours from now\")]\r\n    [InlineData(120, \"2 hours from now\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future, DefaultPrecision);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"an hour ago\")]\r\n    [InlineData(10, \"10 hours ago\")]\r\n    [InlineData(17, \"17 hours ago\")]\r\n    [InlineData(18, \"yesterday\")]\r\n    [InlineData(24, \"yesterday\")]\r\n    [InlineData(41, \"yesterday\")]\r\n    [InlineData(42, \"2 days ago\")]\r\n    [InlineData(48, \"2 days ago\")]\r\n    [InlineData(60, \"2 days ago\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past, DefaultPrecision);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"an hour from now\")]\r\n    [InlineData(10, \"10 hours from now\")]\r\n    [InlineData(18, \"tomorrow\")]\r\n    [InlineData(24, \"tomorrow\")]\r\n    [InlineData(41, \"tomorrow\")]\r\n    [InlineData(42, \"2 days from now\")]\r\n    [InlineData(48, \"2 days from now\")]\r\n    [InlineData(60, \"2 days from now\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future, DefaultPrecision);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"yesterday\")]\r\n    [InlineData(10, \"10 days ago\")]\r\n    [InlineData(20, \"20 days ago\")]\r\n    [InlineData(22, \"22 days ago\")]\r\n    [InlineData(23, \"one month ago\")]\r\n    [InlineData(31, \"one month ago\")]\r\n    [InlineData(43, \"one month ago\")]\r\n    [InlineData(53, \"2 months ago\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past, DefaultPrecision);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"tomorrow\")]\r\n    [InlineData(10, \"10 days from now\")]\r\n    [InlineData(20, \"20 days from now\")]\r\n    [InlineData(22, \"22 days from now\")]\r\n    [InlineData(23, \"one month from now\")]\r\n    [InlineData(31, \"one month from now\")]\r\n    [InlineData(43, \"one month from now\")]\r\n    [InlineData(53, \"2 months from now\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future, DefaultPrecision);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"one month ago\")]\r\n    [InlineData(8, \"8 months ago\")]\r\n    [InlineData(9, \"one year ago\")]\r\n    [InlineData(12, \"one year ago\")]\r\n    [InlineData(19, \"one year ago\")]\r\n    [InlineData(21, \"2 years ago\")]\r\n    [InlineData(24, \"2 years ago\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past, DefaultPrecision);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"one month from now\")]\r\n    [InlineData(8, \"8 months from now\")]\r\n    [InlineData(9, \"one year from now\")]\r\n    [InlineData(12, \"one year from now\")]\r\n    [InlineData(19, \"one year from now\")]\r\n    [InlineData(21, \"2 years from now\")]\r\n    [InlineData(24, \"2 years from now\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future, DefaultPrecision);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"one year ago\")]\r\n    [InlineData(2, \"2 years ago\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past, DefaultPrecision);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"one year from now\")]\r\n    [InlineData(2, \"2 years from now\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future, DefaultPrecision);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/DateTimeOffsetHumanizeTests.cs",
    "content": "﻿[UseCulture(\"en-US\")]\r\npublic class DateTimeOffsetHumanizeTests\r\n{\r\n    [Fact]\r\n    public void DefaultStrategy_SameOffset()\r\n    {\r\n        Configurator.DateTimeOffsetHumanizeStrategy = new DefaultDateTimeOffsetHumanizeStrategy();\r\n\r\n        var inputTime = new DateTimeOffset(2015, 07, 05, 04, 0, 0, TimeSpan.Zero);\r\n        var baseTime = new DateTimeOffset(2015, 07, 05, 03, 0, 0, TimeSpan.Zero);\r\n\r\n        const string expectedResult = \"an hour from now\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void DefaultStrategy_DifferentOffsets()\r\n    {\r\n        Configurator.DateTimeOffsetHumanizeStrategy = new DefaultDateTimeOffsetHumanizeStrategy();\r\n\r\n        var inputTime = new DateTimeOffset(2015, 07, 05, 03, 0, 0, new(2, 0, 0));\r\n        var baseTime = new DateTimeOffset(2015, 07, 05, 02, 30, 0, new(1, 0, 0));\r\n\r\n        const string expectedResult = \"30 minutes ago\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void PrecisionStrategy_SameOffset()\r\n    {\r\n        Configurator.DateTimeOffsetHumanizeStrategy = new PrecisionDateTimeOffsetHumanizeStrategy(0.75);\r\n\r\n        var inputTime = new DateTimeOffset(2015, 07, 05, 04, 0, 0, TimeSpan.Zero);\r\n        var baseTime = new DateTimeOffset(2015, 07, 04, 05, 0, 0, TimeSpan.Zero);\r\n\r\n        const string expectedResult = \"tomorrow\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void PrecisionStrategy_DifferentOffsets()\r\n    {\r\n        Configurator.DateTimeOffsetHumanizeStrategy = new PrecisionDateTimeOffsetHumanizeStrategy(0.75);\r\n\r\n        var inputTime = new DateTimeOffset(2015, 07, 05, 03, 45, 0, new(2, 0, 0));\r\n        var baseTime = new DateTimeOffset(2015, 07, 05, 02, 30, 0, new(-5, 0, 0));\r\n\r\n        const string expectedResult = \"6 hours ago\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void Never()\r\n    {\r\n        DateTimeOffset? never = null;\r\n        Assert.Equal(\"never\", never.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void Nullable_ExpectSame()\r\n    {\r\n        DateTimeOffset? never = new DateTimeOffset(2015, 12, 7, 9, 0, 0, TimeSpan.FromHours(1));\r\n\r\n        Assert.Equal(never.Value.Humanize(), never.Humanize());\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/EnumHumanizeTests.cs",
    "content": "using System.Diagnostics.CodeAnalysis;\r\n\r\npublic class EnumHumanizeTests\r\n{\r\n    [Fact]\r\n    public void HonorsDescriptionAttribute() =>\r\n        Assert.Equal(EnumTestsResources.MemberWithDescriptionAttribute, EnumUnderTest.MemberWithDescriptionAttribute.Humanize());\r\n\r\n    [Fact]\r\n    public void HonorsDescriptionAttributeSubclasses() =>\r\n        Assert.Equal(\"Overridden \" + EnumTestsResources.MemberWithDescriptionAttributeSubclass, EnumUnderTest.MemberWithDescriptionAttributeSubclass.Humanize());\r\n\r\n    [Fact]\r\n    public void HonorsAnyAttributeWithDescriptionStringProperty() =>\r\n        Assert.Equal(EnumTestsResources.MemberWithCustomDescriptionAttribute, EnumUnderTest.MemberWithCustomDescriptionAttribute.Humanize());\r\n\r\n    [Fact]\r\n    public void OnlyStringDescriptionsApply() =>\r\n        Assert.Equal(EnumTestsResources.MemberWithImposterDescriptionAttribute, EnumUnderTest.MemberWithImposterDescriptionAttribute.Humanize());\r\n\r\n    [Fact]\r\n    public void CanHumanizeMembersWithoutDescriptionAttribute() =>\r\n        Assert.Equal(EnumTestsResources.MemberWithoutDescriptionAttributeSentence, EnumUnderTest.MemberWithoutDescriptionAttribute.Humanize());\r\n\r\n    [Fact]\r\n    public void CanApplyTitleCasingOnEnumHumanization() =>\r\n        Assert.Equal(\r\n            EnumTestsResources.MemberWithoutDescriptionAttributeTitle,\r\n            EnumUnderTest.MemberWithoutDescriptionAttribute.Humanize(LetterCasing.Title));\r\n\r\n    [Fact]\r\n    public void CanApplyLowerCaseCasingOnEnumHumanization() =>\r\n        Assert.Equal(\r\n            EnumTestsResources.MemberWithoutDescriptionAttributeLowerCase,\r\n            EnumUnderTest.MemberWithoutDescriptionAttribute.Humanize(LetterCasing.LowerCase));\r\n\r\n    [Fact]\r\n    public void AllCapitalMembersAreReturnedAsIs() =>\r\n        Assert.Equal(EnumUnderTest.ALLCAPITALS.ToString(), EnumUnderTest.ALLCAPITALS.Humanize());\r\n\r\n    [Fact]\r\n    public void HonorsDisplayAttribute() =>\r\n        Assert.Equal(EnumTestsResources.MemberWithDisplayAttribute, EnumUnderTest.MemberWithDisplayAttribute.Humanize());\r\n\r\n    [Fact]\r\n    public void HandlesDisplayAttributeWithNoDescription() =>\r\n        Assert.Equal(EnumTestsResources.MemberWithDisplayAttributeWithoutDescription, EnumUnderTest.MemberWithDisplayAttributeWithoutDescription.Humanize());\r\n\r\n    [Fact]\r\n    public void HonorsLocalizedDisplayAttribute() =>\r\n        Assert.Equal(EnumTestsResources.MemberWithLocalizedDisplayAttribute, EnumUnderTest.MemberWithLocalizedDisplayAttribute.Humanize());\r\n\r\n    [Fact]\r\n    public void HumanizeCustomPropertyAttributeWithLocator()\r\n    {\r\n        Configurator.ResetUseEnumDescriptionPropertyLocator();\r\n        Configurator.UseEnumDescriptionPropertyLocator(p => p.Name == \"Info\");\r\n        try\r\n        {\r\n            Assert.Equal(EnumTestsResources.MemberWithCustomPropertyAttribute, EnumForCustomLocator.MemberWithCustomPropertyAttribute.Humanize());\r\n        }\r\n        finally\r\n        {\r\n            Configurator.ResetUseEnumDescriptionPropertyLocator();\r\n        }\r\n    }\r\n\r\n    [Fact]\r\n    public void HumanizeMembersWithoutDescriptionAttributeWithLocator()\r\n    {\r\n        Configurator.ResetUseEnumDescriptionPropertyLocator();\r\n        Configurator.UseEnumDescriptionPropertyLocator(p => p.Name == \"Info\");\r\n        try\r\n        {\r\n            Assert.Equal(EnumTestsResources.MemberWithoutDescriptionAttributeSentence, EnumForCustomLocator.MemberWithoutDescriptionAttribute.Humanize());\r\n        }\r\n        finally\r\n        {\r\n            Configurator.ResetUseEnumDescriptionPropertyLocator();\r\n        }\r\n    }\r\n\r\n    [Fact]\r\n    [RequiresDynamicCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    [RequiresUnreferencedCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    public void DehumanizeThrowsForEnumNoMatch()\r\n    {\r\n        Assert.Throws<NoMatchFoundException>(() => EnumTestsResources.MemberWithDescriptionAttribute.DehumanizeTo<DummyEnum>());\r\n        Assert.Throws<NoMatchFoundException>(() => EnumTestsResources.MemberWithDescriptionAttribute.DehumanizeTo(typeof(DummyEnum)));\r\n    }\r\n\r\n    [Fact]\r\n    [RequiresDynamicCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    [RequiresUnreferencedCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    public void DehumanizeCanReturnNullForEnumNoMatch() =>\r\n        Assert.Null(EnumTestsResources.MemberWithDescriptionAttribute.DehumanizeTo<DummyEnum>(OnNoMatch.ReturnsNull));\r\n\r\n    [Fact]\r\n    [RequiresDynamicCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    [RequiresUnreferencedCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    public void DehumanizeDescriptionAttribute()\r\n    {\r\n        Assert.Equal(EnumUnderTest.MemberWithDescriptionAttribute, EnumTestsResources.MemberWithDescriptionAttribute.DehumanizeTo<EnumUnderTest>());\r\n        Assert.Equal(EnumUnderTest.MemberWithDescriptionAttribute, EnumTestsResources.MemberWithDescriptionAttribute.DehumanizeTo(typeof(EnumUnderTest)));\r\n    }\r\n\r\n    [Fact]\r\n    [RequiresDynamicCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    [RequiresUnreferencedCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    public void DehumanizeDescriptionAttributeSubclasses()\r\n    {\r\n        const string calculatedDescription = \"Overridden \" + EnumTestsResources.MemberWithDescriptionAttributeSubclass;\r\n        Assert.Equal(EnumUnderTest.MemberWithDescriptionAttributeSubclass, calculatedDescription.DehumanizeTo<EnumUnderTest>());\r\n        Assert.Equal(EnumUnderTest.MemberWithDescriptionAttributeSubclass, calculatedDescription.DehumanizeTo(typeof(EnumUnderTest)));\r\n    }\r\n\r\n    [Fact]\r\n    [RequiresDynamicCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    [RequiresUnreferencedCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    public void DehumanizeAnyAttributeWithDescriptionStringProperty()\r\n    {\r\n        Assert.Equal(EnumUnderTest.MemberWithCustomDescriptionAttribute, EnumTestsResources.MemberWithCustomDescriptionAttribute.DehumanizeTo<EnumUnderTest>());\r\n        Assert.Equal(EnumUnderTest.MemberWithCustomDescriptionAttribute, EnumTestsResources.MemberWithCustomDescriptionAttribute.DehumanizeTo(typeof(EnumUnderTest)));\r\n    }\r\n\r\n    [Fact]\r\n    [RequiresDynamicCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    [RequiresUnreferencedCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    public void DehumanizeMembersWithoutDescriptionAttribute()\r\n    {\r\n        Assert.Equal(EnumUnderTest.MemberWithoutDescriptionAttribute, EnumTestsResources.MemberWithoutDescriptionAttributeSentence.DehumanizeTo<EnumUnderTest>());\r\n        Assert.Equal(EnumUnderTest.MemberWithoutDescriptionAttribute, EnumTestsResources.MemberWithoutDescriptionAttributeSentence.DehumanizeTo(typeof(EnumUnderTest)));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(EnumTestsResources.MemberWithoutDescriptionAttributeTitle, EnumUnderTest.MemberWithoutDescriptionAttribute)]\r\n    [InlineData(EnumTestsResources.MemberWithoutDescriptionAttributeLowerCase, EnumUnderTest.MemberWithoutDescriptionAttribute)]\r\n    [InlineData(EnumTestsResources.MemberWithoutDescriptionAttributeSentence, EnumUnderTest.MemberWithoutDescriptionAttribute)]\r\n    [RequiresDynamicCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    [RequiresUnreferencedCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    public void DehumanizeIsCaseInsensitive(string input, EnumUnderTest expectedEnum)\r\n    {\r\n        Assert.Equal(expectedEnum, input.DehumanizeTo<EnumUnderTest>());\r\n        Assert.Equal(expectedEnum, input.DehumanizeTo(typeof(EnumUnderTest)));\r\n    }\r\n\r\n    [Fact]\r\n    [RequiresDynamicCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    [RequiresUnreferencedCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    public void DehumanizeAllCapitalMembersAreReturnedAsIs()\r\n    {\r\n        Assert.Equal(EnumUnderTest.ALLCAPITALS, EnumUnderTest.ALLCAPITALS.ToString().DehumanizeTo<EnumUnderTest>());\r\n        Assert.Equal(EnumUnderTest.ALLCAPITALS, EnumUnderTest.ALLCAPITALS.ToString().DehumanizeTo(typeof(EnumUnderTest)));\r\n    }\r\n\r\n    [Fact]\r\n    [RequiresDynamicCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    [RequiresUnreferencedCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    public void DehumanizeDisplayAttribute()\r\n    {\r\n        Assert.Equal(EnumUnderTest.MemberWithDisplayAttribute, EnumTestsResources.MemberWithDisplayAttribute.DehumanizeTo<EnumUnderTest>());\r\n        Assert.Equal(EnumUnderTest.MemberWithDisplayAttribute, EnumTestsResources.MemberWithDisplayAttribute.DehumanizeTo(typeof(EnumUnderTest)));\r\n    }\r\n\r\n    [Fact]\r\n    [RequiresDynamicCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    [RequiresUnreferencedCode(\"The native code for the target enumeration might not be available at runtime.\")]\r\n    public void DehumanizeLocalizedDisplayAttribute()\r\n    {\r\n        Assert.Equal(EnumUnderTest.MemberWithLocalizedDisplayAttribute, EnumTestsResources.MemberWithLocalizedDisplayAttribute.DehumanizeTo<EnumUnderTest>());\r\n        Assert.Equal(EnumUnderTest.MemberWithLocalizedDisplayAttribute, EnumTestsResources.MemberWithLocalizedDisplayAttribute.DehumanizeTo(typeof(EnumUnderTest)));\r\n    }\r\n\r\n    enum DummyEnum\r\n    {\r\n        First,\r\n        Second\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/EnumUnderTest.cs",
    "content": "using System.ComponentModel;\r\nusing System.ComponentModel.DataAnnotations;\r\n\r\npublic enum EnumUnderTest\r\n{\r\n    [Description(EnumTestsResources.MemberWithDescriptionAttribute)]\r\n    MemberWithDescriptionAttribute,\r\n    [DescriptionSubclass(EnumTestsResources.MemberWithDescriptionAttributeSubclass)]\r\n    MemberWithDescriptionAttributeSubclass,\r\n    [CustomDescription(EnumTestsResources.MemberWithCustomDescriptionAttribute)]\r\n    MemberWithCustomDescriptionAttribute,\r\n    [ImposterDescription(42)]\r\n    MemberWithImposterDescriptionAttribute,\r\n    [CustomProperty(EnumTestsResources.MemberWithCustomPropertyAttribute)]\r\n    MemberWithCustomPropertyAttribute,\r\n    MemberWithoutDescriptionAttribute,\r\n    ALLCAPITALS,\r\n    [Display(Description = EnumTestsResources.MemberWithDisplayAttribute)]\r\n    MemberWithDisplayAttribute,\r\n    [Display(Description = \"MemberWithLocalizedDisplayAttribute\", ResourceType = typeof(EnumTestsResources))]\r\n    MemberWithLocalizedDisplayAttribute,\r\n    [Display(Name = EnumTestsResources.MemberWithDisplayAttributeWithoutDescription)]\r\n    MemberWithDisplayAttributeWithoutDescription\r\n}\r\n\r\npublic enum EnumForCustomLocator\r\n{\r\n    [CustomProperty(EnumTestsResources.MemberWithCustomPropertyAttribute)]\r\n    MemberWithCustomPropertyAttribute,\r\n    MemberWithoutDescriptionAttribute,\r\n}\r\n\r\npublic class EnumTestsResources\r\n{\r\n    public const string MemberWithDescriptionAttribute = \"Some Description\";\r\n    public const string MemberWithDescriptionAttributeSubclass = \"Description in Description subclass\";\r\n    public const string MemberWithCustomDescriptionAttribute = \"Description in custom Description attribute\";\r\n    public const string MemberWithImposterDescriptionAttribute = \"Member with imposter description attribute\";\r\n    public const string MemberWithCustomPropertyAttribute = \"Description in custom property attribute\";\r\n    public const string MemberWithoutDescriptionAttributeSentence = \"Member without description attribute\";\r\n    public const string MemberWithoutDescriptionAttributeTitle = \"Member Without Description Attribute\";\r\n    public const string MemberWithoutDescriptionAttributeLowerCase = \"member without description attribute\";\r\n    public const string MemberWithDisplayAttribute = \"Description from Display attribute\";\r\n    public const string MemberWithDisplayAttributeWithoutDescription = \"Displayattribute without description\";\r\n    public static string MemberWithLocalizedDisplayAttribute => \"Localized description from Display attribute\";\r\n}\r\n\r\n[AttributeUsage(AttributeTargets.Field)]\r\npublic class ImposterDescriptionAttribute(int description) :\r\n    Attribute\r\n{\r\n    public int Description { get; set; } = description;\r\n}\r\n\r\n[AttributeUsage(AttributeTargets.Field | AttributeTargets.Method)]\r\npublic class CustomDescriptionAttribute(string description) :\r\n    Attribute\r\n{\r\n    public string Description { get; set; } = description;\r\n}\r\n\r\n[AttributeUsage(AttributeTargets.Field)]\r\npublic class DescriptionSubclassAttribute(string description) :\r\n    DescriptionAttribute(description)\r\n{\r\n    public override string Description => \"Overridden \" + base.Description;\r\n}\r\n\r\n[AttributeUsage(AttributeTargets.Field)]\r\npublic class CustomPropertyAttribute(string info) :\r\n    Attribute\r\n{\r\n    public string Info { get; set; } = info;\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/FluentDate/InDateTests.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\npublic class InDateTests\r\n{\r\n    [Fact]\r\n    public void InJanuary() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 1, 1), InDate.January);\r\n\r\n    [Fact]\r\n    public void InJanuaryOf2009() =>\r\n        Assert.Equal(new(2009, 1, 1), InDate.JanuaryOf(2009));\r\n\r\n    [Fact]\r\n    public void InFebruary() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 2, 1), InDate.February);\r\n\r\n    [Fact]\r\n    public void InTheYear() =>\r\n        Assert.Equal(new(2009, 1, 1), InDate.TheYear(2009));\r\n\r\n    [Fact]\r\n    public void InFiveDays()\r\n    {\r\n        var baseDate = OnDate.January.The21st;\r\n        var date = InDate.Five.DaysFrom(baseDate);\r\n        Assert.Equal(baseDate.AddDays(5), date);\r\n    }\r\n}\r\n#endif"
  },
  {
    "path": "tests/Humanizer.Tests/FluentDate/InTests.cs",
    "content": "﻿public class InTests\r\n{\r\n    [Fact]\r\n    public void InJanuary() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 1, 1), In.January);\r\n\r\n    [Fact]\r\n    public void InJanuaryOf2009() =>\r\n        Assert.Equal(new(2009, 1, 1), In.JanuaryOf(2009));\r\n\r\n    [Fact]\r\n    public void InFebruary() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 2, 1), In.February);\r\n\r\n    [Fact]\r\n    public void InFebruaryOf2009() =>\r\n        Assert.Equal(new(2009, 2, 1), In.FebruaryOf(2009));\r\n\r\n    [Fact]\r\n    public void InMarch() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 3, 1), In.March);\r\n\r\n    [Fact]\r\n    public void InMarchOf2009() =>\r\n        Assert.Equal(new(2009, 3, 1), In.MarchOf(2009));\r\n\r\n    [Fact]\r\n    public void InApril() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 4, 1), In.April);\r\n\r\n    [Fact]\r\n    public void InAprilOf2009() =>\r\n        Assert.Equal(new(2009, 4, 1), In.AprilOf(2009));\r\n\r\n    [Fact]\r\n    public void InMay() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 5, 1), In.May);\r\n\r\n    [Fact]\r\n    public void InMayOf2009() =>\r\n        Assert.Equal(new(2009, 5, 1), In.MayOf(2009));\r\n\r\n    [Fact]\r\n    public void InJune() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 6, 1), In.June);\r\n\r\n    [Fact]\r\n    public void InJuneOf2009() =>\r\n        Assert.Equal(new(2009, 6, 1), In.JuneOf(2009));\r\n\r\n    [Fact]\r\n    public void InJuly() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 7, 1), In.July);\r\n\r\n    [Fact]\r\n    public void InJulyOf2009() =>\r\n        Assert.Equal(new(2009, 7, 1), In.JulyOf(2009));\r\n\r\n    [Fact]\r\n    public void InAugust() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 8, 1), In.August);\r\n\r\n    [Fact]\r\n    public void InAugustOf2009() =>\r\n        Assert.Equal(new(2009, 8, 1), In.AugustOf(2009));\r\n\r\n    [Fact]\r\n    public void InSeptember() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 9, 1), In.September);\r\n\r\n    [Fact]\r\n    public void InSeptemberOf2009() =>\r\n        Assert.Equal(new(2009, 9, 1), In.SeptemberOf(2009));\r\n\r\n    [Fact]\r\n    public void InOctober() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 10, 1), In.October);\r\n\r\n    [Fact]\r\n    public void InOctoberOfIn2009() =>\r\n        Assert.Equal(new(2009, 10, 1), In.OctoberOf(2009));\r\n\r\n    [Fact]\r\n    public void InNovember() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 11, 1), In.November);\r\n\r\n    [Fact]\r\n    public void InNovemberOf2009() =>\r\n        Assert.Equal(new(2009, 11, 1), In.NovemberOf(2009));\r\n\r\n    [Fact]\r\n    public void InDecember() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 12, 1), In.December);\r\n\r\n    [Fact]\r\n    public void InDecemberOf2009() =>\r\n        Assert.Equal(new(2009, 12, 1), In.DecemberOf(2009));\r\n\r\n    [Fact]\r\n    public void InTheYear() =>\r\n        Assert.Equal(new(2009, 1, 1), In.TheYear(2009));\r\n\r\n    [Fact]\r\n    public void InFiveDays()\r\n    {\r\n        var baseDate = On.January.The21st;\r\n        var date = In.Five.DaysFrom(baseDate);\r\n        Assert.Equal(baseDate.AddDays(5), date);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/FluentDate/OnDateTests.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\npublic class OnDateTests\r\n{\r\n    [Fact]\r\n    public void OnJanuaryThe23rd() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 1, 23), OnDate.January.The23rd);\r\n\r\n    [Fact]\r\n    public void OnDecemberThe4th() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 12, 4), OnDate.December.The4th);\r\n\r\n    [Fact]\r\n    public void OnFebruaryThe() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 2, 11), OnDate.February.The(11));\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/FluentDate/OnTests.cs",
    "content": "﻿public class OnTests\r\n{\r\n    [Fact]\r\n    public void OnJanuaryThe23rd() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 1, 23), On.January.The23rd);\r\n\r\n    [Fact]\r\n    public void OnDecemberThe4th() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 12, 4), On.December.The4th);\r\n\r\n    [Fact]\r\n    public void OnFebruaryThe() =>\r\n        Assert.Equal(new(DateTime.Now.Year, 2, 11), On.February.The(11));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/FluentDate/PrepositionTests.cs",
    "content": "﻿public class PrepositionTests\r\n{\r\n    [Fact]\r\n    public void AtMidnight()\r\n    {\r\n        var now = DateTime.Now;\r\n        var midnight = now.AtMidnight();\r\n        Assert.Equal(new(now.Year, now.Month, now.Day), midnight);\r\n    }\r\n\r\n    [Fact]\r\n    public void AtNoon()\r\n    {\r\n        var now = DateTime.Now;\r\n        var noon = now.AtNoon();\r\n        Assert.Equal(new(now.Year, now.Month, now.Day, 12, 0, 0), noon);\r\n    }\r\n\r\n    [Fact]\r\n    public void InYear()\r\n    {\r\n        var now = DateTime.Now;\r\n        var in2012 = now.In(2012);\r\n        Assert.Equal(new(2012, now.Month, now.Day, now.Hour, now.Minute, now.Second, now.Millisecond), in2012);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/GlobalUsings.cs",
    "content": "global using System.Globalization;\r\nglobal using System.Runtime.CompilerServices;\r\nglobal using Humanizer;\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/HeadingTests.cs",
    "content": "﻿[UseCulture(\"en-US\")]\r\npublic class HeadingTests\r\n{\r\n    [InlineData(0, \"N\")]\r\n    [InlineData(11.2, \"N\")]\r\n    [InlineData(11.3, \"NNE\")]\r\n    [InlineData(22.5, \"NNE\")]\r\n    [InlineData(33.7, \"NNE\")]\r\n    [InlineData(33.8, \"NE\")]\r\n    [InlineData(45, \"NE\")]\r\n    [InlineData(56.2, \"NE\")]\r\n    [InlineData(56.3, \"ENE\")]\r\n    [InlineData(67.5, \"ENE\")]\r\n    [InlineData(78.7, \"ENE\")]\r\n    [InlineData(78.8, \"E\")]\r\n    [InlineData(90, \"E\")]\r\n    [InlineData(101.2, \"E\")]\r\n    [InlineData(101.3, \"ESE\")]\r\n    [InlineData(112.5, \"ESE\")]\r\n    [InlineData(123.7, \"ESE\")]\r\n    [InlineData(123.8, \"SE\")]\r\n    [InlineData(135, \"SE\")]\r\n    [InlineData(146.2, \"SE\")]\r\n    [InlineData(146.3, \"SSE\")]\r\n    [InlineData(157.5, \"SSE\")]\r\n    [InlineData(168.7, \"SSE\")]\r\n    [InlineData(168.8, \"S\")]\r\n    [InlineData(180, \"S\")]\r\n    [InlineData(191.2, \"S\")]\r\n    [InlineData(191.3, \"SSW\")]\r\n    [InlineData(202.5, \"SSW\")]\r\n    [InlineData(213.7, \"SSW\")]\r\n    [InlineData(213.8, \"SW\")]\r\n    [InlineData(225, \"SW\")]\r\n    [InlineData(236.2, \"SW\")]\r\n    [InlineData(236.3, \"WSW\")]\r\n    [InlineData(247.5, \"WSW\")]\r\n    [InlineData(258.7, \"WSW\")]\r\n    [InlineData(258.8, \"W\")]\r\n    [InlineData(270, \"W\")]\r\n    [InlineData(281.2, \"W\")]\r\n    [InlineData(281.3, \"WNW\")]\r\n    [InlineData(292.5, \"WNW\")]\r\n    [InlineData(303.7, \"WNW\")]\r\n    [InlineData(303.8, \"NW\")]\r\n    [InlineData(315, \"NW\")]\r\n    [InlineData(326.2, \"NW\")]\r\n    [InlineData(326.3, \"NNW\")]\r\n    [InlineData(337.5, \"NNW\")]\r\n    [InlineData(348.7, \"NNW\")]\r\n    [InlineData(348.8, \"N\")]\r\n    [InlineData(360, \"N\")]\r\n    [InlineData(720, \"N\")]\r\n    [Theory]\r\n    public void ToHeadingAbbreviated(double heading, string expected) =>\r\n        Assert.Equal(expected, heading.ToHeading());\r\n\r\n    [InlineData(0, \"north\")]\r\n    [InlineData(22.5, \"north-northeast\")]\r\n    [InlineData(45, \"northeast\")]\r\n    [InlineData(67.5, \"east-northeast\")]\r\n    [InlineData(90, \"east\")]\r\n    [InlineData(112.5, \"east-southeast\")]\r\n    [InlineData(135, \"southeast\")]\r\n    [InlineData(157.5, \"south-southeast\")]\r\n    [InlineData(180, \"south\")]\r\n    [InlineData(202.5, \"south-southwest\")]\r\n    [InlineData(225, \"southwest\")]\r\n    [InlineData(247.5, \"west-southwest\")]\r\n    [InlineData(270, \"west\")]\r\n    [InlineData(292.5, \"west-northwest\")]\r\n    [InlineData(315, \"northwest\")]\r\n    [InlineData(337.5, \"north-northwest\")]\r\n    [InlineData(360, \"north\")]\r\n    [InlineData(720, \"north\")]\r\n    [Theory]\r\n    public void ToHeading(double heading, string expected) =>\r\n        Assert.Equal(expected, heading.ToHeading(HeadingStyle.Full));\r\n\r\n    [InlineData(\"N\", 0)]\r\n    [InlineData(\"NNE\", 22.5)]\r\n    [InlineData(\"NE\", 45)]\r\n    [InlineData(\"ENE\", 67.5)]\r\n    [InlineData(\"E\", 90)]\r\n    [InlineData(\"ESE\", 112.5)]\r\n    [InlineData(\"SE\", 135)]\r\n    [InlineData(\"SSE\", 157.5)]\r\n    [InlineData(\"S\", 180)]\r\n    [InlineData(\"SSW\", 202.5)]\r\n    [InlineData(\"SW\", 225)]\r\n    [InlineData(\"WSW\", 247.5)]\r\n    [InlineData(\"W\", 270)]\r\n    [InlineData(\"WNW\", 292.5)]\r\n    [InlineData(\"NW\", 315)]\r\n    [InlineData(\"NNW\", 337.5)]\r\n    [Theory]\r\n    public void FromShortHeading(string heading, double expected) =>\r\n        Assert.Equal(expected, heading.FromAbbreviatedHeading());\r\n\r\n    [InlineData(0, '↑')]\r\n    [InlineData(11.2, '↑')]\r\n    [InlineData(11.3, '↑')]\r\n    [InlineData(22.5, '↗')]\r\n    [InlineData(33.7, '↗')]\r\n    [InlineData(33.8, '↗')]\r\n    [InlineData(45, '↗')]\r\n    [InlineData(56.2, '↗')]\r\n    [InlineData(56.3, '↗')]\r\n    [InlineData(67.5, '→')]\r\n    [InlineData(78.7, '→')]\r\n    [InlineData(78.8, '→')]\r\n    [InlineData(90, '→')]\r\n    [InlineData(101.2, '→')]\r\n    [InlineData(101.3, '→')]\r\n    [InlineData(112.5, '↘')]\r\n    [InlineData(123.7, '↘')]\r\n    [InlineData(123.8, '↘')]\r\n    [InlineData(135, '↘')]\r\n    [InlineData(146.2, '↘')]\r\n    [InlineData(146.3, '↘')]\r\n    [InlineData(157.5, '↓')]\r\n    [InlineData(168.7, '↓')]\r\n    [InlineData(168.8, '↓')]\r\n    [InlineData(180, '↓')]\r\n    [InlineData(191.2, '↓')]\r\n    [InlineData(191.3, '↓')]\r\n    [InlineData(202.5, '↙')]\r\n    [InlineData(213.7, '↙')]\r\n    [InlineData(213.8, '↙')]\r\n    [InlineData(225, '↙')]\r\n    [InlineData(236.2, '↙')]\r\n    [InlineData(236.3, '↙')]\r\n    [InlineData(247.5, '←')]\r\n    [InlineData(258.7, '←')]\r\n    [InlineData(258.8, '←')]\r\n    [InlineData(270, '←')]\r\n    [InlineData(281.2, '←')]\r\n    [InlineData(281.3, '←')]\r\n    [InlineData(292.5, '↖')]\r\n    [InlineData(303.7, '↖')]\r\n    [InlineData(303.8, '↖')]\r\n    [InlineData(315, '↖')]\r\n    [InlineData(326.2, '↖')]\r\n    [InlineData(326.3, '↖')]\r\n    [InlineData(337.5, '↑')]\r\n    [InlineData(348.7, '↑')]\r\n    [InlineData(348.8, '↑')]\r\n    [InlineData(360, '↑')]\r\n    [InlineData(720, '↑')]\r\n    [Theory]\r\n    public void ToHeadingArrow(double heading, char expected) =>\r\n        Assert.Equal(expected, heading.ToHeadingArrow());\r\n\r\n    [InlineData('↑', 0)]\r\n    [InlineData('↗', 45)]\r\n    [InlineData('→', 90)]\r\n    [InlineData('↘', 135)]\r\n    [InlineData('↓', 180)]\r\n    [InlineData('↙', 225)]\r\n    [InlineData('←', 270)]\r\n    [InlineData('↖', 315)]\r\n    [InlineData('\\n', -1)]\r\n    [Theory]\r\n    public void FromHeadingArrow(char heading, double expected) =>\r\n        Assert.Equal(expected, heading.FromHeadingArrow());\r\n\r\n    [InlineData(\"↑\", 0)]\r\n    [InlineData(\"↗\", 45)]\r\n    [InlineData(\"→\", 90)]\r\n    [InlineData(\"↘\", 135)]\r\n    [InlineData(\"↓\", 180)]\r\n    [InlineData(\"↙\", 225)]\r\n    [InlineData(\"←\", 270)]\r\n    [InlineData(\"↖\", 315)]\r\n    [InlineData(\"\", -1)]\r\n    [InlineData(\"xyz\", -1)]\r\n    [Theory]\r\n    public void FromHeadingArrow_Also_Works_With_Strings(string heading, double expected) =>\r\n        Assert.Equal(expected, heading.FromHeadingArrow());\r\n\r\n    [InlineData(\"NNW\", \"en-US\", 337.5)]\r\n    [InlineData(\"ØNØ\", \"da\", 67.5)]\r\n    [InlineData(\"O\", \"de-DE\", 90.0)]\r\n    [Theory]\r\n    public void FromShortHeading_CanSpecifyCultureExplicitly(string heading, string culture, double expected) =>\r\n        Assert.Equal(expected, heading.FromAbbreviatedHeading(new(culture)));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Humanizer.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\r\n  <PropertyGroup>\r\n    <TargetFrameworks>net10.0;net8.0;net48</TargetFrameworks>\r\n    <OutputType>Exe</OutputType>\r\n    <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>\r\n    <UseMicrosoftTestingPlatformRunner>true</UseMicrosoftTestingPlatformRunner>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <Using Include=\"Xunit.v3\" />\r\n  </ItemGroup>\r\n  \r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.Testing.Extensions.CodeCoverage\" PrivateAssets=\"all\" />\r\n    <PackageReference Include=\"Microsoft.Testing.Extensions.TrxReport\" PrivateAssets=\"all\" />\r\n    <PackageReference Include=\"PublicApiGenerator\" />\r\n    <PackageReference Include=\"xunit.v3.mtp-v2\" />\r\n    <PackageReference Include=\"Verify.XunitV3\" />\r\n    <PackageReference Include=\"Verify.DiffPlex\" />\r\n    <PackageReference Include=\"System.ComponentModel.Annotations\" Condition=\"'$(TargetFramework)' == 'net48' \" />\r\n    <ProjectReference Include=\"..\\..\\src\\Humanizer\\Humanizer.csproj\" />\r\n  </ItemGroup>\r\n  \r\n</Project>\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/InflectorTests.cs",
    "content": "//The Inflector class was cloned from Inflector (https://github.com/srkirkland/Inflector)\r\n\r\n//The MIT License (MIT)\r\n\r\n//Copyright (c) 2013 Scott Kirkland\r\n\r\n//Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n//this software and associated documentation files (the \"Software\"), to deal in\r\n//the Software without restriction, including without limitation the rights to\r\n//use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n//the Software, and to permit persons to whom the Software is furnished to do so,\r\n//subject to the following conditions:\r\n\r\n//The above copyright notice and this permission notice shall be included in all\r\n//copies or substantial portions of the Software.\r\n\r\n//THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n//FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n//COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n//IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n//CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\nusing System.Collections;\r\n\r\npublic class InflectorTests\r\n{\r\n    public readonly IList<object[]> PluralTestData = [];\r\n\r\n    [Theory]\r\n    [ClassData(typeof(PluralTestSource))]\r\n    public void Pluralize(string singular, string plural) =>\r\n        Assert.Equal(plural, singular.Pluralize());\r\n\r\n    [Theory]\r\n    [ClassData(typeof(PluralTestSource))]\r\n    public void PluralizeWordsWithUnknownPlurality(string singular, string plural)\r\n    {\r\n        Assert.Equal(plural, plural.Pluralize(false));\r\n        Assert.Equal(plural, singular.Pluralize(false));\r\n    }\r\n\r\n    [Theory]\r\n    [ClassData(typeof(PluralTestSource))]\r\n    public void Singularize(string singular, string plural) =>\r\n        Assert.Equal(singular, plural.Singularize());\r\n\r\n    [Theory]\r\n    [ClassData(typeof(PluralTestSource))]\r\n    public void SingularizeWordsWithUnknownSingularity(string singular, string plural)\r\n    {\r\n        Assert.Equal(singular, singular.Singularize(false));\r\n        Assert.Equal(singular, plural.Singularize(false));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(\"tires\", \"tires\")]\r\n    [InlineData(\"body\", \"bodies\")]\r\n    [InlineData(\"traxxas\", \"traxxas\")]\r\n    public void SingularizeSkipSimpleWords(string singular, string plural) =>\r\n        Assert.Equal(singular, plural.Singularize(skipSimpleWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(\"a\")]\r\n    [InlineData(\"A\")]\r\n    [InlineData(\"s\")]\r\n    [InlineData(\"S\")]\r\n    [InlineData(\"z\")]\r\n    [InlineData(\"Z\")]\r\n    [InlineData(\"1\")]\r\n    public void SingularizeSingleLetter(string input) =>\r\n        Assert.Equal(input, input.Singularize());\r\n\r\n    //Uppercases individual words and removes some characters\r\n    [Theory]\r\n    [InlineData(\"some title\", \"Some Title\")]\r\n    [InlineData(\"some-title\", \"Some Title\")]\r\n    [InlineData(\"sometitle\", \"Sometitle\")]\r\n    [InlineData(\"some-title: The beginning\", \"Some Title: The Beginning\")]\r\n    [InlineData(\"some_title:_the_beginning\", \"Some Title: the Beginning\")]\r\n    [InlineData(\"some title: The_beginning\", \"Some Title: The Beginning\")]\r\n    public void Titleize(string input, string expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Titleize());\r\n\r\n    // Issue #385: Titleize should preserve input with no recognized letters\r\n    [Theory]\r\n    [InlineData(\"Майк\", \"Майк\")]\r\n    [InlineData(\"@@\", \"@@\")]\r\n    [InlineData(\"?\", \"?\")]\r\n    [InlineData(\"123\", \"123\")]\r\n    public void TitleizeShouldPreserveUnrecognizedCharacters(string input, string expected) =>\r\n        Assert.Equal(expected, input.Titleize());\r\n\r\n    [InlineData(\"some_title\", \"some-title\")]\r\n    [InlineData(\"some-title\", \"some-title\")]\r\n    [InlineData(\"some_title_goes_here\", \"some-title-goes-here\")]\r\n    [InlineData(\"some_title and_another\", \"some-title and-another\")]\r\n    [Theory]\r\n    public void Dasherize(string input, string expectedOutput) =>\r\n        Assert.Equal(input.Dasherize(), expectedOutput);\r\n\r\n    [InlineData(\"some_title\", \"some-title\")]\r\n    [InlineData(\"some-title\", \"some-title\")]\r\n    [InlineData(\"some_title_goes_here\", \"some-title-goes-here\")]\r\n    [InlineData(\"some_title and_another\", \"some-title and-another\")]\r\n    [Theory]\r\n    public void Hyphenate(string input, string expectedOutput) =>\r\n        Assert.Equal(input.Hyphenate(), expectedOutput);\r\n\r\n    [Theory]\r\n    [InlineData(\"customer\", \"Customer\")]\r\n    [InlineData(\"CUSTOMER\", \"CUSTOMER\")]\r\n    [InlineData(\"CUStomer\", \"CUStomer\")]\r\n    [InlineData(\"customer_name\", \"CustomerName\")]\r\n    [InlineData(\"customer_first_name\", \"CustomerFirstName\")]\r\n    [InlineData(\"customer_first_name goes here\", \"CustomerFirstNameGoesHere\")]\r\n    [InlineData(\"customer name\", \"CustomerName\")]\r\n    [InlineData(\"customer name 1\", \"CustomerName1\")]\r\n    [InlineData(\"customer name $\", \"CustomerName$\")]\r\n    [InlineData(\"customer   name\", \"CustomerName\")]\r\n    [InlineData(\"customer-first-name\", \"CustomerFirstName\")]\r\n    [InlineData(\"_customer-first-name\", \"CustomerFirstName\")]\r\n    [InlineData(\" customer__first--name\", \"CustomerFirstName\")]\r\n    public void Pascalize(string input, string expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Pascalize());\r\n\r\n    // Same as pascalize, except first char is lowercase\r\n    [Theory]\r\n    [InlineData(\"customer\", \"customer\")]\r\n    [InlineData(\"CUSTOMER\", \"cUSTOMER\")]\r\n    [InlineData(\"CUStomer\", \"cUStomer\")]\r\n    [InlineData(\"customer_name\", \"customerName\")]\r\n    [InlineData(\"customer_first_name\", \"customerFirstName\")]\r\n    [InlineData(\"customer_first_name goes here\", \"customerFirstNameGoesHere\")]\r\n    [InlineData(\"customer name\", \"customerName\")]\r\n    [InlineData(\"customer name 1\", \"customerName1\")]\r\n    [InlineData(\"customer name $\", \"customerName$\")]\r\n    [InlineData(\"customer   name\", \"customerName\")]\r\n    [InlineData(\"\", \"\")]\r\n    public void Camelize(string input, string expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Camelize());\r\n\r\n    //Makes an underscored lowercase string\r\n    [Theory]\r\n    [InlineData(\"SomeTitle\", \"some_title\")]\r\n    [InlineData(\"someTitle\", \"some_title\")]\r\n    [InlineData(\"some title\", \"some_title\")]\r\n    [InlineData(\"some title that will be underscored\", \"some_title_that_will_be_underscored\")]\r\n    [InlineData(\"SomeTitleThatWillBeUnderscored\", \"some_title_that_will_be_underscored\")]\r\n    [InlineData(\"SomeForeignWordsLikeÄgyptenÑu\", \"some_foreign_words_like_ägypten_ñu\")]\r\n    [InlineData(\"Some wordsTo be Underscored\", \"some_words_to_be_underscored\")]\r\n    public void Underscore(string input, string expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Underscore());\r\n\r\n    // transform words into lowercase and separate with a -\r\n    [Theory]\r\n    [InlineData(\"SomeWords\", \"some-words\")]\r\n    [InlineData(\"SOME words TOGETHER\", \"some-words-together\")]\r\n    [InlineData(\"A spanish word EL niño\", \"a-spanish-word-el-niño\")]\r\n    [InlineData(\"SomeForeignWords ÆgÑuÄgypten\", \"some-foreign-words-æg-ñu-ägypten\")]\r\n    [InlineData(\"A VeryShortSENTENCE\", \"a-very-short-sentence\")]\r\n    public void Kebaberize(string input, string expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Kebaberize());\r\n}\r\n\r\nclass PluralTestSource : IEnumerable<object[]>\r\n{\r\n    public IEnumerator<object[]> GetEnumerator()\r\n    {\r\n        yield return [\"search\", \"searches\"];\r\n        yield return [\"switch\", \"switches\"];\r\n        yield return [\"fix\", \"fixes\"];\r\n        yield return [\"box\", \"boxes\"];\r\n        yield return [\"process\", \"processes\"];\r\n        yield return [\"address\", \"addresses\"];\r\n        yield return [\"case\", \"cases\"];\r\n        yield return [\"stack\", \"stacks\"];\r\n        yield return [\"wish\", \"wishes\"];\r\n        yield return [\"fish\", \"fish\"];\r\n\r\n        yield return [\"category\", \"categories\"];\r\n        yield return [\"query\", \"queries\"];\r\n        yield return [\"ability\", \"abilities\"];\r\n        yield return [\"agency\", \"agencies\"];\r\n        yield return [\"movie\", \"movies\"];\r\n\r\n        yield return [\"archive\", \"archives\"];\r\n\r\n        yield return [\"index\", \"indices\"];\r\n\r\n        yield return [\"wife\", \"wives\"];\r\n        yield return [\"safe\", \"saves\"];\r\n        yield return [\"half\", \"halves\"];\r\n\r\n        yield return [\"glove\", \"gloves\"];\r\n        yield return [\"move\", \"moves\"];\r\n\r\n        yield return [\"salesperson\", \"salespeople\"];\r\n        yield return [\"person\", \"people\"];\r\n\r\n        yield return [\"spokesman\", \"spokesmen\"];\r\n        yield return [\"man\", \"men\"];\r\n        yield return [\"woman\", \"women\"];\r\n        yield return [\"freshman\", \"freshmen\"];\r\n        yield return [\"chairman\", \"chairmen\"];\r\n        yield return [\"human\", \"humans\"];\r\n        yield return [\"personnel\", \"personnel\"];\r\n        yield return [\"staff\", \"staff\"];\r\n        yield return [\"training\", \"training\"];\r\n\r\n        yield return [\"basis\", \"bases\"];\r\n        yield return [\"diagnosis\", \"diagnoses\"];\r\n\r\n        yield return [\"datum\", \"data\"];\r\n        yield return [\"medium\", \"media\"];\r\n        yield return [\"analysis\", \"analyses\"];\r\n\r\n        yield return [\"node_child\", \"node_children\"];\r\n        yield return [\"child\", \"children\"];\r\n\r\n        yield return [\"experience\", \"experiences\"];\r\n        yield return [\"day\", \"days\"];\r\n\r\n        yield return [\"comment\", \"comments\"];\r\n        yield return [\"foobar\", \"foobars\"];\r\n        yield return [\"newsletter\", \"newsletters\"];\r\n\r\n        yield return [\"old_news\", \"old_news\"];\r\n        yield return [\"news\", \"news\"];\r\n\r\n        yield return [\"series\", \"series\"];\r\n        yield return [\"species\", \"species\"];\r\n\r\n        yield return [\"quiz\", \"quizzes\"];\r\n\r\n        yield return [\"perspective\", \"perspectives\"];\r\n\r\n        yield return [\"ox\", \"oxen\"];\r\n        yield return [\"photo\", \"photos\"];\r\n        yield return [\"buffalo\", \"buffaloes\"];\r\n        yield return [\"tomato\", \"tomatoes\"];\r\n        yield return [\"dwarf\", \"dwarves\"];\r\n        yield return [\"elf\", \"elves\"];\r\n        yield return [\"information\", \"information\"];\r\n        yield return [\"equipment\", \"equipment\"];\r\n        yield return [\"bus\", \"buses\"];\r\n        yield return [\"status\", \"statuses\"];\r\n        yield return [\"status_code\", \"status_codes\"];\r\n        yield return [\"mouse\", \"mice\"];\r\n\r\n        yield return [\"louse\", \"lice\"];\r\n        yield return [\"house\", \"houses\"];\r\n        yield return [\"octopus\", \"octopi\"];\r\n        yield return [\"alias\", \"aliases\"];\r\n        yield return [\"portfolio\", \"portfolios\"];\r\n        yield return [\"criterion\", \"criteria\"];\r\n\r\n        yield return [\"vertex\", \"vertices\"];\r\n        yield return [\"matrix\", \"matrices\"];\r\n\r\n        yield return [\"axis\", \"axes\"];\r\n        yield return [\"testis\", \"testes\"];\r\n        yield return [\"crisis\", \"crises\"];\r\n\r\n        yield return [\"corn\", \"corn\"];\r\n        yield return [\"milk\", \"milk\"];\r\n        yield return [\"rice\", \"rice\"];\r\n        yield return [\"shoe\", \"shoes\"];\r\n\r\n        yield return [\"horse\", \"horses\"];\r\n        yield return [\"prize\", \"prizes\"];\r\n        yield return [\"edge\", \"edges\"];\r\n\r\n        /* Tests added by Bas Jansen */\r\n        yield return [\"goose\", \"geese\"];\r\n        yield return [\"deer\", \"deer\"];\r\n        yield return [\"sheep\", \"sheep\"];\r\n        yield return [\"wolf\", \"wolves\"];\r\n        yield return [\"volcano\", \"volcanoes\"];\r\n        yield return [\"aircraft\", \"aircraft\"];\r\n        yield return [\"alumna\", \"alumnae\"];\r\n        yield return [\"alumnus\", \"alumni\"];\r\n        yield return [\"fungus\", \"fungi\"];\r\n\r\n        yield return [\"water\", \"water\"];\r\n        yield return [\"waters\", \"waters\"];\r\n        yield return [\"semen\", \"semen\"];\r\n        yield return [\"sperm\", \"sperm\"];\r\n\r\n        yield return [\"wave\", \"waves\"];\r\n\r\n        yield return [\"campus\", \"campuses\"];\r\n\r\n        yield return [\"is\", \"are\"];\r\n\r\n        yield return [\"addendum\", \"addenda\"];\r\n        yield return [\"alga\", \"algae\"];\r\n        yield return [\"appendix\", \"appendices\"];\r\n        yield return [\"bias\", \"biases\"];\r\n        yield return [\"bison\", \"bison\"];\r\n        yield return [\"blitz\", \"blitzes\"];\r\n        yield return [\"buzz\", \"buzzes\"];\r\n        yield return [\"cactus\", \"cacti\"];\r\n        yield return [\"corps\", \"corps\"];\r\n        yield return [\"curriculum\", \"curricula\"];\r\n        yield return [\"die\", \"dice\"];\r\n        yield return [\"echo\", \"echoes\"];\r\n        yield return [\"ellipsis\", \"ellipses\"];\r\n        yield return [\"elk\", \"elk\"];\r\n        yield return [\"emphasis\", \"emphases\"];\r\n        yield return [\"embargo\", \"embargoes\"];\r\n        yield return [\"focus\", \"foci\"];\r\n        yield return [\"foot\", \"feet\"];\r\n        yield return [\"fuse\", \"fuses\"];\r\n        yield return [\"grass\", \"grass\"];\r\n        yield return [\"hair\", \"hair\"];\r\n        yield return [\"hero\", \"heroes\"];\r\n        yield return [\"hippopotamus\", \"hippopotami\"];\r\n        yield return [\"hoof\", \"hooves\"];\r\n        yield return [\"iris\", \"irises\"];\r\n        yield return [\"larva\", \"larvae\"];\r\n        yield return [\"leaf\", \"leaves\"];\r\n        yield return [\"loaf\", \"loaves\"];\r\n        yield return [\"luggage\", \"luggage\"];\r\n        yield return [\"means\", \"means\"];\r\n        yield return [\"mail\", \"mail\"];\r\n        yield return [\"millennium\", \"millennia\"];\r\n        yield return [\"moose\", \"moose\"];\r\n        yield return [\"mosquito\", \"mosquitoes\"];\r\n        yield return [\"mud\", \"mud\"];\r\n        yield return [\"nucleus\", \"nuclei\"];\r\n        yield return [\"neurosis\", \"neuroses\"];\r\n        yield return [\"oasis\", \"oases\"];\r\n        yield return [\"offspring\", \"offspring\"];\r\n        yield return [\"paralysis\", \"paralyses\"];\r\n        yield return [\"phenomenon\", \"phenomena\"];\r\n        yield return [\"potato\", \"potatoes\"];\r\n        yield return [\"radius\", \"radii\"];\r\n        yield return [\"salmon\", \"salmon\"];\r\n        yield return [\"scissors\", \"scissors\"];\r\n        yield return [\"shrimp\", \"shrimp\"];\r\n        yield return [\"someone\", \"someone\"];\r\n        yield return [\"stimulus\", \"stimuli\"];\r\n        yield return [\"swine\", \"swine\"];\r\n        yield return [\"syllabus\", \"syllabi\"];\r\n        yield return [\"that\", \"those\"];\r\n        yield return [\"thief\", \"thieves\"];\r\n        yield return [\"this\", \"these\"];\r\n        yield return [\"tie\", \"ties\"];\r\n        yield return [\"tooth\", \"teeth\"];\r\n        yield return [\"torpedo\", \"torpedoes\"];\r\n        yield return [\"trellis\", \"trellises\"];\r\n        yield return [\"trout\", \"trout\"];\r\n        yield return [\"tuna\", \"tuna\"];\r\n        yield return [\"vertebra\", \"vertebrae\"];\r\n        yield return [\"veto\", \"vetoes\"];\r\n        yield return [\"virus\", \"viruses\"];\r\n        yield return [\"walrus\", \"walruses\"];\r\n        yield return [\"waltz\", \"waltzes\"];\r\n        yield return [\"zombie\", \"zombies\"];\r\n\r\n        yield return [\"cookie\", \"cookies\"];\r\n        yield return [\"bookie\", \"bookies\"];\r\n        yield return [\"rookie\", \"rookies\"];\r\n        yield return [\"roomie\", \"roomies\"];\r\n        yield return [\"smoothie\", \"smoothies\"];\r\n\r\n        //Issue #789\r\n        yield return [\"cache\", \"caches\"];\r\n\r\n        //Issue #975, added by Alex Boutin\r\n        yield return [\"ex\", \"exes\"];\r\n        yield return [\"\", \"\"];\r\n\r\n        //Issue #1100\r\n        yield return [\"doe\", \"does\"];\r\n        yield return [\"hoe\", \"hoes\"];\r\n        yield return [\"toe\", \"toes\"];\r\n        yield return [\"woe\", \"woes\"];\r\n\r\n        //Issue #1132\r\n        yield return [\"metadata\", \"metadata\"];\r\n\r\n        //Issue #1154\r\n        yield return [\"a\", \"as\"];\r\n        yield return [\"A\", \"As\"];\r\n        yield return [\"s\", \"ss\"];\r\n        yield return [\"S\", \"Ss\"];\r\n        yield return [\"z\", \"zs\"];\r\n        yield return [\"Z\", \"Zs\"];\r\n        yield return [\"1\", \"1s\"];\r\n\r\n        //Issue #1252\r\n        yield return [\"pliers\", \"pliers\"];\r\n        yield return [\"sheers\", \"sheers\"];\r\n        yield return [\"valve\", \"valves\"];\r\n        yield return [\"clothes\", \"clothes\"];\r\n        yield return [\"lens\", \"lenses\"];\r\n        yield return [\"apparatus\", \"apparatus\"];\r\n        yield return [\"clove\", \"cloves\"];\r\n        yield return [\"chassis\", \"chassis\"];\r\n        yield return [\"explosive\", \"explosives\"];\r\n        yield return [\"debris\", \"debris\"];\r\n\r\n        //Issue #1042\r\n        yield return [\"database\", \"databases\"];\r\n    }\r\n\r\n    IEnumerator IEnumerable.GetEnumerator() =>\r\n        GetEnumerator();\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/DefaultFormatterTests.cs",
    "content": "﻿namespace Humanizer.Tests.Localisation;\r\n\r\npublic class DefaultFormatterTests\r\n{\r\n    [Fact]\r\n    [UseCulture(\"iv\")]\r\n    public void HandlesNotImplementedCollectionFormattersGracefully()\r\n    {\r\n        var a = new[] { DateTime.UtcNow, DateTime.UtcNow.AddDays(10) };\r\n        var b = a.Humanize();\r\n\r\n        Assert.Equal(a[0] + \" & \" + a[1], b);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ResourcesTests.cs",
    "content": "﻿namespace Humanizer.Tests.Localisation;\r\n\r\npublic class ResourcesTests\r\n{\r\n    [Fact]\r\n    [UseCulture(\"ro\")]\r\n    public void CanGetCultureSpecificTranslationsWithImplicitCulture()\r\n    {\r\n        var format = Resources.GetResource(\"DateHumanize_MultipleYearsAgo\");\r\n        Assert.Equal(\"acum {0}{1} ani\", format);\r\n    }\r\n\r\n    [Fact]\r\n    public void CanGetCultureSpecificTranslationsWithExplicitCulture()\r\n    {\r\n        var format = Resources.GetResource(\"DateHumanize_MultipleYearsAgo\", new(\"ro\"));\r\n        Assert.Equal(\"acum {0}{1} ani\", format);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/af/DateHumanizeTests.cs",
    "content": "﻿namespace af;\r\n\r\n[UseCulture(\"af\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, \"2 dae gelede\")]\r\n    [InlineData(1, \"gister\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 ure gelede\")]\r\n    [InlineData(1, \"1 uur terug\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 minute terug\")]\r\n    [InlineData(1, \"1 minuut terug\")]\r\n    [InlineData(60, \"1 uur terug\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 maande gelede\")]\r\n    [InlineData(1, \"1 maand gelede\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 sekondes terug\")]\r\n    [InlineData(1, \"1 sekonde terug\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 jaar gelede\")]\r\n    [InlineData(1, \"1 jaar gelede\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"oor 2 dae\")]\r\n    [InlineData(1, \"môre\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"oor 2 ure\")]\r\n    [InlineData(1, \"oor 1 uur\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"oor 2 minute\")]\r\n    [InlineData(1, \"oor 1 minuut\")]\r\n    [InlineData(60, \"oor 1 uur\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"oor 2 maande\")]\r\n    [InlineData(1, \"oor 1 maand\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"oor 2 sekondes\")]\r\n    [InlineData(1, \"oor 1 sekonde\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"oor 2 jaar\")]\r\n    [InlineData(1, \"oor 1 jaar\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nou\")]\r\n    public void RightNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/af/NumberToWordsTests.cs",
    "content": "﻿namespace af;\r\n\r\n[UseCulture(\"af\")]\r\npublic class AfrikaansNumberToWordsTests\r\n{\r\n    [InlineData(1, \"een\")]\r\n    [InlineData(10, \"tien\")]\r\n    [InlineData(11, \"elf\")]\r\n    [InlineData(20, \"twintig\")]\r\n    [InlineData(122, \"een honderd twee en twintig\")]\r\n    [InlineData(3501, \"drie duisend vyf honderd en een\")]\r\n    [InlineData(100, \"een honderd\")]\r\n    [InlineData(1000, \"een duisend\")]\r\n    [InlineData(100000, \"een honderd duisend\")]\r\n    [InlineData(1000000, \"een miljoen\")]\r\n    [InlineData(10000000, \"tien miljoen\")]\r\n    [InlineData(100000000, \"een honderd miljoen\")]\r\n    [InlineData(1000000000, \"een miljard\")]\r\n    [InlineData(111, \"een honderd en elf\")]\r\n    [InlineData(1111, \"een duisend een honderd en elf\")]\r\n    [InlineData(111111, \"een honderd en elf duisend een honderd en elf\")]\r\n    [InlineData(1111111, \"een miljoen een honderd en elf duisend een honderd en elf\")]\r\n    [InlineData(11111111, \"elf miljoen een honderd en elf duisend een honderd en elf\")]\r\n    [InlineData(111111111, \"een honderd en elf miljoen een honderd en elf duisend een honderd en elf\")]\r\n    [InlineData(1111111111, \"een miljard een honderd en elf miljoen een honderd en elf duisend een honderd en elf\")]\r\n    [InlineData(123, \"een honderd drie en twintig\")]\r\n    [InlineData(1234, \"een duisend twee honderd vier en dertig\")]\r\n    [InlineData(12345, \"twaalf duisend drie honderd vyf en veertig\")]\r\n    [InlineData(123456, \"een honderd drie en twintig duisend vier honderd ses en vyftig\")]\r\n    [InlineData(1234567, \"een miljoen twee honderd vier en dertig duisend vyf honderd sewe en sestig\")]\r\n    [InlineData(12345678, \"twaalf miljoen drie honderd vyf en veertig duisend ses honderd agt en sewentig\")]\r\n    [InlineData(123456789, \"een honderd drie en twintig miljoen vier honderd ses en vyftig duisend sewe honderd nege en tagtig\")]\r\n    [InlineData(1234567890, \"een miljard twee honderd vier en dertig miljoen vyf honderd sewe en sestig duisend agt honderd en negentig\")]\r\n    [Theory]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nulste\")]\r\n    [InlineData(1, \"eerste\")]\r\n    [InlineData(2, \"tweede\")]\r\n    [InlineData(3, \"derde\")]\r\n    [InlineData(4, \"vierde\")]\r\n    [InlineData(5, \"vyfde\")]\r\n    [InlineData(6, \"sesde\")]\r\n    [InlineData(7, \"sewende\")]\r\n    [InlineData(8, \"agste\")]\r\n    [InlineData(9, \"negende\")]\r\n    [InlineData(10, \"tiende\")]\r\n    [InlineData(11, \"elfde\")]\r\n    [InlineData(12, \"twaalfde\")]\r\n    [InlineData(13, \"dertiende\")]\r\n    [InlineData(14, \"veertiende\")]\r\n    [InlineData(15, \"vyftiende\")]\r\n    [InlineData(16, \"sestiende\")]\r\n    [InlineData(17, \"sewentiende\")]\r\n    [InlineData(18, \"agtiende\")]\r\n    [InlineData(19, \"negentiende\")]\r\n    [InlineData(20, \"twintigste\")]\r\n    [InlineData(21, \"een en twintigste\")]\r\n    [InlineData(22, \"twee en twintigste\")]\r\n    [InlineData(30, \"dertigste\")]\r\n    [InlineData(40, \"veertigste\")]\r\n    [InlineData(50, \"vyftigste\")]\r\n    [InlineData(60, \"sestigste\")]\r\n    [InlineData(70, \"sewentigste\")]\r\n    [InlineData(80, \"tagtigste\")]\r\n    [InlineData(90, \"negentigste\")]\r\n    [InlineData(95, \"vyf en negentigste\")]\r\n    [InlineData(96, \"ses en negentigste\")]\r\n    [InlineData(100, \"honderdste\")]\r\n    [InlineData(112, \"honderd en twaalfde\")]\r\n    [InlineData(120, \"honderd en twintigste\")]\r\n    [InlineData(121, \"honderd een en twintigste\")]\r\n    [InlineData(1000, \"duisendste\")]\r\n    [InlineData(1001, \"duisend en eerste\")]\r\n    [InlineData(1021, \"duisend een en twintigste\")]\r\n    [InlineData(10000, \"tien duisendste\")]\r\n    [InlineData(10121, \"tien duisend een honderd een en twintigste\")]\r\n    [InlineData(100000, \"honderd duisendste\")]\r\n    [InlineData(1000000, \"miljoenste\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(11, \"en-US\", \"eleven\")]\r\n    [InlineData(22, \"ar\", \"اثنان و عشرون\")]\r\n    [InlineData(40, \"ru\", \"сорок\")]\r\n    public void ToWords_CanSpecifyCultureExplicitly(int number, string culture, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(new(culture)));\r\n\r\n    [Theory]\r\n    [InlineData(1021, \"en-US\", \"thousand and twenty-first\")]\r\n    [InlineData(21, \"ar\", \"الحادي و العشرون\")]\r\n    [InlineData(1112, \"ru\", \"одна тысяча сто двенадцатый\")]\r\n    public void ToOrdinalWords_CanSpecifyCultureExplicitly(int number, string culture, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(new(culture)));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/af/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace af;\r\n\r\n[UseCulture(\"af\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 jaar\")]\r\n    [InlineData(731, \"2 jaar\")]\r\n    [InlineData(1096, \"3 jaar\")]\r\n    [InlineData(4018, \"11 jaar\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 maand\")]\r\n    [InlineData(61, \"2 maande\")]\r\n    [InlineData(92, \"3 maande\")]\r\n    [InlineData(335, \"11 maande\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Fact]\r\n    public void TwoWeeks() =>\r\n        Assert.Equal(\"2 weke\", TimeSpan.FromDays(14).Humanize());\r\n\r\n    [Fact]\r\n    public void OneWeek() =>\r\n        Assert.Equal(\"1 week\", TimeSpan.FromDays(7).Humanize());\r\n\r\n    [Fact]\r\n    public void SixDays() =>\r\n        Assert.Equal(\"6 dae\", TimeSpan.FromDays(6).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoDays() =>\r\n        Assert.Equal(\"2 dae\", TimeSpan.FromDays(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneDay() =>\r\n        Assert.Equal(\"1 dag\", TimeSpan.FromDays(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoHours() =>\r\n        Assert.Equal(\"2 ure\", TimeSpan.FromHours(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneHour() =>\r\n        Assert.Equal(\"1 uur\", TimeSpan.FromHours(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoMinutes() =>\r\n        Assert.Equal(\"2 minute\", TimeSpan.FromMinutes(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneMinute() =>\r\n        Assert.Equal(\"1 minuut\", TimeSpan.FromMinutes(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoSeconds() =>\r\n        Assert.Equal(\"2 sekondes\", TimeSpan.FromSeconds(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneSecond() =>\r\n        Assert.Equal(\"1 sekond\", TimeSpan.FromSeconds(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoMilliseconds() =>\r\n        Assert.Equal(\"2 millisekondes\", TimeSpan.FromMilliseconds(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneMillisecond() =>\r\n        Assert.Equal(\"1 millisekond\", TimeSpan.FromMilliseconds(1).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 millisekondes\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"geen tyd\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ar/DateHumanizeTests.cs",
    "content": "namespace ar;\r\n\r\n[UseCulture(\"ar\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(-1, \"أمس\")]\r\n    [InlineData(-2, \"منذ يومين\")]\r\n    [InlineData(-3, \"منذ 3 أيام\")]\r\n    [InlineData(-11, \"منذ 11 يوم\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"في غضون يوم واحد من الآن\")]\r\n    [InlineData(2, \"في غضون يومين من الآن\")]\r\n    [InlineData(10, \"في غضون 10 أيام من الآن\")]\r\n    [InlineData(17, \"في غضون 17 يوم من الآن\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"منذ ساعتين\")]\r\n    [InlineData(-1, \"منذ ساعة واحدة\")]\r\n    [InlineData(-3, \"منذ 3 ساعات\")]\r\n    [InlineData(-11, \"منذ 11 ساعة\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"في غضون ساعة واحدة من الآن\")]\r\n    [InlineData(2, \"في غضون ساعتين من الآن\")]\r\n    [InlineData(10, \"في غضون 10 ساعات من الآن\")]\r\n    [InlineData(23, \"في غضون 23 ساعة من الآن\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"منذ دقيقتين\")]\r\n    [InlineData(-1, \"منذ دقيقة واحدة\")]\r\n    [InlineData(-3, \"منذ 3 دقائق\")]\r\n    [InlineData(-11, \"منذ 11 دقيقة\")]\r\n    [InlineData(60, \"منذ ساعة واحدة\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"في غضون دقيقة واحدة من الآن\")]\r\n    [InlineData(2, \"في غضون دقيقتين من الآن\")]\r\n    [InlineData(10, \"في غضون 10 دقائق من الآن\")]\r\n    [InlineData(23, \"في غضون 23 دقيقة من الآن\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"منذ شهرين\")]\r\n    [InlineData(-1, \"منذ شهر واحد\")]\r\n    [InlineData(-3, \"منذ 3 أشهر\")]\r\n    [InlineData(-11, \"منذ 11 شهر\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"في غضون شهر واحد من الآن\")]\r\n    [InlineData(2, \"في غضون شهرين من الآن\")]\r\n    [InlineData(10, \"في غضون 10 أشهر من الآن\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"منذ ثانيتين\")]\r\n    [InlineData(-1, \"منذ ثانية واحدة\")]\r\n    [InlineData(-3, \"منذ 3 ثوان\")]\r\n    [InlineData(-11, \"منذ 11 ثانية\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"الآن\")]\r\n    [InlineData(1, \"في غضون ثانية واحدة من الآن\")]\r\n    [InlineData(2, \"في غضون ثانيتين من الآن\")]\r\n    [InlineData(10, \"في غضون 10 ثوان من الآن\")]\r\n    [InlineData(24, \"في غضون 24 ثانية من الآن\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"منذ عامين\")]\r\n    [InlineData(-1, \"العام السابق\")]\r\n    [InlineData(-3, \"منذ 3 أعوام\")]\r\n    [InlineData(-11, \"منذ 11 عام\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"في غضون سنة واحدة من الآن\")]\r\n    [InlineData(2, \"في غضون سنتين من الآن\")]\r\n    [InlineData(7, \"في غضون 7 سنوات من الآن\")]\r\n    [InlineData(55, \"في غضون 55 سنة من الآن\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ar/NumberToWordsTests.cs",
    "content": "﻿namespace ar;\r\n\r\n[UseCulture(\"ar\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"صفر\", 0)]\r\n    [InlineData(\"واحد\", 1)]\r\n    [InlineData(\"اثنان\", 2)]\r\n    [InlineData(\"اثنان و عشرون\", 22)]\r\n    [InlineData(\"أحد عشر\", 11)]\r\n    [InlineData(\"ثلاثة آلاف و خمس مئة و واحد\", 3501)]\r\n    [InlineData(\"مليون و واحد\", 1000001)]\r\n    public void ToWordsArabic(string expected, int number) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(\"سالب واحد\", -1)]\r\n    [InlineData(\"سالب اثنان\", -2)]\r\n    [InlineData(\"سالب اثنان و عشرون\", -22)]\r\n    [InlineData(\"سالب أحد عشر\", -11)]\r\n    [InlineData(\"سالب ثلاثة آلاف و خمس مئة و واحد\", -3501)]\r\n    [InlineData(\"سالب مليون و واحد\", -1000001)]\r\n    public void ToWordsArabicNegative(string expected, int number) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1L, \"واحد\")]\r\n    [InlineData(11L, \"أحد عشر\")]\r\n    [InlineData(111L, \"مئة و أحد عشر\")]\r\n    [InlineData(1111L, \"ألف و مئة و أحد عشر\")]\r\n    [InlineData(11111L, \"أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(111111L, \"مئة و أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(1111111L, \"مليون و مئة و أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(11111111L, \"أحد عشر مليوناً و مئة و أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(111111111L, \"مئة و أحد عشر مليوناً و مئة و أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(1111111111L, \"مليار و مئة و أحد عشر مليوناً و مئة و أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(11111111111L, \"أحد عشر ملياراً و مئة و أحد عشر مليوناً و مئة و أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(111111111111L, \"مئة و أحد عشر ملياراً و مئة و أحد عشر مليوناً و مئة و أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(1111111111111L, \"تريليون و مئة و أحد عشر ملياراً و مئة و أحد عشر مليوناً و مئة و أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(11111111111111L, \"أحد عشر تريليوناً و مئة و أحد عشر ملياراً و مئة و أحد عشر مليوناً و مئة و أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(111111111111111L, \"مئة و أحد عشر تريليوناً و مئة و أحد عشر ملياراً و مئة و أحد عشر مليوناً و مئة و أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(1111111111111111L, \"كوادريليون و مئة و أحد عشر تريليوناً و مئة و أحد عشر ملياراً و مئة و أحد عشر مليوناً و مئة و أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(11111111111111111L, \"أحد عشر كوادريليوناً و مئة و أحد عشر تريليوناً و مئة و أحد عشر ملياراً و مئة و أحد عشر مليوناً و مئة و أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(111111111111111111L, \"مئة و أحد عشر كوادريليوناً و مئة و أحد عشر تريليوناً و مئة و أحد عشر ملياراً و مئة و أحد عشر مليوناً و مئة و أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(1111111111111111111L, \"كوينتليون و مئة و أحد عشر كوادريليوناً و مئة و أحد عشر تريليوناً و مئة و أحد عشر ملياراً و مئة و أحد عشر مليوناً و مئة و أحد عشر ألفاً و مئة و أحد عشر\")]\r\n    [InlineData(10000000001L, \"عشرة مليارات و واحد\")]\r\n    [InlineData(8750000500001L, \"ثمانية تريليونات و سبع مئة و خمسون ملياراً و خمس مئة ألفاً و واحد\")]\r\n    [InlineData(-10000000001L, \"سالب عشرة مليارات و واحد\")]\r\n    [InlineData(-8750000500001L, \"سالب ثمانية تريليونات و سبع مئة و خمسون ملياراً و خمس مئة ألفاً و واحد\")]\r\n    public void ToWordsArabicLong(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(\"صفر\", 0)]\r\n    [InlineData(\"واحدة\", 1)]\r\n    [InlineData(\"اثنتان\", 2)]\r\n    [InlineData(\"اثنتان و عشرون\", 22)]\r\n    [InlineData(\"إحدى عشرة\", 11)]\r\n    [InlineData(\"ثلاثة آلاف و خمس مئة و واحدة\", 3501)]\r\n    [InlineData(\"مليون و واحدة\", 1000001)]\r\n    public void ToWordsArabicFeminine(string expected, long number) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(\"عشرة مليارات و واحدة\", 10000000001)]\r\n    [InlineData(\"ثمانية تريليونات و سبع مئة و خمسون ملياراً و خمس مئة ألفاً و واحدة\", 8750000500001)]\r\n    public void ToWordsArabicLongFeminine(string expected, long number) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(122, \"مئة و اثنتان و عشرون\", GrammaticalGender.Feminine)]\r\n    [InlineData(3501, \"ثلاثة آلاف و خمس مئة و واحدة\", GrammaticalGender.Feminine)]\r\n    [InlineData(3501, \"ثلاثة آلاف و خمس مئة و واحد\", GrammaticalGender.Neuter)]\r\n    public void ToWordsWithGender(long number, string expected, GrammaticalGender gender) =>\r\n        Assert.Equal(expected, number.ToWords(gender));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"الصفر\")]\r\n    [InlineData(1, \"الأول\")]\r\n    [InlineData(2, \"الثاني\")]\r\n    [InlineData(3, \"الثالث\")]\r\n    [InlineData(4, \"الرابع\")]\r\n    [InlineData(5, \"الخامس\")]\r\n    [InlineData(6, \"السادس\")]\r\n    [InlineData(7, \"السابع\")]\r\n    [InlineData(8, \"الثامن\")]\r\n    [InlineData(9, \"التاسع\")]\r\n    [InlineData(10, \"العاشر\")]\r\n    [InlineData(11, \"الحادي عشر\")]\r\n    [InlineData(12, \"الثاني عشر\")]\r\n    [InlineData(13, \"الثالث عشر\")]\r\n    [InlineData(14, \"الرابع عشر\")]\r\n    [InlineData(15, \"الخامس عشر\")]\r\n    [InlineData(16, \"السادس عشر\")]\r\n    [InlineData(17, \"السابع عشر\")]\r\n    [InlineData(18, \"الثامن عشر\")]\r\n    [InlineData(19, \"التاسع عشر\")]\r\n    [InlineData(20, \"العشرون\")]\r\n    [InlineData(21, \"الحادي و العشرون\")]\r\n    [InlineData(22, \"الثاني و العشرون\")]\r\n    [InlineData(30, \"الثلاثون\")]\r\n    [InlineData(40, \"الأربعون\")]\r\n    [InlineData(50, \"الخمسون\")]\r\n    [InlineData(60, \"الستون\")]\r\n    [InlineData(70, \"السبعون\")]\r\n    [InlineData(80, \"الثمانون\")]\r\n    [InlineData(90, \"التسعون\")]\r\n    [InlineData(95, \"الخامس و التسعون\")]\r\n    [InlineData(96, \"السادس و التسعون\")]\r\n    [InlineData(100, \"المئة\")]\r\n    [InlineData(120, \"العشرون بعد المئة\")]\r\n    [InlineData(121, \"الحادي و العشرون بعد المئة\")]\r\n    [InlineData(200, \"المئتان\")]\r\n    [InlineData(221, \"الحادي و العشرون بعد المئتان\")]\r\n    [InlineData(300, \"الثلاث مئة\")]\r\n    [InlineData(321, \"الحادي و العشرون بعد الثلاث مئة\")]\r\n    [InlineData(327, \"السابع و العشرون بعد الثلاث مئة\")]\r\n    [InlineData(1000, \"الألف\")]\r\n    [InlineData(1001, \"الأول بعد الألف\")]\r\n    [InlineData(1021, \"الحادي و العشرون بعد الألف\")]\r\n    [InlineData(10000, \"العشرة آلاف\")]\r\n    [InlineData(10121, \"الحادي و العشرون بعد العشرة آلاف و مئة\")]\r\n    [InlineData(100000, \"المئة ألف\")]\r\n    [InlineData(1000000, \"المليون\")]\r\n    [InlineData(1020135, \"الخامس و الثلاثون بعد المليون و عشرون ألفاً و مئة\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"الصفر\")]\r\n    [InlineData(1, \"الأولى\")]\r\n    [InlineData(2, \"الثانية\")]\r\n    [InlineData(3, \"الثالثة\")]\r\n    [InlineData(4, \"الرابعة\")]\r\n    [InlineData(5, \"الخامسة\")]\r\n    [InlineData(6, \"السادسة\")]\r\n    [InlineData(7, \"السابعة\")]\r\n    [InlineData(8, \"الثامنة\")]\r\n    [InlineData(9, \"التاسعة\")]\r\n    [InlineData(10, \"العاشرة\")]\r\n    [InlineData(11, \"الحادية عشرة\")]\r\n    [InlineData(12, \"الثانية عشرة\")]\r\n    [InlineData(13, \"الثالثة عشرة\")]\r\n    [InlineData(14, \"الرابعة عشرة\")]\r\n    [InlineData(15, \"الخامسة عشرة\")]\r\n    [InlineData(16, \"السادسة عشرة\")]\r\n    [InlineData(17, \"السابعة عشرة\")]\r\n    [InlineData(18, \"الثامنة عشرة\")]\r\n    [InlineData(19, \"التاسعة عشرة\")]\r\n    [InlineData(20, \"العشرون\")]\r\n    [InlineData(21, \"الحادية و العشرون\")]\r\n    [InlineData(22, \"الثانية و العشرون\")]\r\n    [InlineData(30, \"الثلاثون\")]\r\n    [InlineData(40, \"الأربعون\")]\r\n    [InlineData(50, \"الخمسون\")]\r\n    [InlineData(60, \"الستون\")]\r\n    [InlineData(70, \"السبعون\")]\r\n    [InlineData(80, \"الثمانون\")]\r\n    [InlineData(90, \"التسعون\")]\r\n    [InlineData(95, \"الخامسة و التسعون\")]\r\n    [InlineData(96, \"السادسة و التسعون\")]\r\n    [InlineData(100, \"المئة\")]\r\n    [InlineData(120, \"العشرون بعد المئة\")]\r\n    [InlineData(121, \"الحادية و العشرون بعد المئة\")]\r\n    [InlineData(200, \"المئتان\")]\r\n    [InlineData(221, \"الحادية و العشرون بعد المئتان\")]\r\n    [InlineData(300, \"الثلاث مئة\")]\r\n    [InlineData(321, \"الحادية و العشرون بعد الثلاث مئة\")]\r\n    [InlineData(327, \"السابعة و العشرون بعد الثلاث مئة\")]\r\n    [InlineData(1000, \"الألف\")]\r\n    [InlineData(1001, \"الأولى بعد الألف\")]\r\n    [InlineData(1021, \"الحادية و العشرون بعد الألف\")]\r\n    [InlineData(10000, \"العشرة آلاف\")]\r\n    [InlineData(10121, \"الحادية و العشرون بعد العشرة آلاف و مئة\")]\r\n    [InlineData(100000, \"المئة ألف\")]\r\n    [InlineData(1000000, \"المليون\")]\r\n    [InlineData(1020135, \"الخامسة و الثلاثون بعد المليون و عشرون ألفاً و مئة\")]\r\n    public void ToOrdinalWordsWithFeminineGender(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ar/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace ar;\r\n\r\n[UseCulture(\"ar\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"السنة 1\")]\r\n    [InlineData(731, \"سنتين\")]\r\n    [InlineData(1096, \"3 سنة\")]\r\n    [InlineData(4018, \"11 سنة\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"شهر 1\")]\r\n    [InlineData(61, \"شهرين\")]\r\n    [InlineData(92, \"3 أشهر\")]\r\n    [InlineData(335, \"11 أشهر\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"أسبوع واحد\")]\r\n    [InlineData(14, \"أسبوعين\")]\r\n    [InlineData(21, \"3 أسابيع\")]\r\n    [InlineData(77, \"11 أسبوع\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"يوم واحد\")]\r\n    [InlineData(2, \"يومين\")]\r\n    [InlineData(3, \"3 أيام\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ساعة واحدة\")]\r\n    [InlineData(2, \"ساعتين\")]\r\n    [InlineData(3, \"3 ساعات\")]\r\n    [InlineData(11, \"11 ساعة\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"دقيقة واحدة\")]\r\n    [InlineData(2, \"دقيقتين\")]\r\n    [InlineData(3, \"3 دقائق\")]\r\n    [InlineData(11, \"11 دقيقة\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ثانية واحدة\")]\r\n    [InlineData(2, \"ثانيتين\")]\r\n    [InlineData(3, \"3 ثوان\")]\r\n    [InlineData(11, \"11 ثانية\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"جزء من الثانية\")]\r\n    [InlineData(2, \"جزئين من الثانية\")]\r\n    [InlineData(3, \"3 أجزاء من الثانية\")]\r\n    [InlineData(11, \"11 جزء من الثانية\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 جزء من الثانية\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"حالاً\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/az/DateHumanizeTests.cs",
    "content": "﻿namespace az;\r\n\r\n[UseCulture(\"az\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"bir saniyə əvvəl\")]\r\n    [InlineData(10, \"10 saniyə əvvəl\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir saniyə sonra\")]\r\n    [InlineData(10, \"10 saniyə sonra\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir dəqiqə əvvəl\")]\r\n    [InlineData(10, \"10 dəqiqə əvvəl\")]\r\n    [InlineData(60, \"bir saat əvvəl\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir dəqiqə sonra\")]\r\n    [InlineData(10, \"10 dəqiqə sonra\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir saat əvvəl\")]\r\n    [InlineData(10, \"10 saat əvvəl\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir saat sonra\")]\r\n    [InlineData(10, \"10 saat sonra\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"dünən\")]\r\n    [InlineData(10, \"10 gün əvvəl\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"sabah\")]\r\n    [InlineData(10, \"10 gün sonra\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir ay əvvəl\")]\r\n    [InlineData(10, \"10 ay əvvəl\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir ay sonra\")]\r\n    [InlineData(10, \"10 ay sonra\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir il əvvəl\")]\r\n    [InlineData(2, \"2 il əvvəl\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir il sonra\")]\r\n    [InlineData(2, \"2 il sonra\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"indi\", 0, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/az/NumberToWordsTests.cs",
    "content": "﻿namespace az;\r\n\r\n[UseCulture(\"az\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"sıfır\", 0)]\r\n    [InlineData(\"bir\", 1)]\r\n    [InlineData(\"iki\", 2)]\r\n    [InlineData(\"on\", 10)]\r\n    [InlineData(\"yüz on iki\", 112)]\r\n    [InlineData(\"min dörd yüz qırx\", 1440)]\r\n    [InlineData(\"iyirmi iki\", 22)]\r\n    [InlineData(\"on bir\", 11)]\r\n    [InlineData(\"üç min beş yüz bir\", 3501)]\r\n    [InlineData(\"bir milyon bir\", 1000001)]\r\n    [InlineData(\"mənfi bir milyon üç yüz qırx altı min yeddi yüz on bir\", -1346711)]\r\n    public void ToWords(string expected, int number) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"sıfırıncı\")]\r\n    [InlineData(1, \"birinci\")]\r\n    [InlineData(2, \"ikinci\")]\r\n    [InlineData(3, \"üçüncü\")]\r\n    [InlineData(4, \"dördüncü\")]\r\n    [InlineData(5, \"beşinci\")]\r\n    [InlineData(6, \"altıncı\")]\r\n    [InlineData(7, \"yeddinci\")]\r\n    [InlineData(8, \"səkkizinci\")]\r\n    [InlineData(9, \"doqquzuncu\")]\r\n    [InlineData(10, \"onuncu\")]\r\n    [InlineData(11, \"on birinci\")]\r\n    [InlineData(12, \"on ikinci\")]\r\n    [InlineData(13, \"on üçüncü\")]\r\n    [InlineData(14, \"on dördüncü\")]\r\n    [InlineData(15, \"on beşinci\")]\r\n    [InlineData(16, \"on altıncı\")]\r\n    [InlineData(17, \"on yeddinci\")]\r\n    [InlineData(18, \"on səkkizinci\")]\r\n    [InlineData(19, \"on doqquzuncu\")]\r\n    [InlineData(20, \"iyirminci\")]\r\n    [InlineData(21, \"iyirmi birinci\")]\r\n    [InlineData(30, \"otuzuncu\")]\r\n    [InlineData(40, \"qırxıncı\")]\r\n    [InlineData(50, \"əllinci\")]\r\n    [InlineData(60, \"altmışıncı\")]\r\n    [InlineData(70, \"yetmişinci\")]\r\n    [InlineData(80, \"səksəninci\")]\r\n    [InlineData(90, \"doxsanıncı\")]\r\n    [InlineData(100, \"yüzüncü\")]\r\n    [InlineData(120, \"yüz iyirminci\")]\r\n    [InlineData(121, \"yüz iyirmi birinci\")]\r\n    [InlineData(200, \"iki yüzüncü\")]\r\n    [InlineData(221, \"iki yüz iyirmi birinci\")]\r\n    [InlineData(300, \"üç yüzüncü\")]\r\n    [InlineData(321, \"üç yüz iyirmi birinci\")]\r\n    [InlineData(1000, \"mininci\")]\r\n    [InlineData(1001, \"min birinci\")]\r\n    [InlineData(10000, \"on mininci\")]\r\n    [InlineData(100000, \"yüz mininci\")]\r\n    [InlineData(1000000, \"bir milyonuncu\")]\r\n    [InlineData(1022135, \"bir milyon iyirmi iki min yüz otuz beşinci\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/az/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace az;\r\n\r\n[UseCulture(\"az\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 il\")]\r\n    [InlineData(731, \"2 il\")]\r\n    [InlineData(1096, \"3 il\")]\r\n    [InlineData(4018, \"11 il\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan\r\n            .FromDays(days)\r\n            .Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 ay\")]\r\n    [InlineData(61, \"2 ay\")]\r\n    [InlineData(92, \"3 ay\")]\r\n    [InlineData(335, \"11 ay\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan\r\n            .FromDays(days)\r\n            .Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(14, \"2 həftə\")]\r\n    [InlineData(7, \"1 həftə\")]\r\n    public void Weeks(int days, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromDays(days)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(6, \"6 gün\")]\r\n    [InlineData(2, \"2 gün\")]\r\n    public void Days(int days, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromDays(days)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 saat\")]\r\n    [InlineData(1, \"1 saat\")]\r\n    public void Hours(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromHours(hours)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 dəqiqə\")]\r\n    [InlineData(1, \"1 dəqiqə\")]\r\n    public void Minutes(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromMinutes(minutes)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 saniyə\")]\r\n    [InlineData(1, \"1 saniyə\")]\r\n    public void Seconds(int seconds, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromSeconds(seconds)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 millisaniyə\")]\r\n    [InlineData(1, \"1 millisaniyə\")]\r\n    public void Milliseconds(int ms, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromMilliseconds(ms)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTime()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize();\r\n        Assert.Equal(\"0 millisaniyə\", actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTimeToWords()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(toWords: true);\r\n        Assert.Equal(\"zaman fərqi yoxdur\", actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/bg/DateHumanizeTests.cs",
    "content": "﻿namespace bg;\r\n\r\n[UseCulture(\"bg-BG\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"преди секунда\")]\r\n    [InlineData(2, \"преди 2 секунди\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"след секунда\")]\r\n    [InlineData(2, \"след 2 секунди\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"преди минута\")]\r\n    [InlineData(2, \"преди 2 минути\")]\r\n    [InlineData(60, \"преди час\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"след минута\")]\r\n    [InlineData(2, \"след 2 минути\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"преди час\")]\r\n    [InlineData(2, \"преди 2 часа\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"след час\")]\r\n    [InlineData(2, \"след 2 часа\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"вчера\")]\r\n    [InlineData(2, \"преди 2 дена\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"утре\")]\r\n    [InlineData(2, \"след 2 дена\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"преди месец\")]\r\n    [InlineData(2, \"преди 2 месеца\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"след месец\")]\r\n    [InlineData(2, \"след 2 месеца\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"преди година\")]\r\n    [InlineData(2, \"преди 2 години\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"след година\")]\r\n    [InlineData(2, \"след 2 години\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"сега\", 0, TimeUnit.Day, Tense.Past);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/bg/NumberToWordsTests.cs",
    "content": "﻿namespace bg;\r\n\r\n[UseCulture(\"bg\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"нула\")]\r\n    [InlineData(1, \"едно\")]\r\n    [InlineData(10, \"десет\")]\r\n    [InlineData(11, \"единадесет\")]\r\n    [InlineData(12, \"дванадесет\")]\r\n    [InlineData(13, \"тринадесет\")]\r\n    [InlineData(14, \"четиринадесет\")]\r\n    [InlineData(15, \"петнадесет\")]\r\n    [InlineData(16, \"шестнадесет\")]\r\n    [InlineData(17, \"седемнадесет\")]\r\n    [InlineData(18, \"осемнадесет\")]\r\n    [InlineData(19, \"деветнадесет\")]\r\n    [InlineData(20, \"двадесет\")]\r\n    [InlineData(30, \"тридесет\")]\r\n    [InlineData(40, \"четиридесет\")]\r\n    [InlineData(50, \"петдесет\")]\r\n    [InlineData(60, \"шестдесет\")]\r\n    [InlineData(70, \"седемдесет\")]\r\n    [InlineData(80, \"осемдесет\")]\r\n    [InlineData(90, \"деветдесет\")]\r\n    [InlineData(100, \"сто\")]\r\n    [InlineData(200, \"двеста\")]\r\n    [InlineData(300, \"триста\")]\r\n    [InlineData(400, \"четиристотин\")]\r\n    [InlineData(500, \"петстотин\")]\r\n    [InlineData(600, \"шестстотин\")]\r\n    [InlineData(700, \"седемстотин\")]\r\n    [InlineData(800, \"осемстотин\")]\r\n    [InlineData(900, \"деветстотин\")]\r\n    [InlineData(122, \"сто двадесет и две\")]\r\n    [InlineData(111, \"сто и единадесет\")]\r\n    [InlineData(55, \"петдесет и пет\")]\r\n    [InlineData(555, \"петстотин петдесет и пет\")]\r\n    [InlineData(1000, \"една хиляда\")]\r\n    [InlineData(2000, \"две хиляди\")]\r\n    [InlineData(4213, \"четири хиляди двеста и тринадесет\")]\r\n    [InlineData(5000, \"пет хиляди\")]\r\n    [InlineData(28205, \"двадесет и осем хиляди двеста и пет\")]\r\n    [InlineData(35000, \"тридесет и пет хиляди\")]\r\n    [InlineData(352192, \"триста петдесет и две хиляди сто деветдесет и две\")]\r\n    [InlineData(1000000, \"един милион\")]\r\n    [InlineData(2000000, \"два милиона\")]\r\n    [InlineData(4000210, \"четири милиона двеста и десет\")]\r\n    [InlineData(5200, \"пет хиляди и двеста\")]\r\n    [InlineData(1125000, \"един милион и сто двадесет и пет хиляди\")]\r\n    [InlineData(1000000000, \"един милиард\")]\r\n    [InlineData(2000000000, \"два милиарда\")]\r\n    [InlineData(3000000000, \"три милиарда\")]\r\n    public void ToWordsBg(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"нулев\")]\r\n    [InlineData(1, \"първи\")]\r\n    [InlineData(2, \"втори\")]\r\n    [InlineData(3, \"трети\")]\r\n    [InlineData(4, \"четвърти\")]\r\n    [InlineData(5, \"пети\")]\r\n    [InlineData(6, \"шести\")]\r\n    [InlineData(7, \"седми\")]\r\n    [InlineData(8, \"осми\")]\r\n    [InlineData(11, \"единадесети\")]\r\n    [InlineData(12, \"дванадесети\")]\r\n    [InlineData(13, \"тринадесети\")]\r\n    [InlineData(14, \"четиринадесети\")]\r\n    [InlineData(15, \"петнадесети\")]\r\n    [InlineData(16, \"шестнадесети\")]\r\n    [InlineData(17, \"седемнадесети\")]\r\n    [InlineData(18, \"осемнадесети\")]\r\n    [InlineData(19, \"деветнадесети\")]\r\n    [InlineData(20, \"двадесети\")]\r\n    [InlineData(30, \"тридесети\")]\r\n    [InlineData(40, \"четиридесети\")]\r\n    [InlineData(50, \"петдесети\")]\r\n    [InlineData(60, \"шестдесети\")]\r\n    [InlineData(70, \"седемдесети\")]\r\n    [InlineData(80, \"осемдесети\")]\r\n    [InlineData(90, \"деветдесети\")]\r\n    [InlineData(21, \"двадесет и първи\")]\r\n    [InlineData(22, \"двадесет и втори\")]\r\n    [InlineData(35, \"тридесет и пети\")]\r\n    [InlineData(100, \"стотен\")]\r\n    [InlineData(111, \"сто и единадесети\")]\r\n    [InlineData(200, \"двестотен\")]\r\n    [InlineData(300, \"тристотен\")]\r\n    [InlineData(1000, \"една хиляден\")]\r\n    [InlineData(1111, \"една хиляда сто и единадесети\")]\r\n    [InlineData(10000, \"десет хиляден\")]\r\n    [InlineData(12345, \"дванадесет хиляди триста четиридесет и пети\")]\r\n    [InlineData(12000, \"дванадесет хиляден\")]\r\n    [InlineData(100000, \"сто хиляден\")]\r\n    [InlineData(101111, \"сто и една хиляда сто и единадесети\")]\r\n    [InlineData(1000000, \"един милионен\")]\r\n    [InlineData(2000000, \"два милионен\")]\r\n    public void ToOrdinalWordsMasculine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Masculine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"нулева\")]\r\n    [InlineData(1, \"първа\")]\r\n    [InlineData(2, \"втора\")]\r\n    [InlineData(3, \"трета\")]\r\n    [InlineData(4, \"четвърта\")]\r\n    [InlineData(5, \"пета\")]\r\n    [InlineData(6, \"шеста\")]\r\n    [InlineData(7, \"седма\")]\r\n    [InlineData(8, \"осма\")]\r\n    [InlineData(11, \"единадесета\")]\r\n    [InlineData(12, \"дванадесета\")]\r\n    [InlineData(13, \"тринадесета\")]\r\n    [InlineData(14, \"четиринадесета\")]\r\n    [InlineData(15, \"петнадесета\")]\r\n    [InlineData(16, \"шестнадесета\")]\r\n    [InlineData(17, \"седемнадесета\")]\r\n    [InlineData(18, \"осемнадесета\")]\r\n    [InlineData(19, \"деветнадесета\")]\r\n    [InlineData(20, \"двадесета\")]\r\n    [InlineData(30, \"тридесета\")]\r\n    [InlineData(40, \"четиридесета\")]\r\n    [InlineData(50, \"петдесета\")]\r\n    [InlineData(60, \"шестдесета\")]\r\n    [InlineData(70, \"седемдесета\")]\r\n    [InlineData(80, \"осемдесета\")]\r\n    [InlineData(90, \"деветдесета\")]\r\n    [InlineData(21, \"двадесет и първа\")]\r\n    [InlineData(22, \"двадесет и втора\")]\r\n    [InlineData(35, \"тридесет и пета\")]\r\n    [InlineData(100, \"стотна\")]\r\n    [InlineData(111, \"сто и единадесета\")]\r\n    [InlineData(200, \"двестотна\")]\r\n    [InlineData(300, \"тристотна\")]\r\n    [InlineData(1000, \"една хилядна\")]\r\n    [InlineData(1111, \"една хиляда сто и единадесета\")]\r\n    [InlineData(10000, \"десет хилядна\")]\r\n    [InlineData(12345, \"дванадесет хиляди триста четиридесет и пета\")]\r\n    [InlineData(12000, \"дванадесет хилядна\")]\r\n    [InlineData(100000, \"сто хилядна\")]\r\n    [InlineData(101111, \"сто и една хиляда сто и единадесета\")]\r\n    [InlineData(1000000, \"един милионна\")]\r\n    [InlineData(2000000, \"два милионна\")]\r\n    public void ToOrdinalWordsFeminine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"нулево\")]\r\n    [InlineData(1, \"първо\")]\r\n    [InlineData(2, \"второ\")]\r\n    [InlineData(3, \"трето\")]\r\n    [InlineData(4, \"четвърто\")]\r\n    [InlineData(5, \"пето\")]\r\n    [InlineData(6, \"шесто\")]\r\n    [InlineData(7, \"седмо\")]\r\n    [InlineData(8, \"осмо\")]\r\n    [InlineData(11, \"единадесето\")]\r\n    [InlineData(12, \"дванадесето\")]\r\n    [InlineData(13, \"тринадесето\")]\r\n    [InlineData(14, \"четиринадесето\")]\r\n    [InlineData(15, \"петнадесето\")]\r\n    [InlineData(16, \"шестнадесето\")]\r\n    [InlineData(17, \"седемнадесето\")]\r\n    [InlineData(18, \"осемнадесето\")]\r\n    [InlineData(19, \"деветнадесето\")]\r\n    [InlineData(20, \"двадесето\")]\r\n    [InlineData(30, \"тридесето\")]\r\n    [InlineData(40, \"четиридесето\")]\r\n    [InlineData(50, \"петдесето\")]\r\n    [InlineData(60, \"шестдесето\")]\r\n    [InlineData(70, \"седемдесето\")]\r\n    [InlineData(80, \"осемдесето\")]\r\n    [InlineData(90, \"деветдесето\")]\r\n    [InlineData(21, \"двадесет и първо\")]\r\n    [InlineData(22, \"двадесет и второ\")]\r\n    [InlineData(35, \"тридесет и пето\")]\r\n    [InlineData(100, \"стотно\")]\r\n    [InlineData(111, \"сто и единадесето\")]\r\n    [InlineData(200, \"двестотно\")]\r\n    [InlineData(300, \"тристотно\")]\r\n    [InlineData(1000, \"една хилядно\")]\r\n    [InlineData(1111, \"една хиляда сто и единадесето\")]\r\n    [InlineData(10000, \"десет хилядно\")]\r\n    [InlineData(12345, \"дванадесет хиляди триста четиридесет и пето\")]\r\n    [InlineData(12000, \"дванадесет хилядно\")]\r\n    [InlineData(100000, \"сто хилядно\")]\r\n    [InlineData(101111, \"сто и една хиляда сто и единадесето\")]\r\n    [InlineData(1000000, \"един милионно\")]\r\n    [InlineData(2000000, \"два милионно\")]\r\n    public void ToOrdinalWordsNeuter(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Neuter));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/bg/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace bg;\r\n\r\n[UseCulture(\"bg-BG\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 година\")]\r\n    [InlineData(731, \"2 години\")]\r\n    [InlineData(1096, \"3 години\")]\r\n    [InlineData(4018, \"11 години\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"една година\")]\r\n    [InlineData(731, \"две години\")]\r\n    [InlineData(1096, \"три години\")]\r\n    [InlineData(4018, \"единадесет години\")]\r\n    // [InlineData(7671, \"двадесет и една година\")]\r\n    public void YearsToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: true));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 месец\")]\r\n    [InlineData(61, \"2 месеца\")]\r\n    [InlineData(92, \"3 месеца\")]\r\n    [InlineData(335, \"11 месеца\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"един месец\")]\r\n    [InlineData(61, \"два месеца\")]\r\n    [InlineData(92, \"три месеца\")]\r\n    [InlineData(335, \"единадесет месеца\")]\r\n    public void MonthsToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Month, toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 седмица\")]\r\n    [InlineData(14, \"2 седмици\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(7, \"една седмица\")]\r\n    [InlineData(14, \"две седмици\")]\r\n    public void WeeksToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 ден\")]\r\n    [InlineData(2, \"2 дена\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"един ден\")]\r\n    [InlineData(2, \"два дена\")]\r\n    public void DaysToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 час\")]\r\n    [InlineData(2, \"2 часа\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"един час\")]\r\n    [InlineData(2, \"два часа\")]\r\n    public void HoursToWords(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 минута\")]\r\n    [InlineData(2, \"2 минути\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"една минута\")]\r\n    [InlineData(2, \"две минути\")]\r\n    public void MinutesToWords(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 секунда\")]\r\n    [InlineData(2, \"2 секунди\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"една секунда\")]\r\n    [InlineData(2, \"две секунди\")]\r\n    public void SecondsToWords(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 милисекунда\")]\r\n    [InlineData(2, \"2 милисекунди\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"една милисекунда\")]\r\n    [InlineData(2, \"две милисекунди\")]\r\n    public void MillisecondsToWords(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize(toWords: true));\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"0 милисекунди\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"няма време\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/bn-BD/DateHumanizeTests.cs",
    "content": "﻿namespace bnBD;\r\n\r\n[UseCulture(\"bn-BD\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"আগামিকাল\")]\r\n    [InlineData(13, \"13 দিন পর\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"গতকাল\")]\r\n    [InlineData(-11, \"11 দিন আগে\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"এক ঘণ্টা পর\")]\r\n    [InlineData(11, \"11 ঘণ্টা পর\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"এক ঘণ্টা আগে\")]\r\n    [InlineData(-11, \"11 ঘণ্টা আগে\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"এক মিনিট পর\")]\r\n    [InlineData(13, \"13 মিনিট পর\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"এক মিনিট আগে\")]\r\n    [InlineData(-13, \"13 মিনিট আগে\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"এক মাস পর\")]\r\n    [InlineData(10, \"10 মাস পর\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"এক মাস আগে\")]\r\n    [InlineData(-10, \"10 মাস আগে\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"এক সেকেন্ড পর\")]\r\n    [InlineData(11, \"11 সেকেন্ড পর\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"এক সেকেন্ড আগে\")]\r\n    [InlineData(-11, \"11 সেকেন্ড আগে\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"এক বছর পর\")]\r\n    [InlineData(21, \"21 বছর পর\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"এক বছর আগে\")]\r\n    [InlineData(-21, \"21 বছর আগে\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/bn-BD/NumberToWordsTests.cs",
    "content": "﻿namespace bnBD;\r\n\r\n[UseCulture(\"bn-BD\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [InlineData(0, \"শূন্য\")]\r\n    [InlineData(1, \"এক\")]\r\n    [InlineData(10, \"দশ\")]\r\n    [InlineData(11, \"এগারো\")]\r\n    [InlineData(20, \"বিশ\")]\r\n    [InlineData(122, \"একশ বাইশ\")]\r\n    [InlineData(3501, \"তিন হাজার পাঁচশ এক\")]\r\n    [InlineData(100, \"একশ\")]\r\n    [InlineData(1000, \"এক হাজার\")]\r\n    [InlineData(100000, \"এক লক্ষ\")]\r\n    [InlineData(1000000, \"দশ লক্ষ\")]\r\n    [InlineData(10000000, \"এক কোটি\")]\r\n    [InlineData(100000000, \"দশ কোটি\")]\r\n    [InlineData(1000000000, \"একশ কোটি\")]\r\n    [InlineData(111, \"একশ এগারো\")]\r\n    [InlineData(1111, \"এক হাজার একশ এগারো\")]\r\n    [InlineData(111111, \"এক লক্ষ এগারো হাজার একশ এগারো\")]\r\n    [InlineData(1111111, \"এগারো লক্ষ এগারো হাজার একশ এগারো\")]\r\n    [InlineData(11111111, \"এক কোটি এগারো লক্ষ এগারো হাজার একশ এগারো\")]\r\n    [InlineData(111111111, \"এগারো কোটি এগারো লক্ষ এগারো হাজার একশ এগারো\")]\r\n    [InlineData(1111111111, \"একশ এগারো কোটি এগারো লক্ষ এগারো হাজার একশ এগারো\")]\r\n    [InlineData(123, \"একশ তেইশ\")]\r\n    [InlineData(1234, \"এক হাজার দুইশ চৌঁতিরিশ\")]\r\n    [InlineData(12345, \"বারো হাজার তিনশ পঁয়তাল্লিশ\")]\r\n    [InlineData(123456, \"এক লক্ষ তেইশ হাজার চারশ ছাপ্পান্ন\")]\r\n    [InlineData(1234567, \"বারো লক্ষ চৌঁতিরিশ হাজার পাঁচশ সাতষট্টি\")]\r\n    [InlineData(12345678, \"এক কোটি তেইশ লক্ষ পঁয়তাল্লিশ হাজার ছয়শ আটাত্তর\")]\r\n    [InlineData(123456789, \"বারো কোটি চৌঁতিরিশ লক্ষ ছাপ্পান্ন হাজার সাতশ উননব্বই\")]\r\n    [InlineData(1234567890, \"একশ তেইশ কোটি পঁয়তাল্লিশ লক্ষ সাতষট্টি হাজার আটশ নব্বই\")]\r\n    [InlineData(-1234567890, \"ঋণাত্মক একশ তেইশ কোটি পঁয়তাল্লিশ লক্ষ সাতষট্টি হাজার আটশ নব্বই\")]\r\n    [Theory]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"শূন্য তম\")]\r\n    [InlineData(1, \"প্রথম\")]\r\n    [InlineData(2, \"দ্বিতীয়\")]\r\n    [InlineData(3, \"তৃতীয়\")]\r\n    [InlineData(4, \"চতুর্থ\")]\r\n    [InlineData(5, \"পঞ্চম\")]\r\n    [InlineData(6, \"ষষ্ট\")]\r\n    [InlineData(7, \"সপ্তম\")]\r\n    [InlineData(8, \"অষ্টম\")]\r\n    [InlineData(9, \"নবম\")]\r\n    [InlineData(10, \"দশম\")]\r\n    [InlineData(11, \"একাদশ\")]\r\n    [InlineData(12, \"দ্বাদশ\")]\r\n    [InlineData(13, \"ত্রয়োদশ\")]\r\n    [InlineData(14, \"চতুর্দশ\")]\r\n    [InlineData(15, \"পঞ্চদশ\")]\r\n    [InlineData(16, \"ষোড়শ\")]\r\n    [InlineData(17, \"সপ্তদশ\")]\r\n    [InlineData(18, \"অষ্টাদশ\")]\r\n    [InlineData(19, \"উনিশ তম\")]\r\n    [InlineData(20, \"বিশ তম\")]\r\n    [InlineData(21, \"একুশ তম\")]\r\n    [InlineData(100, \"শত তম\")]\r\n    [InlineData(112, \"একশ বারো তম\")]\r\n    [InlineData(118, \"একশ আঠারো তম\")]\r\n    [InlineData(1000, \"হাজার তম\")]\r\n    [InlineData(1001, \"এক হাজার এক তম\")]\r\n    [InlineData(1021, \"এক হাজার একুশ তম\")]\r\n    [InlineData(10000, \"দশ হাজার তম\")]\r\n    [InlineData(10121, \"দশ হাজার একশ একুশ তম\")]\r\n    [InlineData(100000, \"লক্ষ তম\")]\r\n    [InlineData(1000000, \"দশ লক্ষ তম\")]\r\n    [InlineData(10000000, \"কোটি তম\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/bn-BD/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace bnBD;\r\n\r\n[UseCulture(\"bn-BD\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"এক বছর\")]\r\n    [InlineData(731, \"2 বছর\")]\r\n    [InlineData(1096, \"3 বছর\")]\r\n    [InlineData(4018, \"11 বছর\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"এক মাসের\")]\r\n    [InlineData(61, \"2 মাস\")]\r\n    [InlineData(92, \"3 মাস\")]\r\n    [InlineData(335, \"11 মাস\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"এক সপ্তাহ\")]\r\n    [InlineData(14, \"2 সপ্তাহ\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"এক দিন\")]\r\n    [InlineData(2, \"2 দিন\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"এক ঘণ্টা\")]\r\n    [InlineData(2, \"2 ঘণ্টা\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"এক মিনিট\")]\r\n    [InlineData(2, \"2 মিনিট\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"এক সেকেন্ড\")]\r\n    [InlineData(2, \"2 সেকেন্ড\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"এক মিলিসেকেন্ড\")]\r\n    [InlineData(2, \"2 মিলিসেকেন্ড\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 মিলিসেকেন্ড\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This one really doesn't make a lot of sense but again... w/e\r\n        Assert.Equal(\"শূন্য সময়\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ca/DateHumanizeTests.cs",
    "content": "namespace ca;\r\n\r\n[UseCulture(\"ca\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"fa un segon\")]\r\n    [InlineData(2, \"fa 2 segons\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"d'aquí un segon\")]\r\n    [InlineData(2, \"d'aquí 2 segons\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"fa un minut\")]\r\n    [InlineData(2, \"fa 2 minuts\")]\r\n    [InlineData(60, \"fa una hora\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"d'aquí un minut\")]\r\n    [InlineData(2, \"d'aquí 2 minuts\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"fa una hora\")]\r\n    [InlineData(2, \"fa 2 hores\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"d'aquí una hora\")]\r\n    [InlineData(2, \"d'aquí 2 hores\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ahir\")]\r\n    [InlineData(2, \"fa 2 dies\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"demà\")]\r\n    [InlineData(2, \"d'aquí 2 dies\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"fa un mes\")]\r\n    [InlineData(2, \"fa 2 mesos\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"d'aquí un mes\")]\r\n    [InlineData(2, \"d'aquí 2 mesos\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"fa un any\")]\r\n    [InlineData(2, \"fa 2 anys\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"d'aquí un any\")]\r\n    [InlineData(2, \"d'aquí 2 anys\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ca/DateToOrdinalWordsTests.cs",
    "content": "namespace ca;\r\n\r\n[UseCulture(\"ca\")]\r\npublic class DateToOrdinalWordsTests\r\n{\r\n    [Fact]\r\n    public void OrdinalizeString()\r\n    {\r\n        Assert.Equal(\"25 de gener de 2022\", new DateTime(2022, 1, 25).ToOrdinalWords());\r\n        Assert.Equal(\"29 de febrer de 2020\", new DateTime(2020, 2, 29).ToOrdinalWords());\r\n        Assert.Equal(\"4 de setembre de 2015\", new DateTime(2015, 9, 4).ToOrdinalWords());\r\n        Assert.Equal(\"7 de novembre de 1979\", new DateTime(1979, 11, 7).ToOrdinalWords());\r\n    }\r\n\r\n#if NET6_0_OR_GREATER\r\n    [Fact]\r\n    public void OrdinalizeDateOnlyString()\r\n    {\r\n        Assert.Equal(\"25 de gener de 2022\", new DateOnly(2022, 1, 25).ToOrdinalWords());\r\n        Assert.Equal(\"29 de febrer de 2020\", new DateOnly(2020, 2, 29).ToOrdinalWords());\r\n        Assert.Equal(\"4 de setembre de 2015\", new DateOnly(2015, 9, 4).ToOrdinalWords());\r\n        Assert.Equal(\"7 de novembre de 1979\", new DateOnly(1979, 11, 7).ToOrdinalWords());\r\n    }\r\n#endif\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ca/NumberToWordsFeminineTest.cs",
    "content": "namespace ca;\r\n\r\n[UseCulture(\"ca\")]\r\npublic class NumberToWordsFeminineTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"una\")]\r\n    [InlineData(21, \"vint-i-una\")]\r\n    [InlineData(31, \"trenta-una\")]\r\n    [InlineData(81, \"vuitanta-una\")]\r\n    [InlineData(500, \"cinc-centes\")]\r\n    [InlineData(701, \"set-centes una\")]\r\n    [InlineData(3500, \"tres mil cinc-centes\")]\r\n    [InlineData(200121, \"dues-centes mil cent vint-i-una\")]\r\n    [InlineData(200000121, \"dos-cents milions cent vint-i-una\")]\r\n    [InlineData(1000001, \"un milió una\")]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ca/NumberToWordsTests.cs",
    "content": "namespace ca;\r\n\r\n[UseCulture(\"ca\")]\r\n\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(-1, \"menys primer\", GrammaticalGender.Neuter)]\r\n    [InlineData(0, \"zero\", GrammaticalGender.Neuter)]\r\n    [InlineData(1, \"primer\", GrammaticalGender.Neuter)]\r\n    [InlineData(1, \"primer\", GrammaticalGender.Masculine)]\r\n    [InlineData(1, \"primera\", GrammaticalGender.Feminine)]\r\n    [InlineData(2, \"segon\", GrammaticalGender.Masculine)]\r\n    [InlineData(2, \"segona\", GrammaticalGender.Feminine)]\r\n    [InlineData(3, \"tercer\", GrammaticalGender.Neuter)]\r\n    [InlineData(3, \"tercer\", GrammaticalGender.Masculine)]\r\n    [InlineData(3, \"tercera\", GrammaticalGender.Feminine)]\r\n    [InlineData(4, \"quart\", GrammaticalGender.Masculine)]\r\n    [InlineData(4, \"quarta\", GrammaticalGender.Feminine)]\r\n    [InlineData(5, \"cinquè\", GrammaticalGender.Masculine)]\r\n    [InlineData(5, \"cinquena\", GrammaticalGender.Feminine)]\r\n    [InlineData(6, \"sisè\", GrammaticalGender.Masculine)]\r\n    [InlineData(6, \"sisena\", GrammaticalGender.Feminine)]\r\n    [InlineData(7, \"setè\", GrammaticalGender.Masculine)]\r\n    [InlineData(7, \"setena\", GrammaticalGender.Feminine)]\r\n    [InlineData(8, \"vuitè\", GrammaticalGender.Masculine)]\r\n    [InlineData(8, \"vuitena\", GrammaticalGender.Feminine)]\r\n    [InlineData(9, \"novè\", GrammaticalGender.Masculine)]\r\n    [InlineData(9, \"novena\", GrammaticalGender.Feminine)]\r\n    [InlineData(10, \"desè\", GrammaticalGender.Masculine)]\r\n    [InlineData(10, \"desena\", GrammaticalGender.Feminine)]\r\n    [InlineData(11, \"onzè\", GrammaticalGender.Masculine)]\r\n    [InlineData(11, \"onzena\", GrammaticalGender.Feminine)]\r\n    [InlineData(20, \"vintè\", GrammaticalGender.Masculine)]\r\n    [InlineData(20, \"vintena\", GrammaticalGender.Feminine)]\r\n    [InlineData(22, \"vint-i-dosè\", GrammaticalGender.Masculine)]\r\n    [InlineData(22, \"vint-i-dosena\", GrammaticalGender.Feminine)]\r\n    [InlineData(30, \"trentè\", GrammaticalGender.Masculine)]\r\n    [InlineData(30, \"trentena\", GrammaticalGender.Feminine)]\r\n    [InlineData(34, \"trenta-quatrè\", GrammaticalGender.Masculine)]\r\n    [InlineData(34, \"trenta-quatrena\", GrammaticalGender.Feminine)]\r\n    [InlineData(40, \"quarantaè\", GrammaticalGender.Masculine)]\r\n    [InlineData(40, \"quarantaena\", GrammaticalGender.Feminine)]\r\n    [InlineData(46, \"quaranta-sisè\", GrammaticalGender.Masculine)]\r\n    [InlineData(46, \"quaranta-sisena\", GrammaticalGender.Feminine)]\r\n    [InlineData(50, \"cinquantaè\", GrammaticalGender.Masculine)]\r\n    [InlineData(50, \"cinquantaena\", GrammaticalGender.Feminine)]\r\n    [InlineData(57, \"cinquanta-setè\", GrammaticalGender.Masculine)]\r\n    [InlineData(57, \"cinquanta-setena\", GrammaticalGender.Feminine)]\r\n    [InlineData(60, \"seixantè\", GrammaticalGender.Masculine)]\r\n    [InlineData(60, \"seixantena\", GrammaticalGender.Feminine)]\r\n    [InlineData(69, \"seixanta-novè\", GrammaticalGender.Masculine)]\r\n    [InlineData(69, \"seixanta-novena\", GrammaticalGender.Feminine)]\r\n    [InlineData(70, \"setantè\", GrammaticalGender.Masculine)]\r\n    [InlineData(70, \"setantena\", GrammaticalGender.Feminine)]\r\n    [InlineData(74, \"setanta-quatrè\", GrammaticalGender.Masculine)]\r\n    [InlineData(74, \"setanta-quatrena\", GrammaticalGender.Feminine)]\r\n    [InlineData(80, \"vuitantè\", GrammaticalGender.Masculine)]\r\n    [InlineData(80, \"vuitantena\", GrammaticalGender.Feminine)]\r\n    [InlineData(85, \"vuitanta-cinquè\", GrammaticalGender.Masculine)]\r\n    [InlineData(85, \"vuitanta-cinquena\", GrammaticalGender.Feminine)]\r\n    [InlineData(90, \"norantè\", GrammaticalGender.Masculine)]\r\n    [InlineData(90, \"norantena\", GrammaticalGender.Feminine)]\r\n    [InlineData(99, \"noranta-novè\", GrammaticalGender.Masculine)]\r\n    [InlineData(99, \"noranta-novena\", GrammaticalGender.Feminine)]\r\n    [InlineData(100, \"centè\", GrammaticalGender.Masculine)]\r\n    [InlineData(100, \"centena\", GrammaticalGender.Feminine)]\r\n    [InlineData(101, \"cent primer\", GrammaticalGender.Masculine)]\r\n    [InlineData(101, \"cent primera\", GrammaticalGender.Feminine)]\r\n    [InlineData(110, \"cent deu\", GrammaticalGender.Masculine)]\r\n    [InlineData(111, \"cent onzè\", GrammaticalGender.Masculine)]\r\n    [InlineData(120, \"cent vint\", GrammaticalGender.Masculine)]\r\n    [InlineData(121, \"cent vint-i-un\", GrammaticalGender.Masculine)]\r\n    [InlineData(121, \"cent vint-i-una\", GrammaticalGender.Feminine)]\r\n    [InlineData(200, \"dos-cents\", GrammaticalGender.Masculine)]\r\n    [InlineData(200, \"dues-centes\", GrammaticalGender.Feminine)]\r\n    [InlineData(201, \"dos-cents un\", GrammaticalGender.Masculine)]\r\n    [InlineData(201, \"dues-centes una\", GrammaticalGender.Feminine)]\r\n    [InlineData(221, \"dos-cents vint-i-un\", GrammaticalGender.Masculine)]\r\n    [InlineData(221, \"dues-centes vint-i-una\", GrammaticalGender.Feminine)]\r\n    [InlineData(500, \"cinc-cents\", GrammaticalGender.Masculine)]\r\n    [InlineData(500, \"cinc-centes\", GrammaticalGender.Feminine)]\r\n    [InlineData(701, \"set-cents un\", GrammaticalGender.Masculine)]\r\n    [InlineData(701, \"set-centes una\", GrammaticalGender.Feminine)]\r\n    [InlineData(900, \"nou-cents\", GrammaticalGender.Masculine)]\r\n    [InlineData(900, \"nou-centes\", GrammaticalGender.Feminine)]\r\n    [InlineData(999, \"nou-cents noranta-nou\", GrammaticalGender.Masculine)]\r\n    [InlineData(999, \"nou-centes noranta-nou\", GrammaticalGender.Feminine)]\r\n    [InlineData(1000, \"mil\", GrammaticalGender.Masculine)]\r\n    [InlineData(1001, \"mil un\", GrammaticalGender.Masculine)]\r\n    [InlineData(1001, \"mil una\", GrammaticalGender.Feminine)]\r\n    [InlineData(1021, \"mil vint-i-un\", GrammaticalGender.Masculine)]\r\n    [InlineData(1021, \"mil vint-i-una\", GrammaticalGender.Feminine)]\r\n    [InlineData(1100, \"mil cent\", GrammaticalGender.Masculine)]\r\n    [InlineData(1100, \"mil cent\", GrammaticalGender.Feminine)]\r\n    [InlineData(2000, \"dos mil\", GrammaticalGender.Masculine)]\r\n    [InlineData(2100, \"dos mil cent\", GrammaticalGender.Masculine)]\r\n    [InlineData(3500, \"tres mil cinc-cents\", GrammaticalGender.Masculine)]\r\n    [InlineData(3500, \"tres mil cinc-centes\", GrammaticalGender.Feminine)]\r\n    [InlineData(100000, \"cent mil\", GrammaticalGender.Masculine)]\r\n    [InlineData(100001, \"cent mil un\", GrammaticalGender.Masculine)]\r\n    [InlineData(100001, \"cent mil una\", GrammaticalGender.Feminine)]\r\n    [InlineData(100002, \"cent mil dos\", GrammaticalGender.Masculine)]\r\n    [InlineData(100002, \"cent mil dues\", GrammaticalGender.Feminine)]\r\n    [InlineData(100021, \"cent mil vint-i-un\", GrammaticalGender.Masculine)]\r\n    [InlineData(100021, \"cent mil vint-i-una\", GrammaticalGender.Feminine)]\r\n    [InlineData(200000, \"dos-cents mil\", GrammaticalGender.Masculine)]\r\n    [InlineData(200000, \"dues-centes mil\", GrammaticalGender.Feminine)]\r\n    [InlineData(200121, \"dos-cents mil cent vint-i-un\", GrammaticalGender.Masculine)]\r\n    [InlineData(200121, \"dues-centes mil cent vint-i-una\", GrammaticalGender.Feminine)]\r\n    [InlineData(1000000, \"un milió\", GrammaticalGender.Masculine)]\r\n    [InlineData(1000001, \"un milió un\", GrammaticalGender.Masculine)]\r\n    [InlineData(1000001, \"un milió una\", GrammaticalGender.Feminine)]\r\n    [InlineData(2000000, \"dos milions\", GrammaticalGender.Masculine)]\r\n    [InlineData(2000001, \"dos milions un\", GrammaticalGender.Masculine)]\r\n    [InlineData(2000001, \"dos milions una\", GrammaticalGender.Feminine)]\r\n    [InlineData(200000121, \"dos-cents milions cent vint-i-un\", GrammaticalGender.Masculine)]\r\n    [InlineData(200000121, \"dos-cents milions cent vint-i-una\", GrammaticalGender.Feminine)]\r\n    public void ToOrdinalWords(int number, string words, GrammaticalGender gender) =>\r\n        Assert.Equal(words, number.ToOrdinalWords(gender));\r\n\r\n    [Theory]\r\n    [InlineData(1, WordForm.Abbreviation, GrammaticalGender.Masculine, \"1r\")]\r\n    [InlineData(1, WordForm.Abbreviation, GrammaticalGender.Feminine, \"1a\")]\r\n    [InlineData(2, WordForm.Abbreviation, GrammaticalGender.Masculine, \"2n\")]\r\n    [InlineData(2, WordForm.Abbreviation, GrammaticalGender.Feminine, \"2a\")]\r\n    [InlineData(3, WordForm.Abbreviation, GrammaticalGender.Masculine, \"3r\")]\r\n    [InlineData(3, WordForm.Abbreviation, GrammaticalGender.Feminine, \"3a\")]\r\n    [InlineData(11, WordForm.Abbreviation, GrammaticalGender.Masculine, \"11è\")]\r\n    [InlineData(11, WordForm.Abbreviation, GrammaticalGender.Feminine, \"11a\")]\r\n    [InlineData(22, WordForm.Abbreviation, GrammaticalGender.Masculine, \"22n\")]\r\n    [InlineData(22, WordForm.Abbreviation, GrammaticalGender.Feminine, \"22a\")]\r\n    [InlineData(31, WordForm.Abbreviation, GrammaticalGender.Masculine, \"31r\")]\r\n    [InlineData(31, WordForm.Abbreviation, GrammaticalGender.Feminine, \"31a\")]\r\n    [InlineData(100, WordForm.Abbreviation, GrammaticalGender.Masculine, \"100è\")]\r\n    [InlineData(100, WordForm.Abbreviation, GrammaticalGender.Feminine, \"100a\")]\r\n    [InlineData(101, WordForm.Abbreviation, GrammaticalGender.Masculine, \"101r\")]\r\n    [InlineData(101, WordForm.Abbreviation, GrammaticalGender.Feminine, \"101a\")]\r\n    [InlineData(999, WordForm.Abbreviation, GrammaticalGender.Masculine, \"999è\")]\r\n    [InlineData(999, WordForm.Abbreviation, GrammaticalGender.Feminine, \"999a\")]\r\n    public void ToOrdinalWordsWithWordForm(int number, WordForm wordForm, GrammaticalGender gender, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(gender, wordForm));\r\n\r\n    [Theory]\r\n    [InlineData(1, WordForm.Abbreviation, GrammaticalGender.Masculine, \"1r\")]\r\n    [InlineData(1, WordForm.Abbreviation, GrammaticalGender.Feminine, \"1a\")]\r\n    [InlineData(2, WordForm.Abbreviation, GrammaticalGender.Masculine, \"2n\")]\r\n    [InlineData(2, WordForm.Abbreviation, GrammaticalGender.Feminine, \"2a\")]\r\n    [InlineData(3, WordForm.Abbreviation, GrammaticalGender.Masculine, \"3r\")]\r\n    [InlineData(3, WordForm.Abbreviation, GrammaticalGender.Feminine, \"3a\")]\r\n    [InlineData(11, WordForm.Abbreviation, GrammaticalGender.Masculine, \"11è\")]\r\n    [InlineData(11, WordForm.Abbreviation, GrammaticalGender.Feminine, \"11a\")]\r\n    [InlineData(22, WordForm.Abbreviation, GrammaticalGender.Masculine, \"22n\")]\r\n    [InlineData(22, WordForm.Abbreviation, GrammaticalGender.Feminine, \"22a\")]\r\n    [InlineData(31, WordForm.Abbreviation, GrammaticalGender.Masculine, \"31r\")]\r\n    [InlineData(31, WordForm.Abbreviation, GrammaticalGender.Feminine, \"31a\")]\r\n    [InlineData(100, WordForm.Abbreviation, GrammaticalGender.Masculine, \"100è\")]\r\n    [InlineData(100, WordForm.Abbreviation, GrammaticalGender.Feminine, \"100a\")]\r\n    [InlineData(101, WordForm.Abbreviation, GrammaticalGender.Masculine, \"101r\")]\r\n    [InlineData(101, WordForm.Abbreviation, GrammaticalGender.Feminine, \"101a\")]\r\n    [InlineData(999, WordForm.Abbreviation, GrammaticalGender.Masculine, \"999è\")]\r\n    [InlineData(999, WordForm.Abbreviation, GrammaticalGender.Feminine, \"999a\")]\r\n    public void ToOrdinalWordsWithWordFormAndGender(int number, WordForm wordForm, GrammaticalGender gender, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(gender, wordForm));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero vegades\")]\r\n    [InlineData(2, \"doble\")]\r\n    [InlineData(100, \"cent vegades\")]\r\n    public void ToTuple(int number, string expected)\r\n        => Assert.Equal(expected, number.ToTuple());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\", GrammaticalGender.Masculine)]\r\n    [InlineData(1, \"un\", GrammaticalGender.Masculine)]\r\n    [InlineData(1, \"una\", GrammaticalGender.Feminine)]\r\n    [InlineData(2, \"dos\", GrammaticalGender.Masculine)]\r\n    [InlineData(2, \"dues\", GrammaticalGender.Feminine)]\r\n    [InlineData(3, \"tres\", GrammaticalGender.Masculine)]\r\n    [InlineData(3, \"tres\", GrammaticalGender.Feminine)]\r\n    [InlineData(11, \"onze\", GrammaticalGender.Masculine)]\r\n    [InlineData(21, \"vint-i-u\", GrammaticalGender.Masculine)]\r\n    [InlineData(21, \"vint-i-una\", GrammaticalGender.Feminine)]\r\n    [InlineData(31, \"trenta-u\", GrammaticalGender.Masculine)]\r\n    [InlineData(31, \"trenta-una\", GrammaticalGender.Feminine)]\r\n    [InlineData(81, \"vuitanta-u\", GrammaticalGender.Masculine)]\r\n    [InlineData(81, \"vuitanta-una\", GrammaticalGender.Feminine)]\r\n    [InlineData(101, \"cent u\", GrammaticalGender.Masculine)]\r\n    [InlineData(101, \"cent una\", GrammaticalGender.Feminine)]\r\n    [InlineData(500, \"cinc-cents\", GrammaticalGender.Masculine)]\r\n    [InlineData(500, \"cinc-centes\", GrammaticalGender.Feminine)]\r\n    [InlineData(701, \"set-cents u\", GrammaticalGender.Masculine)]\r\n    [InlineData(701, \"set-centes una\", GrammaticalGender.Feminine)]\r\n    [InlineData(3500, \"tres mil cinc-cents\", GrammaticalGender.Masculine)]\r\n    [InlineData(3500, \"tres mil cinc-centes\", GrammaticalGender.Feminine)]\r\n    [InlineData(200121, \"dos-cents mil cent vint-i-u\", GrammaticalGender.Masculine)]\r\n    [InlineData(200121, \"dues-centes mil cent vint-i-una\", GrammaticalGender.Feminine)]\r\n    [InlineData(200000121, \"dos-cents milions cent vint-i-u\", GrammaticalGender.Masculine)]\r\n    [InlineData(200000121, \"dos-cents milions cent vint-i-una\", GrammaticalGender.Feminine)]\r\n    [InlineData(1000001, \"un milió u\", GrammaticalGender.Masculine)]\r\n    [InlineData(1000001, \"un milió una\", GrammaticalGender.Feminine)]\r\n    [InlineData(-15, \"menys quinze\", GrammaticalGender.Masculine)]\r\n    [InlineData(-123, \"menys cent vint-i-tres\", GrammaticalGender.Masculine)]\r\n    public void ToWords(long number, string expected, GrammaticalGender gender = GrammaticalGender.Masculine) =>\r\n        Assert.Equal(expected, number.ToWords(gender));\r\n\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ca/OrdinalizeTests.cs",
    "content": "namespace ca;\r\n\r\n[UseCulture(\"ca\")]\r\npublic class OrdinalizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"1r\")]\r\n    [InlineData(3, \"3r\")]\r\n    public void OrdinalizeDefaultGender(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"1r\")]\r\n    [InlineData(int.MinValue, \"0\")]\r\n    public void OrdinalizeZeroOrNegativeNumber(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(1, WordForm.Abbreviation, \"1r\")]\r\n    [InlineData(1, WordForm.Normal, \"1r\")]\r\n    [InlineData(2, WordForm.Abbreviation, \"2n\")]\r\n    [InlineData(2, WordForm.Normal, \"2n\")]\r\n    [InlineData(3, WordForm.Abbreviation, \"3r\")]\r\n    [InlineData(3, WordForm.Normal, \"3r\")]\r\n    [InlineData(21, WordForm.Abbreviation, \"21r\")]\r\n    [InlineData(21, WordForm.Normal, \"21r\")]\r\n    public void OrdinalizeWithWordForm(int number, WordForm wordForm, string expected)\r\n    {\r\n        Assert.Equal(expected, number.Ordinalize(wordForm));\r\n        Assert.Equal(expected, number.ToString(CultureInfo.CurrentUICulture).Ordinalize(wordForm));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, GrammaticalGender.Masculine, WordForm.Abbreviation, \"1r\")]\r\n    [InlineData(1, GrammaticalGender.Masculine, WordForm.Normal, \"1r\")]\r\n    [InlineData(1, GrammaticalGender.Feminine, WordForm.Abbreviation, \"1a\")]\r\n    [InlineData(1, GrammaticalGender.Feminine, WordForm.Normal, \"1a\")]\r\n    [InlineData(1, GrammaticalGender.Neuter, WordForm.Abbreviation, \"1r\")]\r\n    [InlineData(1, GrammaticalGender.Neuter, WordForm.Normal, \"1r\")]\r\n    public void OrdinalizeWithWordFormAndGender(int number, GrammaticalGender gender, WordForm wordForm, string expected)\r\n    {\r\n        Assert.Equal(expected, number.Ordinalize(gender, wordForm));\r\n        Assert.Equal(expected, number.ToString(CultureInfo.CurrentUICulture).Ordinalize(gender, wordForm));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(\"1\", \"1r\")]\r\n    [InlineData(\"2\", \"2n\")]\r\n    [InlineData(\"3\", \"3r\")]\r\n    [InlineData(\"4\", \"4t\")]\r\n    [InlineData(\"5\", \"5è\")]\r\n    [InlineData(\"6\", \"6è\")]\r\n    [InlineData(\"23\", \"23r\")]\r\n    [InlineData(\"100\", \"100è\")]\r\n    [InlineData(\"101\", \"101r\")]\r\n    [InlineData(\"102\", \"102n\")]\r\n    [InlineData(\"103\", \"103r\")]\r\n    [InlineData(\"1001\", \"1001r\")]\r\n    public void OrdinalizeString(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0\")]\r\n    [InlineData(\"1\", \"1a\")]\r\n    [InlineData(\"2\", \"2a\")]\r\n    [InlineData(\"3\", \"3a\")]\r\n    [InlineData(\"4\", \"4a\")]\r\n    [InlineData(\"5\", \"5a\")]\r\n    [InlineData(\"6\", \"6a\")]\r\n    [InlineData(\"23\", \"23a\")]\r\n    [InlineData(\"100\", \"100a\")]\r\n    [InlineData(\"101\", \"101a\")]\r\n    [InlineData(\"102\", \"102a\")]\r\n    [InlineData(\"103\", \"103a\")]\r\n    [InlineData(\"1001\", \"1001a\")]\r\n    public void OrdinalizeStringFeminine(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]\r\n    [InlineData(1, \"1r\")]\r\n    [InlineData(2, \"2n\")]\r\n    [InlineData(3, \"3r\")]\r\n    [InlineData(4, \"4t\")]\r\n    [InlineData(5, \"5è\")]\r\n    [InlineData(6, \"6è\")]\r\n    [InlineData(10, \"10è\")]\r\n    [InlineData(23, \"23r\")]\r\n    [InlineData(100, \"100è\")]\r\n    [InlineData(101, \"101r\")]\r\n    [InlineData(102, \"102n\")]\r\n    [InlineData(103, \"103r\")]\r\n    [InlineData(1001, \"1001r\")]\r\n    public void OrdinalizeNumber(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]\r\n    [InlineData(1, \"1a\")]\r\n    [InlineData(2, \"2a\")]\r\n    [InlineData(3, \"3a\")]\r\n    [InlineData(4, \"4a\")]\r\n    [InlineData(5, \"5a\")]\r\n    [InlineData(6, \"6a\")]\r\n    [InlineData(10, \"10a\")]\r\n    [InlineData(23, \"23a\")]\r\n    [InlineData(100, \"100a\")]\r\n    [InlineData(101, \"101a\")]\r\n    [InlineData(102, \"102a\")]\r\n    [InlineData(103, \"103a\")]\r\n    [InlineData(1001, \"1001a\")]\r\n    public void OrdinalizeNumberFeminine(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ca/TimeSpanHumanizeTests.cs",
    "content": "namespace ca;\r\n\r\n[UseCulture(\"ca\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 any\")]\r\n    [InlineData(731, \"2 anys\")]\r\n    [InlineData(1096, \"3 anys\")]\r\n    [InlineData(4018, \"11 anys\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 mes\")]\r\n    [InlineData(61, \"2 mesos\")]\r\n    [InlineData(92, \"3 mesos\")]\r\n    [InlineData(335, \"11 mesos\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Fact]\r\n    public void TwoWeeks() =>\r\n        Assert.Equal(\"2 setmanes\", TimeSpan.FromDays(14).Humanize());\r\n\r\n    [Fact]\r\n    public void OneWeek() =>\r\n        Assert.Equal(\"1 setmana\", TimeSpan.FromDays(7).Humanize());\r\n\r\n    [Fact]\r\n    public void SixDays() =>\r\n        Assert.Equal(\"6 dies\", TimeSpan.FromDays(6).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoDays() =>\r\n        Assert.Equal(\"2 dies\", TimeSpan.FromDays(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneDay() =>\r\n        Assert.Equal(\"1 dia\", TimeSpan.FromDays(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoHours() =>\r\n        Assert.Equal(\"2 hores\", TimeSpan.FromHours(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneHour() =>\r\n        Assert.Equal(\"1 hora\", TimeSpan.FromHours(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoMinutes() =>\r\n        Assert.Equal(\"2 minuts\", TimeSpan.FromMinutes(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneMinute() =>\r\n        Assert.Equal(\"1 minut\", TimeSpan.FromMinutes(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoSeconds() =>\r\n        Assert.Equal(\"2 segons\", TimeSpan.FromSeconds(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneSecond() =>\r\n        Assert.Equal(\"1 segon\", TimeSpan.FromSeconds(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoMilliseconds() =>\r\n        Assert.Equal(\"2 mil·lisegons\", TimeSpan.FromMilliseconds(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneMillisecond() =>\r\n        Assert.Equal(\"1 mil·lisegon\", TimeSpan.FromMilliseconds(1).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(0, 0, 1, 1, 2, \"un minut, un segon\")]\r\n    [InlineData(0, 0, 2, 2, 2, \"dos minuts, dos segons\")]\r\n    [InlineData(1, 2, 3, 4, 4, \"un dia, dues hores, tres minuts, quatre segons\")]\r\n    public void ComplexTimeSpan(int days, int hours, int minutes, int seconds, int precision, string expected)\r\n    {\r\n        var timeSpan = new TimeSpan(days, hours, minutes, seconds);\r\n        Assert.Equal(expected, timeSpan.Humanize(precision, toWords: true));\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"0 mil·lisegons\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"res\", TimeSpan.Zero.Humanize(toWords: true));\r\n\r\n    [Fact]\r\n    public void AllTimeSpansMustBeUniqueForASequenceOfDays()\r\n    {\r\n        var culture = new CultureInfo(\"ca\");\r\n        var qry = from i in Enumerable.Range(0, 100000)\r\n                  let ts = TimeSpan.FromDays(i)\r\n                  let text = ts.Humanize(precision: 3, culture: culture, maxUnit: TimeUnit.Year)\r\n                  select text;\r\n        var grouping = from t in qry\r\n                       group t by t into g\r\n                       select new { g.Key, Count = g.Count() };\r\n        var allUnique = grouping.All(g => g.Count == 1);\r\n        Assert.True(allUnique);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(365, \"11 mesos, 30 dies\")]\r\n    [InlineData(365 + 1, \"1 any\")]\r\n    [InlineData(365 + 365, \"1 any, 11 mesos, 29 dies\")]\r\n    [InlineData(365 + 365 + 1, \"2 anys\")]\r\n    [InlineData(365 + 365 + 365, \"2 anys, 11 mesos, 29 dies\")]\r\n    [InlineData(365 + 365 + 365 + 1, \"3 anys\")]\r\n    [InlineData(365 + 365 + 365 + 365, \"3 anys, 11 mesos, 29 dies\")]\r\n    [InlineData(365 + 365 + 365 + 365 + 1, \"4 anys\")]\r\n    [InlineData(365 + 365 + 365 + 365 + 366, \"4 anys, 11 mesos, 30 dies\")]\r\n    [InlineData(365 + 365 + 365 + 365 + 366 + 1, \"5 anys\")]\r\n    public void Year(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize(precision: 7, maxUnit: TimeUnit.Year);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(30, \"4 setmanes, 2 dies\")]\r\n    [InlineData(30 + 1, \"1 mes\")]\r\n    [InlineData(30 + 30, \"1 mes, 29 dies\")]\r\n    [InlineData(30 + 30 + 1, \"2 mesos\")]\r\n    [InlineData(30 + 30 + 31, \"2 mesos, 30 dies\")]\r\n    [InlineData(30 + 30 + 31 + 1, \"3 mesos\")]\r\n    [InlineData(30 + 30 + 31 + 30, \"3 mesos, 29 dies\")]\r\n    [InlineData(30 + 30 + 31 + 30 + 1, \"4 mesos\")]\r\n    [InlineData(30 + 30 + 31 + 30 + 31, \"4 mesos, 30 dies\")]\r\n    [InlineData(30 + 30 + 31 + 30 + 31 + 1, \"5 mesos\")]\r\n    [InlineData(365, \"11 mesos, 30 dies\")]\r\n    [InlineData(366, \"1 any\")]\r\n    public void Month(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize(precision: 7, maxUnit: TimeUnit.Year);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(14, \"2 setmanes\")]\r\n    [InlineData(7, \"1 setmana\")]\r\n    [InlineData(-14, \"2 setmanes\")]\r\n    [InlineData(-7, \"1 setmana\")]\r\n    [InlineData(730, \"104 setmanes\")]\r\n    public void Weeks(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(6, \"6 dies\")]\r\n    [InlineData(2, \"2 dies\")]\r\n    [InlineData(1, \"1 dia\")]\r\n    [InlineData(-6, \"6 dies\")]\r\n    [InlineData(-2, \"2 dies\")]\r\n    [InlineData(-1, \"1 dia\")]\r\n    public void Days(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 hores\")]\r\n    [InlineData(1, \"1 hora\")]\r\n    [InlineData(-2, \"2 hores\")]\r\n    [InlineData(-1, \"1 hora\")]\r\n    public void Hours(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan.FromHours(hours).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 minuts\")]\r\n    [InlineData(1, \"1 minut\")]\r\n    [InlineData(-2, \"2 minuts\")]\r\n    [InlineData(-1, \"1 minut\")]\r\n    public void Minutes(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMinutes(minutes).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(135, \"2 minuts\")]\r\n    [InlineData(60, \"1 minut\")]\r\n    [InlineData(2, \"2 segons\")]\r\n    [InlineData(1, \"1 segon\")]\r\n    [InlineData(-135, \"2 minuts\")]\r\n    [InlineData(-60, \"1 minut\")]\r\n    [InlineData(-2, \"2 segons\")]\r\n    [InlineData(-1, \"1 segon\")]\r\n    public void Seconds(int seconds, string expected)\r\n    {\r\n        var actual = TimeSpan.FromSeconds(seconds).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2500, \"2 segons\")]\r\n    [InlineData(1400, \"1 segon\")]\r\n    [InlineData(2, \"2 mil·lisegons\")]\r\n    [InlineData(1, \"1 mil·lisegon\")]\r\n    [InlineData(-2500, \"2 segons\")]\r\n    [InlineData(-1400, \"1 segon\")]\r\n    [InlineData(-2, \"2 mil·lisegons\")]\r\n    [InlineData(-1, \"1 mil·lisegon\")]\r\n    public void Milliseconds(int ms, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData((long)366 * 24 * 60 * 60 * 1000, \"12 mesos\", TimeUnit.Month)]\r\n    [InlineData((long)6 * 7 * 24 * 60 * 60 * 1000, \"6 setmanes\", TimeUnit.Week)]\r\n    [InlineData(7 * 24 * 60 * 60 * 1000, \"7 dies\", TimeUnit.Day)]\r\n    [InlineData(24 * 60 * 60 * 1000, \"24 hores\", TimeUnit.Hour)]\r\n    [InlineData(60 * 60 * 1000, \"60 minuts\", TimeUnit.Minute)]\r\n    [InlineData(60 * 1000, \"60 segons\", TimeUnit.Second)]\r\n    [InlineData(1000, \"1000 mil·lisegons\", TimeUnit.Millisecond)]\r\n    public void TimeSpanWithMaxTimeUnit(long ms, string expected, TimeUnit maxUnit)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize(maxUnit: maxUnit);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(10, \"10 mil·lisegons\", TimeUnit.Millisecond)]\r\n    [InlineData(10, \"res\", TimeUnit.Second, true)]\r\n    [InlineData(10, \"res\", TimeUnit.Minute, true)]\r\n    [InlineData(10, \"res\", TimeUnit.Hour, true)]\r\n    [InlineData(10, \"res\", TimeUnit.Day, true)]\r\n    [InlineData(10, \"res\", TimeUnit.Week, true)]\r\n    [InlineData(10, \"0 segons\", TimeUnit.Second)]\r\n    [InlineData(10, \"0 minuts\", TimeUnit.Minute)]\r\n    [InlineData(10, \"0 hores\", TimeUnit.Hour)]\r\n    [InlineData(10, \"0 dies\", TimeUnit.Day)]\r\n    [InlineData(10, \"0 setmanes\", TimeUnit.Week)]\r\n    [InlineData(2500, \"2 segons, 500 mil·lisegons\", TimeUnit.Millisecond)]\r\n    [InlineData(2500, \"2 segons\", TimeUnit.Second)]\r\n    [InlineData(2500, \"res\", TimeUnit.Minute, true)]\r\n    [InlineData(2500, \"res\", TimeUnit.Hour, true)]\r\n    [InlineData(2500, \"res\", TimeUnit.Day, true)]\r\n    [InlineData(2500, \"res\", TimeUnit.Week, true)]\r\n    [InlineData(2500, \"0 minuts\", TimeUnit.Minute)]\r\n    [InlineData(2500, \"0 hores\", TimeUnit.Hour)]\r\n    [InlineData(2500, \"0 dies\", TimeUnit.Day)]\r\n    [InlineData(2500, \"0 setmanes\", TimeUnit.Week)]\r\n    [InlineData(122500, \"2 minuts, 2 segons, 500 mil·lisegons\", TimeUnit.Millisecond)]\r\n    [InlineData(122500, \"2 minuts, 2 segons\", TimeUnit.Second)]\r\n    [InlineData(122500, \"2 minuts\", TimeUnit.Minute)]\r\n    [InlineData(122500, \"res\", TimeUnit.Hour, true)]\r\n    [InlineData(122500, \"res\", TimeUnit.Day, true)]\r\n    [InlineData(122500, \"res\", TimeUnit.Week, true)]\r\n    [InlineData(122500, \"0 hores\", TimeUnit.Hour)]\r\n    [InlineData(122500, \"0 dies\", TimeUnit.Day)]\r\n    [InlineData(122500, \"0 setmanes\", TimeUnit.Week)]\r\n    [InlineData(3722500, \"1 hora, 2 minuts, 2 segons, 500 mil·lisegons\", TimeUnit.Millisecond)]\r\n    [InlineData(3722500, \"1 hora, 2 minuts, 2 segons\", TimeUnit.Second)]\r\n    [InlineData(3722500, \"1 hora, 2 minuts\", TimeUnit.Minute)]\r\n    [InlineData(3722500, \"1 hora\", TimeUnit.Hour)]\r\n    [InlineData(3722500, \"res\", TimeUnit.Day, true)]\r\n    [InlineData(3722500, \"res\", TimeUnit.Week, true)]\r\n    [InlineData(3722500, \"0 dies\", TimeUnit.Day)]\r\n    [InlineData(3722500, \"0 setmanes\", TimeUnit.Week)]\r\n    [InlineData(90122500, \"1 dia, 1 hora, 2 minuts, 2 segons, 500 mil·lisegons\", TimeUnit.Millisecond)]\r\n    [InlineData(90122500, \"1 dia, 1 hora, 2 minuts, 2 segons\", TimeUnit.Second)]\r\n    [InlineData(90122500, \"1 dia, 1 hora, 2 minuts\", TimeUnit.Minute)]\r\n    [InlineData(90122500, \"1 dia, 1 hora\", TimeUnit.Hour)]\r\n    [InlineData(90122500, \"1 dia\", TimeUnit.Day)]\r\n    [InlineData(90122500, \"res\", TimeUnit.Week, true)]\r\n    [InlineData(90122500, \"0 setmanes\", TimeUnit.Week)]\r\n    [InlineData(694922500, \"1 setmana, 1 dia, 1 hora, 2 minuts, 2 segons, 500 mil·lisegons\", TimeUnit.Millisecond)]\r\n    [InlineData(694922500, \"1 setmana, 1 dia, 1 hora, 2 minuts, 2 segons\", TimeUnit.Second)]\r\n    [InlineData(694922500, \"1 setmana, 1 dia, 1 hora, 2 minuts\", TimeUnit.Minute)]\r\n    [InlineData(694922500, \"1 setmana, 1 dia, 1 hora\", TimeUnit.Hour)]\r\n    [InlineData(694922500, \"1 setmana, 1 dia\", TimeUnit.Day)]\r\n    [InlineData(694922500, \"1 setmana\", TimeUnit.Week)]\r\n    [InlineData(2768462500, \"1 mes, 1 dia, 1 hora, 1 minut, 2 segons, 500 mil·lisegons\", TimeUnit.Millisecond)]\r\n    [InlineData(2768462500, \"1 mes, 1 dia, 1 hora, 1 minut, 2 segons\", TimeUnit.Second)]\r\n    [InlineData(2768462500, \"1 mes, 1 dia, 1 hora, 1 minut\", TimeUnit.Minute)]\r\n    [InlineData(2768462500, \"1 mes, 1 dia, 1 hora\", TimeUnit.Hour)]\r\n    [InlineData(2768462500, \"1 mes, 1 dia\", TimeUnit.Day)]\r\n    [InlineData(2768462500, \"1 mes\", TimeUnit.Week)]\r\n    [InlineData(2768462500, \"1 mes\", TimeUnit.Month)]\r\n    [InlineData(2768462500, \"res\", TimeUnit.Year, true)]\r\n    [InlineData(2768462500, \"0 anys\", TimeUnit.Year)]\r\n    [InlineData(34390862500, \"1 any, 1 mes, 2 dies, 1 hora, 1 minut, 2 segons, 500 mil·lisegons\", TimeUnit.Millisecond)]\r\n    [InlineData(34390862500, \"1 any, 1 mes, 2 dies, 1 hora, 1 minut, 2 segons\", TimeUnit.Second)]\r\n    [InlineData(34390862500, \"1 any, 1 mes, 2 dies, 1 hora, 1 minut\", TimeUnit.Minute)]\r\n    [InlineData(34390862500, \"1 any, 1 mes, 2 dies, 1 hora\", TimeUnit.Hour)]\r\n    [InlineData(34390862500, \"1 any, 1 mes, 2 dies\", TimeUnit.Day)]\r\n    [InlineData(34390862500, \"1 any, 1 mes\", TimeUnit.Week)]\r\n    [InlineData(34390862500, \"1 any, 1 mes\", TimeUnit.Month)]\r\n    [InlineData(34390862500, \"1 any\", TimeUnit.Year)]\r\n    public void TimeSpanWithMinTimeUnit(long ms, string expected, TimeUnit minUnit, bool toWords = false)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize(minUnit: minUnit, precision: 7, maxUnit: TimeUnit.Year, toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 3, \"res\", true)]\r\n    [InlineData(0, 2, \"res\", true)]\r\n    [InlineData(0, 3, \"0 mil·lisegons\")]\r\n    [InlineData(0, 2, \"0 mil·lisegons\")]\r\n    [InlineData(10, 2, \"10 mil·lisegons\")]\r\n    [InlineData(1400, 2, \"1 segon, 400 mil·lisegons\")]\r\n    [InlineData(2500, 2, \"2 segons, 500 mil·lisegons\")]\r\n    [InlineData(120000, 2, \"2 minuts\")]\r\n    [InlineData(62000, 2, \"1 minut, 2 segons\")]\r\n    [InlineData(62020, 2, \"1 minut, 2 segons\")]\r\n    [InlineData(62020, 3, \"1 minut, 2 segons, 20 mil·lisegons\")]\r\n    [InlineData(3600020, 4, \"1 hora, 20 mil·lisegons\")]\r\n    [InlineData(3600020, 3, \"1 hora, 20 mil·lisegons\")]\r\n    [InlineData(3600020, 2, \"1 hora, 20 mil·lisegons\")]\r\n    [InlineData(3600020, 1, \"1 hora\")]\r\n    [InlineData(3603001, 2, \"1 hora, 3 segons\")]\r\n    [InlineData(3603001, 3, \"1 hora, 3 segons, 1 mil·lisegon\")]\r\n    [InlineData(86400000, 3, \"1 dia\")]\r\n    [InlineData(86400000, 2, \"1 dia\")]\r\n    [InlineData(86400000, 1, \"1 dia\")]\r\n    [InlineData(86401000, 1, \"1 dia\")]\r\n    [InlineData(86401000, 2, \"1 dia, 1 segon\")]\r\n    [InlineData(86401200, 2, \"1 dia, 1 segon\")]\r\n    [InlineData(86401200, 3, \"1 dia, 1 segon, 200 mil·lisegons\")]\r\n    [InlineData(1296000000, 1, \"2 setmanes\")]\r\n    [InlineData(1296000000, 2, \"2 setmanes, 1 dia\")]\r\n    [InlineData(1299600000, 2, \"2 setmanes, 1 dia\")]\r\n    [InlineData(1299600000, 3, \"2 setmanes, 1 dia, 1 hora\")]\r\n    [InlineData(1299630020, 3, \"2 setmanes, 1 dia, 1 hora\")]\r\n    [InlineData(1299630020, 4, \"2 setmanes, 1 dia, 1 hora, 30 segons\")]\r\n    [InlineData(1299630020, 5, \"2 setmanes, 1 dia, 1 hora, 30 segons, 20 mil·lisegons\")]\r\n    [InlineData(2768462500, 6, \"1 mes, 1 dia, 1 hora, 1 minut, 2 segons, 500 mil·lisegons\")]\r\n    [InlineData(2768462500, 5, \"1 mes, 1 dia, 1 hora, 1 minut, 2 segons\")]\r\n    [InlineData(2768462500, 4, \"1 mes, 1 dia, 1 hora, 1 minut\")]\r\n    [InlineData(2768462500, 3, \"1 mes, 1 dia, 1 hora\")]\r\n    [InlineData(2768462500, 2, \"1 mes, 1 dia\")]\r\n    [InlineData(2768462500, 1, \"1 mes\")]\r\n    [InlineData(34390862500, 7, \"1 any, 1 mes, 2 dies, 1 hora, 1 minut, 2 segons, 500 mil·lisegons\")]\r\n    [InlineData(34390862500, 6, \"1 any, 1 mes, 2 dies, 1 hora, 1 minut, 2 segons\")]\r\n    [InlineData(34390862500, 5, \"1 any, 1 mes, 2 dies, 1 hora, 1 minut\")]\r\n    [InlineData(34390862500, 4, \"1 any, 1 mes, 2 dies, 1 hora\")]\r\n    [InlineData(34390862500, 3, \"1 any, 1 mes, 2 dies\")]\r\n    [InlineData(34390862500, 2, \"1 any, 1 mes\")]\r\n    [InlineData(34390862500, 1, \"1 any\")]\r\n    public void TimeSpanWithPrecision(long milliseconds, int precision, string expected, bool toWords = false)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize(precision, maxUnit: TimeUnit.Year, toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(3 * 7 + 4, 2, \"3 setmanes, 4 dies\")]\r\n    [InlineData(6 * 7 + 3, 2, \"6 setmanes, 3 dies\")]\r\n    [InlineData(72 * 7 + 6, 2, \"72 setmanes, 6 dies\")]\r\n    public void DaysWithPrecision(int days, int precision, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize(precision: precision);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(50)]\r\n    [InlineData(52)]\r\n    public void TimeSpanWithMinAndMaxUnits_DoesNotReportExcessiveTime(int minutes)\r\n    {\r\n        var actual = TimeSpan.FromMinutes(minutes).Humanize(2, null, TimeUnit.Hour, TimeUnit.Minute);\r\n        var expected = TimeSpan.FromMinutes(minutes).Humanize(2);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 3, \"res\", true)]\r\n    [InlineData(0, 2, \"res\", true)]\r\n    [InlineData(0, 3, \"0 mil·lisegons\")]\r\n    [InlineData(0, 2, \"0 mil·lisegons\")]\r\n    [InlineData(10, 2, \"10 mil·lisegons\")]\r\n    [InlineData(1400, 2, \"1 segon, 400 mil·lisegons\")]\r\n    [InlineData(2500, 2, \"2 segons, 500 mil·lisegons\")]\r\n    [InlineData(60001, 1, \"1 minut\")]\r\n    [InlineData(60001, 2, \"1 minut\")]\r\n    [InlineData(60001, 3, \"1 minut, 1 mil·lisegon\")]\r\n    [InlineData(120000, 2, \"2 minuts\")]\r\n    [InlineData(62000, 2, \"1 minut, 2 segons\")]\r\n    [InlineData(62020, 2, \"1 minut, 2 segons\")]\r\n    [InlineData(62020, 3, \"1 minut, 2 segons, 20 mil·lisegons\")]\r\n    [InlineData(3600020, 4, \"1 hora, 20 mil·lisegons\")]\r\n    [InlineData(3600020, 3, \"1 hora\")]\r\n    [InlineData(3600020, 2, \"1 hora\")]\r\n    [InlineData(3600020, 1, \"1 hora\")]\r\n    [InlineData(3603001, 2, \"1 hora\")]\r\n    [InlineData(3603001, 3, \"1 hora, 3 segons\")]\r\n    [InlineData(86400000, 3, \"1 dia\")]\r\n    [InlineData(86400000, 2, \"1 dia\")]\r\n    [InlineData(86400000, 1, \"1 dia\")]\r\n    [InlineData(86401000, 1, \"1 dia\")]\r\n    [InlineData(86401000, 2, \"1 dia\")]\r\n    [InlineData(86401000, 3, \"1 dia\")]\r\n    [InlineData(86401000, 4, \"1 dia, 1 segon\")]\r\n    [InlineData(86401200, 4, \"1 dia, 1 segon\")]\r\n    [InlineData(86401200, 5, \"1 dia, 1 segon, 200 mil·lisegons\")]\r\n    [InlineData(1296000000, 1, \"2 setmanes\")]\r\n    [InlineData(1296000000, 2, \"2 setmanes, 1 dia\")]\r\n    [InlineData(1299600000, 2, \"2 setmanes, 1 dia\")]\r\n    [InlineData(1299600000, 3, \"2 setmanes, 1 dia, 1 hora\")]\r\n    [InlineData(1299630020, 3, \"2 setmanes, 1 dia, 1 hora\")]\r\n    [InlineData(1299630020, 4, \"2 setmanes, 1 dia, 1 hora\")]\r\n    [InlineData(1299630020, 5, \"2 setmanes, 1 dia, 1 hora, 30 segons\")]\r\n    [InlineData(1299630020, 6, \"2 setmanes, 1 dia, 1 hora, 30 segons, 20 mil·lisegons\")]\r\n    public void TimeSpanWithPrecisionAndCountingEmptyUnits(int milliseconds, int precision, string expected, bool toWords = false)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize(precision: precision, countEmptyUnits: true, toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 3, \"res\", true)]\r\n    [InlineData(0, 2, \"res\", true)]\r\n    [InlineData(0, 3, \"0 mil·lisegons\")]\r\n    [InlineData(0, 2, \"0 mil·lisegons\")]\r\n    [InlineData(10, 2, \"10 mil·lisegons\")]\r\n    [InlineData(1400, 2, \"1 segon i 400 mil·lisegons\")]\r\n    [InlineData(2500, 2, \"2 segons i 500 mil·lisegons\")]\r\n    [InlineData(120000, 2, \"2 minuts\")]\r\n    [InlineData(62000, 2, \"1 minut i 2 segons\")]\r\n    [InlineData(62020, 2, \"1 minut i 2 segons\")]\r\n    [InlineData(62020, 3, \"1 minut, 2 segons i 20 mil·lisegons\")]\r\n    [InlineData(3600020, 4, \"1 hora i 20 mil·lisegons\")]\r\n    [InlineData(3600020, 3, \"1 hora i 20 mil·lisegons\")]\r\n    [InlineData(3600020, 2, \"1 hora i 20 mil·lisegons\")]\r\n    [InlineData(3600020, 1, \"1 hora\")]\r\n    [InlineData(3603001, 2, \"1 hora i 3 segons\")]\r\n    [InlineData(3603001, 3, \"1 hora, 3 segons i 1 mil·lisegon\")]\r\n    [InlineData(86400000, 3, \"1 dia\")]\r\n    [InlineData(86400000, 2, \"1 dia\")]\r\n    [InlineData(86400000, 1, \"1 dia\")]\r\n    [InlineData(86401000, 1, \"1 dia\")]\r\n    [InlineData(86401000, 2, \"1 dia i 1 segon\")]\r\n    [InlineData(86401200, 2, \"1 dia i 1 segon\")]\r\n    [InlineData(86401200, 3, \"1 dia, 1 segon i 200 mil·lisegons\")]\r\n    [InlineData(1296000000, 1, \"2 setmanes\")]\r\n    [InlineData(1296000000, 2, \"2 setmanes i 1 dia\")]\r\n    [InlineData(1299600000, 2, \"2 setmanes i 1 dia\")]\r\n    [InlineData(1299600000, 3, \"2 setmanes, 1 dia i 1 hora\")]\r\n    [InlineData(1299630020, 3, \"2 setmanes, 1 dia i 1 hora\")]\r\n    [InlineData(1299630020, 4, \"2 setmanes, 1 dia, 1 hora i 30 segons\")]\r\n    [InlineData(1299630020, 5, \"2 setmanes, 1 dia, 1 hora, 30 segons i 20 mil·lisegons\")]\r\n    public void TimeSpanWithPrecisionAndAlternativeCollectionFormatter(int milliseconds, int precision,\r\n        string expected, bool toWords = false)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize(precision, collectionSeparator: null, toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 3, \"res\")]\r\n    [InlineData(0, 2, \"res\")]\r\n    [InlineData(10, 2, \"deu mil·lisegons\")]\r\n    [InlineData(1400, 2, \"un segon, quatre-cents mil·lisegons\")]\r\n    [InlineData(2500, 2, \"dos segons, cinc-cents mil·lisegons\")]\r\n    [InlineData(120000, 2, \"dos minuts\")]\r\n    [InlineData(62000, 2, \"un minut, dos segons\")]\r\n    [InlineData(62020, 2, \"un minut, dos segons\")]\r\n    [InlineData(62020, 3, \"un minut, dos segons, vint mil·lisegons\")]\r\n    [InlineData(3600020, 4, \"una hora, vint mil·lisegons\")]\r\n    [InlineData(3600020, 3, \"una hora, vint mil·lisegons\")]\r\n    [InlineData(3600020, 2, \"una hora, vint mil·lisegons\")]\r\n    [InlineData(3600020, 1, \"una hora\")]\r\n    [InlineData(3603001, 2, \"una hora, tres segons\")]\r\n    [InlineData(3603001, 3, \"una hora, tres segons, un mil·lisegon\")]\r\n    [InlineData(86400000, 3, \"un dia\")]\r\n    [InlineData(86400000, 2, \"un dia\")]\r\n    [InlineData(86400000, 1, \"un dia\")]\r\n    [InlineData(86401000, 1, \"un dia\")]\r\n    [InlineData(86401000, 2, \"un dia, un segon\")]\r\n    [InlineData(86401200, 2, \"un dia, un segon\")]\r\n    [InlineData(86401200, 3, \"un dia, un segon, dos-cents mil·lisegons\")]\r\n    [InlineData(1296000000, 1, \"dues setmanes\")]\r\n    [InlineData(1296000000, 2, \"dues setmanes, un dia\")]\r\n    [InlineData(1299600000, 2, \"dues setmanes, un dia\")]\r\n    [InlineData(1299600000, 3, \"dues setmanes, un dia, una hora\")]\r\n    [InlineData(1299630020, 3, \"dues setmanes, un dia, una hora\")]\r\n    [InlineData(1299630020, 4, \"dues setmanes, un dia, una hora, trenta segons\")]\r\n    [InlineData(1299630020, 5, \"dues setmanes, un dia, una hora, trenta segons, vint mil·lisegons\")]\r\n    public void TimeSpanWithNumbersConvertedToWords(int milliseconds, int precision, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize(precision, toWords: true);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ca/TimeToClockNotationTests.cs",
    "content": "#if NET6_0_OR_GREATER\r\n\r\nnamespace ca;\r\n\r\n[UseCulture(\"ca\")]\r\npublic class TimeToClockNotationTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, 0, \"mitjanit\")]\r\n    [InlineData(0, 7, \"les dotze i set de la nit\")]\r\n    [InlineData(1, 11, \"la una i onze de la matinada\")]\r\n    [InlineData(4, 0, \"les quatre de la matinada\")]\r\n    [InlineData(5, 1, \"les cinc i un de la matinada\")]\r\n    [InlineData(6, 0, \"les sis del matí\")]\r\n    [InlineData(6, 5, \"les sis i cinc del matí\")]\r\n    [InlineData(7, 10, \"les set i deu del matí\")]\r\n    [InlineData(8, 15, \"les vuit i quart del matí\")]\r\n    [InlineData(9, 20, \"les nou i vint del matí\")]\r\n    [InlineData(10, 25, \"les deu i vint-i-cinc del matí\")]\r\n    [InlineData(11, 30, \"les onze i mitja del matí\")]\r\n    [InlineData(12, 00, \"migdia\")]\r\n    [InlineData(12, 38, \"les dotze i trenta-vuit de la tarda\")]\r\n    [InlineData(12, 35, \"la una menys vint-i-cinc de la tarda\")]\r\n    [InlineData(15, 40, \"les quatre menys vint de la tarda\")]\r\n    [InlineData(17, 45, \"les sis menys quart de la tarda\")]\r\n    [InlineData(19, 50, \"les vuit menys deu de la tarda\")]\r\n    [InlineData(21, 0, \"les nou de la nit\")]\r\n    [InlineData(21, 55, \"les deu menys cinc de la nit\")]\r\n    [InlineData(22, 59, \"les deu i cinquanta-nou de la nit\")]\r\n    [InlineData(23, 43, \"les onze i quaranta-tres de la nit\")]\r\n    public void ConvertToClockNotationTimeOnlyString(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation();\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 0, \"mitjanit\")]\r\n    [InlineData(0, 7, \"les dotze i cinc de la nit\")]\r\n    [InlineData(1, 11, \"la una i deu de la matinada\")]\r\n    [InlineData(4, 0, \"les quatre de la matinada\")]\r\n    [InlineData(5, 1, \"les cinc de la matinada\")]\r\n    [InlineData(6, 0, \"les sis del matí\")]\r\n    [InlineData(6, 5, \"les sis i cinc del matí\")]\r\n    [InlineData(7, 10, \"les set i deu del matí\")]\r\n    [InlineData(8, 15, \"les vuit i quart del matí\")]\r\n    [InlineData(9, 20, \"les nou i vint del matí\")]\r\n    [InlineData(10, 25, \"les deu i vint-i-cinc del matí\")]\r\n    [InlineData(11, 30, \"les onze i mitja del matí\")]\r\n    [InlineData(12, 00, \"migdia\")]\r\n    [InlineData(12, 38, \"la una menys vint de la tarda\")]\r\n    [InlineData(12, 35, \"la una menys vint-i-cinc de la tarda\")]\r\n    [InlineData(15, 40, \"les quatre menys vint de la tarda\")]\r\n    [InlineData(17, 45, \"les sis menys quart de la tarda\")]\r\n    [InlineData(19, 50, \"les vuit menys deu de la tarda\")]\r\n    [InlineData(21, 0, \"les nou de la nit\")]\r\n    [InlineData(21, 55, \"les deu menys cinc de la nit\")]\r\n    [InlineData(22, 59, \"les onze de la nit\")]\r\n    [InlineData(23, 43, \"les dotze menys quart de la nit\")]\r\n    public void ConvertToRoundedClockNotationTimeOnlyString(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes);\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n}\r\n\r\n#endif"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/cs/DateHumanizeTests.cs",
    "content": "﻿namespace cs;\r\n\r\n[UseCulture(\"cs-CZ\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"za sekundu\")]\r\n    [InlineData(2, \"za 2 sekundy\")]\r\n    [InlineData(3, \"za 3 sekundy\")]\r\n    [InlineData(4, \"za 4 sekundy\")]\r\n    [InlineData(5, \"za 5 sekund\")]\r\n    [InlineData(6, \"za 6 sekund\")]\r\n    [InlineData(10, \"za 10 sekund\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"za minutu\")]\r\n    [InlineData(2, \"za 2 minuty\")]\r\n    [InlineData(3, \"za 3 minuty\")]\r\n    [InlineData(4, \"za 4 minuty\")]\r\n    [InlineData(5, \"za 5 minut\")]\r\n    [InlineData(6, \"za 6 minut\")]\r\n    [InlineData(10, \"za 10 minut\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"za hodinu\")]\r\n    [InlineData(2, \"za 2 hodiny\")]\r\n    [InlineData(3, \"za 3 hodiny\")]\r\n    [InlineData(4, \"za 4 hodiny\")]\r\n    [InlineData(5, \"za 5 hodin\")]\r\n    [InlineData(6, \"za 6 hodin\")]\r\n    [InlineData(10, \"za 10 hodin\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"zítra\")]\r\n    [InlineData(2, \"za 2 dny\")]\r\n    [InlineData(3, \"za 3 dny\")]\r\n    [InlineData(4, \"za 4 dny\")]\r\n    [InlineData(9, \"za 9 dnů\")]\r\n    [InlineData(10, \"za 10 dnů\")]\r\n    public void DayFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"za měsíc\")]\r\n    [InlineData(2, \"za 2 měsíce\")]\r\n    [InlineData(3, \"za 3 měsíce\")]\r\n    [InlineData(4, \"za 4 měsíce\")]\r\n    [InlineData(5, \"za 5 měsíců\")]\r\n    [InlineData(6, \"za 6 měsíců\")]\r\n    [InlineData(10, \"za 10 měsíců\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"za rok\")]\r\n    [InlineData(2, \"za 2 roky\")]\r\n    [InlineData(3, \"za 3 roky\")]\r\n    [InlineData(4, \"za 4 roky\")]\r\n    [InlineData(5, \"za 5 let\")]\r\n    [InlineData(6, \"za 6 let\")]\r\n    [InlineData(10, \"za 10 let\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"před sekundou\")]\r\n    [InlineData(2, \"před 2 sekundami\")]\r\n    [InlineData(3, \"před 3 sekundami\")]\r\n    [InlineData(4, \"před 4 sekundami\")]\r\n    [InlineData(5, \"před 5 sekundami\")]\r\n    [InlineData(6, \"před 6 sekundami\")]\r\n    [InlineData(10, \"před 10 sekundami\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"před minutou\")]\r\n    [InlineData(2, \"před 2 minutami\")]\r\n    [InlineData(3, \"před 3 minutami\")]\r\n    [InlineData(4, \"před 4 minutami\")]\r\n    [InlineData(5, \"před 5 minutami\")]\r\n    [InlineData(6, \"před 6 minutami\")]\r\n    [InlineData(10, \"před 10 minutami\")]\r\n    [InlineData(60, \"před hodinou\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"před hodinou\")]\r\n    [InlineData(2, \"před 2 hodinami\")]\r\n    [InlineData(3, \"před 3 hodinami\")]\r\n    [InlineData(4, \"před 4 hodinami\")]\r\n    [InlineData(5, \"před 5 hodinami\")]\r\n    [InlineData(6, \"před 6 hodinami\")]\r\n    [InlineData(10, \"před 10 hodinami\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"včera\")]\r\n    [InlineData(2, \"před 2 dny\")]\r\n    [InlineData(3, \"před 3 dny\")]\r\n    [InlineData(4, \"před 4 dny\")]\r\n    [InlineData(9, \"před 9 dny\")]\r\n    [InlineData(10, \"před 10 dny\")]\r\n    public void DayAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"před měsícem\")]\r\n    [InlineData(2, \"před 2 měsíci\")]\r\n    [InlineData(3, \"před 3 měsíci\")]\r\n    [InlineData(4, \"před 4 měsíci\")]\r\n    [InlineData(5, \"před 5 měsíci\")]\r\n    [InlineData(6, \"před 6 měsíci\")]\r\n    [InlineData(10, \"před 10 měsíci\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"před rokem\")]\r\n    [InlineData(2, \"před 2 lety\")]\r\n    [InlineData(3, \"před 3 lety\")]\r\n    [InlineData(4, \"před 4 lety\")]\r\n    [InlineData(5, \"před 5 lety\")]\r\n    [InlineData(6, \"před 6 lety\")]\r\n    [InlineData(10, \"před 10 lety\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/cs/NumberToWordsTests.cs",
    "content": "﻿namespace cs;\r\n\r\n[UseCulture(\"cs-CZ\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"nula\")]\r\n    [InlineData(1, \"jeden\")]\r\n    [InlineData(2, \"dva\")]\r\n    [InlineData(3, \"tři\")]\r\n    [InlineData(4, \"čtyři\")]\r\n    [InlineData(5, \"pět\")]\r\n    [InlineData(6, \"šest\")]\r\n    [InlineData(7, \"sedm\")]\r\n    [InlineData(8, \"osm\")]\r\n    [InlineData(9, \"devět\")]\r\n    [InlineData(10, \"deset\")]\r\n    [InlineData(11, \"jedenáct\")]\r\n    [InlineData(12, \"dvanáct\")]\r\n    [InlineData(13, \"třináct\")]\r\n    [InlineData(14, \"čtrnáct\")]\r\n    [InlineData(15, \"patnáct\")]\r\n    [InlineData(16, \"šestnáct\")]\r\n    [InlineData(17, \"sedmnáct\")]\r\n    [InlineData(18, \"osmnáct\")]\r\n    [InlineData(19, \"devatenáct\")]\r\n    [InlineData(20, \"dvacet\")]\r\n    [InlineData(22, \"dvacet dva\")]\r\n    [InlineData(30, \"třicet\")]\r\n    [InlineData(40, \"čtyřicet\")]\r\n    [InlineData(50, \"padesát\")]\r\n    [InlineData(60, \"šedesát\")]\r\n    [InlineData(70, \"sedmdesát\")]\r\n    [InlineData(80, \"osmdesát\")]\r\n    [InlineData(90, \"devadesát\")]\r\n    [InlineData(100, \"sto\")]\r\n    [InlineData(112, \"sto dvanáct\")]\r\n    [InlineData(128, \"sto dvacet osm\")]\r\n    [InlineData(1000, \"jeden tisíc\")]\r\n    [InlineData(2000, \"dva tisíce\")]\r\n    [InlineData(5000, \"pět tisíc\")]\r\n    [InlineData(10000, \"deset tisíc\")]\r\n    [InlineData(20000, \"dvacet tisíc\")]\r\n    [InlineData(21000, \"dvacet jedna tisíc\")]\r\n    [InlineData(22000, \"dvacet dva tisíc\")]\r\n    [InlineData(25000, \"dvacet pět tisíc\")]\r\n    [InlineData(100000, \"sto tisíc\")]\r\n    [InlineData(500000, \"pět set tisíc\")]\r\n    [InlineData(1000000, \"jeden milion\")]\r\n    [InlineData(2000000, \"dva miliony\")]\r\n    [InlineData(5000000, \"pět milionů\")]\r\n    [InlineData(1000000000, \"jedna miliarda\")]\r\n    [InlineData(1001001001, \"jedna miliarda jeden milion jeden tisíc jeden\")]\r\n    [InlineData(2000000000, \"dvě miliardy\")]\r\n    [InlineData(1501001892, \"jedna miliarda pět set jedna milionů jeden tisíc osm set devadesát dva\")]\r\n    [InlineData(2147483647, \"dvě miliardy sto čtyřicet sedm milionů čtyři sta osmdesát tři tisíc šest set čtyřicet sedm\")]\r\n    [InlineData(-1501001892, \"mínus jedna miliarda pět set jedna milionů jeden tisíc osm set devadesát dva\")]\r\n    public void ToWordsCzech(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nula\")]\r\n    [InlineData(1, \"jedna\")]\r\n    [InlineData(2, \"dvě\")]\r\n    [InlineData(3, \"tři\")]\r\n    [InlineData(4, \"čtyři\")]\r\n    [InlineData(5, \"pět\")]\r\n    [InlineData(6, \"šest\")]\r\n    [InlineData(7, \"sedm\")]\r\n    [InlineData(8, \"osm\")]\r\n    [InlineData(9, \"devět\")]\r\n    [InlineData(10, \"deset\")]\r\n    [InlineData(11, \"jedenáct\")]\r\n    [InlineData(12, \"dvanáct\")]\r\n    [InlineData(13, \"třináct\")]\r\n    [InlineData(14, \"čtrnáct\")]\r\n    [InlineData(15, \"patnáct\")]\r\n    [InlineData(16, \"šestnáct\")]\r\n    [InlineData(17, \"sedmnáct\")]\r\n    [InlineData(18, \"osmnáct\")]\r\n    [InlineData(19, \"devatenáct\")]\r\n    [InlineData(20, \"dvacet\")]\r\n    [InlineData(22, \"dvacet dvě\")]\r\n    [InlineData(30, \"třicet\")]\r\n    [InlineData(40, \"čtyřicet\")]\r\n    [InlineData(50, \"padesát\")]\r\n    [InlineData(60, \"šedesát\")]\r\n    [InlineData(70, \"sedmdesát\")]\r\n    [InlineData(80, \"osmdesát\")]\r\n    [InlineData(90, \"devadesát\")]\r\n    [InlineData(100, \"sto\")]\r\n    [InlineData(112, \"sto dvanáct\")]\r\n    [InlineData(128, \"sto dvacet osm\")]\r\n    [InlineData(1000, \"jeden tisíc\")]\r\n    [InlineData(2000, \"dva tisíce\")]\r\n    [InlineData(5000, \"pět tisíc\")]\r\n    [InlineData(10000, \"deset tisíc\")]\r\n    [InlineData(20000, \"dvacet tisíc\")]\r\n    [InlineData(21000, \"dvacet jedna tisíc\")]\r\n    [InlineData(22000, \"dvacet dva tisíc\")]\r\n    [InlineData(25000, \"dvacet pět tisíc\")]\r\n    [InlineData(100000, \"sto tisíc\")]\r\n    [InlineData(500000, \"pět set tisíc\")]\r\n    [InlineData(1000000, \"jeden milion\")]\r\n    [InlineData(2000000, \"dva miliony\")]\r\n    [InlineData(5000000, \"pět milionů\")]\r\n    [InlineData(1000000000, \"jedna miliarda\")]\r\n    [InlineData(1001001001, \"jedna miliarda jeden milion jeden tisíc jedna\")]\r\n    [InlineData(2000000000, \"dvě miliardy\")]\r\n    [InlineData(1501001892, \"jedna miliarda pět set jedna milionů jeden tisíc osm set devadesát dvě\")]\r\n    [InlineData(2147483647, \"dvě miliardy sto čtyřicet sedm milionů čtyři sta osmdesát tři tisíc šest set čtyřicet sedm\")]\r\n    [InlineData(-1501001892, \"mínus jedna miliarda pět set jedna milionů jeden tisíc osm set devadesát dvě\")]\r\n    public void ToWordsCzechFeminine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nula\")]\r\n    [InlineData(1, \"jedno\")]\r\n    [InlineData(2, \"dvě\")]\r\n    [InlineData(3, \"tři\")]\r\n    [InlineData(4, \"čtyři\")]\r\n    [InlineData(5, \"pět\")]\r\n    [InlineData(6, \"šest\")]\r\n    [InlineData(7, \"sedm\")]\r\n    [InlineData(8, \"osm\")]\r\n    [InlineData(9, \"devět\")]\r\n    [InlineData(10, \"deset\")]\r\n    [InlineData(11, \"jedenáct\")]\r\n    [InlineData(12, \"dvanáct\")]\r\n    [InlineData(13, \"třináct\")]\r\n    [InlineData(14, \"čtrnáct\")]\r\n    [InlineData(15, \"patnáct\")]\r\n    [InlineData(16, \"šestnáct\")]\r\n    [InlineData(17, \"sedmnáct\")]\r\n    [InlineData(18, \"osmnáct\")]\r\n    [InlineData(19, \"devatenáct\")]\r\n    [InlineData(20, \"dvacet\")]\r\n    [InlineData(22, \"dvacet dvě\")]\r\n    [InlineData(30, \"třicet\")]\r\n    [InlineData(40, \"čtyřicet\")]\r\n    [InlineData(50, \"padesát\")]\r\n    [InlineData(60, \"šedesát\")]\r\n    [InlineData(70, \"sedmdesát\")]\r\n    [InlineData(80, \"osmdesát\")]\r\n    [InlineData(90, \"devadesát\")]\r\n    [InlineData(100, \"sto\")]\r\n    [InlineData(112, \"sto dvanáct\")]\r\n    [InlineData(128, \"sto dvacet osm\")]\r\n    [InlineData(1000, \"jeden tisíc\")]\r\n    [InlineData(2000, \"dva tisíce\")]\r\n    [InlineData(5000, \"pět tisíc\")]\r\n    [InlineData(10000, \"deset tisíc\")]\r\n    [InlineData(20000, \"dvacet tisíc\")]\r\n    [InlineData(21000, \"dvacet jedna tisíc\")]\r\n    [InlineData(22000, \"dvacet dva tisíc\")]\r\n    [InlineData(25000, \"dvacet pět tisíc\")]\r\n    [InlineData(100000, \"sto tisíc\")]\r\n    [InlineData(500000, \"pět set tisíc\")]\r\n    [InlineData(1000000, \"jeden milion\")]\r\n    [InlineData(2000000, \"dva miliony\")]\r\n    [InlineData(5000000, \"pět milionů\")]\r\n    [InlineData(1000000000, \"jedna miliarda\")]\r\n    [InlineData(1001001001, \"jedna miliarda jeden milion jeden tisíc jedno\")]\r\n    [InlineData(2000000000, \"dvě miliardy\")]\r\n    [InlineData(1501001892, \"jedna miliarda pět set jedna milionů jeden tisíc osm set devadesát dvě\")]\r\n    [InlineData(2147483647, \"dvě miliardy sto čtyřicet sedm milionů čtyři sta osmdesát tři tisíc šest set čtyřicet sedm\")]\r\n    [InlineData(-1501001892, \"mínus jedna miliarda pět set jedna milionů jeden tisíc osm set devadesát dvě\")]\r\n    public void ToWordsCzechNeuter(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Neuter));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/cs/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace cs;\r\n\r\n[UseCulture(\"cs-CZ\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 rok\")]\r\n    [InlineData(731, \"2 roky\")]\r\n    [InlineData(1096, \"3 roky\")]\r\n    [InlineData(4018, \"11 let\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 měsíc\")]\r\n    [InlineData(61, \"2 měsíce\")]\r\n    [InlineData(92, \"3 měsíce\")]\r\n    [InlineData(335, \"11 měsíců\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 milisekunda\")]\r\n    [InlineData(2, \"2 milisekundy\")]\r\n    [InlineData(3, \"3 milisekundy\")]\r\n    [InlineData(4, \"4 milisekundy\")]\r\n    [InlineData(5, \"5 milisekund\")]\r\n    [InlineData(6, \"6 milisekund\")]\r\n    [InlineData(10, \"10 milisekund\")]\r\n    public void Milliseconds(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 sekunda\")]\r\n    [InlineData(2, \"2 sekundy\")]\r\n    [InlineData(3, \"3 sekundy\")]\r\n    [InlineData(4, \"4 sekundy\")]\r\n    [InlineData(5, \"5 sekund\")]\r\n    [InlineData(6, \"6 sekund\")]\r\n    [InlineData(10, \"10 sekund\")]\r\n    public void Seconds(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 minuta\")]\r\n    [InlineData(2, \"2 minuty\")]\r\n    [InlineData(3, \"3 minuty\")]\r\n    [InlineData(4, \"4 minuty\")]\r\n    [InlineData(5, \"5 minut\")]\r\n    [InlineData(6, \"6 minut\")]\r\n    [InlineData(10, \"10 minut\")]\r\n    public void Minutes(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 hodina\")]\r\n    [InlineData(2, \"2 hodiny\")]\r\n    [InlineData(3, \"3 hodiny\")]\r\n    [InlineData(4, \"4 hodiny\")]\r\n    [InlineData(5, \"5 hodin\")]\r\n    [InlineData(6, \"6 hodin\")]\r\n    [InlineData(10, \"10 hodin\")]\r\n    public void Hours(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 den\")]\r\n    [InlineData(2, \"2 dny\")]\r\n    [InlineData(3, \"3 dny\")]\r\n    [InlineData(4, \"4 dny\")]\r\n    [InlineData(5, \"5 dnů\")]\r\n    [InlineData(6, \"6 dnů\")]\r\n    public void Days(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 týden\")]\r\n    [InlineData(2, \"2 týdny\")]\r\n    [InlineData(3, \"3 týdny\")]\r\n    [InlineData(4, \"4 týdny\")]\r\n    [InlineData(5, \"5 týdnů\")]\r\n    [InlineData(6, \"6 týdnů\")]\r\n    public void Weeks(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(number * 7).Humanize());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/da/DateHumanizeTests.cs",
    "content": "﻿namespace da;\r\n\r\n[UseCulture(\"da-DK\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(-2, \"2 dage siden\")]\r\n    [InlineData(-1, \"i går\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"i morgen\")]\r\n    [InlineData(10, \"10 dage fra nu\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"et sekund fra nu\")]\r\n    [InlineData(10, \"10 sekunder fra nu\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 timer siden\")]\r\n    [InlineData(-1, \"en time siden\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en time fra nu\")]\r\n    [InlineData(10, \"10 timer fra nu\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 minutter siden\")]\r\n    [InlineData(-1, \"et minut siden\")]\r\n    [InlineData(60, \"en time siden\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"et minut fra nu\")]\r\n    [InlineData(10, \"10 minutter fra nu\")]\r\n    [InlineData(59, \"59 minutter fra nu\")]\r\n    [InlineData(60, \"en time fra nu\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 måneder siden\")]\r\n    [InlineData(-1, \"en måned siden\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en måned fra nu\")]\r\n    [InlineData(10, \"10 måneder fra nu\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 sekunder siden\")]\r\n    [InlineData(-1, \"et sekund siden\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 år siden\")]\r\n    [InlineData(-1, \"et år siden\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"et år fra nu\")]\r\n    [InlineData(2, \"2 år fra nu\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nu\")]\r\n    public void Now(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/da/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace da;\r\n\r\n[UseCulture(\"da-DK\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"et år\")]\r\n    [InlineData(731, \"2 år\")]\r\n    [InlineData(1096, \"3 år\")]\r\n    [InlineData(4018, \"11 år\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"en måned\")]\r\n    [InlineData(61, \"2 måneder\")]\r\n    [InlineData(92, \"3 måneder\")]\r\n    [InlineData(335, \"11 måneder\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"en uge\")]\r\n    [InlineData(14, \"2 uger\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en dag\")]\r\n    [InlineData(2, \"2 dage\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en time\")]\r\n    [InlineData(2, \"2 timer\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"et minut\")]\r\n    [InlineData(2, \"2 minutter\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"et sekund\")]\r\n    [InlineData(2, \"2 sekunder\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"et millisekund\")]\r\n    [InlineData(2, \"2 millisekunder\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 millisekunder\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"ingen tid\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de/Bytes/ByteRateTests.cs",
    "content": "﻿namespace de.Bytes;\r\n\r\n[UseCulture(\"de-DE\")]\r\npublic class ByteRateTests\r\n{\r\n    [Theory]\r\n    [InlineData(400, 1, \"400 B/s\")]\r\n    [InlineData(4 * 1024, 1, \"4 kB/s\")]\r\n    [InlineData(4 * 1024 * 1024, 1, \"4 MB/s\")]\r\n    [InlineData(4 * 2 * 1024 * 1024, 2, \"4 MB/s\")]\r\n    [InlineData(4 * 1024, 0.1, \"40 kB/s\")]\r\n    [InlineData(15 * 60 * 1024 * 1024, 60, \"15 MB/s\")]\r\n    public void HumanizesRates(long inputBytes, double perSeconds, string expectedValue)\r\n    {\r\n        var size = new ByteSize(inputBytes);\r\n        var interval = TimeSpan.FromSeconds(perSeconds);\r\n\r\n        var rate = size.Per(interval).Humanize();\r\n\r\n        Assert.Equal(expectedValue, rate);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, 1, TimeUnit.Second, \"1 MB/s\")]\r\n    [InlineData(1, 60, TimeUnit.Minute, \"1 MB/min\")]\r\n    [InlineData(1, 60 * 60, TimeUnit.Hour, \"1 MB/h\")]\r\n    [InlineData(10, 1, TimeUnit.Second, \"10 MB/s\")]\r\n    [InlineData(10, 60, TimeUnit.Minute, \"10 MB/min\")]\r\n    [InlineData(10, 60 * 60, TimeUnit.Hour, \"10 MB/h\")]\r\n    [InlineData(1, 10 * 1, TimeUnit.Second, \"102,4 kB/s\")]\r\n    [InlineData(1, 10 * 60, TimeUnit.Minute, \"102,4 kB/min\")]\r\n    [InlineData(1, 10 * 60 * 60, TimeUnit.Hour, \"102,4 kB/h\")]\r\n    public void TimeUnitTests(long megabytes, double measurementIntervalSeconds, TimeUnit displayInterval, string expectedValue)\r\n    {\r\n        var size = ByteSize.FromMegabytes(megabytes);\r\n        var measurementInterval = TimeSpan.FromSeconds(measurementIntervalSeconds);\r\n\r\n        var rate = size.Per(measurementInterval);\r\n        var text = rate.Humanize(displayInterval);\r\n\r\n        Assert.Equal(expectedValue, text);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(19854651984, 1, TimeUnit.Second, null, \"18,49 GB/s\")]\r\n    [InlineData(19854651984, 1, TimeUnit.Second, \"#.##\", \"18,49 GB/s\")]\r\n    public void FormattedTimeUnitTests(long bytes, int measurementIntervalSeconds, TimeUnit displayInterval, string? format, string expectedValue)\r\n    {\r\n        var size = ByteSize.FromBytes(bytes);\r\n        var measurementInterval = TimeSpan.FromSeconds(measurementIntervalSeconds);\r\n        var rate = size.Per(measurementInterval);\r\n        var text = rate.Humanize(format, displayInterval);\r\n\r\n        Assert.Equal(expectedValue, text);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(TimeUnit.Millisecond)]\r\n    [InlineData(TimeUnit.Day)]\r\n    [InlineData(TimeUnit.Month)]\r\n    [InlineData(TimeUnit.Week)]\r\n    [InlineData(TimeUnit.Year)]\r\n    public void ThrowsOnUnsupportedData(TimeUnit units)\r\n    {\r\n        var dummyRate = ByteSize.FromBits(1).Per(TimeSpan.FromSeconds(1));\r\n\r\n        Assert.Throws<NotSupportedException>(() => dummyRate.Humanize(units));\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de/Bytes/ByteSizeExtensionsTests.cs",
    "content": "﻿namespace de.Bytes;\r\n\r\n[UseCulture(\"de-DE\")]\r\npublic class ByteSizeExtensionsTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, null, \"2 TB\")]\r\n    [InlineData(2, \"GB\", \"2048 GB\")]\r\n    [InlineData(2.123, \"#.#\", \"2,1 TB\")]\r\n    public void HumanizesTerabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Terabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"GB\", \"0 GB\")]\r\n    [InlineData(2, null, \"2 GB\")]\r\n    [InlineData(2, \"MB\", \"2048 MB\")]\r\n    [InlineData(2.123, \"#.##\", \"2,12 GB\")]\r\n    public void HumanizesGigabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Gigabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"MB\", \"0 MB\")]\r\n    [InlineData(2, null, \"2 MB\")]\r\n    [InlineData(2, \"KB\", \"2048 kB\")]\r\n    [InlineData(2.123, \"#\", \"2 MB\")]\r\n    public void HumanizesMegabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Megabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"KB\", \"0 kB\")]\r\n    [InlineData(2, null, \"2 kB\")]\r\n    [InlineData(2, \"B\", \"2048 B\")]\r\n    [InlineData(2.123, \"#.####\", \"2,123 kB\")]\r\n    public void HumanizesKilobytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Kilobytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"#.##\", \"0 bit\")]\r\n    [InlineData(0, \"#.## B\", \"0 B\")]\r\n    [InlineData(0, \"B\", \"0 B\")]\r\n    [InlineData(2, null, \"2 B\")]\r\n    [InlineData(2000, \"KB\", \"1,95 kB\")]\r\n    [InlineData(2123, \"#.##\", \"2,07 kB\")]\r\n    [InlineData(10000000, \"KB\", \"9765,63 kB\")]\r\n    [InlineData(10000000, \"#,##0 KB\", \"9.766 kB\")]\r\n    [InlineData(10000000, \"#,##0.# KB\", \"9.765,6 kB\")]\r\n    public void HumanizesBytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Bytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"b\", \"0 bit\")]\r\n    [InlineData(2, null, \"2 bit\")]\r\n    [InlineData(12, \"B\", \"1,5 B\")]\r\n    [InlineData(10000, \"#.# KB\", \"1,2 kB\")]\r\n    public void HumanizesBits(long input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Bits().Humanize(format));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de/Bytes/ToFullWordsTests.cs",
    "content": "﻿namespace de.Bytes;\r\n\r\n[UseCulture(\"de-DE\")]\r\npublic class ToFullWordsTests\r\n{\r\n    [Fact]\r\n    public void ReturnsSingularBit() =>\r\n        Assert.Equal(\"1 Bit\", ByteSize.FromBits(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralBits() =>\r\n        Assert.Equal(\"2 Bit\", ByteSize.FromBits(2).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularByte() =>\r\n        Assert.Equal(\"1 Byte\", ByteSize.FromBytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralBytes() =>\r\n        Assert.Equal(\"10 Byte\", ByteSize.FromBytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularKiloByte() =>\r\n        Assert.Equal(\"1 Kilobyte\", ByteSize.FromKilobytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralKilobytes() =>\r\n        Assert.Equal(\"10 Kilobyte\", ByteSize.FromKilobytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularMegabyte() =>\r\n        Assert.Equal(\"1 Megabyte\", ByteSize.FromMegabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralMegabytes() =>\r\n        Assert.Equal(\"10 Megabyte\", ByteSize.FromMegabytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularGigabyte() =>\r\n        Assert.Equal(\"1 Gigabyte\", ByteSize.FromGigabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralGigabytes() =>\r\n        Assert.Equal(\"10 Gigabyte\", ByteSize.FromGigabytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularTerabyte() =>\r\n        Assert.Equal(\"1 Terabyte\", ByteSize.FromTerabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralTerabytes() =>\r\n        Assert.Equal(\"10 Terabyte\", ByteSize.FromTerabytes(10).ToFullWords());\r\n\r\n    [Theory]\r\n    [InlineData(229376, \"B\", \"229376 Byte\")]\r\n    [InlineData(229376, \"# KB\", \"224 Kilobyte\")]\r\n    public void ToFullWordsFormatted(double input, string format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, ByteSize.FromBytes(input).ToFullWords(format));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de/Bytes/ToStringTests.cs",
    "content": "﻿namespace de.Bytes;\r\n\r\n[UseCulture(\"de-DE\")]\r\npublic class ToStringTests\r\n{\r\n    [Fact]\r\n    public void ReturnsLargestMetricSuffix() =>\r\n        Assert.Equal(\"10,5 kB\", ByteSize.FromKilobytes(10.5).ToString());\r\n\r\n    [Fact]\r\n    public void ReturnsDefaultNumberFormat() =>\r\n        Assert.Equal(\"10,5 kB\", ByteSize.FromKilobytes(10.5).ToString(\"KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsProvidedNumberFormat() =>\r\n        Assert.Equal(\"10,1234 kB\", ByteSize.FromKilobytes(10.1234).ToString(\"#.#### KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBits() =>\r\n        Assert.Equal(\"10 bit\", ByteSize.FromBits(10).ToString(\"##.#### b\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBytes() =>\r\n        Assert.Equal(\"10 B\", ByteSize.FromBytes(10).ToString(\"##.#### B\"));\r\n\r\n    [Fact]\r\n    public void ReturnsKilobytes() =>\r\n        Assert.Equal(\"10 kB\", ByteSize.FromKilobytes(10).ToString(\"##.#### KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsMegabytes() =>\r\n        Assert.Equal(\"10 MB\", ByteSize.FromMegabytes(10).ToString(\"##.#### MB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsGigabytes() =>\r\n        Assert.Equal(\"10 GB\", ByteSize.FromGigabytes(10).ToString(\"##.#### GB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsTerabytes() =>\r\n        Assert.Equal(\"10 TB\", ByteSize.FromTerabytes(10).ToString(\"##.#### TB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsSelectedFormat() =>\r\n        Assert.Equal(\"10,0 TB\", ByteSize.FromTerabytes(10).ToString(\"0.0 TB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsLargestMetricPrefixLargerThanZero() =>\r\n        Assert.Equal(\"512 kB\", ByteSize.FromMegabytes(.5).ToString(\"#.#\"));\r\n\r\n    [Fact]\r\n    public void ReturnsLargestMetricPrefixLargerThanZeroForNegativeValues() =>\r\n        Assert.Equal(\"-512 kB\", ByteSize.FromMegabytes(-.5).ToString(\"#.#\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBytesViaGeneralFormat() =>\r\n        Assert.Equal(\"10 B\", $\"{ByteSize.FromBytes(10)}\");\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de/CollectionFormatterTests.cs",
    "content": "﻿namespace de;\r\n\r\n[UseCulture(\"de\")]\r\npublic class CollectionFormatterTests\r\n{\r\n    [Fact]\r\n    public void OneItem()\r\n    {\r\n        var collection = new List<int>([1]);\r\n        var humanized = \"1\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void TwoItems()\r\n    {\r\n        var collection = new List<int>([1, 2]);\r\n        var humanized = \"1 und 2\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void MoreThanTwoItems()\r\n    {\r\n        var collection = new List<int>([1, 2, 3]);\r\n        var humanized = \"1, 2 und 3\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de/DateHumanizeTests.cs",
    "content": "﻿namespace de;\r\n\r\n[UseCulture(\"de-DE\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(-2, \"vor 2 Tagen\")]\r\n    [InlineData(-1, \"gestern\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"in 2 Tagen\")]\r\n    [InlineData(1, \"morgen\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"vor 2 Stunden\")]\r\n    [InlineData(-1, \"vor einer Stunde\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"in 2 Stunden\")]\r\n    [InlineData(1, \"in einer Stunde\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"vor 2 Minuten\")]\r\n    [InlineData(-1, \"vor einer Minute\")]\r\n    [InlineData(60, \"vor einer Stunde\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"in 2 Minuten\")]\r\n    [InlineData(1, \"in einer Minute\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"vor 2 Monaten\")]\r\n    [InlineData(-1, \"vor einem Monat\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"in 2 Monaten\")]\r\n    [InlineData(1, \"in einem Monat\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"vor 2 Sekunden\")]\r\n    [InlineData(-1, \"vor einer Sekunde\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"in 2 Sekunden\")]\r\n    [InlineData(1, \"in einer Sekunde\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"vor 2 Jahren\")]\r\n    [InlineData(-1, \"vor einem Jahr\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"in 2 Jahren\")]\r\n    [InlineData(1, \"in einem Jahr\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de/DateToOrdinalWordsTests.cs",
    "content": "﻿namespace de;\r\n\r\n[UseCulture(\"de\")]\r\npublic class DateToOrdinalWordsTests\r\n{\r\n    [Fact]\r\n    public void OrdinalizeString() =>\r\n        Assert.Equal(\"1. Januar 2015\", new DateTime(2015, 1, 1).ToOrdinalWords());\r\n\r\n#if NET6_0_OR_GREATER\r\n    [Fact]\r\n    public void OrdinalizeDateOnlyString() =>\r\n        Assert.Equal(\"1. Januar 2015\", new DateOnly(2015, 1, 1).ToOrdinalWords());\r\n#endif\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de/HeadingTests.cs",
    "content": "﻿namespace de;\r\n\r\n[UseCulture(\"de-DE\")]\r\npublic class HeadingTests\r\n{\r\n    [InlineData(0, \"N\")]\r\n    [InlineData(11.2, \"N\")]\r\n    [InlineData(11.3, \"NNO\")]\r\n    [InlineData(22.5, \"NNO\")]\r\n    [InlineData(33.7, \"NNO\")]\r\n    [InlineData(33.8, \"NO\")]\r\n    [InlineData(45, \"NO\")]\r\n    [InlineData(56.2, \"NO\")]\r\n    [InlineData(56.3, \"ONO\")]\r\n    [InlineData(67.5, \"ONO\")]\r\n    [InlineData(78.7, \"ONO\")]\r\n    [InlineData(78.8, \"O\")]\r\n    [InlineData(90, \"O\")]\r\n    [InlineData(101.2, \"O\")]\r\n    [InlineData(101.3, \"OSO\")]\r\n    [InlineData(112.5, \"OSO\")]\r\n    [InlineData(123.7, \"OSO\")]\r\n    [InlineData(123.8, \"SO\")]\r\n    [InlineData(135, \"SO\")]\r\n    [InlineData(146.2, \"SO\")]\r\n    [InlineData(146.3, \"SSO\")]\r\n    [InlineData(157.5, \"SSO\")]\r\n    [InlineData(168.7, \"SSO\")]\r\n    [InlineData(168.8, \"S\")]\r\n    [InlineData(180, \"S\")]\r\n    [InlineData(191.2, \"S\")]\r\n    [InlineData(191.3, \"SSW\")]\r\n    [InlineData(202.5, \"SSW\")]\r\n    [InlineData(213.7, \"SSW\")]\r\n    [InlineData(213.8, \"SW\")]\r\n    [InlineData(225, \"SW\")]\r\n    [InlineData(236.2, \"SW\")]\r\n    [InlineData(236.3, \"WSW\")]\r\n    [InlineData(247.5, \"WSW\")]\r\n    [InlineData(258.7, \"WSW\")]\r\n    [InlineData(258.8, \"W\")]\r\n    [InlineData(270, \"W\")]\r\n    [InlineData(281.2, \"W\")]\r\n    [InlineData(281.3, \"WNW\")]\r\n    [InlineData(292.5, \"WNW\")]\r\n    [InlineData(303.7, \"WNW\")]\r\n    [InlineData(303.8, \"NW\")]\r\n    [InlineData(315, \"NW\")]\r\n    [InlineData(326.2, \"NW\")]\r\n    [InlineData(326.3, \"NNW\")]\r\n    [InlineData(337.5, \"NNW\")]\r\n    [InlineData(348.7, \"NNW\")]\r\n    [InlineData(348.8, \"N\")]\r\n    [InlineData(720, \"N\")]\r\n    [Theory]\r\n    public void ToHeadingAbbreviated(double heading, string expected) =>\r\n        Assert.Equal(expected, heading.ToHeading());\r\n\r\n    [InlineData(0, \"Nord\")]\r\n    [InlineData(22.5, \"Nordnordost\")]\r\n    [InlineData(45, \"Nordost\")]\r\n    [InlineData(67.5, \"Ostnordost\")]\r\n    [InlineData(90, \"Ost\")]\r\n    [InlineData(112.5, \"Ostsüdost\")]\r\n    [InlineData(135, \"Südost\")]\r\n    [InlineData(157.5, \"Südsüdost\")]\r\n    [InlineData(180, \"Süd\")]\r\n    [InlineData(202.5, \"Südsüdwest\")]\r\n    [InlineData(225, \"Südwest\")]\r\n    [InlineData(247.5, \"Westsüdwest\")]\r\n    [InlineData(270, \"West\")]\r\n    [InlineData(292.5, \"Westnordwest\")]\r\n    [InlineData(315, \"Nordwest\")]\r\n    [InlineData(337.5, \"Nordnordwest\")]\r\n    [InlineData(720, \"Nord\")]\r\n    [Theory]\r\n    public void ToHeading(double heading, string expected) =>\r\n        Assert.Equal(expected, heading.ToHeading(HeadingStyle.Full));\r\n\r\n    [InlineData(\"N\", 0)]\r\n    [InlineData(\"NNO\", 22.5)]\r\n    [InlineData(\"NO\", 45)]\r\n    [InlineData(\"ONO\", 67.5)]\r\n    [InlineData(\"O\", 90)]\r\n    [InlineData(\"OSO\", 112.5)]\r\n    [InlineData(\"SO\", 135)]\r\n    [InlineData(\"SSO\", 157.5)]\r\n    [InlineData(\"S\", 180)]\r\n    [InlineData(\"SSW\", 202.5)]\r\n    [InlineData(\"SW\", 225)]\r\n    [InlineData(\"WSW\", 247.5)]\r\n    [InlineData(\"W\", 270)]\r\n    [InlineData(\"WNW\", 292.5)]\r\n    [InlineData(\"NW\", 315)]\r\n    [InlineData(\"NNW\", 337.5)]\r\n    [Theory]\r\n    public void FromShortHeading(string heading, double expected) =>\r\n        Assert.Equal(expected, heading.FromAbbreviatedHeading());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de/NumberToWordsTests.cs",
    "content": "namespace de;\r\n\r\n[UseCulture(\"de-DE\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"null\")]\r\n    [InlineData(1, \"eins\")]\r\n    [InlineData(2, \"zwei\")]\r\n    [InlineData(3, \"drei\")]\r\n    [InlineData(4, \"vier\")]\r\n    [InlineData(5, \"fünf\")]\r\n    [InlineData(6, \"sechs\")]\r\n    [InlineData(7, \"sieben\")]\r\n    [InlineData(8, \"acht\")]\r\n    [InlineData(9, \"neun\")]\r\n    [InlineData(10, \"zehn\")]\r\n    [InlineData(20, \"zwanzig\")]\r\n    [InlineData(30, \"dreißig\")]\r\n    [InlineData(40, \"vierzig\")]\r\n    [InlineData(50, \"fünfzig\")]\r\n    [InlineData(60, \"sechzig\")]\r\n    [InlineData(70, \"siebzig\")]\r\n    [InlineData(80, \"achtzig\")]\r\n    [InlineData(90, \"neunzig\")]\r\n    [InlineData(100, \"einhundert\")]\r\n    [InlineData(200, \"zweihundert\")]\r\n    [InlineData(1000, \"eintausend\")]\r\n    [InlineData(10000, \"zehntausend\")]\r\n    [InlineData(100000, \"einhunderttausend\")]\r\n    [InlineData(1000000, \"eine Million\")]\r\n    [InlineData(10000000, \"zehn Millionen\")]\r\n    [InlineData(100000000, \"einhundert Millionen\")]\r\n    [InlineData(1000000000, \"eine Milliarde\")]\r\n    [InlineData(2000000000, \"zwei Milliarden\")]\r\n    [InlineData(122, \"einhundertzweiundzwanzig\")]\r\n    [InlineData(3501, \"dreitausendfünfhunderteins\")]\r\n    [InlineData(111, \"einhundertelf\")]\r\n    [InlineData(1112, \"eintausendeinhundertzwölf\")]\r\n    [InlineData(11213, \"elftausendzweihundertdreizehn\")]\r\n    [InlineData(121314, \"einhunderteinundzwanzigtausenddreihundertvierzehn\")]\r\n    [InlineData(2132415, \"zwei Millionen einhundertzweiunddreißigtausendvierhundertfünfzehn\")]\r\n    [InlineData(12345516, \"zwölf Millionen dreihundertfünfundvierzigtausendfünfhundertsechzehn\")]\r\n    [InlineData(751633617, \"siebenhunderteinundfünfzig Millionen sechshundertdreiunddreißigtausendsechshundertsiebzehn\")]\r\n    [InlineData(1111111118, \"eine Milliarde einhundertelf Millionen einhundertelftausendeinhundertachtzehn\")]\r\n    [InlineData(35484694489515, \"fünfunddreißig Billionen vierhundertvierundachtzig Milliarden sechshundertvierundneunzig Millionen vierhundertneunundachtzigtausendfünfhundertfünfzehn\")]\r\n    [InlineData(8183162164626926, \"acht Billiarden einhundertdreiundachtzig Billionen einhundertzweiundsechzig Milliarden einhundertvierundsechzig Millionen sechshundertsechsundzwanzigtausendneunhundertsechsundzwanzig\")]\r\n    [InlineData(4564121926659524672, \"vier Trillionen fünfhundertvierundsechzig Billiarden einhunderteinundzwanzig Billionen neunhundertsechsundzwanzig Milliarden sechshundertneunundfünfzig Millionen fünfhundertvierundzwanzigtausendsechshundertzweiundsiebzig\")]\r\n    [InlineData(-751633619, \"minus siebenhunderteinundfünfzig Millionen sechshundertdreiunddreißigtausendsechshundertneunzehn\")]\r\n    public void ToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"eine\")]\r\n    [InlineData(3501, \"dreitausendfünfhunderteine\")]\r\n    public void ToWordsFeminine(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nullter\")]\r\n    [InlineData(1, \"erster\")]\r\n    [InlineData(2, \"zweiter\")]\r\n    [InlineData(3, \"dritter\")]\r\n    [InlineData(4, \"vierter\")]\r\n    [InlineData(5, \"fünfter\")]\r\n    [InlineData(6, \"sechster\")]\r\n    [InlineData(7, \"siebter\")]\r\n    [InlineData(8, \"achter\")]\r\n    [InlineData(9, \"neunter\")]\r\n    [InlineData(10, \"zehnter\")]\r\n    [InlineData(20, \"zwanzigster\")]\r\n    [InlineData(30, \"dreißigster\")]\r\n    [InlineData(40, \"vierzigster\")]\r\n    [InlineData(50, \"fünfzigster\")]\r\n    [InlineData(60, \"sechzigster\")]\r\n    [InlineData(70, \"siebzigster\")]\r\n    [InlineData(80, \"achtzigster\")]\r\n    [InlineData(90, \"neunzigster\")]\r\n    [InlineData(100, \"einhundertster\")]\r\n    [InlineData(200, \"zweihundertster\")]\r\n    [InlineData(1000, \"eintausendster\")]\r\n    [InlineData(10000, \"zehntausendster\")]\r\n    [InlineData(100000, \"einhunderttausendster\")]\r\n    [InlineData(1000000, \"einmillionster\")]\r\n    [InlineData(10000000, \"zehnmillionster\")]\r\n    [InlineData(100000000, \"einhundertmillionster\")]\r\n    [InlineData(1000000000, \"einmilliardster\")]\r\n    [InlineData(2000000000, \"zweimilliardster\")]\r\n    [InlineData(122, \"einhundertzweiundzwanzigster\")]\r\n    [InlineData(3501, \"dreitausendfünfhunderterster\")]\r\n    [InlineData(111, \"einhundertelfter\")]\r\n    [InlineData(1112, \"eintausendeinhundertzwölfter\")]\r\n    [InlineData(11213, \"elftausendzweihundertdreizehnter\")]\r\n    [InlineData(121314, \"einhunderteinundzwanzigtausenddreihundertvierzehnter\")]\r\n    [InlineData(2132415, \"zweimillioneneinhundertzweiunddreißigtausendvierhundertfünfzehnter\")]\r\n    [InlineData(12345516, \"zwölfmillionendreihundertfünfundvierzigtausendfünfhundertsechzehnter\")]\r\n    [InlineData(751633617, \"siebenhunderteinundfünfzigmillionensechshundertdreiunddreißigtausendsechshundertsiebzehnter\")]\r\n    [InlineData(1111111118, \"einemilliardeeinhundertelfmillioneneinhundertelftausendeinhundertachtzehnter\")]\r\n    [InlineData(-751633619, \"minus siebenhunderteinundfünfzigmillionensechshundertdreiunddreißigtausendsechshundertneunzehnter\")]\r\n    public void ToOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nullte\")]\r\n    [InlineData(1, \"erste\")]\r\n    [InlineData(2, \"zweite\")]\r\n    [InlineData(3, \"dritte\")]\r\n    [InlineData(4, \"vierte\")]\r\n    [InlineData(5, \"fünfte\")]\r\n    [InlineData(6, \"sechste\")]\r\n    [InlineData(7, \"siebte\")]\r\n    [InlineData(8, \"achte\")]\r\n    [InlineData(9, \"neunte\")]\r\n    [InlineData(10, \"zehnte\")]\r\n    [InlineData(111, \"einhundertelfte\")]\r\n    [InlineData(1112, \"eintausendeinhundertzwölfte\")]\r\n    [InlineData(11213, \"elftausendzweihundertdreizehnte\")]\r\n    [InlineData(121314, \"einhunderteinundzwanzigtausenddreihundertvierzehnte\")]\r\n    [InlineData(2132415, \"zweimillioneneinhundertzweiunddreißigtausendvierhundertfünfzehnte\")]\r\n    [InlineData(12345516, \"zwölfmillionendreihundertfünfundvierzigtausendfünfhundertsechzehnte\")]\r\n    [InlineData(751633617, \"siebenhunderteinundfünfzigmillionensechshundertdreiunddreißigtausendsechshundertsiebzehnte\")]\r\n    [InlineData(1111111118, \"einemilliardeeinhundertelfmillioneneinhundertelftausendeinhundertachtzehnte\")]\r\n    [InlineData(-751633619, \"minus siebenhunderteinundfünfzigmillionensechshundertdreiunddreißigtausendsechshundertneunzehnte\")]\r\n    public void ToOrdinalWordsFeminine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nulltes\")]\r\n    [InlineData(1, \"erstes\")]\r\n    [InlineData(2, \"zweites\")]\r\n    [InlineData(3, \"drittes\")]\r\n    [InlineData(4, \"viertes\")]\r\n    [InlineData(5, \"fünftes\")]\r\n    [InlineData(6, \"sechstes\")]\r\n    [InlineData(7, \"siebtes\")]\r\n    [InlineData(8, \"achtes\")]\r\n    [InlineData(9, \"neuntes\")]\r\n    [InlineData(10, \"zehntes\")]\r\n    [InlineData(111, \"einhundertelftes\")]\r\n    [InlineData(1112, \"eintausendeinhundertzwölftes\")]\r\n    [InlineData(11213, \"elftausendzweihundertdreizehntes\")]\r\n    [InlineData(121314, \"einhunderteinundzwanzigtausenddreihundertvierzehntes\")]\r\n    [InlineData(2132415, \"zweimillioneneinhundertzweiunddreißigtausendvierhundertfünfzehntes\")]\r\n    [InlineData(12345516, \"zwölfmillionendreihundertfünfundvierzigtausendfünfhundertsechzehntes\")]\r\n    [InlineData(751633617, \"siebenhunderteinundfünfzigmillionensechshundertdreiunddreißigtausendsechshundertsiebzehntes\")]\r\n    [InlineData(1111111118, \"einemilliardeeinhundertelfmillioneneinhundertelftausendeinhundertachtzehntes\")]\r\n    [InlineData(-751633619, \"minus siebenhunderteinundfünfzigmillionensechshundertdreiunddreißigtausendsechshundertneunzehntes\")]\r\n    public void ToOrdinalWordsNeuter(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Neuter));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de/OrdinalizeTests.cs",
    "content": "﻿namespace de;\r\n\r\n[UseCulture(\"de-DE\")]\r\npublic class OrdinalizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"0\", \"0.\")]\r\n    [InlineData(\"1\", \"1.\")]\r\n    [InlineData(\"2\", \"2.\")]\r\n    [InlineData(\"3\", \"3.\")]\r\n    [InlineData(\"4\", \"4.\")]\r\n    [InlineData(\"5\", \"5.\")]\r\n    [InlineData(\"6\", \"6.\")]\r\n    [InlineData(\"23\", \"23.\")]\r\n    [InlineData(\"100\", \"100.\")]\r\n    [InlineData(\"101\", \"101.\")]\r\n    [InlineData(\"102\", \"102.\")]\r\n    [InlineData(\"103\", \"103.\")]\r\n    [InlineData(\"1001\", \"1001.\")]\r\n    public void OrdinalizeString(string number, string ordinalized) =>\r\n        Assert.Equal(ordinalized, number.Ordinalize());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de/TimeSpanHumanizeTests.cs",
    "content": "namespace de;\r\n\r\n[UseCulture(\"de-DE\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"1 Jahr\")]\r\n    [InlineData(731, \"2 Jahre\")]\r\n    [InlineData(1096, \"3 Jahre\")]\r\n    [InlineData(4018, \"11 Jahre\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"ein Jahr\")]\r\n    [InlineData(731, \"zwei Jahre\")]\r\n    [InlineData(1096, \"drei Jahre\")]\r\n    [InlineData(4018, \"elf Jahre\")]\r\n    public void YearsToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: true));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"1 Monat\")]\r\n    [InlineData(61, \"2 Monate\")]\r\n    [InlineData(92, \"3 Monate\")]\r\n    [InlineData(335, \"11 Monate\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"ein Monat\")]\r\n    [InlineData(61, \"zwei Monate\")]\r\n    [InlineData(92, \"drei Monate\")]\r\n    [InlineData(335, \"elf Monate\")]\r\n    public void MonthsToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 Woche\")]\r\n    [InlineData(14, \"2 Wochen\")]\r\n    [InlineData(21, \"3 Wochen\")]\r\n    [InlineData(77, \"11 Wochen\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(7, \"eine Woche\")]\r\n    [InlineData(14, \"zwei Wochen\")]\r\n    [InlineData(21, \"drei Wochen\")]\r\n    [InlineData(77, \"elf Wochen\")]\r\n    public void WeeksToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 Tag\")]\r\n    [InlineData(2, \"2 Tage\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ein Tag\")]\r\n    [InlineData(2, \"zwei Tage\")]\r\n    public void DaysToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 Stunde\")]\r\n    [InlineData(2, \"2 Stunden\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"eine Stunde\")]\r\n    [InlineData(2, \"zwei Stunden\")]\r\n    public void HoursToWords(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 Minute\")]\r\n    [InlineData(2, \"2 Minuten\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"eine Minute\")]\r\n    [InlineData(2, \"zwei Minuten\")]\r\n    public void MinutesToWords(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 Sekunde\")]\r\n    [InlineData(2, \"2 Sekunden\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"eine Sekunde\")]\r\n    [InlineData(2, \"zwei Sekunden\")]\r\n    public void SecondsToWords(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 Millisekunde\")]\r\n    [InlineData(2, \"2 Millisekunden\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"eine Millisekunde\")]\r\n    [InlineData(2, \"zwei Millisekunden\")]\r\n    public void MillisecondsToWords(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize(toWords: true));\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 Millisekunden\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"Keine Zeit\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de/TimeToClockNotationTests.cs",
    "content": "#if NET6_0_OR_GREATER\r\n\r\nnamespace de;\r\n\r\n[UseCulture(\"de\")]\r\npublic class TimeToClockNotationTests\r\n{\r\n    [Theory]\r\n    [InlineData(00, 00, \"zwölf Uhr nachts\")]\r\n    [InlineData(04, 00, \"vier Uhr\")]\r\n    [InlineData(05, 01, \"fünf Uhr eins\")]\r\n    [InlineData(06, 05, \"fünf nach sechs\")]\r\n    [InlineData(07, 10, \"zehn nach sieben\")]\r\n    [InlineData(08, 15, \"viertel nach acht\")]\r\n    [InlineData(09, 20, \"zwanzig nach neun\")]\r\n    [InlineData(10, 25, \"fünf vor halb elf\")]\r\n    [InlineData(11, 30, \"halb zwölf\")]\r\n    [InlineData(12, 00, \"zwölf Uhr mittags\")]\r\n    [InlineData(15, 35, \"fünf nach halb vier\")]\r\n    [InlineData(16, 40, \"zwanzig vor fünf\")]\r\n    [InlineData(17, 45, \"viertel vor sechs\")]\r\n    [InlineData(18, 50, \"zehn vor sieben\")]\r\n    [InlineData(19, 55, \"fünf vor acht\")]\r\n    [InlineData(20, 59, \"acht Uhr neunundfünfzig\")]\r\n    public void ConvertToClockNotationTimeOnlyStringDe(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation();\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(00, 00, \"zwölf Uhr nachts\")]\r\n    [InlineData(04, 00, \"vier Uhr\")]\r\n    [InlineData(05, 01, \"fünf Uhr\")]\r\n    [InlineData(06, 05, \"fünf nach sechs\")]\r\n    [InlineData(07, 10, \"zehn nach sieben\")]\r\n    [InlineData(08, 15, \"viertel nach acht\")]\r\n    [InlineData(09, 20, \"zwanzig nach neun\")]\r\n    [InlineData(10, 25, \"fünf vor halb elf\")]\r\n    [InlineData(11, 30, \"halb zwölf\")]\r\n    [InlineData(12, 00, \"zwölf Uhr mittags\")]\r\n    [InlineData(13, 23, \"fünf vor halb zwei\")]\r\n    [InlineData(14, 32, \"halb drei\")]\r\n    [InlineData(15, 35, \"fünf nach halb vier\")]\r\n    [InlineData(16, 40, \"zwanzig vor fünf\")]\r\n    [InlineData(17, 45, \"viertel vor sechs\")]\r\n    [InlineData(18, 50, \"zehn vor sieben\")]\r\n    [InlineData(19, 55, \"fünf vor acht\")]\r\n    [InlineData(20, 59, \"neun Uhr\")]\r\n    public void ConvertToRoundedClockNotationTimeOnlyStringDe(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes);\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de/TimeUnitToSymbolTests.cs",
    "content": "﻿namespace de;\r\n\r\n[UseCulture(\"de-DE\")]\r\npublic class TimeUnitToSymbolTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(TimeUnit.Millisecond, \"ms\")]\r\n    [InlineData(TimeUnit.Second, \"s\")]\r\n    [InlineData(TimeUnit.Minute, \"min\")]\r\n    [InlineData(TimeUnit.Hour, \"h\")]\r\n    [InlineData(TimeUnit.Day, \"d\")]\r\n    [InlineData(TimeUnit.Week, \"Woche\")]\r\n    [InlineData(TimeUnit.Month, \"M\")]\r\n    [InlineData(TimeUnit.Year, \"a\")]\r\n    public void ToSymbol(TimeUnit unit, string expected) =>\r\n        Assert.Equal(expected, unit.ToSymbol());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de-CH/NumberToWordsTests.cs",
    "content": "namespace deCH;\r\n\r\n[UseCulture(\"de-CH\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"null\")]\r\n    [InlineData(1, \"eins\")]\r\n    [InlineData(2, \"zwei\")]\r\n    [InlineData(3, \"drei\")]\r\n    [InlineData(4, \"vier\")]\r\n    [InlineData(5, \"fünf\")]\r\n    [InlineData(6, \"sechs\")]\r\n    [InlineData(7, \"sieben\")]\r\n    [InlineData(8, \"acht\")]\r\n    [InlineData(9, \"neun\")]\r\n    [InlineData(10, \"zehn\")]\r\n    [InlineData(20, \"zwanzig\")]\r\n    [InlineData(30, \"dreissig\")]\r\n    [InlineData(40, \"vierzig\")]\r\n    [InlineData(50, \"fünfzig\")]\r\n    [InlineData(60, \"sechzig\")]\r\n    [InlineData(70, \"siebzig\")]\r\n    [InlineData(80, \"achtzig\")]\r\n    [InlineData(90, \"neunzig\")]\r\n    [InlineData(100, \"einhundert\")]\r\n    [InlineData(200, \"zweihundert\")]\r\n    [InlineData(1000, \"eintausend\")]\r\n    [InlineData(10000, \"zehntausend\")]\r\n    [InlineData(100000, \"einhunderttausend\")]\r\n    [InlineData(1000000, \"eine Million\")]\r\n    [InlineData(10000000, \"zehn Millionen\")]\r\n    [InlineData(100000000, \"einhundert Millionen\")]\r\n    [InlineData(1000000000, \"eine Milliarde\")]\r\n    [InlineData(2000000000, \"zwei Milliarden\")]\r\n    [InlineData(122, \"einhundertzweiundzwanzig\")]\r\n    [InlineData(3501, \"dreitausendfünfhunderteins\")]\r\n    [InlineData(111, \"einhundertelf\")]\r\n    [InlineData(1112, \"eintausendeinhundertzwölf\")]\r\n    [InlineData(11213, \"elftausendzweihundertdreizehn\")]\r\n    [InlineData(121314, \"einhunderteinundzwanzigtausenddreihundertvierzehn\")]\r\n    [InlineData(2132415, \"zwei Millionen einhundertzweiunddreissigtausendvierhundertfünfzehn\")]\r\n    [InlineData(12345516, \"zwölf Millionen dreihundertfünfundvierzigtausendfünfhundertsechzehn\")]\r\n    [InlineData(751633617, \"siebenhunderteinundfünfzig Millionen sechshundertdreiunddreissigtausendsechshundertsiebzehn\")]\r\n    [InlineData(1111111118, \"eine Milliarde einhundertelf Millionen einhundertelftausendeinhundertachtzehn\")]\r\n    [InlineData(35484694489515, \"fünfunddreissig Billionen vierhundertvierundachtzig Milliarden sechshundertvierundneunzig Millionen vierhundertneunundachtzigtausendfünfhundertfünfzehn\")]\r\n    [InlineData(8183162164626926, \"acht Billiarden einhundertdreiundachtzig Billionen einhundertzweiundsechzig Milliarden einhundertvierundsechzig Millionen sechshundertsechsundzwanzigtausendneunhundertsechsundzwanzig\")]\r\n    [InlineData(4564121926659524672, \"vier Trillionen fünfhundertvierundsechzig Billiarden einhunderteinundzwanzig Billionen neunhundertsechsundzwanzig Milliarden sechshundertneunundfünfzig Millionen fünfhundertvierundzwanzigtausendsechshundertzweiundsiebzig\")]\r\n    [InlineData(-751633619, \"minus siebenhunderteinundfünfzig Millionen sechshundertdreiunddreissigtausendsechshundertneunzehn\")]\r\n    public void ToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"eine\")]\r\n    [InlineData(3501, \"dreitausendfünfhunderteine\")]\r\n    public void ToWordsFeminine(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nullter\")]\r\n    [InlineData(1, \"erster\")]\r\n    [InlineData(2, \"zweiter\")]\r\n    [InlineData(3, \"dritter\")]\r\n    [InlineData(4, \"vierter\")]\r\n    [InlineData(5, \"fünfter\")]\r\n    [InlineData(6, \"sechster\")]\r\n    [InlineData(7, \"siebter\")]\r\n    [InlineData(8, \"achter\")]\r\n    [InlineData(9, \"neunter\")]\r\n    [InlineData(10, \"zehnter\")]\r\n    [InlineData(20, \"zwanzigster\")]\r\n    [InlineData(30, \"dreissigster\")]\r\n    [InlineData(40, \"vierzigster\")]\r\n    [InlineData(50, \"fünfzigster\")]\r\n    [InlineData(60, \"sechzigster\")]\r\n    [InlineData(70, \"siebzigster\")]\r\n    [InlineData(80, \"achtzigster\")]\r\n    [InlineData(90, \"neunzigster\")]\r\n    [InlineData(100, \"einhundertster\")]\r\n    [InlineData(200, \"zweihundertster\")]\r\n    [InlineData(1000, \"eintausendster\")]\r\n    [InlineData(10000, \"zehntausendster\")]\r\n    [InlineData(100000, \"einhunderttausendster\")]\r\n    [InlineData(1000000, \"einmillionster\")]\r\n    [InlineData(10000000, \"zehnmillionster\")]\r\n    [InlineData(100000000, \"einhundertmillionster\")]\r\n    [InlineData(1000000000, \"einmilliardster\")]\r\n    [InlineData(2000000000, \"zweimilliardster\")]\r\n    [InlineData(122, \"einhundertzweiundzwanzigster\")]\r\n    [InlineData(3501, \"dreitausendfünfhunderterster\")]\r\n    [InlineData(111, \"einhundertelfter\")]\r\n    [InlineData(1112, \"eintausendeinhundertzwölfter\")]\r\n    [InlineData(11213, \"elftausendzweihundertdreizehnter\")]\r\n    [InlineData(121314, \"einhunderteinundzwanzigtausenddreihundertvierzehnter\")]\r\n    [InlineData(2132415, \"zweimillioneneinhundertzweiunddreissigtausendvierhundertfünfzehnter\")]\r\n    [InlineData(12345516, \"zwölfmillionendreihundertfünfundvierzigtausendfünfhundertsechzehnter\")]\r\n    [InlineData(751633617, \"siebenhunderteinundfünfzigmillionensechshundertdreiunddreissigtausendsechshundertsiebzehnter\")]\r\n    [InlineData(1111111118, \"einemilliardeeinhundertelfmillioneneinhundertelftausendeinhundertachtzehnter\")]\r\n    [InlineData(-751633619, \"minus siebenhunderteinundfünfzigmillionensechshundertdreiunddreissigtausendsechshundertneunzehnter\")]\r\n    public void ToOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nullte\")]\r\n    [InlineData(1, \"erste\")]\r\n    [InlineData(2, \"zweite\")]\r\n    [InlineData(3, \"dritte\")]\r\n    [InlineData(4, \"vierte\")]\r\n    [InlineData(5, \"fünfte\")]\r\n    [InlineData(6, \"sechste\")]\r\n    [InlineData(7, \"siebte\")]\r\n    [InlineData(8, \"achte\")]\r\n    [InlineData(9, \"neunte\")]\r\n    [InlineData(10, \"zehnte\")]\r\n    [InlineData(111, \"einhundertelfte\")]\r\n    [InlineData(1112, \"eintausendeinhundertzwölfte\")]\r\n    [InlineData(11213, \"elftausendzweihundertdreizehnte\")]\r\n    [InlineData(121314, \"einhunderteinundzwanzigtausenddreihundertvierzehnte\")]\r\n    [InlineData(2132415, \"zweimillioneneinhundertzweiunddreissigtausendvierhundertfünfzehnte\")]\r\n    [InlineData(12345516, \"zwölfmillionendreihundertfünfundvierzigtausendfünfhundertsechzehnte\")]\r\n    [InlineData(751633617, \"siebenhunderteinundfünfzigmillionensechshundertdreiunddreissigtausendsechshundertsiebzehnte\")]\r\n    [InlineData(1111111118, \"einemilliardeeinhundertelfmillioneneinhundertelftausendeinhundertachtzehnte\")]\r\n    [InlineData(-751633619, \"minus siebenhunderteinundfünfzigmillionensechshundertdreiunddreissigtausendsechshundertneunzehnte\")]\r\n    public void ToOrdinalWordsFeminine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nulltes\")]\r\n    [InlineData(1, \"erstes\")]\r\n    [InlineData(2, \"zweites\")]\r\n    [InlineData(3, \"drittes\")]\r\n    [InlineData(4, \"viertes\")]\r\n    [InlineData(5, \"fünftes\")]\r\n    [InlineData(6, \"sechstes\")]\r\n    [InlineData(7, \"siebtes\")]\r\n    [InlineData(8, \"achtes\")]\r\n    [InlineData(9, \"neuntes\")]\r\n    [InlineData(10, \"zehntes\")]\r\n    [InlineData(111, \"einhundertelftes\")]\r\n    [InlineData(1112, \"eintausendeinhundertzwölftes\")]\r\n    [InlineData(11213, \"elftausendzweihundertdreizehntes\")]\r\n    [InlineData(121314, \"einhunderteinundzwanzigtausenddreihundertvierzehntes\")]\r\n    [InlineData(2132415, \"zweimillioneneinhundertzweiunddreissigtausendvierhundertfünfzehntes\")]\r\n    [InlineData(12345516, \"zwölfmillionendreihundertfünfundvierzigtausendfünfhundertsechzehntes\")]\r\n    [InlineData(751633617, \"siebenhunderteinundfünfzigmillionensechshundertdreiunddreissigtausendsechshundertsiebzehntes\")]\r\n    [InlineData(1111111118, \"einemilliardeeinhundertelfmillioneneinhundertelftausendeinhundertachtzehntes\")]\r\n    [InlineData(-751633619, \"minus siebenhunderteinundfünfzigmillionensechshundertdreiunddreissigtausendsechshundertneunzehntes\")]\r\n    public void ToOrdinalWordsNeuter(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Neuter));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/de-LI/NumberToWordsTests.cs",
    "content": "namespace deLI;\r\n\r\n[UseCulture(\"de-LI\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"null\")]\r\n    [InlineData(1, \"eins\")]\r\n    [InlineData(2, \"zwei\")]\r\n    [InlineData(3, \"drei\")]\r\n    [InlineData(4, \"vier\")]\r\n    [InlineData(5, \"fünf\")]\r\n    [InlineData(6, \"sechs\")]\r\n    [InlineData(7, \"sieben\")]\r\n    [InlineData(8, \"acht\")]\r\n    [InlineData(9, \"neun\")]\r\n    [InlineData(10, \"zehn\")]\r\n    [InlineData(20, \"zwanzig\")]\r\n    [InlineData(30, \"dreissig\")]\r\n    [InlineData(40, \"vierzig\")]\r\n    [InlineData(50, \"fünfzig\")]\r\n    [InlineData(60, \"sechzig\")]\r\n    [InlineData(70, \"siebzig\")]\r\n    [InlineData(80, \"achtzig\")]\r\n    [InlineData(90, \"neunzig\")]\r\n    [InlineData(100, \"einhundert\")]\r\n    [InlineData(200, \"zweihundert\")]\r\n    [InlineData(1000, \"eintausend\")]\r\n    [InlineData(10000, \"zehntausend\")]\r\n    [InlineData(100000, \"einhunderttausend\")]\r\n    [InlineData(1000000, \"eine Million\")]\r\n    [InlineData(10000000, \"zehn Millionen\")]\r\n    [InlineData(100000000, \"einhundert Millionen\")]\r\n    [InlineData(1000000000, \"eine Milliarde\")]\r\n    [InlineData(2000000000, \"zwei Milliarden\")]\r\n    [InlineData(122, \"einhundertzweiundzwanzig\")]\r\n    [InlineData(3501, \"dreitausendfünfhunderteins\")]\r\n    [InlineData(111, \"einhundertelf\")]\r\n    [InlineData(1112, \"eintausendeinhundertzwölf\")]\r\n    [InlineData(11213, \"elftausendzweihundertdreizehn\")]\r\n    [InlineData(121314, \"einhunderteinundzwanzigtausenddreihundertvierzehn\")]\r\n    [InlineData(2132415, \"zwei Millionen einhundertzweiunddreissigtausendvierhundertfünfzehn\")]\r\n    [InlineData(12345516, \"zwölf Millionen dreihundertfünfundvierzigtausendfünfhundertsechzehn\")]\r\n    [InlineData(751633617, \"siebenhunderteinundfünfzig Millionen sechshundertdreiunddreissigtausendsechshundertsiebzehn\")]\r\n    [InlineData(1111111118, \"eine Milliarde einhundertelf Millionen einhundertelftausendeinhundertachtzehn\")]\r\n    [InlineData(35484694489515, \"fünfunddreissig Billionen vierhundertvierundachtzig Milliarden sechshundertvierundneunzig Millionen vierhundertneunundachtzigtausendfünfhundertfünfzehn\")]\r\n    [InlineData(8183162164626926, \"acht Billiarden einhundertdreiundachtzig Billionen einhundertzweiundsechzig Milliarden einhundertvierundsechzig Millionen sechshundertsechsundzwanzigtausendneunhundertsechsundzwanzig\")]\r\n    [InlineData(4564121926659524672, \"vier Trillionen fünfhundertvierundsechzig Billiarden einhunderteinundzwanzig Billionen neunhundertsechsundzwanzig Milliarden sechshundertneunundfünfzig Millionen fünfhundertvierundzwanzigtausendsechshundertzweiundsiebzig\")]\r\n    [InlineData(-751633619, \"minus siebenhunderteinundfünfzig Millionen sechshundertdreiunddreissigtausendsechshundertneunzehn\")]\r\n    public void ToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"eine\")]\r\n    [InlineData(3501, \"dreitausendfünfhunderteine\")]\r\n    public void ToWordsFeminine(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nullter\")]\r\n    [InlineData(1, \"erster\")]\r\n    [InlineData(2, \"zweiter\")]\r\n    [InlineData(3, \"dritter\")]\r\n    [InlineData(4, \"vierter\")]\r\n    [InlineData(5, \"fünfter\")]\r\n    [InlineData(6, \"sechster\")]\r\n    [InlineData(7, \"siebter\")]\r\n    [InlineData(8, \"achter\")]\r\n    [InlineData(9, \"neunter\")]\r\n    [InlineData(10, \"zehnter\")]\r\n    [InlineData(20, \"zwanzigster\")]\r\n    [InlineData(30, \"dreissigster\")]\r\n    [InlineData(40, \"vierzigster\")]\r\n    [InlineData(50, \"fünfzigster\")]\r\n    [InlineData(60, \"sechzigster\")]\r\n    [InlineData(70, \"siebzigster\")]\r\n    [InlineData(80, \"achtzigster\")]\r\n    [InlineData(90, \"neunzigster\")]\r\n    [InlineData(100, \"einhundertster\")]\r\n    [InlineData(200, \"zweihundertster\")]\r\n    [InlineData(1000, \"eintausendster\")]\r\n    [InlineData(10000, \"zehntausendster\")]\r\n    [InlineData(100000, \"einhunderttausendster\")]\r\n    [InlineData(1000000, \"einmillionster\")]\r\n    [InlineData(10000000, \"zehnmillionster\")]\r\n    [InlineData(100000000, \"einhundertmillionster\")]\r\n    [InlineData(1000000000, \"einmilliardster\")]\r\n    [InlineData(2000000000, \"zweimilliardster\")]\r\n    [InlineData(122, \"einhundertzweiundzwanzigster\")]\r\n    [InlineData(3501, \"dreitausendfünfhunderterster\")]\r\n    [InlineData(111, \"einhundertelfter\")]\r\n    [InlineData(1112, \"eintausendeinhundertzwölfter\")]\r\n    [InlineData(11213, \"elftausendzweihundertdreizehnter\")]\r\n    [InlineData(121314, \"einhunderteinundzwanzigtausenddreihundertvierzehnter\")]\r\n    [InlineData(2132415, \"zweimillioneneinhundertzweiunddreissigtausendvierhundertfünfzehnter\")]\r\n    [InlineData(12345516, \"zwölfmillionendreihundertfünfundvierzigtausendfünfhundertsechzehnter\")]\r\n    [InlineData(751633617, \"siebenhunderteinundfünfzigmillionensechshundertdreiunddreissigtausendsechshundertsiebzehnter\")]\r\n    [InlineData(1111111118, \"einemilliardeeinhundertelfmillioneneinhundertelftausendeinhundertachtzehnter\")]\r\n    [InlineData(-751633619, \"minus siebenhunderteinundfünfzigmillionensechshundertdreiunddreissigtausendsechshundertneunzehnter\")]\r\n    public void ToOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nullte\")]\r\n    [InlineData(1, \"erste\")]\r\n    [InlineData(2, \"zweite\")]\r\n    [InlineData(3, \"dritte\")]\r\n    [InlineData(4, \"vierte\")]\r\n    [InlineData(5, \"fünfte\")]\r\n    [InlineData(6, \"sechste\")]\r\n    [InlineData(7, \"siebte\")]\r\n    [InlineData(8, \"achte\")]\r\n    [InlineData(9, \"neunte\")]\r\n    [InlineData(10, \"zehnte\")]\r\n    [InlineData(111, \"einhundertelfte\")]\r\n    [InlineData(1112, \"eintausendeinhundertzwölfte\")]\r\n    [InlineData(11213, \"elftausendzweihundertdreizehnte\")]\r\n    [InlineData(121314, \"einhunderteinundzwanzigtausenddreihundertvierzehnte\")]\r\n    [InlineData(2132415, \"zweimillioneneinhundertzweiunddreissigtausendvierhundertfünfzehnte\")]\r\n    [InlineData(12345516, \"zwölfmillionendreihundertfünfundvierzigtausendfünfhundertsechzehnte\")]\r\n    [InlineData(751633617, \"siebenhunderteinundfünfzigmillionensechshundertdreiunddreissigtausendsechshundertsiebzehnte\")]\r\n    [InlineData(1111111118, \"einemilliardeeinhundertelfmillioneneinhundertelftausendeinhundertachtzehnte\")]\r\n    [InlineData(-751633619, \"minus siebenhunderteinundfünfzigmillionensechshundertdreiunddreissigtausendsechshundertneunzehnte\")]\r\n    public void ToOrdinalWordsFeminine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nulltes\")]\r\n    [InlineData(1, \"erstes\")]\r\n    [InlineData(2, \"zweites\")]\r\n    [InlineData(3, \"drittes\")]\r\n    [InlineData(4, \"viertes\")]\r\n    [InlineData(5, \"fünftes\")]\r\n    [InlineData(6, \"sechstes\")]\r\n    [InlineData(7, \"siebtes\")]\r\n    [InlineData(8, \"achtes\")]\r\n    [InlineData(9, \"neuntes\")]\r\n    [InlineData(10, \"zehntes\")]\r\n    [InlineData(111, \"einhundertelftes\")]\r\n    [InlineData(1112, \"eintausendeinhundertzwölftes\")]\r\n    [InlineData(11213, \"elftausendzweihundertdreizehntes\")]\r\n    [InlineData(121314, \"einhunderteinundzwanzigtausenddreihundertvierzehntes\")]\r\n    [InlineData(2132415, \"zweimillioneneinhundertzweiunddreissigtausendvierhundertfünfzehntes\")]\r\n    [InlineData(12345516, \"zwölfmillionendreihundertfünfundvierzigtausendfünfhundertsechzehntes\")]\r\n    [InlineData(751633617, \"siebenhunderteinundfünfzigmillionensechshundertdreiunddreissigtausendsechshundertsiebzehntes\")]\r\n    [InlineData(1111111118, \"einemilliardeeinhundertelfmillioneneinhundertelftausendeinhundertachtzehntes\")]\r\n    [InlineData(-751633619, \"minus siebenhunderteinundfünfzigmillionensechshundertdreiunddreissigtausendsechshundertneunzehntes\")]\r\n    public void ToOrdinalWordsNeuter(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Neuter));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/el/DateHumanizeTests.cs",
    "content": "﻿namespace el;\r\n\r\n[UseCulture(\"el\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(-2, \"πριν από 2 ημέρες\")]\r\n    [InlineData(-1, \"χθες\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 ημέρες από τώρα\")]\r\n    [InlineData(1, \"αύριο\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"πριν από 2 ώρες\")]\r\n    [InlineData(-1, \"πριν από μία ώρα\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 ώρες από τώρα\")]\r\n    [InlineData(1, \"πρίν από μία ώρα από τώρα\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"πριν από 2 λεπτά\")]\r\n    [InlineData(-1, \"πριν από ένα λεπτό\")]\r\n    [InlineData(60, \"πριν από μία ώρα\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 λεπτά από τώρα\")]\r\n    [InlineData(1, \"πρίν από ένα λεπτό από τώρα\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"πριν από 2 μήνες\")]\r\n    [InlineData(-1, \"πριν από έναν μήνα\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 μήνες από τώρα\")]\r\n    [InlineData(1, \"πριν από έναν μήνα από τώρα\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"πριν από 2 δευτερόλεπτα\")]\r\n    [InlineData(-1, \"πριν από ένα δευτερόλεπτο\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 δευτερόλεπτα από τώρα\")]\r\n    [InlineData(1, \"πριν από ένα δευτερόλεπτο από τώρα\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"πριν από 2 χρόνια\")]\r\n    [InlineData(-1, \"πριν από έναν χρόνο\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 χρόνια από τώρα\")]\r\n    [InlineData(1, \"πριν από έναν χρόνο από τώρα\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/el/NumberToOrdinalWordsTests.cs",
    "content": "﻿namespace el;\r\n\r\n[UseCulture(\"el\")]\r\npublic class NumberToOrdinalWordsTests\r\n{\r\n    [InlineData(-1, \"\")]\r\n    [InlineData(0, \"\")]\r\n    [InlineData(1, \"πρώτος\")]\r\n    [InlineData(10, \"δέκατος\")]\r\n    [InlineData(11, \"ενδέκατος\")]\r\n    [InlineData(12, \"δωδέκατος\")]\r\n    [InlineData(20, \"εικοστός\")]\r\n    [InlineData(31, \"τριακοστός πρώτος\")]\r\n    [InlineData(100, \"εκατοστός\")]\r\n    [InlineData(105, \"εκατοστός πέμπτος\")]\r\n    [InlineData(286, \"διακοσιοστός ογδοηκοστός έκτος\")]\r\n    [InlineData(530, \"πεντακοσιοστός τριακοστός\")]\r\n    [InlineData(912, \"εννιακοσιοστός δωδέκατος\")]\r\n    [InlineData(1203, \"χιλιοστός διακοσιοστός τρίτος\")]\r\n    [InlineData(1596, \"χιλιοστός πεντακοσιοστός ενενηκοστός έκτος\")]\r\n    [InlineData(1061, \"χιλιοστός εξηκοστός πρώτος\")]\r\n    [InlineData(1008, \"χιλιοστός όγδοος\")]\r\n    [InlineData(1211, \"χιλιοστός διακοσιοστός ενδέκατος\")]\r\n    [InlineData(1999, \"χιλιοστός εννιακοσιοστός ενενηκοστός ένατος\")]\r\n    [InlineData(2000, \"\")]\r\n\r\n    [Theory]\r\n    public void ToOrdinalWordsInt(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/el/NumberToWordsTests.cs",
    "content": "﻿namespace el;\r\n\r\n[UseCulture(\"el\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [InlineData(1, \"ένα\")]\r\n    [InlineData(10, \"δέκα\")]\r\n    [InlineData(11, \"έντεκα\")]\r\n    [InlineData(14, \"δεκατέσσερα\")]\r\n    [InlineData(20, \"είκοσι\")]\r\n    [InlineData(122, \"εκατόν είκοσι δύο\")]\r\n    [InlineData(3501, \"τρείς χιλιάδες πεντακόσια ένα\")]\r\n    [InlineData(100, \"εκατό\")]\r\n    [InlineData(1000, \"χίλια\")]\r\n    [InlineData(100000, \"εκατό χιλιάδες\")]\r\n    [InlineData(13448, \"δεκατρείς χιλιάδες τετρακόσια σαράντα οκτώ\")]\r\n    [InlineData(53, \"πενήντα τρία\")]\r\n    [InlineData(123647, \"εκατόν είκοσι τρείς χιλιάδες εξακόσια σαράντα επτά\")]\r\n    [InlineData(14000000, \"δεκατέσσερα εκατομμύρια\")]\r\n    [InlineData(578412, \"πεντακόσιες εβδομήντα οκτώ χιλιάδες τετρακόσια δώδεκα\")]\r\n    [InlineData(1000000000, \"ένα δισεκατομμύριο\")]\r\n    [InlineData(1000000001, \"ένα δισεκατομμύριο ένα\")]\r\n    [InlineData(1469, \"χίλια τετρακόσια εξήντα εννέα\")]\r\n    [InlineData(69, \"εξήντα εννέα\")]\r\n    [InlineData(619, \"εξακόσια δεκαεννέα\")]\r\n    [InlineData(1190, \"χίλια εκατόν ενενήντα\")]\r\n\r\n    [Theory]\r\n    public void ToWordsInt(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/el/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace el;\r\n\r\n[UseCulture(\"el\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"1 χρόνο\")]\r\n    [InlineData(731, \"2 χρόνια\")]\r\n    [InlineData(1096, \"3 χρόνια\")]\r\n    [InlineData(4018, \"11 χρόνια\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"1 μήνα\")]\r\n    [InlineData(61, \"2 μήνες\")]\r\n    [InlineData(92, \"3 μήνες\")]\r\n    [InlineData(335, \"11 μήνες\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 βδομάδα\")]\r\n    [InlineData(14, \"2 βδομάδες\")]\r\n    [InlineData(21, \"3 βδομάδες\")]\r\n    [InlineData(77, \"11 βδομάδες\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 μέρα\")]\r\n    [InlineData(2, \"2 μέρες\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 ώρα\")]\r\n    [InlineData(2, \"2 ώρες\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 λεπτό\")]\r\n    [InlineData(2, \"2 λεπτά\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 δευτερόλεπτο\")]\r\n    [InlineData(2, \"2 δευτερόλεπτα\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 χιλιοσtό του δευτερολέπτου\")]\r\n    [InlineData(2, \"2 χιλιοστά του δευτερολέπτου\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 χιλιοστά του δευτερολέπτου\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"μηδέν χρόνος\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/en/DateToOrdinalWordsTests.cs",
    "content": "﻿namespace en;\r\n\r\npublic class DateToOrdinalWordsTests\r\n{\r\n    [UseCulture(\"en-GB\")]\r\n    [Fact]\r\n    public void OrdinalizeStringGb() =>\r\n        Assert.Equal(\"1st January 2015\", new DateTime(2015, 1, 1).ToOrdinalWords());\r\n\r\n    [UseCulture(\"en-US\")]\r\n    [Fact]\r\n    public void OrdinalizeStringUs() =>\r\n        Assert.Equal(\"January 1st, 2015\", new DateTime(2015, 1, 1).ToOrdinalWords());\r\n\r\n#if NET6_0_OR_GREATER\r\n    [UseCulture(\"en-GB\")]\r\n    [Fact]\r\n    public void OrdinalizeDateOnlyStringGb() =>\r\n        Assert.Equal(\"1st January 2015\", new DateOnly(2015, 1, 1).ToOrdinalWords());\r\n\r\n    [UseCulture(\"en-US\")]\r\n    [Fact]\r\n    public void OrdinalizeDateOnlyStringUs() =>\r\n        Assert.Equal(\"January 1st, 2015\", new DateOnly(2015, 1, 1).ToOrdinalWords());\r\n#endif\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/en/TimeToClockNotationTests.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace en;\r\n\r\n[UseCulture(\"en\")]\r\npublic class TimeToClockNotationTests\r\n{\r\n    [Theory]\r\n    [InlineData(00, 00, \"midnight\")]\r\n    [InlineData(04, 00, \"four o'clock\")]\r\n    [InlineData(05, 01, \"five one\")]\r\n    [InlineData(06, 05, \"five past six\")]\r\n    [InlineData(07, 10, \"ten past seven\")]\r\n    [InlineData(08, 15, \"a quarter past eight\")]\r\n    [InlineData(09, 20, \"twenty past nine\")]\r\n    [InlineData(10, 25, \"twenty-five past ten\")]\r\n    [InlineData(11, 30, \"half past eleven\")]\r\n    [InlineData(12, 00, \"noon\")]\r\n    [InlineData(15, 35, \"three thirty-five\")]\r\n    [InlineData(16, 40, \"twenty to five\")]\r\n    [InlineData(17, 45, \"a quarter to six\")]\r\n    [InlineData(18, 50, \"ten to seven\")]\r\n    [InlineData(19, 55, \"five to eight\")]\r\n    [InlineData(20, 59, \"eight fifty-nine\")]\r\n    public void ConvertToClockNotationTimeOnlyStringEnUs(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation();\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(00, 00, \"midnight\")]\r\n    [InlineData(04, 00, \"four o'clock\")]\r\n    [InlineData(05, 01, \"five o'clock\")]\r\n    [InlineData(06, 05, \"five past six\")]\r\n    [InlineData(07, 10, \"ten past seven\")]\r\n    [InlineData(08, 15, \"a quarter past eight\")]\r\n    [InlineData(09, 20, \"twenty past nine\")]\r\n    [InlineData(10, 25, \"twenty-five past ten\")]\r\n    [InlineData(11, 30, \"half past eleven\")]\r\n    [InlineData(12, 00, \"noon\")]\r\n    [InlineData(13, 23, \"twenty-five past one\")]\r\n    [InlineData(14, 32, \"half past two\")]\r\n    [InlineData(15, 35, \"three thirty-five\")]\r\n    [InlineData(16, 40, \"twenty to five\")]\r\n    [InlineData(17, 45, \"a quarter to six\")]\r\n    [InlineData(18, 50, \"ten to seven\")]\r\n    [InlineData(19, 55, \"five to eight\")]\r\n    [InlineData(20, 59, \"nine o'clock\")]\r\n    public void ConvertToRoundedClockNotationTimeOnlyStringEnUs(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes);\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/en-IN/NumberToWordsTests.cs",
    "content": "﻿namespace enIN;\r\n\r\n[UseCulture(\"en-IN\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"\")]\r\n    [InlineData(1, \"one\")]\r\n    [InlineData(10, \"ten\")]\r\n    [InlineData(11, \"eleven\")]\r\n    [InlineData(20, \"twenty\")]\r\n    [InlineData(122, \"one hundred and twenty two\")]\r\n    [InlineData(3501, \"three thousand five hundred and one\")]\r\n    [InlineData(100, \"one hundred\")]\r\n    [InlineData(1000, \"one thousand\")]\r\n    [InlineData(1001, \"one thousand one\")]\r\n    [InlineData(100000, \"one lakh\")]\r\n    [InlineData(1000000, \"ten lakh\")]\r\n    [InlineData(10000000, \"one crore\")]\r\n    [InlineData(100000000, \"ten crore\")]\r\n    [InlineData(1000000000, \"one hundred crore\")]\r\n    [InlineData(111, \"one hundred and eleven\")]\r\n    [InlineData(1111, \"one thousand one hundred and eleven\")]\r\n    [InlineData(111111, \"one lakh eleven thousand one hundred and eleven\")]\r\n    [InlineData(1111111, \"eleven lakh eleven thousand one hundred and eleven\")]\r\n    [InlineData(11111111, \"one crore eleven lakh eleven thousand one hundred and eleven\")]\r\n    [InlineData(111111111, \"eleven crore eleven lakh eleven thousand one hundred and eleven\")]\r\n    [InlineData(1111111111, \"one hundred and eleven crore eleven lakh eleven thousand one hundred and eleven\")]\r\n    [InlineData(101, \"one hundred and one\")]\r\n    [InlineData(1011, \"one thousand eleven\")]\r\n    [InlineData(100011, \"one lakh eleven\")]\r\n    [InlineData(1100001, \"eleven lakh one\")]\r\n    [InlineData(11000011, \"one crore ten lakh eleven\")]\r\n    [InlineData(110000011, \"eleven crore eleven\")]\r\n    [InlineData(1100000111, \"one hundred and ten crore one hundred and eleven\")]\r\n    [InlineData(123, \"one hundred and twenty three\")]\r\n    [InlineData(1234, \"one thousand two hundred and thirty four\")]\r\n    [InlineData(12345, \"twelve thousand three hundred and forty five\")]\r\n    [InlineData(123456, \"one lakh twenty three thousand four hundred and fifty six\")]\r\n    [InlineData(1234567, \"twelve lakh thirty four thousand five hundred and sixty seven\")]\r\n    [InlineData(12345678, \"one crore twenty three lakh forty five thousand six hundred and seventy eight\")]\r\n    [InlineData(123456789, \"twelve crore thirty four lakh fifty six thousand seven hundred and eighty nine\")]\r\n    [InlineData(1234567890, \"one hundred and twenty three crore forty five lakh sixty seven thousand eight hundred and ninety\")]\r\n    [InlineData(1000000000000, \"one lakh crore\")]\r\n    [InlineData(45678912345678, \"forty five lakh sixty seven thousand eight hundred and ninety one crore twenty three lakh forty five thousand six hundred and seventy eight\")]\r\n    [InlineData(-7516, \"(Negative) seven thousand five hundred and sixteen\")]\r\n\r\n    public void ToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"one\")]\r\n    [InlineData(3501, \"three thousand five hundred and one\")]\r\n    public void ToWordsFeminine(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/es/DateHumanizeTests.cs",
    "content": "﻿namespace es;\r\n\r\n[UseCulture(\"es-ES\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"hace un segundo\")]\r\n    [InlineData(2, \"hace 2 segundos\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en un segundo\")]\r\n    [InlineData(2, \"en 2 segundos\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"hace un minuto\")]\r\n    [InlineData(2, \"hace 2 minutos\")]\r\n    [InlineData(60, \"hace una hora\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en un minuto\")]\r\n    [InlineData(2, \"en 2 minutos\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"hace una hora\")]\r\n    [InlineData(2, \"hace 2 horas\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en una hora\")]\r\n    [InlineData(2, \"en 2 horas\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ayer\")]\r\n    [InlineData(2, \"hace 2 días\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"mañana\")]\r\n    [InlineData(2, \"en 2 días\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"hace un mes\")]\r\n    [InlineData(2, \"hace 2 meses\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en un mes\")]\r\n    [InlineData(2, \"en 2 meses\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"hace un año\")]\r\n    [InlineData(2, \"hace 2 años\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en un año\")]\r\n    [InlineData(2, \"en 2 años\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/es/DateToOrdinalWordsTests.cs",
    "content": "﻿namespace es;\r\n\r\n[UseCulture(\"es-ES\")]\r\npublic class DateToOrdinalWordsTests\r\n{\r\n    [Fact]\r\n    public void OrdinalizeString()\r\n    {\r\n        Assert.Equal(\"25 de enero de 2022\", new DateTime(2022, 1, 25).ToOrdinalWords());\r\n        Assert.Equal(\"29 de febrero de 2020\", new DateTime(2020, 2, 29).ToOrdinalWords());\r\n        Assert.Equal(\"4 de septiembre de 2015\", new DateTime(2015, 9, 4).ToOrdinalWords());\r\n        Assert.Equal(\"7 de noviembre de 1979\", new DateTime(1979, 11, 7).ToOrdinalWords());\r\n    }\r\n\r\n#if NET6_0_OR_GREATER\r\n    [Fact]\r\n    public void OrdinalizeDateOnlyString()\r\n    {\r\n        Assert.Equal(\"25 de enero de 2022\", new DateOnly(2022, 1, 25).ToOrdinalWords());\r\n        Assert.Equal(\"29 de febrero de 2020\", new DateOnly(2020, 2, 29).ToOrdinalWords());\r\n        Assert.Equal(\"4 de septiembre de 2015\", new DateOnly(2015, 9, 4).ToOrdinalWords());\r\n        Assert.Equal(\"7 de noviembre de 1979\", new DateOnly(1979, 11, 7).ToOrdinalWords());\r\n    }\r\n#endif\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/es/NumberToWordsFeminineTest.cs",
    "content": "﻿namespace es;\r\n\r\n[UseCulture(\"es-ES\")]\r\npublic class NumberToWordsFeminineTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"una\")]\r\n    [InlineData(21, \"veintiuna\")]\r\n    [InlineData(31, \"treinta y una\")]\r\n    [InlineData(81, \"ochenta y una\")]\r\n    [InlineData(500, \"quinientas\")]\r\n    [InlineData(701, \"setecientas una\")]\r\n    [InlineData(3500, \"tres mil quinientas\")]\r\n    [InlineData(200121, \"doscientas mil ciento veintiuna\")]\r\n    [InlineData(200000121, \"doscientos millones ciento veintiuna\")]\r\n    [InlineData(1000001, \"un millón una\")]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/es/NumberToWordsTests.cs",
    "content": "﻿namespace es;\r\n\r\n[UseCulture(\"es-ES\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(-1, \"primero\", GrammaticalGender.Neuter)]\r\n    [InlineData(0, \"cero\", GrammaticalGender.Neuter)]\r\n    [InlineData(1, \"primero\", GrammaticalGender.Neuter)]\r\n    [InlineData(1, \"primero\", GrammaticalGender.Masculine)]\r\n    [InlineData(1, \"primera\", GrammaticalGender.Feminine)]\r\n    [InlineData(2, \"segundo\", GrammaticalGender.Masculine)]\r\n    [InlineData(2, \"segunda\", GrammaticalGender.Feminine)]\r\n    [InlineData(3, \"tercero\", GrammaticalGender.Neuter)]\r\n    [InlineData(3, \"tercero\", GrammaticalGender.Masculine)]\r\n    [InlineData(3, \"tercera\", GrammaticalGender.Feminine)]\r\n    [InlineData(4, \"cuarto\", GrammaticalGender.Masculine)]\r\n    [InlineData(4, \"cuarta\", GrammaticalGender.Feminine)]\r\n    [InlineData(5, \"quinto\", GrammaticalGender.Masculine)]\r\n    [InlineData(5, \"quinta\", GrammaticalGender.Feminine)]\r\n    [InlineData(6, \"sexto\", GrammaticalGender.Masculine)]\r\n    [InlineData(6, \"sexta\", GrammaticalGender.Feminine)]\r\n    [InlineData(7, \"séptimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(7, \"séptima\", GrammaticalGender.Feminine)]\r\n    [InlineData(8, \"octavo\", GrammaticalGender.Masculine)]\r\n    [InlineData(8, \"octava\", GrammaticalGender.Feminine)]\r\n    [InlineData(9, \"noveno\", GrammaticalGender.Masculine)]\r\n    [InlineData(9, \"novena\", GrammaticalGender.Feminine)]\r\n    [InlineData(10, \"décimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(10, \"décima\", GrammaticalGender.Feminine)]\r\n    [InlineData(11, \"décimo primero\", GrammaticalGender.Masculine)]\r\n    [InlineData(11, \"décima primera\", GrammaticalGender.Feminine)]\r\n    [InlineData(20, \"vigésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(20, \"vigésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(22, \"vigésimo segundo\", GrammaticalGender.Masculine)]\r\n    [InlineData(22, \"vigésima segunda\", GrammaticalGender.Feminine)]\r\n    [InlineData(30, \"trigésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(30, \"trigésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(34, \"trigésimo cuarto\", GrammaticalGender.Masculine)]\r\n    [InlineData(34, \"trigésima cuarta\", GrammaticalGender.Feminine)]\r\n    [InlineData(40, \"cuadragésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(40, \"cuadragésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(46, \"cuadragésimo sexto\", GrammaticalGender.Masculine)]\r\n    [InlineData(46, \"cuadragésima sexta\", GrammaticalGender.Feminine)]\r\n    [InlineData(50, \"quincuagésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(50, \"quincuagésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(57, \"quincuagésimo séptimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(57, \"quincuagésima séptima\", GrammaticalGender.Feminine)]\r\n    [InlineData(60, \"sexagésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(60, \"sexagésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(69, \"sexagésimo noveno\", GrammaticalGender.Masculine)]\r\n    [InlineData(69, \"sexagésima novena\", GrammaticalGender.Feminine)]\r\n    [InlineData(70, \"septuagésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(70, \"septuagésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(74, \"septuagésimo cuarto\", GrammaticalGender.Masculine)]\r\n    [InlineData(74, \"septuagésima cuarta\", GrammaticalGender.Feminine)]\r\n    [InlineData(80, \"octogésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(80, \"octogésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(85, \"octogésimo quinto\", GrammaticalGender.Masculine)]\r\n    [InlineData(85, \"octogésima quinta\", GrammaticalGender.Feminine)]\r\n    [InlineData(90, \"nonagésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(90, \"nonagésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(99, \"nonagésimo noveno\", GrammaticalGender.Masculine)]\r\n    [InlineData(99, \"nonagésima novena\", GrammaticalGender.Feminine)]\r\n    [InlineData(100, \"centésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(100, \"centésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(101, \"centésimo primero\", GrammaticalGender.Masculine)]\r\n    [InlineData(101, \"centésima primera\", GrammaticalGender.Feminine)]\r\n    [InlineData(131, \"centésimo trigésimo primero\", GrammaticalGender.Masculine)]\r\n    [InlineData(131, \"centésima trigésima primera\", GrammaticalGender.Feminine)]\r\n    [InlineData(156, \"centésimo quincuagésimo sexto\", GrammaticalGender.Masculine)]\r\n    [InlineData(156, \"centésima quincuagésima sexta\", GrammaticalGender.Feminine)]\r\n    [InlineData(214, \"ducentésimo décimo cuarto\", GrammaticalGender.Masculine)]\r\n    [InlineData(214, \"ducentésima décima cuarta\", GrammaticalGender.Feminine)]\r\n    [InlineData(330, \"tricentésimo trigésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(330, \"tricentésima trigésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(334, \"tricentésimo trigésimo cuarto\", GrammaticalGender.Masculine)]\r\n    [InlineData(334, \"tricentésima trigésima cuarta\", GrammaticalGender.Feminine)]\r\n    [InlineData(400, \"cuadringentésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(400, \"cuadringentésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(407, \"cuadringentésimo séptimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(407, \"cuadringentésima séptima\", GrammaticalGender.Feminine)]\r\n    [InlineData(476, \"cuadringentésimo septuagésimo sexto\", GrammaticalGender.Masculine)]\r\n    [InlineData(476, \"cuadringentésima septuagésima sexta\", GrammaticalGender.Feminine)]\r\n    [InlineData(500, \"quingentésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(500, \"quingentésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(509, \"quingentésimo noveno\", GrammaticalGender.Masculine)]\r\n    [InlineData(509, \"quingentésima novena\", GrammaticalGender.Feminine)]\r\n    [InlineData(549, \"quingentésimo cuadragésimo noveno\", GrammaticalGender.Masculine)]\r\n    [InlineData(549, \"quingentésima cuadragésima novena\", GrammaticalGender.Feminine)]\r\n    [InlineData(600, \"sexcentésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(600, \"sexcentésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(605, \"sexcentésimo quinto\", GrammaticalGender.Masculine)]\r\n    [InlineData(605, \"sexcentésima quinta\", GrammaticalGender.Feminine)]\r\n    [InlineData(670, \"sexcentésimo septuagésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(670, \"sexcentésima septuagésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(692, \"sexcentésimo nonagésimo segundo\", GrammaticalGender.Masculine)]\r\n    [InlineData(692, \"sexcentésima nonagésima segunda\", GrammaticalGender.Feminine)]\r\n    [InlineData(700, \"septingentésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(700, \"septingentésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(771, \"septingentésimo septuagésimo primero\", GrammaticalGender.Masculine)]\r\n    [InlineData(771, \"septingentésima septuagésima primera\", GrammaticalGender.Feminine)]\r\n    [InlineData(800, \"octingentésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(800, \"octingentésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(849, \"octingentésimo cuadragésimo noveno\", GrammaticalGender.Masculine)]\r\n    [InlineData(849, \"octingentésima cuadragésima novena\", GrammaticalGender.Feminine)]\r\n    [InlineData(900, \"noningentésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(900, \"noningentésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(921, \"noningentésimo vigésimo primero\", GrammaticalGender.Masculine)]\r\n    [InlineData(921, \"noningentésima vigésima primera\", GrammaticalGender.Feminine)]\r\n    [InlineData(1000, \"milésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(1000, \"milésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(1006, \"milésimo sexto\", GrammaticalGender.Masculine)]\r\n    [InlineData(1006, \"milésima sexta\", GrammaticalGender.Feminine)]\r\n    [InlineData(1108, \"milésimo centésimo octavo\", GrammaticalGender.Masculine)]\r\n    [InlineData(1108, \"milésima centésima octava\", GrammaticalGender.Feminine)]\r\n    [InlineData(1323, \"milésimo tricentésimo vigésimo tercero\", GrammaticalGender.Masculine)]\r\n    [InlineData(1323, \"milésima tricentésima vigésima tercera\", GrammaticalGender.Feminine)]\r\n    [InlineData(2000, \"dosmilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(2000, \"dosmilésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(2164, \"dosmilésimo centésimo sexagésimo cuarto\", GrammaticalGender.Masculine)]\r\n    [InlineData(2164, \"dosmilésima centésima sexagésima cuarta\", GrammaticalGender.Feminine)]\r\n    [InlineData(2915, \"dosmilésimo noningentésimo décimo quinto\", GrammaticalGender.Masculine)]\r\n    [InlineData(2915, \"dosmilésima noningentésima décima quinta\", GrammaticalGender.Feminine)]\r\n    [InlineData(3000, \"tresmilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(3000, \"tresmilésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(3456, \"tresmilésimo cuadringentésimo quincuagésimo sexto\", GrammaticalGender.Masculine)]\r\n    [InlineData(3456, \"tresmilésima cuadringentésima quincuagésima sexta\", GrammaticalGender.Feminine)]\r\n    [InlineData(4000, \"cuatromilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(4000, \"cuatromilésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(4354, \"cuatromilésimo tricentésimo quincuagésimo cuarto\", GrammaticalGender.Masculine)]\r\n    [InlineData(4354, \"cuatromilésima tricentésima quincuagésima cuarta\", GrammaticalGender.Feminine)]\r\n    [InlineData(5000, \"cincomilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(5000, \"cincomilésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(5695, \"cincomilésimo sexcentésimo nonagésimo quinto\", GrammaticalGender.Masculine)]\r\n    [InlineData(5695, \"cincomilésima sexcentésima nonagésima quinta\", GrammaticalGender.Feminine)]\r\n    [InlineData(6000, \"seismilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(6000, \"seismilésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(6642, \"seismilésimo sexcentésimo cuadragésimo segundo\", GrammaticalGender.Masculine)]\r\n    [InlineData(6642, \"seismilésima sexcentésima cuadragésima segunda\", GrammaticalGender.Feminine)]\r\n    [InlineData(7000, \"sietemilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(7000, \"sietemilésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(7676, \"sietemilésimo sexcentésimo septuagésimo sexto\", GrammaticalGender.Masculine)]\r\n    [InlineData(7676, \"sietemilésima sexcentésima septuagésima sexta\", GrammaticalGender.Feminine)]\r\n    [InlineData(8000, \"ochomilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(8000, \"ochomilésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(8431, \"ochomilésimo cuadringentésimo trigésimo primero\", GrammaticalGender.Masculine)]\r\n    [InlineData(8431, \"ochomilésima cuadringentésima trigésima primera\", GrammaticalGender.Feminine)]\r\n    [InlineData(9000, \"nuevemilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(9000, \"nuevemilésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(9620, \"nuevemilésimo sexcentésimo vigésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(9620, \"nuevemilésima sexcentésima vigésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(9999, \"nuevemilésimo noningentésimo nonagésimo noveno\", GrammaticalGender.Masculine)]\r\n    [InlineData(9999, \"nuevemilésima noningentésima nonagésima novena\", GrammaticalGender.Feminine)]\r\n    [InlineData(10000, \"diezmilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(10000, \"diezmilésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(11000, \"oncemilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(11000, \"oncemilésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(20000, \"veintemilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(21000, \"veintiunmilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(21000, \"veintiunmilésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(30000, \"treintamilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(31000, \"treinta y un milésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(31000, \"treinta y una milésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(84301, \"ochenta y cuatro milésimo tricentésimo primero\", GrammaticalGender.Masculine)]\r\n    [InlineData(84301, \"ochenta y cuatro milésima tricentésima primera\", GrammaticalGender.Feminine)]\r\n    [InlineData(99999, \"noventa y nueve milésimo noningentésimo nonagésimo noveno\", GrammaticalGender.Masculine)]\r\n    [InlineData(99999, \"noventa y nueve milésima noningentésima nonagésima novena\", GrammaticalGender.Feminine)]\r\n    [InlineData(100000, \"cienmilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(100000, \"cienmilésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(200000, \"doscientosmilésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(200000, \"doscientasmilésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(380000, \"trescientos ochenta milésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(380000, \"trescientas ochenta milésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(850000, \"ochocientos cincuenta milésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(850000, \"ochocientas cincuenta milésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(214748, \"doscientos catorce milésimo septingentésimo cuadragésimo octavo\", GrammaticalGender.Masculine)]\r\n    [InlineData(214748, \"doscientas catorce milésima septingentésima cuadragésima octava\", GrammaticalGender.Feminine)]\r\n    [InlineData(221221, \"doscientos veintiún milésimo ducentésimo vigésimo primero\", GrammaticalGender.Masculine)]\r\n    [InlineData(221221, \"doscientas veintiuna milésima ducentésima vigésima primera\", GrammaticalGender.Feminine)]\r\n    [InlineData(1000000, \"millonésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(1000000, \"millonésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(2000000, \"dosmillonésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(2000000, \"dosmillonésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(1001000, \"un millón milésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(1221000, \"un millón doscientos veintiún milésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(1221000, \"un millón doscientas veintiuna milésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(1500000, \"un millón quinientos milésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(1500000, \"un millón quinientas milésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(10000000, \"diezmillonésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(10000000, \"diezmillonésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(15000000, \"quincemillonésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(15000000, \"quincemillonésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(21000000, \"veintiunmillonésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(21000000, \"veintiunmillonésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(31000000, \"treinta y un millonésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(31000000, \"treinta y una millonésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(50000000, \"cincuentamillonésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(50000000, \"cincuentamillonésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(100000000, \"cienmillonésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(100000000, \"cienmillonésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(150000000, \"ciento cincuenta millonésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(150000000, \"ciento cincuenta millonésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(500000000, \"quinientosmillonésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(500000000, \"quinientasmillonésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(1000000000, \"milmillonésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(1000000000, \"milmillonésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(1001000000, \"mil un millonésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(1001000000, \"mil una millonésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(1500000000, \"mil quinientos millonésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(1500000000, \"mil quinientas millonésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(2000000000, \"dos mil millonésimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(2000000000, \"dos mil millonésima\", GrammaticalGender.Feminine)]\r\n    [InlineData(2147483647, \"dos mil ciento cuarenta y siete millones cuatrocientos ochenta y tres milésimo sexcentésimo cuadragésimo séptimo\", GrammaticalGender.Masculine)]\r\n    [InlineData(2147483647, \"dos mil ciento cuarenta y siete millones cuatrocientas ochenta y tres milésima sexcentésima cuadragésima séptima\", GrammaticalGender.Feminine)]\r\n    public void ToOrdinalWords(int number, string words, GrammaticalGender gender) =>\r\n        Assert.Equal(words, number.ToOrdinalWords(gender));\r\n\r\n    [Theory]\r\n    [InlineData(1, WordForm.Normal, \"primero\")]\r\n    [InlineData(1, WordForm.Abbreviation, \"primer\")]\r\n    [InlineData(2, WordForm.Normal, \"segundo\")]\r\n    [InlineData(2, WordForm.Abbreviation, \"segundo\")]\r\n    [InlineData(3, WordForm.Normal, \"tercero\")]\r\n    [InlineData(3, WordForm.Abbreviation, \"tercer\")]\r\n    [InlineData(21, WordForm.Normal, \"vigésimo primero\")]\r\n    [InlineData(21, WordForm.Abbreviation, \"vigésimo primer\")]\r\n    [InlineData(43, WordForm.Normal, \"cuadragésimo tercero\")]\r\n    [InlineData(43, WordForm.Abbreviation, \"cuadragésimo tercer\")]\r\n    public void ToOrdinalWordsWithWordForm(int number, WordForm wordForm, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(wordForm));\r\n\r\n    [Theory]\r\n    [InlineData(1, WordForm.Normal, GrammaticalGender.Masculine, \"primero\")]\r\n    [InlineData(1, WordForm.Abbreviation, GrammaticalGender.Masculine, \"primer\")]\r\n    [InlineData(1, WordForm.Abbreviation, GrammaticalGender.Feminine, \"primera\")]\r\n    [InlineData(2, WordForm.Normal, GrammaticalGender.Masculine, \"segundo\")]\r\n    [InlineData(2, WordForm.Abbreviation, GrammaticalGender.Masculine, \"segundo\")]\r\n    [InlineData(2, WordForm.Abbreviation, GrammaticalGender.Feminine, \"segunda\")]\r\n    [InlineData(3, WordForm.Normal, GrammaticalGender.Masculine, \"tercero\")]\r\n    [InlineData(3, WordForm.Abbreviation, GrammaticalGender.Masculine, \"tercer\")]\r\n    [InlineData(3, WordForm.Abbreviation, GrammaticalGender.Feminine, \"tercera\")]\r\n    [InlineData(21, WordForm.Normal, GrammaticalGender.Masculine, \"vigésimo primero\")]\r\n    [InlineData(21, WordForm.Abbreviation, GrammaticalGender.Masculine, \"vigésimo primer\")]\r\n    [InlineData(21, WordForm.Abbreviation, GrammaticalGender.Feminine, \"vigésima primera\")]\r\n    [InlineData(43, WordForm.Normal, GrammaticalGender.Masculine, \"cuadragésimo tercero\")]\r\n    [InlineData(43, WordForm.Abbreviation, GrammaticalGender.Masculine, \"cuadragésimo tercer\")]\r\n    [InlineData(43, WordForm.Abbreviation, GrammaticalGender.Feminine, \"cuadragésima tercera\")]\r\n    public void ToOrdinalWordsWithWordFormAndGender(int number, WordForm wordForm, GrammaticalGender gender, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(gender, wordForm));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"cero veces\")]\r\n    [InlineData(2, \"doble\")]\r\n    [InlineData(100, \"cien veces\")]\r\n    public void ToTuple(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToTuple());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"cero\")]\r\n    [InlineData(1, \"uno\")]\r\n    [InlineData(1, \"una\", GrammaticalGender.Feminine)]\r\n    [InlineData(10, \"diez\")]\r\n    [InlineData(11, \"once\")]\r\n    [InlineData(15, \"quince\")]\r\n    [InlineData(16, \"dieciséis\")]\r\n    [InlineData(20, \"veinte\")]\r\n    [InlineData(21, \"veintiuno\")]\r\n    [InlineData(21, \"veintiuna\", GrammaticalGender.Feminine)]\r\n    [InlineData(22, \"veintidós\")]\r\n    [InlineData(25, \"veinticinco\")]\r\n    [InlineData(35, \"treinta y cinco\")]\r\n    [InlineData(122, \"ciento veintidós\")]\r\n    [InlineData(1999, \"mil novecientos noventa y nueve\")]\r\n    [InlineData(2014, \"dos mil catorce\")]\r\n    [InlineData(2048, \"dos mil cuarenta y ocho\")]\r\n    [InlineData(3501, \"tres mil quinientos uno\")]\r\n    [InlineData(21000, \"veintiún mil\")]\r\n    [InlineData(21000, \"veintiuna mil\", GrammaticalGender.Feminine)]\r\n    [InlineData(21501, \"veintiún mil quinientos uno\")]\r\n    [InlineData(21501, \"veintiuna mil quinientas una\", GrammaticalGender.Feminine)]\r\n    [InlineData(31000, \"treinta y un mil\")]\r\n    [InlineData(31000, \"treinta y una mil\", GrammaticalGender.Feminine)]\r\n    [InlineData(31501, \"treinta y un mil quinientos uno\")]\r\n    [InlineData(31501, \"treinta y una mil quinientas una\", GrammaticalGender.Feminine)]\r\n    [InlineData(101501, \"ciento un mil quinientos uno\")]\r\n    [InlineData(101501, \"ciento una mil quinientas una\", GrammaticalGender.Feminine)]\r\n    [InlineData(100, \"cien\")]\r\n    [InlineData(1000, \"mil\")]\r\n    [InlineData(100000, \"cien mil\")]\r\n    [InlineData(1000000, \"un millón\")]\r\n    [InlineData(10000000, \"diez millones\")]\r\n    [InlineData(100000000, \"cien millones\")]\r\n    [InlineData(1000000000, \"mil millones\")]\r\n    [InlineData(1000000000000, \"un billón\")]\r\n    [InlineData(1_000_000_000_000_000_000, \"un trillón\")]\r\n    [InlineData(111, \"ciento once\")]\r\n    [InlineData(1111, \"mil ciento once\")]\r\n    [InlineData(111111, \"ciento once mil ciento once\")]\r\n    [InlineData(1111111, \"un millón ciento once mil ciento once\")]\r\n    [InlineData(11111111, \"once millones ciento once mil ciento once\")]\r\n    [InlineData(111111111, \"ciento once millones ciento once mil ciento once\")]\r\n    [InlineData(1111111111, \"mil ciento once millones ciento once mil ciento once\")]\r\n    [InlineData(1111111111111, \"un billón ciento once mil ciento once millones ciento once mil ciento once\")]\r\n    [InlineData(1111111111111111, \"mil ciento once billones ciento once mil ciento once millones ciento once mil ciento once\")]\r\n    [InlineData(1111111111111111111, \"un trillón ciento once mil ciento once billones ciento once mil ciento once millones ciento once mil ciento once\")]\r\n    [InlineData(9223372036854775807, \"nueve trillones doscientos veintitrés mil trescientos setenta y dos billones treinta y seis mil ochocientos cincuenta y cuatro millones setecientos setenta y cinco mil ochocientos siete\")]\r\n    [InlineData(1001111111, \"mil un millones ciento once mil ciento once\")]\r\n    [InlineData(1001000001, \"mil un millones uno\")]\r\n    [InlineData(1002000001, \"mil dos millones uno\")]\r\n    [InlineData(2001000001, \"dos mil un millones uno\")]\r\n    [InlineData(1001000000001, \"un billón mil millones uno\")]\r\n    [InlineData(1001000000000001, \"mil un billones uno\")]\r\n    [InlineData(1002000000000001, \"mil dos billones uno\")]\r\n    [InlineData(2002000000000001, \"dos mil dos billones uno\")]\r\n    [InlineData(123, \"ciento veintitrés\")]\r\n    [InlineData(1234, \"mil doscientos treinta y cuatro\")]\r\n    [InlineData(12345, \"doce mil trescientos cuarenta y cinco\")]\r\n    [InlineData(123456, \"ciento veintitrés mil cuatrocientos cincuenta y seis\")]\r\n    [InlineData(1234567, \"un millón doscientos treinta y cuatro mil quinientos sesenta y siete\")]\r\n    [InlineData(12345678, \"doce millones trescientos cuarenta y cinco mil seiscientos setenta y ocho\")]\r\n    [InlineData(123456789, \"ciento veintitrés millones cuatrocientos cincuenta y seis mil setecientos ochenta y nueve\")]\r\n    [InlineData(1234567890, \"mil doscientos treinta y cuatro millones quinientos sesenta y siete mil ochocientos noventa\")]\r\n    [InlineData(-15, \"menos quince\")]\r\n    [InlineData(-123, \"menos ciento veintitrés\")]\r\n    [InlineData(-1234567890, \"menos mil doscientos treinta y cuatro millones quinientos sesenta y siete mil ochocientos noventa\")]\r\n    [InlineData(-9223372036854775808, \"menos nueve trillones doscientos veintitrés mil trescientos setenta y dos billones treinta y seis mil ochocientos cincuenta y cuatro millones setecientos setenta y cinco mil ochocientos ocho\")]\r\n    public void ToWords(long number, string expected, GrammaticalGender gender = GrammaticalGender.Masculine) =>\r\n        Assert.Equal(expected, number.ToWords(gender));\r\n\r\n    [Theory]\r\n    [InlineData(1, WordForm.Abbreviation, \"un\")]\r\n    [InlineData(1, WordForm.Normal, \"uno\")]\r\n    [InlineData(21, WordForm.Abbreviation, \"veintiún\")]\r\n    [InlineData(21, WordForm.Normal, \"veintiuno\")]\r\n    [InlineData(21501, WordForm.Abbreviation, \"veintiún mil quinientos un\")]\r\n    [InlineData(21501, WordForm.Normal, \"veintiún mil quinientos uno\")]\r\n    public void ToWordsIntWithWordForm(int number, WordForm wordForm, string expected)\r\n    {\r\n        Assert.Equal(expected, number.ToWords(wordForm));\r\n        Assert.Equal(expected, number.ToWords(wordForm: wordForm, addAnd: false));\r\n        Assert.Equal(expected, number.ToWords(wordForm: wordForm, addAnd: true));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, WordForm.Abbreviation, GrammaticalGender.Masculine, \"un\")]\r\n    [InlineData(1, WordForm.Abbreviation, GrammaticalGender.Feminine, \"una\")]\r\n    [InlineData(21, WordForm.Abbreviation, GrammaticalGender.Masculine, \"veintiún\")]\r\n    [InlineData(21, WordForm.Abbreviation, GrammaticalGender.Feminine, \"veintiuna\")]\r\n    [InlineData(21501, WordForm.Abbreviation, GrammaticalGender.Masculine, \"veintiún mil quinientos un\")]\r\n    [InlineData(21501, WordForm.Normal, GrammaticalGender.Masculine, \"veintiún mil quinientos uno\")]\r\n    [InlineData(21501, WordForm.Abbreviation, GrammaticalGender.Feminine, \"veintiuna mil quinientas una\")]\r\n    public void ToWordsIntWithWordFormAndGender(int number, WordForm wordForm, GrammaticalGender gender, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(wordForm, gender));\r\n\r\n    [Theory]\r\n    [InlineData((long)1, WordForm.Abbreviation, \"un\")]\r\n    [InlineData((long)1, WordForm.Normal, \"uno\")]\r\n    [InlineData((long)21, WordForm.Abbreviation, \"veintiún\")]\r\n    [InlineData((long)21, WordForm.Normal, \"veintiuno\")]\r\n    [InlineData((long)21501, WordForm.Abbreviation, \"veintiún mil quinientos un\")]\r\n    [InlineData((long)21501, WordForm.Normal, \"veintiún mil quinientos uno\")]\r\n    public void ToWordsLongWithWordForm(long number, WordForm wordForm, string expected)\r\n    {\r\n        Assert.Equal(expected, number.ToWords(wordForm));\r\n        Assert.Equal(expected, number.ToWords(wordForm: wordForm, addAnd: false));\r\n        Assert.Equal(expected, number.ToWords(wordForm: wordForm, addAnd: true));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData((long)1, WordForm.Abbreviation, GrammaticalGender.Masculine, \"un\")]\r\n    [InlineData((long)1, WordForm.Abbreviation, GrammaticalGender.Feminine, \"una\")]\r\n    [InlineData((long)21, WordForm.Abbreviation, GrammaticalGender.Masculine, \"veintiún\")]\r\n    [InlineData((long)21, WordForm.Abbreviation, GrammaticalGender.Feminine, \"veintiuna\")]\r\n    [InlineData((long)21501, WordForm.Abbreviation, GrammaticalGender.Masculine, \"veintiún mil quinientos un\")]\r\n    [InlineData((long)21501, WordForm.Normal, GrammaticalGender.Masculine, \"veintiún mil quinientos uno\")]\r\n    [InlineData((long)21501, WordForm.Abbreviation, GrammaticalGender.Feminine, \"veintiuna mil quinientas una\")]\r\n    public void ToWordsLongWithWordFormAndGender(long number, WordForm wordForm, GrammaticalGender gender, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(wordForm, gender));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/es/OrdinalizeTests.cs",
    "content": "﻿namespace es;\r\n\r\n[UseCulture(\"es-ES\")]\r\npublic class OrdinalizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"1.º\")]\r\n    [InlineData(3, \"3.º\")]\r\n    public void OrdinalizeDefaultGender(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"1.º\")]\r\n    [InlineData(int.MinValue, \"0\")]\r\n    public void OrdinalizeZeroOrNegativeNumber(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(1, WordForm.Abbreviation, \"1.er\")]\r\n    [InlineData(1, WordForm.Normal, \"1.º\")]\r\n    [InlineData(2, WordForm.Abbreviation, \"2.º\")]\r\n    [InlineData(2, WordForm.Normal, \"2.º\")]\r\n    [InlineData(3, WordForm.Abbreviation, \"3.er\")]\r\n    [InlineData(3, WordForm.Normal, \"3.º\")]\r\n    [InlineData(21, WordForm.Abbreviation, \"21.er\")]\r\n    [InlineData(21, WordForm.Normal, \"21.º\")]\r\n    public void OrdinalizeWithWordForm(int number, WordForm wordForm, string expected)\r\n    {\r\n        Assert.Equal(expected, number.Ordinalize(wordForm));\r\n        Assert.Equal(expected, number.ToString(CultureInfo.CurrentUICulture).Ordinalize(wordForm));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, GrammaticalGender.Masculine, WordForm.Abbreviation, \"1.er\")]\r\n    [InlineData(1, GrammaticalGender.Masculine, WordForm.Normal, \"1.º\")]\r\n    [InlineData(1, GrammaticalGender.Feminine, WordForm.Abbreviation, \"1.ª\")]\r\n    [InlineData(1, GrammaticalGender.Feminine, WordForm.Normal, \"1.ª\")]\r\n    [InlineData(1, GrammaticalGender.Neuter, WordForm.Abbreviation, \"1.er\")]\r\n    [InlineData(1, GrammaticalGender.Neuter, WordForm.Normal, \"1.º\")]\r\n    public void OrdinalizeWithWordFormAndGender(int number, GrammaticalGender gender, WordForm wordForm, string expected)\r\n    {\r\n        Assert.Equal(expected, number.Ordinalize(gender, wordForm));\r\n        Assert.Equal(expected, number.ToString(CultureInfo.CurrentUICulture).Ordinalize(gender, wordForm));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(\"1\", \"1.º\")]\r\n    [InlineData(\"2\", \"2.º\")]\r\n    [InlineData(\"3\", \"3.º\")]\r\n    [InlineData(\"4\", \"4.º\")]\r\n    [InlineData(\"5\", \"5.º\")]\r\n    [InlineData(\"6\", \"6.º\")]\r\n    [InlineData(\"23\", \"23.º\")]\r\n    [InlineData(\"100\", \"100.º\")]\r\n    [InlineData(\"101\", \"101.º\")]\r\n    [InlineData(\"102\", \"102.º\")]\r\n    [InlineData(\"103\", \"103.º\")]\r\n    [InlineData(\"1001\", \"1001.º\")]\r\n    public void OrdinalizeString(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0\")]\r\n    [InlineData(\"1\", \"1.ª\")]\r\n    [InlineData(\"2\", \"2.ª\")]\r\n    [InlineData(\"3\", \"3.ª\")]\r\n    [InlineData(\"4\", \"4.ª\")]\r\n    [InlineData(\"5\", \"5.ª\")]\r\n    [InlineData(\"6\", \"6.ª\")]\r\n    [InlineData(\"23\", \"23.ª\")]\r\n    [InlineData(\"100\", \"100.ª\")]\r\n    [InlineData(\"101\", \"101.ª\")]\r\n    [InlineData(\"102\", \"102.ª\")]\r\n    [InlineData(\"103\", \"103.ª\")]\r\n    [InlineData(\"1001\", \"1001.ª\")]\r\n    public void OrdinalizeStringFeminine(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]\r\n    [InlineData(1, \"1.º\")]\r\n    [InlineData(2, \"2.º\")]\r\n    [InlineData(3, \"3.º\")]\r\n    [InlineData(4, \"4.º\")]\r\n    [InlineData(5, \"5.º\")]\r\n    [InlineData(6, \"6.º\")]\r\n    [InlineData(10, \"10.º\")]\r\n    [InlineData(23, \"23.º\")]\r\n    [InlineData(100, \"100.º\")]\r\n    [InlineData(101, \"101.º\")]\r\n    [InlineData(102, \"102.º\")]\r\n    [InlineData(103, \"103.º\")]\r\n    [InlineData(1001, \"1001.º\")]\r\n    public void OrdinalizeNumber(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]\r\n    [InlineData(1, \"1.ª\")]\r\n    [InlineData(2, \"2.ª\")]\r\n    [InlineData(3, \"3.ª\")]\r\n    [InlineData(4, \"4.ª\")]\r\n    [InlineData(5, \"5.ª\")]\r\n    [InlineData(6, \"6.ª\")]\r\n    [InlineData(10, \"10.ª\")]\r\n    [InlineData(23, \"23.ª\")]\r\n    [InlineData(100, \"100.ª\")]\r\n    [InlineData(101, \"101.ª\")]\r\n    [InlineData(102, \"102.ª\")]\r\n    [InlineData(103, \"103.ª\")]\r\n    [InlineData(1001, \"1001.ª\")]\r\n    public void OrdinalizeNumberFeminine(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/es/TimeSpanHumanizeTests.cs",
    "content": "namespace es;\r\n\r\n[UseCulture(\"es-ES\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 año\")]\r\n    [InlineData(731, \"2 años\")]\r\n    [InlineData(1096, \"3 años\")]\r\n    [InlineData(4018, \"11 años\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 mes\")]\r\n    [InlineData(61, \"2 meses\")]\r\n    [InlineData(92, \"3 meses\")]\r\n    [InlineData(335, \"11 meses\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Fact]\r\n    public void TwoWeeks() =>\r\n        Assert.Equal(\"2 semanas\", TimeSpan.FromDays(14).Humanize());\r\n\r\n    [Fact]\r\n    public void OneWeek() =>\r\n        Assert.Equal(\"1 semana\", TimeSpan.FromDays(7).Humanize());\r\n\r\n    [Fact]\r\n    public void SixDays() =>\r\n        Assert.Equal(\"6 días\", TimeSpan.FromDays(6).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoDays() =>\r\n        Assert.Equal(\"2 días\", TimeSpan.FromDays(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneDay() =>\r\n        Assert.Equal(\"1 día\", TimeSpan.FromDays(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoHours() =>\r\n        Assert.Equal(\"2 horas\", TimeSpan.FromHours(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneHour() =>\r\n        Assert.Equal(\"1 hora\", TimeSpan.FromHours(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoMinutes() =>\r\n        Assert.Equal(\"2 minutos\", TimeSpan.FromMinutes(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneMinute() =>\r\n        Assert.Equal(\"1 minuto\", TimeSpan.FromMinutes(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoSeconds() =>\r\n        Assert.Equal(\"2 segundos\", TimeSpan.FromSeconds(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneSecond() =>\r\n        Assert.Equal(\"1 segundo\", TimeSpan.FromSeconds(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoMilliseconds() =>\r\n        Assert.Equal(\"2 milisegundos\", TimeSpan.FromMilliseconds(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneMillisecond() =>\r\n        Assert.Equal(\"1 milisegundo\", TimeSpan.FromMilliseconds(1).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(0, 0, 1, 1, 2, \"un minuto, un segundo\")]\r\n    [InlineData(0, 0, 2, 2, 2, \"dos minutos, dos segundos\")]\r\n    [InlineData(1, 2, 3, 4, 4, \"un día, dos horas, tres minutos, cuatro segundos\")]\r\n    public void ComplexTimeSpan(int days, int hours, int minutes, int seconds, int precision, string expected)\r\n    {\r\n        var timeSpan = new TimeSpan(days, hours, minutes, seconds);\r\n        Assert.Equal(expected, timeSpan.Humanize(precision, toWords: true));\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"0 milisegundos\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"nada\", TimeSpan.Zero.Humanize(toWords: true));\r\n\r\n    [Fact]\r\n    public void AllTimeSpansMustBeUniqueForASequenceOfDays()\r\n    {\r\n        var culture = new CultureInfo(\"es-ES\");\r\n        var qry = from i in Enumerable.Range(0, 100000)\r\n                  let ts = TimeSpan.FromDays(i)\r\n                  let text = ts.Humanize(precision: 3, culture: culture, maxUnit: TimeUnit.Year)\r\n                  select text;\r\n        var grouping = from t in qry\r\n                       group t by t into g\r\n                       select new { g.Key, Count = g.Count() };\r\n        var allUnique = grouping.All(g => g.Count == 1);\r\n        Assert.True(allUnique);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(365, \"11 meses, 30 días\")]\r\n    [InlineData(365 + 1, \"1 año\")]\r\n    [InlineData(365 + 365, \"1 año, 11 meses, 29 días\")]\r\n    [InlineData(365 + 365 + 1, \"2 años\")]\r\n    [InlineData(365 + 365 + 365, \"2 años, 11 meses, 29 días\")]\r\n    [InlineData(365 + 365 + 365 + 1, \"3 años\")]\r\n    [InlineData(365 + 365 + 365 + 365, \"3 años, 11 meses, 29 días\")]\r\n    [InlineData(365 + 365 + 365 + 365 + 1, \"4 años\")]\r\n    [InlineData(365 + 365 + 365 + 365 + 366, \"4 años, 11 meses, 30 días\")]\r\n    [InlineData(365 + 365 + 365 + 365 + 366 + 1, \"5 años\")]\r\n    public void Year(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize(precision: 7, maxUnit: TimeUnit.Year);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(30, \"4 semanas, 2 días\")]\r\n    [InlineData(30 + 1, \"1 mes\")]\r\n    [InlineData(30 + 30, \"1 mes, 29 días\")]\r\n    [InlineData(30 + 30 + 1, \"2 meses\")]\r\n    [InlineData(30 + 30 + 31, \"2 meses, 30 días\")]\r\n    [InlineData(30 + 30 + 31 + 1, \"3 meses\")]\r\n    [InlineData(30 + 30 + 31 + 30, \"3 meses, 29 días\")]\r\n    [InlineData(30 + 30 + 31 + 30 + 1, \"4 meses\")]\r\n    [InlineData(30 + 30 + 31 + 30 + 31, \"4 meses, 30 días\")]\r\n    [InlineData(30 + 30 + 31 + 30 + 31 + 1, \"5 meses\")]\r\n    [InlineData(365, \"11 meses, 30 días\")]\r\n    [InlineData(366, \"1 año\")]\r\n    public void Month(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize(precision: 7, maxUnit: TimeUnit.Year);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(14, \"2 semanas\")]\r\n    [InlineData(7, \"1 semana\")]\r\n    [InlineData(-14, \"2 semanas\")]\r\n    [InlineData(-7, \"1 semana\")]\r\n    [InlineData(730, \"104 semanas\")]\r\n    public void Weeks(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(6, \"6 días\")]\r\n    [InlineData(2, \"2 días\")]\r\n    [InlineData(1, \"1 día\")]\r\n    [InlineData(-6, \"6 días\")]\r\n    [InlineData(-2, \"2 días\")]\r\n    [InlineData(-1, \"1 día\")]\r\n    public void Days(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 horas\")]\r\n    [InlineData(1, \"1 hora\")]\r\n    [InlineData(-2, \"2 horas\")]\r\n    [InlineData(-1, \"1 hora\")]\r\n    public void Hours(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan.FromHours(hours).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 minutos\")]\r\n    [InlineData(1, \"1 minuto\")]\r\n    [InlineData(-2, \"2 minutos\")]\r\n    [InlineData(-1, \"1 minuto\")]\r\n    public void Minutes(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMinutes(minutes).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(135, \"2 minutos\")]\r\n    [InlineData(60, \"1 minuto\")]\r\n    [InlineData(2, \"2 segundos\")]\r\n    [InlineData(1, \"1 segundo\")]\r\n    [InlineData(-135, \"2 minutos\")]\r\n    [InlineData(-60, \"1 minuto\")]\r\n    [InlineData(-2, \"2 segundos\")]\r\n    [InlineData(-1, \"1 segundo\")]\r\n    public void Seconds(int seconds, string expected)\r\n    {\r\n        var actual = TimeSpan.FromSeconds(seconds).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2500, \"2 segundos\")]\r\n    [InlineData(1400, \"1 segundo\")]\r\n    [InlineData(2, \"2 milisegundos\")]\r\n    [InlineData(1, \"1 milisegundo\")]\r\n    [InlineData(-2500, \"2 segundos\")]\r\n    [InlineData(-1400, \"1 segundo\")]\r\n    [InlineData(-2, \"2 milisegundos\")]\r\n    [InlineData(-1, \"1 milisegundo\")]\r\n    public void Milliseconds(int ms, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData((long)366 * 24 * 60 * 60 * 1000, \"12 meses\", TimeUnit.Month)]\r\n    [InlineData((long)6 * 7 * 24 * 60 * 60 * 1000, \"6 semanas\", TimeUnit.Week)]\r\n    [InlineData(7 * 24 * 60 * 60 * 1000, \"7 días\", TimeUnit.Day)]\r\n    [InlineData(24 * 60 * 60 * 1000, \"24 horas\", TimeUnit.Hour)]\r\n    [InlineData(60 * 60 * 1000, \"60 minutos\", TimeUnit.Minute)]\r\n    [InlineData(60 * 1000, \"60 segundos\", TimeUnit.Second)]\r\n    [InlineData(1000, \"1000 milisegundos\", TimeUnit.Millisecond)]\r\n    public void TimeSpanWithMaxTimeUnit(long ms, string expected, TimeUnit maxUnit)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize(maxUnit: maxUnit);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(10, \"10 milisegundos\", TimeUnit.Millisecond)]\r\n    [InlineData(10, \"nada\", TimeUnit.Second, true)]\r\n    [InlineData(10, \"nada\", TimeUnit.Minute, true)]\r\n    [InlineData(10, \"nada\", TimeUnit.Hour, true)]\r\n    [InlineData(10, \"nada\", TimeUnit.Day, true)]\r\n    [InlineData(10, \"nada\", TimeUnit.Week, true)]\r\n    [InlineData(10, \"0 segundos\", TimeUnit.Second)]\r\n    [InlineData(10, \"0 minutos\", TimeUnit.Minute)]\r\n    [InlineData(10, \"0 horas\", TimeUnit.Hour)]\r\n    [InlineData(10, \"0 días\", TimeUnit.Day)]\r\n    [InlineData(10, \"0 semanas\", TimeUnit.Week)]\r\n    [InlineData(2500, \"2 segundos, 500 milisegundos\", TimeUnit.Millisecond)]\r\n    [InlineData(2500, \"2 segundos\", TimeUnit.Second)]\r\n    [InlineData(2500, \"nada\", TimeUnit.Minute, true)]\r\n    [InlineData(2500, \"nada\", TimeUnit.Hour, true)]\r\n    [InlineData(2500, \"nada\", TimeUnit.Day, true)]\r\n    [InlineData(2500, \"nada\", TimeUnit.Week, true)]\r\n    [InlineData(2500, \"0 minutos\", TimeUnit.Minute)]\r\n    [InlineData(2500, \"0 horas\", TimeUnit.Hour)]\r\n    [InlineData(2500, \"0 días\", TimeUnit.Day)]\r\n    [InlineData(2500, \"0 semanas\", TimeUnit.Week)]\r\n    [InlineData(122500, \"2 minutos, 2 segundos, 500 milisegundos\", TimeUnit.Millisecond)]\r\n    [InlineData(122500, \"2 minutos, 2 segundos\", TimeUnit.Second)]\r\n    [InlineData(122500, \"2 minutos\", TimeUnit.Minute)]\r\n    [InlineData(122500, \"nada\", TimeUnit.Hour, true)]\r\n    [InlineData(122500, \"nada\", TimeUnit.Day, true)]\r\n    [InlineData(122500, \"nada\", TimeUnit.Week, true)]\r\n    [InlineData(122500, \"0 horas\", TimeUnit.Hour)]\r\n    [InlineData(122500, \"0 días\", TimeUnit.Day)]\r\n    [InlineData(122500, \"0 semanas\", TimeUnit.Week)]\r\n    [InlineData(3722500, \"1 hora, 2 minutos, 2 segundos, 500 milisegundos\", TimeUnit.Millisecond)]\r\n    [InlineData(3722500, \"1 hora, 2 minutos, 2 segundos\", TimeUnit.Second)]\r\n    [InlineData(3722500, \"1 hora, 2 minutos\", TimeUnit.Minute)]\r\n    [InlineData(3722500, \"1 hora\", TimeUnit.Hour)]\r\n    [InlineData(3722500, \"nada\", TimeUnit.Day, true)]\r\n    [InlineData(3722500, \"nada\", TimeUnit.Week, true)]\r\n    [InlineData(3722500, \"0 días\", TimeUnit.Day)]\r\n    [InlineData(3722500, \"0 semanas\", TimeUnit.Week)]\r\n    [InlineData(90122500, \"1 día, 1 hora, 2 minutos, 2 segundos, 500 milisegundos\", TimeUnit.Millisecond)]\r\n    [InlineData(90122500, \"1 día, 1 hora, 2 minutos, 2 segundos\", TimeUnit.Second)]\r\n    [InlineData(90122500, \"1 día, 1 hora, 2 minutos\", TimeUnit.Minute)]\r\n    [InlineData(90122500, \"1 día, 1 hora\", TimeUnit.Hour)]\r\n    [InlineData(90122500, \"1 día\", TimeUnit.Day)]\r\n    [InlineData(90122500, \"nada\", TimeUnit.Week, true)]\r\n    [InlineData(90122500, \"0 semanas\", TimeUnit.Week)]\r\n    [InlineData(694922500, \"1 semana, 1 día, 1 hora, 2 minutos, 2 segundos, 500 milisegundos\", TimeUnit.Millisecond)]\r\n    [InlineData(694922500, \"1 semana, 1 día, 1 hora, 2 minutos, 2 segundos\", TimeUnit.Second)]\r\n    [InlineData(694922500, \"1 semana, 1 día, 1 hora, 2 minutos\", TimeUnit.Minute)]\r\n    [InlineData(694922500, \"1 semana, 1 día, 1 hora\", TimeUnit.Hour)]\r\n    [InlineData(694922500, \"1 semana, 1 día\", TimeUnit.Day)]\r\n    [InlineData(694922500, \"1 semana\", TimeUnit.Week)]\r\n    [InlineData(2768462500, \"1 mes, 1 día, 1 hora, 1 minuto, 2 segundos, 500 milisegundos\", TimeUnit.Millisecond)]\r\n    [InlineData(2768462500, \"1 mes, 1 día, 1 hora, 1 minuto, 2 segundos\", TimeUnit.Second)]\r\n    [InlineData(2768462500, \"1 mes, 1 día, 1 hora, 1 minuto\", TimeUnit.Minute)]\r\n    [InlineData(2768462500, \"1 mes, 1 día, 1 hora\", TimeUnit.Hour)]\r\n    [InlineData(2768462500, \"1 mes, 1 día\", TimeUnit.Day)]\r\n    [InlineData(2768462500, \"1 mes\", TimeUnit.Week)]\r\n    [InlineData(2768462500, \"1 mes\", TimeUnit.Month)]\r\n    [InlineData(2768462500, \"nada\", TimeUnit.Year, true)]\r\n    [InlineData(2768462500, \"0 años\", TimeUnit.Year)]\r\n    [InlineData(34390862500, \"1 año, 1 mes, 2 días, 1 hora, 1 minuto, 2 segundos, 500 milisegundos\", TimeUnit.Millisecond)]\r\n    [InlineData(34390862500, \"1 año, 1 mes, 2 días, 1 hora, 1 minuto, 2 segundos\", TimeUnit.Second)]\r\n    [InlineData(34390862500, \"1 año, 1 mes, 2 días, 1 hora, 1 minuto\", TimeUnit.Minute)]\r\n    [InlineData(34390862500, \"1 año, 1 mes, 2 días, 1 hora\", TimeUnit.Hour)]\r\n    [InlineData(34390862500, \"1 año, 1 mes, 2 días\", TimeUnit.Day)]\r\n    [InlineData(34390862500, \"1 año, 1 mes\", TimeUnit.Week)]\r\n    [InlineData(34390862500, \"1 año, 1 mes\", TimeUnit.Month)]\r\n    [InlineData(34390862500, \"1 año\", TimeUnit.Year)]\r\n    public void TimeSpanWithMinTimeUnit(long ms, string expected, TimeUnit minUnit, bool toWords = false)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize(minUnit: minUnit, precision: 7, maxUnit: TimeUnit.Year, toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 3, \"nada\", true)]\r\n    [InlineData(0, 2, \"nada\", true)]\r\n    [InlineData(0, 3, \"0 milisegundos\")]\r\n    [InlineData(0, 2, \"0 milisegundos\")]\r\n    [InlineData(10, 2, \"10 milisegundos\")]\r\n    [InlineData(1400, 2, \"1 segundo, 400 milisegundos\")]\r\n    [InlineData(2500, 2, \"2 segundos, 500 milisegundos\")]\r\n    [InlineData(120000, 2, \"2 minutos\")]\r\n    [InlineData(62000, 2, \"1 minuto, 2 segundos\")]\r\n    [InlineData(62020, 2, \"1 minuto, 2 segundos\")]\r\n    [InlineData(62020, 3, \"1 minuto, 2 segundos, 20 milisegundos\")]\r\n    [InlineData(3600020, 4, \"1 hora, 20 milisegundos\")]\r\n    [InlineData(3600020, 3, \"1 hora, 20 milisegundos\")]\r\n    [InlineData(3600020, 2, \"1 hora, 20 milisegundos\")]\r\n    [InlineData(3600020, 1, \"1 hora\")]\r\n    [InlineData(3603001, 2, \"1 hora, 3 segundos\")]\r\n    [InlineData(3603001, 3, \"1 hora, 3 segundos, 1 milisegundo\")]\r\n    [InlineData(86400000, 3, \"1 día\")]\r\n    [InlineData(86400000, 2, \"1 día\")]\r\n    [InlineData(86400000, 1, \"1 día\")]\r\n    [InlineData(86401000, 1, \"1 día\")]\r\n    [InlineData(86401000, 2, \"1 día, 1 segundo\")]\r\n    [InlineData(86401200, 2, \"1 día, 1 segundo\")]\r\n    [InlineData(86401200, 3, \"1 día, 1 segundo, 200 milisegundos\")]\r\n    [InlineData(1296000000, 1, \"2 semanas\")]\r\n    [InlineData(1296000000, 2, \"2 semanas, 1 día\")]\r\n    [InlineData(1299600000, 2, \"2 semanas, 1 día\")]\r\n    [InlineData(1299600000, 3, \"2 semanas, 1 día, 1 hora\")]\r\n    [InlineData(1299630020, 3, \"2 semanas, 1 día, 1 hora\")]\r\n    [InlineData(1299630020, 4, \"2 semanas, 1 día, 1 hora, 30 segundos\")]\r\n    [InlineData(1299630020, 5, \"2 semanas, 1 día, 1 hora, 30 segundos, 20 milisegundos\")]\r\n    [InlineData(2768462500, 6, \"1 mes, 1 día, 1 hora, 1 minuto, 2 segundos, 500 milisegundos\")]\r\n    [InlineData(2768462500, 5, \"1 mes, 1 día, 1 hora, 1 minuto, 2 segundos\")]\r\n    [InlineData(2768462500, 4, \"1 mes, 1 día, 1 hora, 1 minuto\")]\r\n    [InlineData(2768462500, 3, \"1 mes, 1 día, 1 hora\")]\r\n    [InlineData(2768462500, 2, \"1 mes, 1 día\")]\r\n    [InlineData(2768462500, 1, \"1 mes\")]\r\n    [InlineData(34390862500, 7, \"1 año, 1 mes, 2 días, 1 hora, 1 minuto, 2 segundos, 500 milisegundos\")]\r\n    [InlineData(34390862500, 6, \"1 año, 1 mes, 2 días, 1 hora, 1 minuto, 2 segundos\")]\r\n    [InlineData(34390862500, 5, \"1 año, 1 mes, 2 días, 1 hora, 1 minuto\")]\r\n    [InlineData(34390862500, 4, \"1 año, 1 mes, 2 días, 1 hora\")]\r\n    [InlineData(34390862500, 3, \"1 año, 1 mes, 2 días\")]\r\n    [InlineData(34390862500, 2, \"1 año, 1 mes\")]\r\n    [InlineData(34390862500, 1, \"1 año\")]\r\n    public void TimeSpanWithPrecision(long milliseconds, int precision, string expected, bool toWords = false)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize(precision, maxUnit: TimeUnit.Year, toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(3 * 7 + 4, 2, \"3 semanas, 4 días\")]\r\n    [InlineData(6 * 7 + 3, 2, \"6 semanas, 3 días\")]\r\n    [InlineData(72 * 7 + 6, 2, \"72 semanas, 6 días\")]\r\n    public void DaysWithPrecision(int days, int precision, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize(precision: precision);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(50)]\r\n    [InlineData(52)]\r\n    public void TimeSpanWithMinAndMaxUnits_DoesNotReportExcessiveTime(int minutes)\r\n    {\r\n        var actual = TimeSpan.FromMinutes(minutes).Humanize(2, null, TimeUnit.Hour, TimeUnit.Minute);\r\n        var expected = TimeSpan.FromMinutes(minutes).Humanize(2);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 3, \"nada\", true)]\r\n    [InlineData(0, 2, \"nada\", true)]\r\n    [InlineData(0, 3, \"0 milisegundos\")]\r\n    [InlineData(0, 2, \"0 milisegundos\")]\r\n    [InlineData(10, 2, \"10 milisegundos\")]\r\n    [InlineData(1400, 2, \"1 segundo, 400 milisegundos\")]\r\n    [InlineData(2500, 2, \"2 segundos, 500 milisegundos\")]\r\n    [InlineData(60001, 1, \"1 minuto\")]\r\n    [InlineData(60001, 2, \"1 minuto\")]\r\n    [InlineData(60001, 3, \"1 minuto, 1 milisegundo\")]\r\n    [InlineData(120000, 2, \"2 minutos\")]\r\n    [InlineData(62000, 2, \"1 minuto, 2 segundos\")]\r\n    [InlineData(62020, 2, \"1 minuto, 2 segundos\")]\r\n    [InlineData(62020, 3, \"1 minuto, 2 segundos, 20 milisegundos\")]\r\n    [InlineData(3600020, 4, \"1 hora, 20 milisegundos\")]\r\n    [InlineData(3600020, 3, \"1 hora\")]\r\n    [InlineData(3600020, 2, \"1 hora\")]\r\n    [InlineData(3600020, 1, \"1 hora\")]\r\n    [InlineData(3603001, 2, \"1 hora\")]\r\n    [InlineData(3603001, 3, \"1 hora, 3 segundos\")]\r\n    [InlineData(86400000, 3, \"1 día\")]\r\n    [InlineData(86400000, 2, \"1 día\")]\r\n    [InlineData(86400000, 1, \"1 día\")]\r\n    [InlineData(86401000, 1, \"1 día\")]\r\n    [InlineData(86401000, 2, \"1 día\")]\r\n    [InlineData(86401000, 3, \"1 día\")]\r\n    [InlineData(86401000, 4, \"1 día, 1 segundo\")]\r\n    [InlineData(86401200, 4, \"1 día, 1 segundo\")]\r\n    [InlineData(86401200, 5, \"1 día, 1 segundo, 200 milisegundos\")]\r\n    [InlineData(1296000000, 1, \"2 semanas\")]\r\n    [InlineData(1296000000, 2, \"2 semanas, 1 día\")]\r\n    [InlineData(1299600000, 2, \"2 semanas, 1 día\")]\r\n    [InlineData(1299600000, 3, \"2 semanas, 1 día, 1 hora\")]\r\n    [InlineData(1299630020, 3, \"2 semanas, 1 día, 1 hora\")]\r\n    [InlineData(1299630020, 4, \"2 semanas, 1 día, 1 hora\")]\r\n    [InlineData(1299630020, 5, \"2 semanas, 1 día, 1 hora, 30 segundos\")]\r\n    [InlineData(1299630020, 6, \"2 semanas, 1 día, 1 hora, 30 segundos, 20 milisegundos\")]\r\n    public void TimeSpanWithPrecisionAndCountingEmptyUnits(int milliseconds, int precision, string expected, bool toWords = false)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize(precision: precision, countEmptyUnits: true, toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 3, \"nada\", true)]\r\n    [InlineData(0, 2, \"nada\", true)]\r\n    [InlineData(0, 3, \"0 milisegundos\")]\r\n    [InlineData(0, 2, \"0 milisegundos\")]\r\n    [InlineData(10, 2, \"10 milisegundos\")]\r\n    [InlineData(1400, 2, \"1 segundo y 400 milisegundos\")]\r\n    [InlineData(2500, 2, \"2 segundos y 500 milisegundos\")]\r\n    [InlineData(120000, 2, \"2 minutos\")]\r\n    [InlineData(62000, 2, \"1 minuto y 2 segundos\")]\r\n    [InlineData(62020, 2, \"1 minuto y 2 segundos\")]\r\n    [InlineData(62020, 3, \"1 minuto, 2 segundos y 20 milisegundos\")]\r\n    [InlineData(3600020, 4, \"1 hora y 20 milisegundos\")]\r\n    [InlineData(3600020, 3, \"1 hora y 20 milisegundos\")]\r\n    [InlineData(3600020, 2, \"1 hora y 20 milisegundos\")]\r\n    [InlineData(3600020, 1, \"1 hora\")]\r\n    [InlineData(3603001, 2, \"1 hora y 3 segundos\")]\r\n    [InlineData(3603001, 3, \"1 hora, 3 segundos y 1 milisegundo\")]\r\n    [InlineData(86400000, 3, \"1 día\")]\r\n    [InlineData(86400000, 2, \"1 día\")]\r\n    [InlineData(86400000, 1, \"1 día\")]\r\n    [InlineData(86401000, 1, \"1 día\")]\r\n    [InlineData(86401000, 2, \"1 día y 1 segundo\")]\r\n    [InlineData(86401200, 2, \"1 día y 1 segundo\")]\r\n    [InlineData(86401200, 3, \"1 día, 1 segundo y 200 milisegundos\")]\r\n    [InlineData(1296000000, 1, \"2 semanas\")]\r\n    [InlineData(1296000000, 2, \"2 semanas y 1 día\")]\r\n    [InlineData(1299600000, 2, \"2 semanas y 1 día\")]\r\n    [InlineData(1299600000, 3, \"2 semanas, 1 día y 1 hora\")]\r\n    [InlineData(1299630020, 3, \"2 semanas, 1 día y 1 hora\")]\r\n    [InlineData(1299630020, 4, \"2 semanas, 1 día, 1 hora y 30 segundos\")]\r\n    [InlineData(1299630020, 5, \"2 semanas, 1 día, 1 hora, 30 segundos y 20 milisegundos\")]\r\n    public void TimeSpanWithPrecisionAndAlternativeCollectionFormatter(int milliseconds, int precision,\r\n        string expected, bool toWords = false)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize(precision, collectionSeparator: null, toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 3, \"nada\")]\r\n    [InlineData(0, 2, \"nada\")]\r\n    [InlineData(10, 2, \"diez milisegundos\")]\r\n    [InlineData(1400, 2, \"un segundo, cuatrocientos milisegundos\")]\r\n    [InlineData(2500, 2, \"dos segundos, quinientos milisegundos\")]\r\n    [InlineData(120000, 2, \"dos minutos\")]\r\n    [InlineData(62000, 2, \"un minuto, dos segundos\")]\r\n    [InlineData(62020, 2, \"un minuto, dos segundos\")]\r\n    [InlineData(62020, 3, \"un minuto, dos segundos, veinte milisegundos\")]\r\n    [InlineData(3600020, 4, \"una hora, veinte milisegundos\")]\r\n    [InlineData(3600020, 3, \"una hora, veinte milisegundos\")]\r\n    [InlineData(3600020, 2, \"una hora, veinte milisegundos\")]\r\n    [InlineData(3600020, 1, \"una hora\")]\r\n    [InlineData(3603001, 2, \"una hora, tres segundos\")]\r\n    [InlineData(3603001, 3, \"una hora, tres segundos, un milisegundo\")]\r\n    [InlineData(86400000, 3, \"un día\")]\r\n    [InlineData(86400000, 2, \"un día\")]\r\n    [InlineData(86400000, 1, \"un día\")]\r\n    [InlineData(86401000, 1, \"un día\")]\r\n    [InlineData(86401000, 2, \"un día, un segundo\")]\r\n    [InlineData(86401200, 2, \"un día, un segundo\")]\r\n    [InlineData(86401200, 3, \"un día, un segundo, doscientos milisegundos\")]\r\n    [InlineData(1296000000, 1, \"dos semanas\")]\r\n    [InlineData(1296000000, 2, \"dos semanas, un día\")]\r\n    [InlineData(1299600000, 2, \"dos semanas, un día\")]\r\n    [InlineData(1299600000, 3, \"dos semanas, un día, una hora\")]\r\n    [InlineData(1299630020, 3, \"dos semanas, un día, una hora\")]\r\n    [InlineData(1299630020, 4, \"dos semanas, un día, una hora, treinta segundos\")]\r\n    [InlineData(1299630020, 5, \"dos semanas, un día, una hora, treinta segundos, veinte milisegundos\")]\r\n    public void TimeSpanWithNumbersConvertedToWords(int milliseconds, int precision, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize(precision, toWords: true);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/es/TimeToClockNotationTests.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace es;\r\n\r\n[UseCulture(\"es-ES\")]\r\npublic class TimeToClockNotationTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, 0, \"medianoche\")]\r\n    [InlineData(0, 7, \"las doce y siete de la noche\")]\r\n    [InlineData(1, 11, \"la una y once de la madrugada\")]\r\n    [InlineData(4, 0, \"las cuatro de la madrugada\")]\r\n    [InlineData(5, 1, \"las cinco y uno de la madrugada\")]\r\n    [InlineData(6, 0, \"las seis de la mañana\")]\r\n    [InlineData(6, 5, \"las seis y cinco de la mañana\")]\r\n    [InlineData(7, 10, \"las siete y diez de la mañana\")]\r\n    [InlineData(8, 15, \"las ocho y cuarto de la mañana\")]\r\n    [InlineData(9, 20, \"las nueve y veinte de la mañana\")]\r\n    [InlineData(10, 25, \"las diez y veinticinco de la mañana\")]\r\n    [InlineData(11, 30, \"las once y media de la mañana\")]\r\n    [InlineData(12, 00, \"mediodía\")]\r\n    [InlineData(12, 38, \"las doce y treinta y ocho de la tarde\")]\r\n    [InlineData(12, 35, \"la una menos veinticinco de la tarde\")]\r\n    [InlineData(15, 40, \"las cuatro menos veinte de la tarde\")]\r\n    [InlineData(17, 45, \"las seis menos cuarto de la tarde\")]\r\n    [InlineData(19, 50, \"las ocho menos diez de la tarde\")]\r\n    [InlineData(21, 0, \"las nueve de la noche\")]\r\n    [InlineData(21, 55, \"las diez menos cinco de la noche\")]\r\n    [InlineData(22, 59, \"las diez y cincuenta y nueve de la noche\")]\r\n    [InlineData(23, 43, \"las once y cuarenta y tres de la noche\")]\r\n    public void ConvertToClockNotationTimeOnlyString(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation();\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 0, \"medianoche\")]\r\n    [InlineData(0, 7, \"las doce y cinco de la noche\")]\r\n    [InlineData(1, 11, \"la una y diez de la madrugada\")]\r\n    [InlineData(4, 0, \"las cuatro de la madrugada\")]\r\n    [InlineData(5, 1, \"las cinco de la madrugada\")]\r\n    [InlineData(6, 0, \"las seis de la mañana\")]\r\n    [InlineData(6, 5, \"las seis y cinco de la mañana\")]\r\n    [InlineData(7, 10, \"las siete y diez de la mañana\")]\r\n    [InlineData(8, 15, \"las ocho y cuarto de la mañana\")]\r\n    [InlineData(9, 20, \"las nueve y veinte de la mañana\")]\r\n    [InlineData(10, 25, \"las diez y veinticinco de la mañana\")]\r\n    [InlineData(11, 30, \"las once y media de la mañana\")]\r\n    [InlineData(12, 00, \"mediodía\")]\r\n    [InlineData(12, 38, \"la una menos veinte de la tarde\")]\r\n    [InlineData(12, 35, \"la una menos veinticinco de la tarde\")]\r\n    [InlineData(15, 40, \"las cuatro menos veinte de la tarde\")]\r\n    [InlineData(17, 45, \"las seis menos cuarto de la tarde\")]\r\n    [InlineData(19, 50, \"las ocho menos diez de la tarde\")]\r\n    [InlineData(21, 0, \"las nueve de la noche\")]\r\n    [InlineData(21, 55, \"las diez menos cinco de la noche\")]\r\n    [InlineData(22, 59, \"las once de la noche\")]\r\n    [InlineData(23, 43, \"las doce menos cuarto de la noche\")]\r\n    public void ConvertToRoundedClockNotationTimeOnlyString(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes);\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fa/DateHumanizeTests.cs",
    "content": "﻿namespace fa;\r\n\r\n[UseCulture(\"fa\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"فردا\")]\r\n    [InlineData(13, \"13 روز بعد\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"دیروز\")]\r\n    [InlineData(-11, \"11 روز پیش\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"یک ساعت بعد\")]\r\n    [InlineData(11, \"11 ساعت بعد\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"یک ساعت پیش\")]\r\n    [InlineData(-11, \"11 ساعت پیش\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"یک دقیقه بعد\")]\r\n    [InlineData(13, \"13 دقیقه بعد\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"یک دقیقه پیش\")]\r\n    [InlineData(-13, \"13 دقیقه پیش\")]\r\n    [InlineData(60, \"یک ساعت پیش\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"یک ماه بعد\")]\r\n    [InlineData(10, \"10 ماه بعد\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"یک ماه پیش\")]\r\n    [InlineData(-10, \"10 ماه پیش\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"یک ثانیه بعد\")]\r\n    [InlineData(11, \"11 ثانیه بعد\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"یک ثانیه پیش\")]\r\n    [InlineData(-11, \"11 ثانیه پیش\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"یک سال بعد\")]\r\n    [InlineData(21, \"21 سال بعد\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"یک سال پیش\")]\r\n    [InlineData(-21, \"21 سال پیش\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fa/NumberToWordsTests.cs",
    "content": "﻿namespace fa;\r\n\r\n[UseCulture(\"fa\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"یک\")]\r\n    [InlineData(10, \"ده\")]\r\n    [InlineData(11, \"یازده\")]\r\n    [InlineData(122, \"صد و بیست و دو\")]\r\n    [InlineData(3501, \"سه هزار و پانصد و یک\")]\r\n    [InlineData(100, \"صد\")]\r\n    [InlineData(1000, \"یک هزار\")]\r\n    [InlineData(100000, \"صد هزار\")]\r\n    [InlineData(1000000, \"یک میلیون\")]\r\n    [InlineData(10000000, \"ده میلیون\")]\r\n    [InlineData(100000000, \"صد میلیون\")]\r\n    [InlineData(1000000000, \"یک میلیارد\")]\r\n    [InlineData(1000000000000, \"یک بیلیون\")]\r\n    [InlineData(1000000000000000, \"یک بیلیارد\")]\r\n    [InlineData(1000000000000000000, \"یک تریلیون\")]\r\n    [InlineData(111, \"صد و یازده\")]\r\n    [InlineData(1111, \"یک هزار و صد و یازده\")]\r\n    [InlineData(111111, \"صد و یازده هزار و صد و یازده\")]\r\n    [InlineData(1111111, \"یک میلیون و صد و یازده هزار و صد و یازده\")]\r\n    [InlineData(11111111, \"یازده میلیون و صد و یازده هزار و صد و یازده\")]\r\n    [InlineData(111111111, \"صد و یازده میلیون و صد و یازده هزار و صد و یازده\")]\r\n    [InlineData(1111111111, \"یک میلیارد و صد و یازده میلیون و صد و یازده هزار و صد و یازده\")]\r\n    [InlineData(123, \"صد و بیست و سه\")]\r\n    [InlineData(1234, \"یک هزار و دویست و سی و چهار\")]\r\n    [InlineData(12345, \"دوازده هزار و سیصد و چهل و پنج\")]\r\n    [InlineData(123456, \"صد و بیست و سه هزار و چهارصد و پنجاه و شش\")]\r\n    [InlineData(1234567, \"یک میلیون و دویست و سی و چهار هزار و پانصد و شصت و هفت\")]\r\n    [InlineData(12345678, \"دوازده میلیون و سیصد و چهل و پنج هزار و ششصد و هفتاد و هشت\")]\r\n    [InlineData(123456789, \"صد و بیست و سه میلیون و چهارصد و پنجاه و شش هزار و هفتصد و هشتاد و نه\")]\r\n    [InlineData(1234567890, \"یک میلیارد و دویست و سی و چهار میلیون و پانصد و شصت و هفت هزار و هشتصد و نود\")]\r\n    [InlineData(long.MaxValue, \"نه تریلیون و دویست و بیست و سه بیلیارد و سیصد و هفتاد و دو بیلیون و سی و شش میلیارد و هشتصد و پنجاه و چهار میلیون و هفتصد و هفتاد و پنج هزار و هشتصد و هفت\")]\r\n    public void ToWordsFarsi(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"صفرم\")]\r\n    [InlineData(1, \"اول\")]\r\n    [InlineData(2, \"دوم\")]\r\n    [InlineData(3, \"سوم\")]\r\n    [InlineData(4, \"چهارم\")]\r\n    [InlineData(5, \"پنجم\")]\r\n    [InlineData(6, \"ششم\")]\r\n    [InlineData(7, \"هفتم\")]\r\n    [InlineData(8, \"هشتم\")]\r\n    [InlineData(9, \"نهم\")]\r\n    [InlineData(10, \"دهم\")]\r\n    [InlineData(11, \"یازدهم\")]\r\n    [InlineData(12, \"دوازدهم\")]\r\n    [InlineData(13, \"سیزدهم\")]\r\n    [InlineData(21, \"بیست و یکم\")]\r\n    [InlineData(22, \"بیست و دوم\")]\r\n    [InlineData(23, \"بیست و سوم\")]\r\n    [InlineData(24, \"بیست و چهارم\")]\r\n    [InlineData(25, \"بیست و پنجم\")]\r\n    [InlineData(30, \"سی ام\")]\r\n    [InlineData(40, \"چهلم\")]\r\n    [InlineData(50, \"پنجاهم\")]\r\n    [InlineData(60, \"شصتم\")]\r\n    [InlineData(70, \"هفتادم\")]\r\n    [InlineData(80, \"هشتادم\")]\r\n    [InlineData(90, \"نودم\")]\r\n    [InlineData(100, \"صدم\")]\r\n    [InlineData(200, \"دویستم\")]\r\n    [InlineData(1000, \"یک هزارم\")]\r\n    [InlineData(1333, \"یک هزار و سیصد و سی و سوم\")]\r\n    [InlineData(1000000, \"یک میلیونم\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fa/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace fa;\r\n\r\n[UseCulture(\"fa\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"یک سال\")]\r\n    [InlineData(731, \"2 سال\")]\r\n    [InlineData(1096, \"3 سال\")]\r\n    [InlineData(4018, \"11 سال\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"یک ماه\")]\r\n    [InlineData(61, \"2 ماه\")]\r\n    [InlineData(92, \"3 ماه\")]\r\n    [InlineData(335, \"11 ماه\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"یک هفته\")]\r\n    [InlineData(77, \"11 هفته\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"یک روز\")]\r\n    [InlineData(3, \"3 روز\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"یک ساعت\")]\r\n    [InlineData(11, \"11 ساعت\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"یک دقیقه\")]\r\n    [InlineData(11, \"11 دقیقه\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"یک ثانیه\")]\r\n    [InlineData(11, \"11 ثانیه\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"یک میلی ثانیه\")]\r\n    [InlineData(11, \"11 میلی ثانیه\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 میلی ثانیه\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"الآن\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fi-FI/DateHumanizeTests.cs",
    "content": "﻿namespace fiFI;\r\n\r\n[UseCulture(\"fi-FI\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, \"2 päivää sitten\")]\r\n    [InlineData(1, \"eilen\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 tuntia sitten\")]\r\n    [InlineData(1, \"tunti sitten\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 minuuttia sitten\")]\r\n    [InlineData(1, \"minuutti sitten\")]\r\n    [InlineData(60, \"tunti sitten\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 kuukautta sitten\")]\r\n    [InlineData(1, \"kuukausi sitten\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 sekuntia sitten\")]\r\n    [InlineData(1, \"sekuntti sitten\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 vuotta sitten\")]\r\n    [InlineData(1, \"vuosi sitten\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fi-FI/NumberToWordsTests.cs",
    "content": "﻿namespace fiFI;\r\n\r\n[UseCulture(\"fi-FI\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"nolla\")]\r\n    [InlineData(1, \"yksi\")]\r\n    [InlineData(11, \"yksitoista\")]\r\n    [InlineData(15, \"viisitoista\")]\r\n    [InlineData(19, \"yhdeksäntoista\")]\r\n    [InlineData(20, \"kaksikymmentä\")]\r\n    [InlineData(25, \"kaksikymmentäviisi\")]\r\n    [InlineData(50, \"viisikymmentä\")]\r\n    [InlineData(90, \"yhdeksänkymmentä\")]\r\n    [InlineData(100, \"sata\")]\r\n    [InlineData(101, \"satayksi\")]\r\n    [InlineData(345, \"kolmesataaneljäkymmentäviisi\")]\r\n    [InlineData(678, \"kuusisataaseitsemänkymmentäkahdeksan\")]\r\n    [InlineData(1000, \"tuhat\")]\r\n    [InlineData(1001, \"tuhat yksi\")]\r\n    [InlineData(1234, \"tuhat kaksisataakolmekymmentäneljä\")]\r\n    [InlineData(4567, \"neljätuhatta viisisataakuusikymmentäseitsemän\")]\r\n    [InlineData(10000, \"kymmenentuhatta\")]\r\n    [InlineData(100000, \"satatuhatta\")]\r\n    [InlineData(1000000, \"miljoona\")]\r\n    [InlineData(10000000, \"kymmenenmiljoonaa\")]\r\n    [InlineData(100000000, \"satamiljoonaa\")]\r\n    [InlineData(1000000000, \"miljardi\")]\r\n    [InlineData(2147483647, \"kaksimiljardia sataneljäkymmentäseitsemänmiljoonaa neljäsataakahdeksankymmentäkolmetuhatta kuusisataaneljäkymmentäseitsemän\")]  // int.MaxValue\r\n    [InlineData(-2147483647, \"miinus kaksimiljardia sataneljäkymmentäseitsemänmiljoonaa neljäsataakahdeksankymmentäkolmetuhatta kuusisataaneljäkymmentäseitsemän\")]  // int.MinValue + 1\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nollas\")]\r\n    [InlineData(1, \"ensimmäinen\")]\r\n    [InlineData(2, \"toinen\")]\r\n    [InlineData(10, \"kymmenes\")]\r\n    [InlineData(11, \"yhdestoista\")]\r\n    [InlineData(12, \"kahdestoista\")]\r\n    [InlineData(19, \"yhdeksästoista\")]\r\n    [InlineData(20, \"kahdeskymmenes\")]\r\n    [InlineData(21, \"kahdeskymmenesensimmäinen\")]\r\n    [InlineData(22, \"kahdeskymmenestoinen\")]\r\n    [InlineData(28, \"kahdeskymmeneskahdeksas\")]\r\n    [InlineData(75, \"seitsemäskymmenesviides\")]\r\n    [InlineData(100, \"sadas\")]\r\n    [InlineData(101, \"sadasensimmäinen\")]\r\n    [InlineData(111, \"sadasyhdestoista\")]\r\n    [InlineData(1000, \"tuhannes\")]\r\n    [InlineData(1101, \"tuhannessadasensimmäinen\")]\r\n    [InlineData(10000, \"kymmenestuhannes\")]\r\n    [InlineData(100000, \"sadastuhannes\")]\r\n    [InlineData(1000000, \"miljoonas\")]\r\n    [InlineData(10000000, \"kymmenesmiljoonas\")]\r\n    [InlineData(100000000, \"sadasmiljoonas\")]\r\n    [InlineData(1000000000, \"miljardis\")]\r\n    [InlineData(1000000001, \"miljardisensimmäinen\")]\r\n    [InlineData(2147483647, \"kahdesmiljardissadasneljäskymmenesseitsemäsmiljoonasneljässadaskahdeksaskymmeneskolmastuhanneskuudessadasneljäskymmenesseitsemäs\")] // int.MaxValue\r\n    public void ToOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fil-PH/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace filPH;\r\n\r\n[UseCulture(\"fil-PH\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google Translate\")]\r\n    [InlineData(366, \"1 taon\")]\r\n    [InlineData(731, \"2 taon\")]\r\n    [InlineData(1096, \"3 taon\")]\r\n    [InlineData(4018, \"11 taon\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google Translate\")]\r\n    [InlineData(31, \"1 buwan\")]\r\n    [InlineData(61, \"2 buwan\")]\r\n    [InlineData(92, \"3 buwan\")]\r\n    [InlineData(335, \"11 buwan\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google Translate\")]\r\n    [InlineData(7, \"1 linggo\")]\r\n    [InlineData(14, \"2 linggo\")]\r\n    [InlineData(21, \"3 linggo\")]\r\n    [InlineData(77, \"11 linggo\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google Translate\")]\r\n    [InlineData(1, \"1 araw\")]\r\n    [InlineData(2, \"2 araw\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google Translate\")]\r\n    [InlineData(1, \"1 oras\")]\r\n    [InlineData(2, \"2 oras\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google Translate\")]\r\n    [InlineData(1, \"1 minuto\")]\r\n    [InlineData(2, \"2 minuto\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google Translate\")]\r\n    [InlineData(1, \"1 segundo\")]\r\n    [InlineData(2, \"2 segundo\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google Translate\")]\r\n    [InlineData(1, \"1 millisecond\")]\r\n    [InlineData(2, \"2 milliseconds\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 milliseconds\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"walang oras\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr/Bytes/ByteSizeExtensionsTests.cs",
    "content": "﻿namespace fr.Bytes;\r\n\r\n[UseCulture(\"fr-FR\")]\r\npublic class ByteSizeExtensionsTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, null, \"2 To\")]\r\n    [InlineData(2, \"GB\", \"2048 Go\")]\r\n    [InlineData(2.123, \"#.#\", \"2,1 To\")]\r\n    public void HumanizesTerabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Terabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 b\")]\r\n    [InlineData(0, \"GB\", \"0 Go\")]\r\n    [InlineData(2, null, \"2 Go\")]\r\n    [InlineData(2, \"MB\", \"2048 Mo\")]\r\n    [InlineData(2.123, \"#.##\", \"2,12 Go\")]\r\n    public void HumanizesGigabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Gigabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 b\")]\r\n    [InlineData(0, \"MB\", \"0 Mo\")]\r\n    [InlineData(2, null, \"2 Mo\")]\r\n    [InlineData(2, \"KB\", \"2048 Ko\")]\r\n    [InlineData(2.123, \"#\", \"2 Mo\")]\r\n    public void HumanizesMegabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Megabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 b\")]\r\n    [InlineData(0, \"KB\", \"0 Ko\")]\r\n    [InlineData(2, null, \"2 Ko\")]\r\n    [InlineData(2, \"B\", \"2048 o\")]\r\n    [InlineData(2.123, \"#.####\", \"2,123 Ko\")]\r\n    public void HumanizesKilobytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Kilobytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 b\")]\r\n    [InlineData(0, \"#.##\", \"0 b\")]\r\n    [InlineData(0, \"#.## B\", \"0 o\")]\r\n    [InlineData(0, \"B\", \"0 o\")]\r\n    [InlineData(2, null, \"2 o\")]\r\n    [InlineData(2000, \"KB\", \"1,95 Ko\")]\r\n    [InlineData(2123, \"#.##\", \"2,07 Ko\")]\r\n    [InlineData(10000000, \"KB\", \"9765,63 Ko\")]\r\n    [InlineData(10000000, \"#,##0 KB\", \"9 766 Ko\")]\r\n    [InlineData(10000000, \"#,##0.# KB\", \"9 765,6 Ko\")]\r\n    public void HumanizesBytes(double input, string? format, string expectedValue)\r\n    {\r\n        expectedValue = expectedValue.Replace(\" \", NumberFormatInfo.CurrentInfo.NumberGroupSeparator);\r\n        Assert.Equal(\r\n            expectedValue,\r\n            input\r\n                .Bytes()\r\n                .Humanize(format));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 b\")]\r\n    [InlineData(0, \"b\", \"0 b\")]\r\n    [InlineData(2, null, \"2 b\")]\r\n    [InlineData(12, \"B\", \"1,5 o\")]\r\n    [InlineData(10000, \"#.# KB\", \"1,2 Ko\")]\r\n    public void HumanizesBits(long input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Bits().Humanize(format));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr/Bytes/ToFullWordsTests.cs",
    "content": "﻿namespace fr.Bytes;\r\n\r\n[UseCulture(\"fr-FR\")]\r\npublic class ToFullWordsTests\r\n{\r\n    [Fact]\r\n    public void ReturnsSingularBit() =>\r\n        Assert.Equal(\"1 bit\", ByteSize.FromBits(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralBits() =>\r\n        Assert.Equal(\"2 bits\", ByteSize.FromBits(2).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularByte() =>\r\n        Assert.Equal(\"1 octet\", ByteSize.FromBytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralBytes() =>\r\n        Assert.Equal(\"10 octets\", ByteSize.FromBytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularKiloByte() =>\r\n        Assert.Equal(\"1 kilooctet\", ByteSize.FromKilobytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralKilobytes() =>\r\n        Assert.Equal(\"10 kilooctets\", ByteSize.FromKilobytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularMegabyte() =>\r\n        Assert.Equal(\"1 mégaoctet\", ByteSize.FromMegabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralMegabytes() =>\r\n        Assert.Equal(\"10 mégaoctets\", ByteSize.FromMegabytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularGigabyte() =>\r\n        Assert.Equal(\"1 gigaoctet\", ByteSize.FromGigabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralGigabytes() =>\r\n        Assert.Equal(\"10 gigaoctets\", ByteSize.FromGigabytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularTerabyte() =>\r\n        Assert.Equal(\"1 téraoctet\", ByteSize.FromTerabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralTerabytes() =>\r\n        Assert.Equal(\"10 téraoctets\", ByteSize.FromTerabytes(10).ToFullWords());\r\n\r\n    [Theory]\r\n    [InlineData(229376, \"B\", \"229376 octets\")]\r\n    [InlineData(229376, \"# KB\", \"224 kilooctets\")]\r\n    public void ToFullWordsFormatted(double input, string format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, ByteSize.FromBytes(input).ToFullWords(format));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr/Bytes/ToStringTests.cs",
    "content": "﻿namespace fr.Bytes;\r\n\r\n[UseCulture(\"fr-FR\")]\r\npublic class ToStringTests\r\n{\r\n    [Fact]\r\n    public void ReturnsLargestMetricSuffix() =>\r\n        Assert.Equal(\"10,5 Ko\", ByteSize.FromKilobytes(10.5).ToString());\r\n\r\n    [Fact]\r\n    public void ReturnsDefaultNumberFormat() =>\r\n        Assert.Equal(\"10,5 Ko\", ByteSize.FromKilobytes(10.5).ToString(\"KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsProvidedNumberFormat() =>\r\n        Assert.Equal(\"10,1234 Ko\", ByteSize.FromKilobytes(10.1234).ToString(\"#.#### KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBits() =>\r\n        Assert.Equal(\"10 b\", ByteSize.FromBits(10).ToString(\"##.#### b\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBytes() =>\r\n        Assert.Equal(\"10 o\", ByteSize.FromBytes(10).ToString(\"##.#### B\"));\r\n\r\n    [Fact]\r\n    public void ReturnsKilobytes() =>\r\n        Assert.Equal(\"10 Ko\", ByteSize.FromKilobytes(10).ToString(\"##.#### KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsMegabytes() =>\r\n        Assert.Equal(\"10 Mo\", ByteSize.FromMegabytes(10).ToString(\"##.#### MB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsGigabytes() =>\r\n        Assert.Equal(\"10 Go\", ByteSize.FromGigabytes(10).ToString(\"##.#### GB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsTerabytes() =>\r\n        Assert.Equal(\"10 To\", ByteSize.FromTerabytes(10).ToString(\"##.#### TB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsSelectedFormat() =>\r\n        Assert.Equal(\"10,0 To\", ByteSize.FromTerabytes(10).ToString(\"0.0 TB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsLargestMetricPrefixLargerThanZero() =>\r\n        Assert.Equal(\"512 Ko\", ByteSize.FromMegabytes(.5).ToString(\"#.#\"));\r\n\r\n    [Fact]\r\n    public void ReturnsLargestMetricPrefixLargerThanZeroForNegativeValues() =>\r\n        Assert.Equal(\"-512 Ko\", ByteSize.FromMegabytes(-.5).ToString(\"#.#\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBytesViaGeneralFormat() =>\r\n        Assert.Equal(\"10 o\", $\"{ByteSize.FromBytes(10)}\");\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr/DateHumanizeTests.cs",
    "content": "﻿namespace fr;\r\n\r\n[UseCulture(\"fr\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"il y a une seconde\")]\r\n    [InlineData(2, \"il y a 2 secondes\")]\r\n    [InlineData(10, \"il y a 10 secondes\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"dans une seconde\")]\r\n    [InlineData(2, \"dans 2 secondes\")]\r\n    [InlineData(10, \"dans 10 secondes\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"il y a une minute\")]\r\n    [InlineData(2, \"il y a 2 minutes\")]\r\n    [InlineData(10, \"il y a 10 minutes\")]\r\n    [InlineData(60, \"il y a une heure\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"dans une minute\")]\r\n    [InlineData(2, \"dans 2 minutes\")]\r\n    [InlineData(10, \"dans 10 minutes\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"il y a une heure\")]\r\n    [InlineData(2, \"il y a 2 heures\")]\r\n    [InlineData(10, \"il y a 10 heures\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"dans une heure\")]\r\n    [InlineData(2, \"dans 2 heures\")]\r\n    [InlineData(10, \"dans 10 heures\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"hier\")]\r\n    [InlineData(2, \"avant-hier\")]\r\n    [InlineData(10, \"il y a 10 jours\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"demain\")]\r\n    [InlineData(2, \"après-demain\")]\r\n    [InlineData(10, \"dans 10 jours\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"il y a un mois\")]\r\n    [InlineData(2, \"il y a 2 mois\")]\r\n    [InlineData(10, \"il y a 10 mois\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"dans un mois\")]\r\n    [InlineData(2, \"dans 2 mois\")]\r\n    [InlineData(10, \"dans 10 mois\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"il y a un an\")]\r\n    [InlineData(2, \"il y a 2 ans\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"dans un an\")]\r\n    [InlineData(2, \"dans 2 ans\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr/DateToOrdinalWordsTests.cs",
    "content": "﻿namespace fr;\r\n\r\n[UseCulture(\"fr\")]\r\npublic class DateToOrdinalWordsTests\r\n{\r\n    [Fact]\r\n    public void OrdinalizeString()\r\n    {\r\n        Assert.Equal(\"1er janvier 2015\", new DateTime(2015, 1, 1).ToOrdinalWords());\r\n        Assert.Equal(\"2 mars 2020\", new DateTime(2020, 3, 2).ToOrdinalWords());\r\n        Assert.Equal(\"31 octobre 2021\", new DateTime(2021, 10, 31).ToOrdinalWords());\r\n    }\r\n\r\n#if NET6_0_OR_GREATER\r\n    [Fact]\r\n    public void OrdinalizeDateOnlyString()\r\n    {\r\n        Assert.Equal(\"1er janvier 2015\", new DateOnly(2015, 1, 1).ToOrdinalWords());\r\n        Assert.Equal(\"2 mars 2020\", new DateOnly(2020, 3, 2).ToOrdinalWords());\r\n        Assert.Equal(\"31 octobre 2021\", new DateOnly(2021, 10, 31).ToOrdinalWords());\r\n    }\r\n#endif\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr/NumberToWordsTests.cs",
    "content": "﻿namespace fr;\r\n\r\n[UseCulture(\"fr-FR\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"zéro\")]\r\n    [InlineData(1, \"un\")]\r\n    [InlineData(10, \"dix\")]\r\n    [InlineData(11, \"onze\")]\r\n    [InlineData(15, \"quinze\")]\r\n    [InlineData(17, \"dix-sept\")]\r\n    [InlineData(25, \"vingt-cinq\")]\r\n    [InlineData(31, \"trente et un\")]\r\n    [InlineData(70, \"soixante-dix\")]\r\n    [InlineData(71, \"soixante et onze\")]\r\n    [InlineData(80, \"quatre-vingts\")]\r\n    [InlineData(81, \"quatre-vingt-un\")]\r\n    [InlineData(90, \"quatre-vingt-dix\")]\r\n    [InlineData(91, \"quatre-vingt-onze\")]\r\n    [InlineData(122, \"cent vingt-deux\")]\r\n    [InlineData(3501, \"trois mille cinq cent un\")]\r\n    [InlineData(100, \"cent\")]\r\n    [InlineData(1000, \"mille\")]\r\n    [InlineData(100000, \"cent mille\")]\r\n    [InlineData(1000000, \"un million\")]\r\n    [InlineData(10000000, \"dix millions\")]\r\n    [InlineData(100000000, \"cent millions\")]\r\n    [InlineData(1000000000, \"un milliard\")]\r\n    [InlineData(111, \"cent onze\")]\r\n    [InlineData(1111, \"mille cent onze\")]\r\n    [InlineData(111111, \"cent onze mille cent onze\")]\r\n    [InlineData(1111111, \"un million cent onze mille cent onze\")]\r\n    [InlineData(11111111, \"onze millions cent onze mille cent onze\")]\r\n    [InlineData(111111111, \"cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(1111111111, \"un milliard cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(123, \"cent vingt-trois\")]\r\n    [InlineData(1234, \"mille deux cent trente-quatre\")]\r\n    [InlineData(12345, \"douze mille trois cent quarante-cinq\")]\r\n    [InlineData(123456, \"cent vingt-trois mille quatre cent cinquante-six\")]\r\n    [InlineData(1234567, \"un million deux cent trente-quatre mille cinq cent soixante-sept\")]\r\n    [InlineData(12345678, \"douze millions trois cent quarante-cinq mille six cent soixante-dix-huit\")]\r\n    [InlineData(123456789, \"cent vingt-trois millions quatre cent cinquante-six mille sept cent quatre-vingt-neuf\")]\r\n    [InlineData(1234567890, \"un milliard deux cent trente-quatre millions cinq cent soixante-sept mille huit cent quatre-vingt-dix\")]\r\n    [InlineData(1234567899, \"un milliard deux cent trente-quatre millions cinq cent soixante-sept mille huit cent quatre-vingt-dix-neuf\")]\r\n    [InlineData(223, \"deux cent vingt-trois\")]\r\n    [InlineData(2234, \"deux mille deux cent trente-quatre\")]\r\n    [InlineData(22345, \"vingt-deux mille trois cent quarante-cinq\")]\r\n    [InlineData(223456, \"deux cent vingt-trois mille quatre cent cinquante-six\")]\r\n    [InlineData(2234567, \"deux millions deux cent trente-quatre mille cinq cent soixante-sept\")]\r\n    [InlineData(22345678, \"vingt-deux millions trois cent quarante-cinq mille six cent soixante-dix-huit\")]\r\n    [InlineData(223456789, \"deux cent vingt-trois millions quatre cent cinquante-six mille sept cent quatre-vingt-neuf\")]\r\n    [InlineData(2147483646, \"deux milliards cent quarante-sept millions quatre cent quatre-vingt-trois mille six cent quarante-six\")]\r\n    [InlineData(1999, \"mille neuf cent quatre-vingt-dix-neuf\")]\r\n    [InlineData(2014, \"deux mille quatorze\")]\r\n    [InlineData(2048, \"deux mille quarante-huit\")]\r\n    [InlineData(400, \"quatre cents\")]\r\n    [InlineData(401, \"quatre cent un\")]\r\n    [InlineData(480, \"quatre cent quatre-vingts\")]\r\n    [InlineData(80000, \"quatre-vingt mille\")]\r\n    [InlineData(80000000, \"quatre-vingts millions\")]\r\n    [InlineData(80080080, \"quatre-vingts millions quatre-vingt mille quatre-vingts\")]\r\n    [InlineData(200200200, \"deux cents millions deux cent mille deux cents\")]\r\n    [InlineData(200200202, \"deux cents millions deux cent mille deux cent deux\")]\r\n    public void ToWordsInt(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"une\", GrammaticalGender.Feminine)]\r\n    [InlineData(1, \"un\", GrammaticalGender.Masculine)]\r\n    [InlineData(2, \"deux\", GrammaticalGender.Feminine)]\r\n    [InlineData(2, \"deux\", GrammaticalGender.Masculine)]\r\n    [InlineData(11, \"onze\", GrammaticalGender.Feminine)]\r\n    [InlineData(11, \"onze\", GrammaticalGender.Masculine)]\r\n    [InlineData(21, \"vingt et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(21, \"vingt et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(31, \"trente et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(31, \"trente et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(41, \"quarante et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(41, \"quarante et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(51, \"cinquante et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(51, \"cinquante et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(61, \"soixante et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(61, \"soixante et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(71, \"soixante et onze\", GrammaticalGender.Feminine)]\r\n    [InlineData(71, \"soixante et onze\", GrammaticalGender.Masculine)]\r\n    [InlineData(81, \"quatre-vingt-une\", GrammaticalGender.Feminine)]\r\n    [InlineData(81, \"quatre-vingt-un\", GrammaticalGender.Masculine)]\r\n    [InlineData(91, \"quatre-vingt-onze\", GrammaticalGender.Feminine)]\r\n    [InlineData(91, \"quatre-vingt-onze\", GrammaticalGender.Masculine)]\r\n    [InlineData(121, \"cent vingt et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(121, \"cent vingt et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(10121, \"dix mille cent vingt et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(10121, \"dix mille cent vingt et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(81000, \"quatre-vingt-un mille\", GrammaticalGender.Feminine)]\r\n    [InlineData(81000, \"quatre-vingt-un mille\", GrammaticalGender.Masculine)]\r\n    public void ToWordsIntWithGender(int number, string expected, GrammaticalGender gender) =>\r\n        Assert.Equal(expected, number.ToWords(gender));\r\n\r\n    [Theory]\r\n    [InlineData(1L, \"un\")]\r\n    [InlineData(11L, \"onze\")]\r\n    [InlineData(111L, \"cent onze\")]\r\n    [InlineData(1111L, \"mille cent onze\")]\r\n    [InlineData(11111L, \"onze mille cent onze\")]\r\n    [InlineData(111111L, \"cent onze mille cent onze\")]\r\n    [InlineData(1111111L, \"un million cent onze mille cent onze\")]\r\n    [InlineData(11111111L, \"onze millions cent onze mille cent onze\")]\r\n    [InlineData(111111111L, \"cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(1111111111L, \"un milliard cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(11111111111L, \"onze milliards cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(111111111111L, \"cent onze milliards cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(1111111111111L, \"un billion cent onze milliards cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(11111111111111L, \"onze billions cent onze milliards cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(111111111111111L, \"cent onze billions cent onze milliards cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(1111111111111111L, \"un billiard cent onze billions cent onze milliards cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(11111111111111111L, \"onze billiards cent onze billions cent onze milliards cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(111111111111111111L, \"cent onze billiards cent onze billions cent onze milliards cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(1111111111111111111L, \"un trillion cent onze billiards cent onze billions cent onze milliards cent onze millions cent onze mille cent onze\")]\r\n    public void ToWordsLong(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zérotième\")]\r\n    [InlineData(1, \"premier\")]\r\n    [InlineData(2, \"deuxième\")]\r\n    [InlineData(3, \"troisième\")]\r\n    [InlineData(4, \"quatrième\")]\r\n    [InlineData(5, \"cinquième\")]\r\n    [InlineData(6, \"sixième\")]\r\n    [InlineData(7, \"septième\")]\r\n    [InlineData(8, \"huitième\")]\r\n    [InlineData(9, \"neuvième\")]\r\n    [InlineData(10, \"dixième\")]\r\n    [InlineData(11, \"onzième\")]\r\n    [InlineData(12, \"douzième\")]\r\n    [InlineData(13, \"treizième\")]\r\n    [InlineData(14, \"quatorzième\")]\r\n    [InlineData(15, \"quinzième\")]\r\n    [InlineData(16, \"seizième\")]\r\n    [InlineData(17, \"dix-septième\")]\r\n    [InlineData(18, \"dix-huitième\")]\r\n    [InlineData(19, \"dix-neuvième\")]\r\n    [InlineData(20, \"vingtième\")]\r\n    [InlineData(21, \"vingt et unième\")]\r\n    [InlineData(22, \"vingt-deuxième\")]\r\n    [InlineData(30, \"trentième\")]\r\n    [InlineData(40, \"quarantième\")]\r\n    [InlineData(50, \"cinquantième\")]\r\n    [InlineData(60, \"soixantième\")]\r\n    [InlineData(70, \"soixante-dixième\")]\r\n    [InlineData(80, \"quatre-vingtième\")]\r\n    [InlineData(90, \"quatre-vingt-dixième\")]\r\n    [InlineData(95, \"quatre-vingt-quinzième\")]\r\n    [InlineData(96, \"quatre-vingt-seizième\")]\r\n    [InlineData(100, \"centième\")]\r\n    [InlineData(120, \"cent vingtième\")]\r\n    [InlineData(121, \"cent vingt et unième\")]\r\n    [InlineData(1000, \"millième\")]\r\n    [InlineData(1001, \"mille unième\")]\r\n    [InlineData(1021, \"mille vingt et unième\")]\r\n    [InlineData(10000, \"dix millième\")]\r\n    [InlineData(10121, \"dix mille cent vingt et unième\")]\r\n    [InlineData(100000, \"cent millième\")]\r\n    [InlineData(1000000, \"millionième\")]\r\n    [InlineData(1000000000, \"milliardième\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"première\", GrammaticalGender.Feminine)]\r\n    [InlineData(1, \"premier\", GrammaticalGender.Masculine)]\r\n    [InlineData(2, \"deuxième\", GrammaticalGender.Feminine)]\r\n    [InlineData(2, \"deuxième\", GrammaticalGender.Masculine)]\r\n    [InlineData(121, \"cent vingt et unième\", GrammaticalGender.Feminine)]\r\n    [InlineData(121, \"cent vingt et unième\", GrammaticalGender.Masculine)]\r\n    [InlineData(10121, \"dix mille cent vingt et unième\", GrammaticalGender.Feminine)]\r\n    [InlineData(10121, \"dix mille cent vingt et unième\", GrammaticalGender.Masculine)]\r\n    public void ToOrdinalWordsWithGender(int number, string expected, GrammaticalGender gender) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(gender));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr/OrdinalizeTests.cs",
    "content": "﻿namespace fr;\r\n\r\n[UseCulture(\"fr\")]\r\npublic class OrdinalizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"0\", \"0ème\")]\r\n    [InlineData(\"1\", \"1er\")]\r\n    [InlineData(\"2\", \"2ème\")]\r\n    [InlineData(\"3\", \"3ème\")]\r\n    [InlineData(\"4\", \"4ème\")]\r\n    [InlineData(\"5\", \"5ème\")]\r\n    [InlineData(\"6\", \"6ème\")]\r\n    [InlineData(\"23\", \"23ème\")]\r\n    [InlineData(\"100\", \"100ème\")]\r\n    [InlineData(\"101\", \"101ème\")]\r\n    [InlineData(\"102\", \"102ème\")]\r\n    [InlineData(\"103\", \"103ème\")]\r\n    [InlineData(\"1001\", \"1001ème\")]\r\n    public void OrdinalizeString(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0ème\")]\r\n    [InlineData(\"1\", \"1ère\")]\r\n    [InlineData(\"2\", \"2ème\")]\r\n    [InlineData(\"3\", \"3ème\")]\r\n    [InlineData(\"4\", \"4ème\")]\r\n    [InlineData(\"5\", \"5ème\")]\r\n    [InlineData(\"6\", \"6ème\")]\r\n    [InlineData(\"23\", \"23ème\")]\r\n    [InlineData(\"100\", \"100ème\")]\r\n    [InlineData(\"101\", \"101ème\")]\r\n    [InlineData(\"102\", \"102ème\")]\r\n    [InlineData(\"103\", \"103ème\")]\r\n    [InlineData(\"1001\", \"1001ème\")]\r\n    public void OrdinalizeStringFeminine(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0ème\")]\r\n    [InlineData(\"1\", \"1er\")]\r\n    [InlineData(\"2\", \"2ème\")]\r\n    [InlineData(\"3\", \"3ème\")]\r\n    [InlineData(\"4\", \"4ème\")]\r\n    [InlineData(\"5\", \"5ème\")]\r\n    [InlineData(\"6\", \"6ème\")]\r\n    [InlineData(\"23\", \"23ème\")]\r\n    [InlineData(\"100\", \"100ème\")]\r\n    [InlineData(\"101\", \"101ème\")]\r\n    [InlineData(\"102\", \"102ème\")]\r\n    [InlineData(\"103\", \"103ème\")]\r\n    [InlineData(\"1001\", \"1001ème\")]\r\n    public void OrdinalizeStringNeuter(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Neuter), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0ème\")]\r\n    [InlineData(1, \"1er\")]\r\n    [InlineData(2, \"2ème\")]\r\n    [InlineData(3, \"3ème\")]\r\n    [InlineData(4, \"4ème\")]\r\n    [InlineData(5, \"5ème\")]\r\n    [InlineData(6, \"6ème\")]\r\n    [InlineData(10, \"10ème\")]\r\n    [InlineData(23, \"23ème\")]\r\n    [InlineData(100, \"100ème\")]\r\n    [InlineData(101, \"101ème\")]\r\n    [InlineData(102, \"102ème\")]\r\n    [InlineData(103, \"103ème\")]\r\n    [InlineData(1001, \"1001ème\")]\r\n    public void OrdinalizeNumber(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0ème\")]\r\n    [InlineData(1, \"1ère\")]\r\n    [InlineData(2, \"2ème\")]\r\n    [InlineData(3, \"3ème\")]\r\n    [InlineData(4, \"4ème\")]\r\n    [InlineData(5, \"5ème\")]\r\n    [InlineData(6, \"6ème\")]\r\n    [InlineData(10, \"10ème\")]\r\n    [InlineData(23, \"23ème\")]\r\n    [InlineData(100, \"100ème\")]\r\n    [InlineData(101, \"101ème\")]\r\n    [InlineData(102, \"102ème\")]\r\n    [InlineData(103, \"103ème\")]\r\n    [InlineData(1001, \"1001ème\")]\r\n    public void OrdinalizeNumberFeminine(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0ème\")]\r\n    [InlineData(1, \"1er\")]\r\n    [InlineData(2, \"2ème\")]\r\n    [InlineData(3, \"3ème\")]\r\n    [InlineData(4, \"4ème\")]\r\n    [InlineData(5, \"5ème\")]\r\n    [InlineData(6, \"6ème\")]\r\n    [InlineData(10, \"10ème\")]\r\n    [InlineData(23, \"23ème\")]\r\n    [InlineData(100, \"100ème\")]\r\n    [InlineData(101, \"101ème\")]\r\n    [InlineData(102, \"102ème\")]\r\n    [InlineData(103, \"103ème\")]\r\n    [InlineData(1001, \"1001ème\")]\r\n    public void OrdinalizeNumberNeuter(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Neuter), ordinalized);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr/TimeOnlyHumanizeTests.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace fr;\r\n\r\n[UseCulture(\"fr\")]\r\npublic class TimeOnlyHumanizeTests\r\n{\r\n    [Fact]\r\n    public void DefaultStrategy_SameTime()\r\n    {\r\n        var inputTime = new TimeOnly(13, 07, 05);\r\n        var baseTime = new TimeOnly(13, 07, 05);\r\n\r\n        const string expectedResult = \"maintenant\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void DefaultStrategy_HoursApart()\r\n    {\r\n        var inputTime = new TimeOnly(3, 08, 05);\r\n        var baseTime = new TimeOnly(1, 08, 05);\r\n\r\n        const string expectedResult = \"dans 2 heures\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void DefaultStrategy_HoursAgo()\r\n    {\r\n        var inputTime = new TimeOnly(13, 07, 02);\r\n        var baseTime = new TimeOnly(17, 07, 05);\r\n\r\n        const string expectedResult = \"il y a 4 heures\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void PrecisionStrategy_NextDay()\r\n    {\r\n        var inputTime = new TimeOnly(18, 10, 49);\r\n        var baseTime = new TimeOnly(13, 07, 04);\r\n\r\n        const string expectedResult = \"dans 5 heures\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void Never()\r\n    {\r\n        TimeOnly? never = null;\r\n        Assert.Equal(\"jamais\", never.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void Nullable_ExpectSame()\r\n    {\r\n        TimeOnly? never = new TimeOnly(23, 12, 7);\r\n        Assert.Equal(never.Value.Humanize(), never.Humanize());\r\n    }\r\n}\r\n\r\n\r\n#endif\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace fr;\r\n\r\n[UseCulture(\"fr\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(366, \"1 an\")]\r\n    [InlineData(731, \"2 ans\")]\r\n    [InlineData(1096, \"3 ans\")]\r\n    [InlineData(4018, \"11 ans\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan\r\n            .FromDays(days)\r\n            .Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(366, \"un an\")]\r\n    [InlineData(731, \"deux ans\")]\r\n    [InlineData(1096, \"trois ans\")]\r\n    [InlineData(4018, \"onze ans\")]\r\n    public void YearsToWord(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan\r\n            .FromDays(days)\r\n            .Humanize(maxUnit: TimeUnit.Year, toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(31, \"1 mois\")]\r\n    [InlineData(61, \"2 mois\")]\r\n    [InlineData(92, \"3 mois\")]\r\n    [InlineData(335, \"11 mois\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan\r\n            .FromDays(days)\r\n            .Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(31, \"un mois\")]\r\n    [InlineData(61, \"deux mois\")]\r\n    [InlineData(92, \"trois mois\")]\r\n    [InlineData(335, \"onze mois\")]\r\n    public void MonthsToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan\r\n            .FromDays(days)\r\n            .Humanize(maxUnit: TimeUnit.Year, toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(14, \"2 semaines\")]\r\n    [InlineData(7, \"1 semaine\")]\r\n    public void Weeks(int days, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromDays(days)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(14, \"deux semaines\")]\r\n    [InlineData(7, \"une semaine\")]\r\n    public void WeeksToWords(int days, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromDays(days)\r\n            .Humanize(toWords: true);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(6, \"6 jours\")]\r\n    [InlineData(1, \"1 jour\")]\r\n    public void Days(int days, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromDays(days)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(6, \"six jours\")]\r\n    [InlineData(1, \"un jour\")]\r\n    public void DaysToWords(int days, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromDays(days)\r\n            .Humanize(toWords: true);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 heures\")]\r\n    [InlineData(1, \"1 heure\")]\r\n    public void Hours(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromHours(hours)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"deux heures\")]\r\n    [InlineData(1, \"une heure\")]\r\n    public void HoursToWords(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromHours(hours)\r\n            .Humanize(toWords: true);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 minutes\")]\r\n    [InlineData(1, \"1 minute\")]\r\n    public void Minutes(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromMinutes(minutes)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"deux minutes\")]\r\n    [InlineData(1, \"une minute\")]\r\n    public void MinutesToWords(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromMinutes(minutes)\r\n            .Humanize(toWords: true);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 secondes\")]\r\n    [InlineData(1, \"1 seconde\")]\r\n    public void Seconds(int seconds, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromSeconds(seconds)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"deux secondes\")]\r\n    [InlineData(1, \"une seconde\")]\r\n    public void SecondsToWords(int seconds, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromSeconds(seconds)\r\n            .Humanize(toWords: true);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 millisecondes\")]\r\n    [InlineData(1, \"1 milliseconde\")]\r\n    public void Milliseconds(int ms, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromMilliseconds(ms)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"deux millisecondes\")]\r\n    [InlineData(1, \"une milliseconde\")]\r\n    public void MillisecondsToWords(int ms, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromMilliseconds(ms)\r\n            .Humanize(toWords: true);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(4, false, \"4 jours\")]\r\n    [InlineData(23, false, \"3 semaines\")]\r\n    [InlineData(64, false, \"2 mois\")]\r\n    [InlineData(367, true, \"un an\")]\r\n    [InlineData(750, true, \"deux ans\")]\r\n    public void Age(int days, bool toWords, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromDays(days)\r\n            .ToAge(toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(TimeUnit.Year, \"0 an\")]\r\n    [InlineData(TimeUnit.Month, \"0 mois\")]\r\n    [InlineData(TimeUnit.Week, \"0 semaine\")]\r\n    [InlineData(TimeUnit.Day, \"0 jour\")]\r\n    [InlineData(TimeUnit.Hour, \"0 heure\")]\r\n    [InlineData(TimeUnit.Minute, \"0 minute\")]\r\n    [InlineData(TimeUnit.Second, \"0 seconde\")]\r\n    [InlineData(TimeUnit.Millisecond, \"0 milliseconde\")]\r\n    public void NoTime(TimeUnit minUnit, string expected)\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(minUnit: minUnit);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTimeToWords()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(toWords: true);\r\n        Assert.Equal(\"temps nul\", actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr/TimeToClockNotationTests.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace fr;\r\n\r\n[UseCulture(\"fr\")]\r\npublic class TimeToClockNotationTests\r\n{\r\n    [Theory]\r\n    [InlineData(00, 00, \"minuit\")]\r\n    [InlineData(00, 07, \"minuit sept\")]\r\n    [InlineData(01, 11, \"une heure onze\")]\r\n    [InlineData(04, 00, \"quatre heures\")]\r\n    [InlineData(05, 01, \"cinq heures une\")]\r\n    [InlineData(06, 05, \"six heures cinq\")]\r\n    [InlineData(07, 10, \"sept heures dix\")]\r\n    [InlineData(08, 15, \"huit heures quinze\")]\r\n    [InlineData(09, 20, \"neuf heures vingt\")]\r\n    [InlineData(10, 25, \"dix heures vingt-cinq\")]\r\n    [InlineData(11, 30, \"onze heures trente\")]\r\n    [InlineData(12, 00, \"midi\")]\r\n    [InlineData(12, 38, \"midi trente-huit\")]\r\n    [InlineData(15, 35, \"quinze heures trente-cinq\")]\r\n    [InlineData(16, 40, \"seize heures quarante\")]\r\n    [InlineData(17, 45, \"dix-sept heures quarante-cinq\")]\r\n    [InlineData(18, 50, \"dix-huit heures cinquante\")]\r\n    [InlineData(19, 55, \"dix-neuf heures cinquante-cinq\")]\r\n    [InlineData(20, 59, \"vingt heures cinquante-neuf\")]\r\n    public void ConvertToClockNotationTimeOnlyString(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation();\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(00, 00, \"minuit\")]\r\n    [InlineData(00, 07, \"minuit cinq\")]\r\n    [InlineData(01, 11, \"une heure dix\")]\r\n    [InlineData(04, 00, \"quatre heures\")]\r\n    [InlineData(05, 01, \"cinq heures\")]\r\n    [InlineData(06, 05, \"six heures cinq\")]\r\n    [InlineData(07, 10, \"sept heures dix\")]\r\n    [InlineData(08, 15, \"huit heures quinze\")]\r\n    [InlineData(09, 20, \"neuf heures vingt\")]\r\n    [InlineData(10, 25, \"dix heures vingt-cinq\")]\r\n    [InlineData(11, 30, \"onze heures trente\")]\r\n    [InlineData(12, 00, \"midi\")]\r\n    [InlineData(12, 38, \"midi quarante\")]\r\n    [InlineData(13, 23, \"treize heures vingt-cinq\")]\r\n    [InlineData(14, 32, \"quatorze heures trente\")]\r\n    [InlineData(15, 35, \"quinze heures trente-cinq\")]\r\n    [InlineData(16, 40, \"seize heures quarante\")]\r\n    [InlineData(17, 45, \"dix-sept heures quarante-cinq\")]\r\n    [InlineData(18, 50, \"dix-huit heures cinquante\")]\r\n    [InlineData(19, 55, \"dix-neuf heures cinquante-cinq\")]\r\n    [InlineData(20, 59, \"vingt et une heures\")]\r\n    public void ConvertToRoundedClockNotationTimeOnlyString(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes);\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr/TimeUnitToSymbolTests.cs",
    "content": "namespace fr;\r\n\r\n[UseCulture(\"fr\")]\r\npublic class TimeUnitToSymbolTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(TimeUnit.Millisecond, \"ms\")]\r\n    [InlineData(TimeUnit.Second, \"s\")]\r\n    [InlineData(TimeUnit.Minute, \"min\")]\r\n    [InlineData(TimeUnit.Hour, \"h\")]\r\n    [InlineData(TimeUnit.Day, \"j\")]\r\n    [InlineData(TimeUnit.Week, \"semaine\")]\r\n    [InlineData(TimeUnit.Month, \"mois\")]\r\n    [InlineData(TimeUnit.Year, \"a\")]\r\n    public void ToSymbol(TimeUnit unit, string expected) =>\r\n        Assert.Equal(expected, unit.ToSymbol());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr-BE/DateHumanizeTests.cs",
    "content": "﻿namespace frBE;\r\n\r\n[UseCulture(\"fr-BE\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"il y a une seconde\")]\r\n    [InlineData(2, \"il y a 2 secondes\")]\r\n    [InlineData(10, \"il y a 10 secondes\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"dans une seconde\")]\r\n    [InlineData(2, \"dans 2 secondes\")]\r\n    [InlineData(10, \"dans 10 secondes\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"il y a une minute\")]\r\n    [InlineData(2, \"il y a 2 minutes\")]\r\n    [InlineData(10, \"il y a 10 minutes\")]\r\n    [InlineData(60, \"il y a une heure\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"dans une minute\")]\r\n    [InlineData(2, \"dans 2 minutes\")]\r\n    [InlineData(10, \"dans 10 minutes\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"il y a une heure\")]\r\n    [InlineData(2, \"il y a 2 heures\")]\r\n    [InlineData(10, \"il y a 10 heures\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"dans une heure\")]\r\n    [InlineData(2, \"dans 2 heures\")]\r\n    [InlineData(10, \"dans 10 heures\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"hier\")]\r\n    [InlineData(2, \"avant-hier\")]\r\n    [InlineData(10, \"il y a 10 jours\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"demain\")]\r\n    [InlineData(2, \"après-demain\")]\r\n    [InlineData(10, \"dans 10 jours\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"il y a un mois\")]\r\n    [InlineData(2, \"il y a 2 mois\")]\r\n    [InlineData(10, \"il y a 10 mois\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"dans un mois\")]\r\n    [InlineData(2, \"dans 2 mois\")]\r\n    [InlineData(10, \"dans 10 mois\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"il y a un an\")]\r\n    [InlineData(2, \"il y a 2 ans\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"dans un an\")]\r\n    [InlineData(2, \"dans 2 ans\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr-BE/NumberToWordsTests.cs",
    "content": "﻿namespace frBE;\r\n\r\n[UseCulture(\"fr-BE\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"zéro\")]\r\n    [InlineData(1, \"un\")]\r\n    [InlineData(10, \"dix\")]\r\n    [InlineData(11, \"onze\")]\r\n    [InlineData(15, \"quinze\")]\r\n    [InlineData(17, \"dix-sept\")]\r\n    [InlineData(25, \"vingt-cinq\")]\r\n    [InlineData(31, \"trente et un\")]\r\n    [InlineData(71, \"septante et un\")]\r\n    [InlineData(80, \"quatre-vingts\")]\r\n    [InlineData(81, \"quatre-vingt-un\")]\r\n    [InlineData(122, \"cent vingt-deux\")]\r\n    [InlineData(3501, \"trois mille cinq cent un\")]\r\n    [InlineData(100, \"cent\")]\r\n    [InlineData(1000, \"mille\")]\r\n    [InlineData(100000, \"cent mille\")]\r\n    [InlineData(1000000, \"un million\")]\r\n    [InlineData(10000000, \"dix millions\")]\r\n    [InlineData(100000000, \"cent millions\")]\r\n    [InlineData(200000000, \"deux cents millions\")]\r\n    [InlineData(1000000000, \"un milliard\")]\r\n    [InlineData(111, \"cent onze\")]\r\n    [InlineData(1111, \"mille cent onze\")]\r\n    [InlineData(111111, \"cent onze mille cent onze\")]\r\n    [InlineData(1111111, \"un million cent onze mille cent onze\")]\r\n    [InlineData(11111111, \"onze millions cent onze mille cent onze\")]\r\n    [InlineData(111111111, \"cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(1111111111, \"un milliard cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(123, \"cent vingt-trois\")]\r\n    [InlineData(1234, \"mille deux cent trente-quatre\")]\r\n    [InlineData(12345, \"douze mille trois cent quarante-cinq\")]\r\n    [InlineData(123456, \"cent vingt-trois mille quatre cent cinquante-six\")]\r\n    [InlineData(1234567, \"un million deux cent trente-quatre mille cinq cent soixante-sept\")]\r\n    [InlineData(12345678, \"douze millions trois cent quarante-cinq mille six cent septante-huit\")]\r\n    [InlineData(123456789, \"cent vingt-trois millions quatre cent cinquante-six mille sept cent quatre-vingt-neuf\")]\r\n    [InlineData(1234567890, \"un milliard deux cent trente-quatre millions cinq cent soixante-sept mille huit cent nonante\")]\r\n    [InlineData(1234567899, \"un milliard deux cent trente-quatre millions cinq cent soixante-sept mille huit cent nonante-neuf\")]\r\n    [InlineData(223, \"deux cent vingt-trois\")]\r\n    [InlineData(2234, \"deux mille deux cent trente-quatre\")]\r\n    [InlineData(22345, \"vingt-deux mille trois cent quarante-cinq\")]\r\n    [InlineData(200456, \"deux cent mille quatre cent cinquante-six\")]\r\n    [InlineData(223456, \"deux cent vingt-trois mille quatre cent cinquante-six\")]\r\n    [InlineData(2234567, \"deux millions deux cent trente-quatre mille cinq cent soixante-sept\")]\r\n    [InlineData(22345678, \"vingt-deux millions trois cent quarante-cinq mille six cent septante-huit\")]\r\n    [InlineData(223456789, \"deux cent vingt-trois millions quatre cent cinquante-six mille sept cent quatre-vingt-neuf\")]\r\n    [InlineData(2147483646, \"deux milliards cent quarante-sept millions quatre cent quatre-vingt-trois mille six cent quarante-six\")]\r\n    [InlineData(1999, \"mille neuf cent nonante-neuf\")]\r\n    [InlineData(2014, \"deux mille quatorze\")]\r\n    [InlineData(2048, \"deux mille quarante-huit\")]\r\n    [InlineData(400, \"quatre cents\")]\r\n    [InlineData(401, \"quatre cent un\")]\r\n    [InlineData(480, \"quatre cent quatre-vingts\")]\r\n    [InlineData(80000, \"quatre-vingt mille\")]\r\n    [InlineData(80000000, \"quatre-vingts millions\")]\r\n    [InlineData(80080080, \"quatre-vingts millions quatre-vingt mille quatre-vingts\")]\r\n    [InlineData(200200200, \"deux cents millions deux cent mille deux cents\")]\r\n    [InlineData(200200202, \"deux cents millions deux cent mille deux cent deux\")]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"une\", GrammaticalGender.Feminine)]\r\n    [InlineData(1, \"un\", GrammaticalGender.Masculine)]\r\n    [InlineData(2, \"deux\", GrammaticalGender.Feminine)]\r\n    [InlineData(2, \"deux\", GrammaticalGender.Masculine)]\r\n    [InlineData(11, \"onze\", GrammaticalGender.Feminine)]\r\n    [InlineData(11, \"onze\", GrammaticalGender.Masculine)]\r\n    [InlineData(21, \"vingt et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(21, \"vingt et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(31, \"trente et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(31, \"trente et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(41, \"quarante et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(41, \"quarante et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(51, \"cinquante et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(51, \"cinquante et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(61, \"soixante et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(61, \"soixante et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(71, \"septante et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(71, \"septante et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(81, \"quatre-vingt-une\", GrammaticalGender.Feminine)]\r\n    [InlineData(81, \"quatre-vingt-un\", GrammaticalGender.Masculine)]\r\n    [InlineData(91, \"nonante et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(91, \"nonante et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(121, \"cent vingt et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(121, \"cent vingt et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(10121, \"dix mille cent vingt et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(10121, \"dix mille cent vingt et un\", GrammaticalGender.Masculine)]\r\n    public void ToWordsWithGender(int number, string expected, GrammaticalGender gender) =>\r\n        Assert.Equal(expected, number.ToWords(gender));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zérotième\")]\r\n    [InlineData(1, \"premier\")]\r\n    [InlineData(2, \"deuxième\")]\r\n    [InlineData(3, \"troisième\")]\r\n    [InlineData(4, \"quatrième\")]\r\n    [InlineData(5, \"cinquième\")]\r\n    [InlineData(6, \"sixième\")]\r\n    [InlineData(7, \"septième\")]\r\n    [InlineData(8, \"huitième\")]\r\n    [InlineData(9, \"neuvième\")]\r\n    [InlineData(10, \"dixième\")]\r\n    [InlineData(11, \"onzième\")]\r\n    [InlineData(12, \"douzième\")]\r\n    [InlineData(13, \"treizième\")]\r\n    [InlineData(14, \"quatorzième\")]\r\n    [InlineData(15, \"quinzième\")]\r\n    [InlineData(16, \"seizième\")]\r\n    [InlineData(17, \"dix-septième\")]\r\n    [InlineData(18, \"dix-huitième\")]\r\n    [InlineData(19, \"dix-neuvième\")]\r\n    [InlineData(20, \"vingtième\")]\r\n    [InlineData(21, \"vingt et unième\")]\r\n    [InlineData(22, \"vingt-deuxième\")]\r\n    [InlineData(30, \"trentième\")]\r\n    [InlineData(40, \"quarantième\")]\r\n    [InlineData(50, \"cinquantième\")]\r\n    [InlineData(60, \"soixantième\")]\r\n    [InlineData(70, \"septantième\")]\r\n    [InlineData(80, \"quatre-vingtième\")]\r\n    [InlineData(90, \"nonantième\")]\r\n    [InlineData(95, \"nonante-cinquième\")]\r\n    [InlineData(96, \"nonante-sixième\")]\r\n    [InlineData(100, \"centième\")]\r\n    [InlineData(120, \"cent vingtième\")]\r\n    [InlineData(121, \"cent vingt et unième\")]\r\n    [InlineData(1000, \"millième\")]\r\n    [InlineData(1001, \"mille unième\")]\r\n    [InlineData(1021, \"mille vingt et unième\")]\r\n    [InlineData(10000, \"dix millième\")]\r\n    [InlineData(10121, \"dix mille cent vingt et unième\")]\r\n    [InlineData(100000, \"cent millième\")]\r\n    [InlineData(1000000, \"millionième\")]\r\n    [InlineData(1000000000, \"milliardième\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"première\", GrammaticalGender.Feminine)]\r\n    [InlineData(1, \"premier\", GrammaticalGender.Masculine)]\r\n    [InlineData(2, \"deuxième\", GrammaticalGender.Feminine)]\r\n    [InlineData(2, \"deuxième\", GrammaticalGender.Masculine)]\r\n    [InlineData(121, \"cent vingt et unième\", GrammaticalGender.Feminine)]\r\n    [InlineData(121, \"cent vingt et unième\", GrammaticalGender.Masculine)]\r\n    [InlineData(10121, \"dix mille cent vingt et unième\", GrammaticalGender.Feminine)]\r\n    [InlineData(10121, \"dix mille cent vingt et unième\", GrammaticalGender.Masculine)]\r\n    public void ToOrdinalWordsWithGender(int number, string expected, GrammaticalGender gender) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(gender));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr-BE/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace frBE;\r\n\r\n[UseCulture(\"fr-BE\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 an\")]\r\n    [InlineData(731, \"2 ans\")]\r\n    [InlineData(1096, \"3 ans\")]\r\n    [InlineData(4018, \"11 ans\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 mois\")]\r\n    [InlineData(61, \"2 mois\")]\r\n    [InlineData(92, \"3 mois\")]\r\n    [InlineData(335, \"11 mois\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(14, \"2 semaines\")]\r\n    [InlineData(7, \"1 semaine\")]\r\n    public void Weeks(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(6, \"6 jours\")]\r\n    [InlineData(1, \"1 jour\")]\r\n    public void Days(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 heures\")]\r\n    [InlineData(1, \"1 heure\")]\r\n    public void Hours(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan.FromHours(hours).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 minutes\")]\r\n    [InlineData(1, \"1 minute\")]\r\n    public void Minutes(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMinutes(minutes).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 secondes\")]\r\n    [InlineData(1, \"1 seconde\")]\r\n    public void Seconds(int seconds, string expected)\r\n    {\r\n        var actual = TimeSpan.FromSeconds(seconds).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 millisecondes\")]\r\n    [InlineData(1, \"1 milliseconde\")]\r\n    public void Milliseconds(int ms, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(TimeUnit.Year, \"0 an\")]\r\n    [InlineData(TimeUnit.Month, \"0 mois\")]\r\n    [InlineData(TimeUnit.Week, \"0 semaine\")]\r\n    [InlineData(TimeUnit.Day, \"0 jour\")]\r\n    [InlineData(TimeUnit.Hour, \"0 heure\")]\r\n    [InlineData(TimeUnit.Minute, \"0 minute\")]\r\n    [InlineData(TimeUnit.Second, \"0 seconde\")]\r\n    [InlineData(TimeUnit.Millisecond, \"0 milliseconde\")]\r\n    public void NoTime(TimeUnit minUnit, string expected)\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(minUnit: minUnit);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTimeToWords()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(toWords: true);\r\n        Assert.Equal(\"temps nul\", actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/fr-CH/NumberToWordsTests.cs",
    "content": "﻿namespace frCH;\r\n\r\n[UseCulture(\"fr-CH\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"zéro\")]\r\n    [InlineData(1, \"un\")]\r\n    [InlineData(10, \"dix\")]\r\n    [InlineData(11, \"onze\")]\r\n    [InlineData(15, \"quinze\")]\r\n    [InlineData(17, \"dix-sept\")]\r\n    [InlineData(25, \"vingt-cinq\")]\r\n    [InlineData(31, \"trente et un\")]\r\n    [InlineData(71, \"septante et un\")]\r\n    [InlineData(80, \"octante\")]\r\n    [InlineData(81, \"octante et un\")]\r\n    [InlineData(122, \"cent vingt-deux\")]\r\n    [InlineData(3501, \"trois mille cinq cent un\")]\r\n    [InlineData(100, \"cent\")]\r\n    [InlineData(1000, \"mille\")]\r\n    [InlineData(100000, \"cent mille\")]\r\n    [InlineData(1000000, \"un million\")]\r\n    [InlineData(10000000, \"dix millions\")]\r\n    [InlineData(100000000, \"cent millions\")]\r\n    [InlineData(200000000, \"deux cents millions\")]\r\n    [InlineData(1000000000, \"un milliard\")]\r\n    [InlineData(111, \"cent onze\")]\r\n    [InlineData(1111, \"mille cent onze\")]\r\n    [InlineData(111111, \"cent onze mille cent onze\")]\r\n    [InlineData(1111111, \"un million cent onze mille cent onze\")]\r\n    [InlineData(11111111, \"onze millions cent onze mille cent onze\")]\r\n    [InlineData(111111111, \"cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(1111111111, \"un milliard cent onze millions cent onze mille cent onze\")]\r\n    [InlineData(123, \"cent vingt-trois\")]\r\n    [InlineData(1234, \"mille deux cent trente-quatre\")]\r\n    [InlineData(12345, \"douze mille trois cent quarante-cinq\")]\r\n    [InlineData(123456, \"cent vingt-trois mille quatre cent cinquante-six\")]\r\n    [InlineData(1234567, \"un million deux cent trente-quatre mille cinq cent soixante-sept\")]\r\n    [InlineData(12345678, \"douze millions trois cent quarante-cinq mille six cent septante-huit\")]\r\n    [InlineData(123456789, \"cent vingt-trois millions quatre cent cinquante-six mille sept cent octante-neuf\")]\r\n    [InlineData(1234567890, \"un milliard deux cent trente-quatre millions cinq cent soixante-sept mille huit cent nonante\")]\r\n    [InlineData(1234567899, \"un milliard deux cent trente-quatre millions cinq cent soixante-sept mille huit cent nonante-neuf\")]\r\n    [InlineData(223, \"deux cent vingt-trois\")]\r\n    [InlineData(2234, \"deux mille deux cent trente-quatre\")]\r\n    [InlineData(22345, \"vingt-deux mille trois cent quarante-cinq\")]\r\n    [InlineData(200456, \"deux cent mille quatre cent cinquante-six\")]\r\n    [InlineData(223456, \"deux cent vingt-trois mille quatre cent cinquante-six\")]\r\n    [InlineData(2234567, \"deux millions deux cent trente-quatre mille cinq cent soixante-sept\")]\r\n    [InlineData(22345678, \"vingt-deux millions trois cent quarante-cinq mille six cent septante-huit\")]\r\n    [InlineData(223456789, \"deux cent vingt-trois millions quatre cent cinquante-six mille sept cent octante-neuf\")]\r\n    [InlineData(2147483646, \"deux milliards cent quarante-sept millions quatre cent octante-trois mille six cent quarante-six\")]\r\n    [InlineData(1999, \"mille neuf cent nonante-neuf\")]\r\n    [InlineData(2014, \"deux mille quatorze\")]\r\n    [InlineData(2048, \"deux mille quarante-huit\")]\r\n    [InlineData(400, \"quatre cents\")]\r\n    [InlineData(401, \"quatre cent un\")]\r\n    [InlineData(480, \"quatre cent octante\")]\r\n    [InlineData(80000, \"octante mille\")]\r\n    [InlineData(80000000, \"octante millions\")]\r\n    [InlineData(80080080, \"octante millions octante mille octante\")]\r\n    [InlineData(200200200, \"deux cents millions deux cent mille deux cents\")]\r\n    [InlineData(200200202, \"deux cents millions deux cent mille deux cent deux\")]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"une\", GrammaticalGender.Feminine)]\r\n    [InlineData(1, \"un\", GrammaticalGender.Masculine)]\r\n    [InlineData(2, \"deux\", GrammaticalGender.Feminine)]\r\n    [InlineData(2, \"deux\", GrammaticalGender.Masculine)]\r\n    [InlineData(11, \"onze\", GrammaticalGender.Feminine)]\r\n    [InlineData(11, \"onze\", GrammaticalGender.Masculine)]\r\n    [InlineData(21, \"vingt et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(21, \"vingt et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(31, \"trente et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(31, \"trente et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(41, \"quarante et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(41, \"quarante et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(51, \"cinquante et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(51, \"cinquante et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(61, \"soixante et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(61, \"soixante et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(71, \"septante et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(71, \"septante et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(81, \"octante et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(81, \"octante et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(91, \"nonante et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(91, \"nonante et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(121, \"cent vingt et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(121, \"cent vingt et un\", GrammaticalGender.Masculine)]\r\n    [InlineData(10121, \"dix mille cent vingt et une\", GrammaticalGender.Feminine)]\r\n    [InlineData(10121, \"dix mille cent vingt et un\", GrammaticalGender.Masculine)]\r\n    public void ToWordsWithGender(int number, string expected, GrammaticalGender gender) =>\r\n        Assert.Equal(expected, number.ToWords(gender));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zérotième\")]\r\n    [InlineData(1, \"premier\")]\r\n    [InlineData(2, \"deuxième\")]\r\n    [InlineData(3, \"troisième\")]\r\n    [InlineData(4, \"quatrième\")]\r\n    [InlineData(5, \"cinquième\")]\r\n    [InlineData(6, \"sixième\")]\r\n    [InlineData(7, \"septième\")]\r\n    [InlineData(8, \"huitième\")]\r\n    [InlineData(9, \"neuvième\")]\r\n    [InlineData(10, \"dixième\")]\r\n    [InlineData(11, \"onzième\")]\r\n    [InlineData(12, \"douzième\")]\r\n    [InlineData(13, \"treizième\")]\r\n    [InlineData(14, \"quatorzième\")]\r\n    [InlineData(15, \"quinzième\")]\r\n    [InlineData(16, \"seizième\")]\r\n    [InlineData(17, \"dix-septième\")]\r\n    [InlineData(18, \"dix-huitième\")]\r\n    [InlineData(19, \"dix-neuvième\")]\r\n    [InlineData(20, \"vingtième\")]\r\n    [InlineData(21, \"vingt et unième\")]\r\n    [InlineData(22, \"vingt-deuxième\")]\r\n    [InlineData(30, \"trentième\")]\r\n    [InlineData(40, \"quarantième\")]\r\n    [InlineData(50, \"cinquantième\")]\r\n    [InlineData(60, \"soixantième\")]\r\n    [InlineData(70, \"septantième\")]\r\n    [InlineData(80, \"octantième\")]\r\n    [InlineData(90, \"nonantième\")]\r\n    [InlineData(95, \"nonante-cinquième\")]\r\n    [InlineData(96, \"nonante-sixième\")]\r\n    [InlineData(100, \"centième\")]\r\n    [InlineData(120, \"cent vingtième\")]\r\n    [InlineData(121, \"cent vingt et unième\")]\r\n    [InlineData(1000, \"millième\")]\r\n    [InlineData(1001, \"mille unième\")]\r\n    [InlineData(1021, \"mille vingt et unième\")]\r\n    [InlineData(10000, \"dix millième\")]\r\n    [InlineData(10121, \"dix mille cent vingt et unième\")]\r\n    [InlineData(100000, \"cent millième\")]\r\n    [InlineData(1000000, \"millionième\")]\r\n    [InlineData(1000000000, \"milliardième\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"première\", GrammaticalGender.Feminine)]\r\n    [InlineData(1, \"premier\", GrammaticalGender.Masculine)]\r\n    [InlineData(2, \"deuxième\", GrammaticalGender.Feminine)]\r\n    [InlineData(2, \"deuxième\", GrammaticalGender.Masculine)]\r\n    [InlineData(121, \"cent vingt et unième\", GrammaticalGender.Feminine)]\r\n    [InlineData(121, \"cent vingt et unième\", GrammaticalGender.Masculine)]\r\n    [InlineData(10121, \"dix mille cent vingt et unième\", GrammaticalGender.Feminine)]\r\n    [InlineData(10121, \"dix mille cent vingt et unième\", GrammaticalGender.Masculine)]\r\n    public void ToOrdinalWordsWithGender(int number, string expected, GrammaticalGender gender) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(gender));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/he/DateHumanizeTests.cs",
    "content": "﻿namespace he;\r\n\r\n[UseCulture(\"he\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"אתמול\")]\r\n    [InlineData(2, \"לפני יומיים\")]\r\n    [InlineData(3, \"לפני 3 ימים\")]\r\n    [InlineData(11, \"לפני 11 יום\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"לפני שעתיים\")]\r\n    [InlineData(1, \"לפני שעה\")]\r\n    [InlineData(3, \"לפני 3 שעות\")]\r\n    [InlineData(11, \"לפני 11 שעות\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"לפני 2 דקות\")]\r\n    [InlineData(1, \"לפני דקה\")]\r\n    [InlineData(3, \"לפני 3 דקות\")]\r\n    [InlineData(11, \"לפני 11 דקות\")]\r\n    [InlineData(60, \"לפני שעה\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"לפני חודשיים\")]\r\n    [InlineData(1, \"לפני חודש\")]\r\n    [InlineData(3, \"לפני 3 חודשים\")]\r\n    [InlineData(11, \"לפני 11 חודשים\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"לפני 2 שניות\")]\r\n    [InlineData(1, \"לפני שנייה\")]\r\n    [InlineData(3, \"לפני 3 שניות\")]\r\n    [InlineData(11, \"לפני 11 שניות\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"לפני שנתיים\")]\r\n    [InlineData(1, \"לפני שנה\")]\r\n    [InlineData(3, \"לפני 3 שנים\")]\r\n    [InlineData(11, \"לפני 11 שנה\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"בעוד יומיים\")]\r\n    [InlineData(1, \"מחר\")]\r\n    [InlineData(3, \"בעוד 3 ימים\")]\r\n    [InlineData(11, \"בעוד 11 יום\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"בעוד חודשיים\")]\r\n    [InlineData(1, \"בעוד חודש\")]\r\n    [InlineData(10, \"בעוד 10 חודשים\")]\r\n    [InlineData(11, \"בעוד 11 חודשים\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"בעוד שנתיים\")]\r\n    [InlineData(1, \"בעוד שנה\")]\r\n    [InlineData(3, \"בעוד 3 שנים\")]\r\n    [InlineData(11, \"בעוד 11 שנה\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"בעוד שעתיים\")]\r\n    [InlineData(1, \"בעוד שעה\")]\r\n    [InlineData(3, \"בעוד 3 שעות\")]\r\n    [InlineData(11, \"בעוד 11 שעות\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"בעוד 2 דקות\")]\r\n    [InlineData(1, \"בעוד דקה\")]\r\n    [InlineData(3, \"בעוד 3 דקות\")]\r\n    [InlineData(11, \"בעוד 11 דקות\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"בעוד 2 שניות\")]\r\n    [InlineData(1, \"בעוד שנייה\")]\r\n    [InlineData(3, \"בעוד 3 שניות\")]\r\n    [InlineData(11, \"בעוד 11 שניות\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/he/NumberToWordsTests.cs",
    "content": "﻿namespace he;\r\n\r\n[UseCulture(\"he\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"אפס\")]\r\n    [InlineData(1, \"אחת\")]\r\n    [InlineData(2, \"שתיים\")]\r\n    [InlineData(3, \"שלוש\")]\r\n    [InlineData(4, \"ארבע\")]\r\n    [InlineData(5, \"חמש\")]\r\n    [InlineData(6, \"שש\")]\r\n    [InlineData(7, \"שבע\")]\r\n    [InlineData(8, \"שמונה\")]\r\n    [InlineData(9, \"תשע\")]\r\n    [InlineData(10, \"עשר\")]\r\n    [InlineData(11, \"אחת עשרה\")]\r\n    [InlineData(12, \"שתים עשרה\")]\r\n    [InlineData(19, \"תשע עשרה\")]\r\n    [InlineData(20, \"עשרים\")]\r\n    [InlineData(22, \"עשרים ושתיים\")]\r\n    [InlineData(50, \"חמישים\")]\r\n    [InlineData(99, \"תשעים ותשע\")]\r\n    [InlineData(100, \"מאה\")]\r\n    [InlineData(101, \"מאה ואחת\")]\r\n    [InlineData(111, \"מאה ואחת עשרה\")]\r\n    [InlineData(200, \"מאתיים\")]\r\n    [InlineData(241, \"מאתיים ארבעים ואחת\")]\r\n    [InlineData(500, \"חמש מאות\")]\r\n    [InlineData(505, \"חמש מאות וחמש\")]\r\n    [InlineData(725, \"שבע מאות עשרים וחמש\")]\r\n    [InlineData(1000, \"אלף\")]\r\n    [InlineData(1009, \"אלף ותשע\")]\r\n    [InlineData(1011, \"אלף ואחת עשרה\")]\r\n    [InlineData(1024, \"אלף עשרים וארבע\")]\r\n    [InlineData(1040, \"אלף ארבעים\")]\r\n    [InlineData(2000, \"אלפיים\")]\r\n    [InlineData(7021, \"שבעת אלפים עשרים ואחת\")]\r\n    [InlineData(20000, \"עשרים אלף\")]\r\n    [InlineData(28123, \"עשרים ושמונה אלף מאה עשרים ושלוש\")]\r\n    [InlineData(500000, \"חמש מאות אלף\")]\r\n    [InlineData(500001, \"חמש מאות אלף ואחת\")]\r\n    [InlineData(1000000, \"מיליון\")]\r\n    [InlineData(1000001, \"מיליון ואחת\")]\r\n    [InlineData(2000408, \"שני מיליון ארבע מאות ושמונה\")]\r\n    [InlineData(1000000000, \"מיליארד\")]\r\n    [InlineData(1000000001, \"מיליארד ואחת\")]\r\n    [InlineData(int.MaxValue /* 2147483647 */, \"שני מיליארד מאה ארבעים ושבעה מיליון ארבע מאות שמונים ושלוש אלף שש מאות ארבעים ושבע\")]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"אפס\")]\r\n    [InlineData(1, \"אחד\")]\r\n    [InlineData(2, \"שניים\")]\r\n    [InlineData(3, \"שלושה\")]\r\n    [InlineData(4, \"ארבעה\")]\r\n    [InlineData(5, \"חמישה\")]\r\n    [InlineData(6, \"שישה\")]\r\n    [InlineData(7, \"שבעה\")]\r\n    [InlineData(8, \"שמונה\")]\r\n    [InlineData(9, \"תשעה\")]\r\n    [InlineData(10, \"עשרה\")]\r\n    [InlineData(11, \"אחד עשר\")]\r\n    [InlineData(12, \"שנים עשר\")]\r\n    [InlineData(19, \"תשעה עשר\")]\r\n    [InlineData(20, \"עשרים\")]\r\n    [InlineData(22, \"עשרים ושניים\")]\r\n    [InlineData(50, \"חמישים\")]\r\n    [InlineData(99, \"תשעים ותשעה\")]\r\n    [InlineData(100, \"מאה\")]\r\n    [InlineData(101, \"מאה ואחד\")]\r\n    [InlineData(111, \"מאה ואחד עשר\")]\r\n    [InlineData(200, \"מאתיים\")]\r\n    [InlineData(241, \"מאתיים ארבעים ואחד\")]\r\n    [InlineData(500, \"חמש מאות\")]\r\n    [InlineData(505, \"חמש מאות וחמישה\")]\r\n    [InlineData(725, \"שבע מאות עשרים וחמישה\")]\r\n    [InlineData(1000, \"אלף\")]\r\n    [InlineData(1009, \"אלף ותשעה\")]\r\n    [InlineData(1011, \"אלף ואחד עשר\")]\r\n    [InlineData(1024, \"אלף עשרים וארבעה\")]\r\n    [InlineData(1040, \"אלף ארבעים\")]\r\n    [InlineData(2000, \"אלפיים\")]\r\n    [InlineData(7021, \"שבעת אלפים עשרים ואחד\")]\r\n    [InlineData(20000, \"עשרים אלף\")]\r\n    [InlineData(28123, \"עשרים ושמונה אלף מאה עשרים ושלושה\")]\r\n    [InlineData(500000, \"חמש מאות אלף\")]\r\n    [InlineData(500001, \"חמש מאות אלף ואחד\")]\r\n    [InlineData(1000000, \"מיליון\")]\r\n    [InlineData(1000001, \"מיליון ואחד\")]\r\n    [InlineData(2000408, \"שני מיליון ארבע מאות ושמונה\")]\r\n    [InlineData(1000000000, \"מיליארד\")]\r\n    [InlineData(1000000001, \"מיליארד ואחד\")]\r\n    [InlineData(int.MaxValue /* 2147483647 */, \"שני מיליארד מאה ארבעים ושבעה מיליון ארבע מאות שמונים ושלוש אלף שש מאות ארבעים ושבעה\")]\r\n    public void ToWordsMasculine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Masculine));\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"מינוס שתיים\")]\r\n    public void NegativeToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/he/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace he;\r\n\r\n[UseCulture(\"he\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"שנה\")]\r\n    [InlineData(731, \"שנתיים\")]\r\n    [InlineData(1096, \"3 שנים\")]\r\n    [InlineData(4018, \"11 שנים\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"חודש\")]\r\n    [InlineData(61, \"חודשיים\")]\r\n    [InlineData(92, \"3 חודשים\")]\r\n    [InlineData(335, \"11 חודשים\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"שבוע\")]\r\n    [InlineData(14, \"שבועיים\")]\r\n    [InlineData(21, \"3 שבועות\")]\r\n    [InlineData(77, \"11 שבועות\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"יום\")]\r\n    [InlineData(2, \"יומיים\")]\r\n    [InlineData(3, \"3 ימים\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"שעה\")]\r\n    [InlineData(2, \"שעתיים\")]\r\n    [InlineData(3, \"3 שעות\")]\r\n    [InlineData(11, \"11 שעות\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"דקה\")]\r\n    [InlineData(2, \"שתי דקות\")]\r\n    [InlineData(3, \"3 דקות\")]\r\n    [InlineData(11, \"11 דקות\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"שנייה\")]\r\n    [InlineData(2, \"שתי שניות\")]\r\n    [InlineData(3, \"3 שניות\")]\r\n    [InlineData(11, \"11 שניות\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"אלפית שנייה\")]\r\n    [InlineData(2, \"שתי אלפיות שנייה\")]\r\n    [InlineData(3, \"3 אלפיות שנייה\")]\r\n    [InlineData(11, \"11 אלפיות שנייה\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 אלפיות שנייה\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"אין זמן\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/hr/DateHumanizeTests.cs",
    "content": "﻿namespace hr;\r\n\r\n[UseCulture(\"hr-HR\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(-22, \"prije 22 godine\")]\r\n    [InlineData(-5, \"prije 5 godina\")]\r\n    [InlineData(-4, \"prije 4 godine\")]\r\n    [InlineData(-2, \"prije 2 godine\")]\r\n    [InlineData(-1, \"prije godinu dana\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(5, \"za 5 godina\")]\r\n    [InlineData(4, \"za 4 godine\")]\r\n    [InlineData(3, \"za 3 godine\")]\r\n    [InlineData(2, \"za 2 godine\")]\r\n    [InlineData(1, \"za godinu dana\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-8, \"prije 8 mjeseci\")]\r\n    [InlineData(-5, \"prije 5 mjeseci\")]\r\n    [InlineData(-4, \"prije 4 mjeseca\")]\r\n    [InlineData(-3, \"prije 3 mjeseca\")]\r\n    [InlineData(-2, \"prije 2 mjeseca\")]\r\n    [InlineData(-1, \"prije mjesec dana\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(5, \"za 5 mjeseci\")]\r\n    [InlineData(4, \"za 4 mjeseca\")]\r\n    [InlineData(2, \"za 2 mjeseca\")]\r\n    [InlineData(1, \"za mjesec dana\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-24, \"prije 24 dana\")]\r\n    [InlineData(-22, \"prije 22 dana\")]\r\n    [InlineData(-10, \"prije 10 dana\")]\r\n    [InlineData(-5, \"prije 5 dana\")]\r\n    [InlineData(-4, \"prije 4 dana\")]\r\n    [InlineData(-3, \"prije 3 dana\")]\r\n    [InlineData(-2, \"prije 2 dana\")]\r\n    [InlineData(-1, \"jučer\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(10, \"za 10 dana\")]\r\n    [InlineData(5, \"za 5 dana\")]\r\n    [InlineData(1, \"sutra\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-10, \"prije 10 sati\")]\r\n    [InlineData(-5, \"prije 5 sati\")]\r\n    [InlineData(-4, \"prije 4 sata\")]\r\n    [InlineData(-3, \"prije 3 sata\")]\r\n    [InlineData(-2, \"prije 2 sata\")]\r\n    [InlineData(-1, \"prije sat vremena\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(5, \"za 5 sati\")]\r\n    [InlineData(4, \"za 4 sata\")]\r\n    [InlineData(3, \"za 3 sata\")]\r\n    [InlineData(2, \"za 2 sata\")]\r\n    [InlineData(1, \"za sat vremena\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-10, \"prije 10 minuta\")]\r\n    [InlineData(-5, \"prije 5 minuta\")]\r\n    [InlineData(-4, \"prije 4 minute\")]\r\n    [InlineData(-3, \"prije 3 minute\")]\r\n    [InlineData(-2, \"prije 2 minute\")]\r\n    [InlineData(-1, \"prije jedne minute\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(5, \"za 5 minuta\")]\r\n    [InlineData(4, \"za 4 minute\")]\r\n    [InlineData(3, \"za 3 minute\")]\r\n    [InlineData(2, \"za 2 minute\")]\r\n    [InlineData(1, \"za jednu minutu\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-10, \"prije 10 sekundi\")]\r\n    [InlineData(-5, \"prije 5 sekundi\")]\r\n    [InlineData(-4, \"prije 4 sekunde\")]\r\n    [InlineData(-3, \"prije 3 sekunde\")]\r\n    [InlineData(-2, \"prije 2 sekunde\")]\r\n    [InlineData(-1, \"prije jedne sekunde\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(10, \"za 10 sekundi\")]\r\n    [InlineData(5, \"za 5 sekundi\")]\r\n    [InlineData(4, \"za 4 sekunde\")]\r\n    [InlineData(3, \"za 3 sekunde\")]\r\n    [InlineData(2, \"za 2 sekunde\")]\r\n    [InlineData(1, \"za jednu sekundu\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/hr/NumberToWordsTests.cs",
    "content": "﻿namespace hr;\r\n\r\n[UseCulture(\"hr-HR\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"nula\")]\r\n    [InlineData(1, \"jedan\")]\r\n    [InlineData(10, \"deset\")]\r\n    [InlineData(11, \"jedanaest\")]\r\n    [InlineData(20, \"dvadeset\")]\r\n    [InlineData(122, \"sto dvadeset dva\")]\r\n    [InlineData(3501, \"tri tisuće petsto jedan\")]\r\n    [InlineData(100, \"sto\")]\r\n    [InlineData(200, \"dvjesto\")]\r\n    [InlineData(300, \"tristo\")]\r\n    [InlineData(400, \"četiristo\")]\r\n    [InlineData(500, \"petsto\")]\r\n    [InlineData(1000, \"tisuću\")]\r\n    [InlineData(1001, \"tisuću jedan\")]\r\n    [InlineData(2000, \"dvije tisuće\")]\r\n    [InlineData(3000, \"tri tisuće\")]\r\n    [InlineData(4000, \"četiri tisuće\")]\r\n    [InlineData(5000, \"pet tisuća\")]\r\n    [InlineData(10000, \"deset tisuća\")]\r\n    [InlineData(20000, \"dvadeset tisuća\")]\r\n    [InlineData(21000, \"dvadeset jedna tisuća\")]\r\n    [InlineData(22000, \"dvadeset dvije tisuće\")]\r\n    [InlineData(23000, \"dvadeset tri tisuće\")]\r\n    [InlineData(24000, \"dvadeset četiri tisuće\")]\r\n    [InlineData(25000, \"dvadeset pet tisuća\")]\r\n    [InlineData(100000, \"sto tisuća\")]\r\n    [InlineData(200000, \"dvjesto tisuća\")]\r\n    [InlineData(201000, \"dvjesto jedna tisuća\")]\r\n    [InlineData(202000, \"dvjesto dvije tisuće\")]\r\n    [InlineData(203000, \"dvjesto tri tisuće\")]\r\n    [InlineData(204000, \"dvjesto četiri tisuće\")]\r\n    [InlineData(205000, \"dvjesto pet tisuća\")]\r\n    [InlineData(222222, \"dvjesto dvadeset dvije tisuće dvjesto dvadeset dva\")]\r\n    [InlineData(1000000, \"milijun\")]\r\n    [InlineData(2000000, \"dva milijuna\")]\r\n    [InlineData(10000000, \"deset milijuna\")]\r\n    [InlineData(11000000, \"jedanaest milijuna\")]\r\n    [InlineData(20000000, \"dvadeset milijuna\")]\r\n    [InlineData(21000000, \"dvadeset jedan milijun\")]\r\n    [InlineData(22000000, \"dvadeset dva milijuna\")]\r\n    [InlineData(30000000, \"trideset milijuna\")]\r\n    [InlineData(31000000, \"trideset jedan milijun\")]\r\n    [InlineData(32000000, \"trideset dva milijuna\")]\r\n    [InlineData(100000000, \"sto milijuna\")]\r\n    [InlineData(101000000, \"sto jedan milijun\")]\r\n    [InlineData(102000000, \"sto dva milijuna\")]\r\n    [InlineData(111000000, \"sto jedanaest milijuna\")]\r\n    [InlineData(200000000, \"dvjesto milijuna\")]\r\n    [InlineData(201000000, \"dvjesto jedan milijun\")]\r\n    [InlineData(202000000, \"dvjesto dva milijuna\")]\r\n    [InlineData(211000000, \"dvjesto jedanaest milijuna\")]\r\n    [InlineData(1000000000, \"milijarda\")]\r\n    [InlineData(2100000000, \"dvije milijarde sto milijuna\")]\r\n    [InlineData(2200000000, \"dvije milijarde dvjesto milijuna\")]\r\n    [InlineData(2300000000, \"dvije milijarde tristo milijuna\")]\r\n    [InlineData(2500000000, \"dvije milijarde petsto milijuna\")]\r\n    [InlineData(10000000000, \"deset milijardi\")]\r\n    [InlineData(11000000000, \"jedanaest milijardi\")]\r\n    [InlineData(20000000000, \"dvadeset milijardi\")]\r\n    [InlineData(21000000000, \"dvadeset jedna milijarda\")]\r\n    [InlineData(22000000000, \"dvadeset dvije milijarde\")]\r\n    [InlineData(23000000000, \"dvadeset tri milijarde\")]\r\n    [InlineData(24000000000, \"dvadeset četiri milijarde\")]\r\n    [InlineData(25000000000, \"dvadeset pet milijardi\")]\r\n    [InlineData(111, \"sto jedanaest\")]\r\n    [InlineData(1111, \"tisuću sto jedanaest\")]\r\n    [InlineData(111111, \"sto jedanaest tisuća sto jedanaest\")]\r\n    [InlineData(1111111, \"milijun sto jedanaest tisuća sto jedanaest\")]\r\n    [InlineData(11111111, \"jedanaest milijuna sto jedanaest tisuća sto jedanaest\")]\r\n    [InlineData(111111111, \"sto jedanaest milijuna sto jedanaest tisuća sto jedanaest\")]\r\n    [InlineData(1111111111, \"milijarda sto jedanaest milijuna sto jedanaest tisuća sto jedanaest\")]\r\n    [InlineData(101, \"sto jedan\")]\r\n    [InlineData(1011, \"tisuću jedanaest\")]\r\n    [InlineData(100011, \"sto tisuća jedanaest\")]\r\n    [InlineData(1100001, \"milijun sto tisuća jedan\")]\r\n    [InlineData(11000011, \"jedanaest milijuna jedanaest\")]\r\n    [InlineData(110000011, \"sto deset milijuna jedanaest\")]\r\n    [InlineData(1100000111, \"milijarda sto milijuna sto jedanaest\")]\r\n    [InlineData(123, \"sto dvadeset tri\")]\r\n    [InlineData(1234, \"tisuću dvjesto trideset četiri\")]\r\n    [InlineData(12345, \"dvanaest tisuća tristo četrdeset pet\")]\r\n    [InlineData(123456, \"sto dvadeset tri tisuće četiristo pedeset šest\")]\r\n    [InlineData(1234567, \"milijun dvjesto trideset četiri tisuće petsto šezdeset sedam\")]\r\n    [InlineData(12345678, \"dvanaest milijuna tristo četrdeset pet tisuća šeststo sedamdeset osam\")]\r\n    [InlineData(123456789, \"sto dvadeset tri milijuna četiristo pedeset šest tisuća sedamsto osamdeset devet\")]\r\n    [InlineData(1234567890, \"milijarda dvjesto trideset četiri milijuna petsto šezdeset sedam tisuća osamsto devedeset\")]\r\n    [InlineData(1000000000000, \"bilijun\")]\r\n    [InlineData(2000000000000, \"dva bilijuna\")]\r\n    [InlineData(10000000000000, \"deset bilijuna\")]\r\n    [InlineData(11000000000000, \"jedanaest bilijuna\")]\r\n    [InlineData(20000000000000, \"dvadeset bilijuna\")]\r\n    [InlineData(21000000000000, \"dvadeset jedan bilijun\")]\r\n    [InlineData(22000000000000, \"dvadeset dva bilijuna\")]\r\n    [InlineData(45678912345678, \"četrdeset pet bilijuna šeststo sedamdeset osam milijardi devetsto dvanaest milijuna tristo četrdeset pet tisuća šeststo sedamdeset osam\")]\r\n    [InlineData(1000000000000000, \"bilijarda\")]\r\n    [InlineData(2000000000000000, \"dvije bilijarde\")]\r\n    [InlineData(3000000000000000, \"tri bilijarde\")]\r\n    [InlineData(4000000000000000, \"četiri bilijarde\")]\r\n    [InlineData(5000000000000000, \"pet bilijardi\")]\r\n    [InlineData(10000000000000000, \"deset bilijardi\")]\r\n    [InlineData(11000000000000000, \"jedanaest bilijardi\")]\r\n    [InlineData(20000000000000000, \"dvadeset bilijardi\")]\r\n    [InlineData(21000000000000000, \"dvadeset jedna bilijarda\")]\r\n    [InlineData(22000000000000000, \"dvadeset dvije bilijarde\")]\r\n    [InlineData(23000000000000000, \"dvadeset tri bilijarde\")]\r\n    [InlineData(24000000000000000, \"dvadeset četiri bilijarde\")]\r\n    [InlineData(25000000000000000, \"dvadeset pet bilijardi\")]\r\n    [InlineData(1000000000000000000, \"trilijun\")]\r\n    [InlineData(2000000000000000000, \"dva trilijuna\")]\r\n    [InlineData(9000000000000000000, \"devet trilijuna\")]\r\n    [InlineData(-7516, \"minus sedam tisuća petsto šesnaest\")]\r\n    [InlineData(long.MaxValue, \"devet trilijuna dvjesto dvadeset tri bilijarde tristo sedamdeset dva bilijuna trideset šest milijardi osamsto pedeset četiri milijuna sedamsto sedamdeset pet tisuća osamsto sedam\")]\r\n    [InlineData(long.MinValue, \"minus devet trilijuna dvjesto dvadeset tri bilijarde tristo sedamdeset dva bilijuna trideset šest milijardi osamsto pedeset četiri milijuna sedamsto sedamdeset pet tisuća osamsto osam\")]\r\n    public void NumberToWords(long stubNumber, string expectedWords)\r\n    {\r\n        var actualWords = stubNumber.ToWords();\r\n\r\n        Assert.Equal(expectedWords, actualWords);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/hr/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace hr;\r\n\r\n[UseCulture(\"hr-HR\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 godina\")]\r\n    [InlineData(731, \"2 godine\")]\r\n    [InlineData(1096, \"3 godine\")]\r\n    [InlineData(4018, \"11 godina\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 mjesec\")]\r\n    [InlineData(61, \"2 mjeseca\")]\r\n    [InlineData(92, \"3 mjeseca\")]\r\n    [InlineData(335, \"11 mjeseci\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 dan\")]\r\n    [InlineData(2, \"2 dana\")]\r\n    [InlineData(3, \"3 dana\")]\r\n    [InlineData(4, \"4 dana\")]\r\n    [InlineData(5, \"5 dana\")]\r\n    [InlineData(7, \"1 tjedan\")]\r\n    [InlineData(14, \"2 tjedna\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/hu/DateHumanizeTests.cs",
    "content": "﻿namespace hu;\r\n\r\n[UseCulture(\"hu-HU\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"egy másodperce\")]\r\n    [InlineData(10, \"10 másodperce\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"egy másodperc múlva\")]\r\n    [InlineData(10, \"10 másodperc múlva\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"egy perce\")]\r\n    [InlineData(10, \"10 perce\")]\r\n    [InlineData(60, \"egy órája\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"egy perc múlva\")]\r\n    [InlineData(10, \"10 perc múlva\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"egy órája\")]\r\n    [InlineData(10, \"10 órája\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"egy óra múlva\")]\r\n    [InlineData(10, \"10 óra múlva\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"tegnap\")]\r\n    [InlineData(10, \"10 napja\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"holnap\")]\r\n    [InlineData(10, \"10 nap múlva\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"egy hónapja\")]\r\n    [InlineData(10, \"10 hónapja\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"egy hónap múlva\")]\r\n    [InlineData(10, \"10 hónap múlva\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"egy éve\")]\r\n    [InlineData(2, \"2 éve\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"egy év múlva\")]\r\n    [InlineData(2, \"2 év múlva\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/hu/NumberToWordsTests.cs",
    "content": "namespace hu;\r\n\r\n[UseCulture(\"hu-HU\")]\r\npublic class NumberToWordsTests\r\n{\r\n    private readonly HungarianNumberToWordsConverter converter = new();\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nulla\")]\r\n    [InlineData(1, \"egy\")]\r\n    [InlineData(2, \"kettő\")]\r\n    [InlineData(10, \"tíz\")]\r\n    [InlineData(11, \"tizenegy\")]\r\n    [InlineData(20, \"húsz\")]\r\n    [InlineData(21, \"huszonegy\")]\r\n    [InlineData(100, \"száz\")]\r\n    [InlineData(101, \"százegy\")]\r\n    [InlineData(111, \"száztizenegy\")]\r\n    [InlineData(200, \"kétszáz\")]\r\n    [InlineData(999, \"kilencszázkilencvenkilenc\")]\r\n    [InlineData(1000, \"ezer\")]\r\n    [InlineData(1001, \"ezeregy\")]\r\n    [InlineData(1002, \"ezerkettő\")]\r\n    [InlineData(1111, \"ezerszáztizenegy\")]\r\n    [InlineData(2000, \"kétezer\")]\r\n    [InlineData(2001, \"kétezer-egy\")]\r\n    [InlineData(2002, \"kétezer-kettő\")]\r\n    [InlineData(2111, \"kétezer-száztizenegy\")]\r\n    [InlineData(3000, \"háromezer\")]\r\n    [InlineData(3001, \"háromezer-egy\")]\r\n    [InlineData(3002, \"háromezer-kettő\")]\r\n    [InlineData(3122, \"háromezer-százhuszonkettő\")]\r\n    [InlineData(12345, \"tizenkétezer-háromszáznegyvenöt\")]\r\n    [InlineData(123456, \"százhuszonháromezer-négyszázötvenhat\")]\r\n    [InlineData(1234567, \"egymillió-kétszázharmincnégyezer-ötszázhatvanhét\")]\r\n    [InlineData(12345678, \"tizenkétmillió-háromszáznegyvenötezer-hatszázhetvennyolc\")]\r\n    [InlineData(123456789, \"százhuszonhárommillió-négyszázötvenhatezer-hétszáznyolcvankilenc\")]\r\n    [InlineData(1234567890, \"egymilliárd-kétszázharmincnégymillió-ötszázhatvanhétezer-nyolcszázkilencven\")]\r\n    [InlineData(1000000, \"egymillió\")]\r\n    [InlineData(2000000, \"kétmillió\")]\r\n    [InlineData(12000000, \"tizenkétmillió\")]\r\n    [InlineData(-1, \"mínusz egy\")]\r\n    [InlineData(-18, \"mínusz tizennyolc\")]\r\n    public void TestNumberConversion(long number, string expected) =>\r\n        Assert.Equal(expected, converter.Convert(number));\r\n\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nulladik\")]\r\n    [InlineData(1, \"első\")]\r\n    [InlineData(2, \"második\")]\r\n    [InlineData(10, \"tizedik\")]\r\n    [InlineData(11, \"tizenegyedik\")]\r\n    [InlineData(20, \"huszadik\")]\r\n    [InlineData(21, \"huszonegyedik\")]\r\n    [InlineData(100, \"századik\")]\r\n    [InlineData(101, \"százegyedik\")]\r\n    [InlineData(111, \"száztizenegyedik\")]\r\n    [InlineData(200, \"kétszázadik\")]\r\n    [InlineData(999, \"kilencszázkilencvenkilencedik\")]\r\n    [InlineData(1000, \"ezredik\")]\r\n    [InlineData(1001, \"ezeregyedik\")]\r\n    [InlineData(1002, \"ezerkettedik\")]\r\n    [InlineData(1111, \"ezerszáztizenegyedik\")]\r\n    [InlineData(2000, \"kétezredik\")]\r\n    [InlineData(2001, \"kétezer-egyedik\")]\r\n    [InlineData(2002, \"kétezer-kettedik\")]\r\n    [InlineData(2111, \"kétezer-száztizenegyedik\")]\r\n    [InlineData(3000, \"háromezredik\")]\r\n    [InlineData(3001, \"háromezer-egyedik\")]\r\n    [InlineData(3002, \"háromezer-kettedik\")]\r\n    [InlineData(3122, \"háromezer-százhuszonkettedik\")]\r\n    [InlineData(12345, \"tizenkétezer-háromszáznegyvenötödik\")]\r\n    [InlineData(123456, \"százhuszonháromezer-négyszázötvenhatodik\")]\r\n    [InlineData(1234567, \"egymillió-kétszázharmincnégyezer-ötszázhatvanhetedik\")]\r\n    [InlineData(12345678, \"tizenkétmillió-háromszáznegyvenötezer-hatszázhetvennyolcadik\")]\r\n    [InlineData(123456789, \"százhuszonhárommillió-négyszázötvenhatezer-hétszáznyolcvankilencedik\")]\r\n    [InlineData(1234567890, \"egymilliárd-kétszázharmincnégymillió-ötszázhatvanhétezer-nyolcszázkilencvenedik\")]\r\n    [InlineData(1000000, \"egymilliomodik\")]\r\n    [InlineData(2000000, \"kétmilliomodik\")]\r\n    [InlineData(12000000, \"tizenkétmilliomodik\")]\r\n    [InlineData(-1, \"mínusz első\")]\r\n    [InlineData(-18, \"mínusz tizennyolcadik\")]\r\n    public void TestOrdinalConversion(int number, string expected) =>\r\n        Assert.Equal(expected, converter.ConvertToOrdinal(number));\r\n\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/hu/TimeSpanHumanizeTests.cs",
    "content": "namespace hu;\r\n\r\n[UseCulture(\"hu-HU\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 év\")]\r\n    [InlineData(731, \"2 év\")]\r\n    [InlineData(1096, \"3 év\")]\r\n    [InlineData(4018, \"11 év\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 hónap\")]\r\n    [InlineData(61, \"2 hónap\")]\r\n    [InlineData(92, \"3 hónap\")]\r\n    [InlineData(335, \"11 hónap\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(14, \"2 hét\")]\r\n    [InlineData(7, \"1 hét\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 nap\")]\r\n    [InlineData(1, \"1 nap\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 óra\")]\r\n    [InlineData(1, \"1 óra\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 perc\")]\r\n    [InlineData(1, \"1 perc\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 másodperc\")]\r\n    [InlineData(1, \"1 másodperc\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"egy év\")]\r\n    [InlineData(731, \"kettő év\")]\r\n    [InlineData(1096, \"három év\")]\r\n    [InlineData(4018, \"tizenegy év\")]\r\n    public void YearsWithWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: true));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"egy hónap\")]\r\n    [InlineData(61, \"kettő hónap\")]\r\n    [InlineData(92, \"három hónap\")]\r\n    [InlineData(335, \"tizenegy hónap\")]\r\n    public void MonthsWithWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(14, \"kettő hét\")]\r\n    [InlineData(7, \"egy hét\")]\r\n    public void WeeksWithWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(2, \"kettő nap\")]\r\n    [InlineData(1, \"egy nap\")]\r\n    public void DaysWithWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(2, \"kettő óra\")]\r\n    [InlineData(1, \"egy óra\")]\r\n    public void HoursWithWords(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(2, \"kettő perc\")]\r\n    [InlineData(1, \"egy perc\")]\r\n    public void MinutesWithWords(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(2, \"kettő másodperc\")]\r\n    [InlineData(1, \"egy másodperc\")]\r\n    public void SecondsWithWords(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize(toWords: true));\r\n\r\n    [Fact]\r\n    public void NoTime()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize();\r\n        Assert.Equal(\"0 ezredmásodperc\", actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTimeToWords()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(toWords: true);\r\n        Assert.Equal(\"nincs idő\", actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/hy/DateHumanizeTests.cs",
    "content": "﻿namespace hy;\r\n\r\n[UseCulture(\"hy\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"մեկ վայրկյան առաջ\")]\r\n    [InlineData(2, \"2 վայրկյան առաջ\")]\r\n    [InlineData(3, \"3 վայրկյան առաջ\")]\r\n    [InlineData(4, \"4 վայրկյան առաջ\")]\r\n    [InlineData(11, \"11 վայրկյան առաջ\")]\r\n    [InlineData(21, \"21 վայրկյան առաջ\")]\r\n    [InlineData(24, \"24 վայրկյան առաջ\")]\r\n    [InlineData(40, \"40 վայրկյան առաջ\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"մեկ վայրկյանից\")]\r\n    [InlineData(2, \"2 վայրկյանից\")]\r\n    [InlineData(11, \"11 վայրկյանից\")]\r\n    [InlineData(20, \"20 վայրկյանից\")]\r\n    [InlineData(40, \"40 վայրկյանից\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"մեկ րոպե առաջ\")]\r\n    [InlineData(2, \"2 րոպե առաջ\")]\r\n    [InlineData(10, \"10 րոպե առաջ\")]\r\n    [InlineData(25, \"25 րոպե առաջ\")]\r\n    [InlineData(40, \"40 րոպե առաջ\")]\r\n    [InlineData(60, \"մեկ ժամ առաջ\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"մեկ րոպեից\")]\r\n    [InlineData(2, \"2 րոպեից\")]\r\n    [InlineData(19, \"19 րոպեից\")]\r\n    [InlineData(25, \"25 րոպեից\")]\r\n    [InlineData(40, \"40 րոպեից\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"մեկ ժամ առաջ\")]\r\n    [InlineData(2, \"2 ժամ առաջ\")]\r\n    [InlineData(19, \"19 ժամ առաջ\")]\r\n    [InlineData(20, \"20 ժամ առաջ\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"մեկ ժամից\")]\r\n    [InlineData(5, \"5 ժամից\")]\r\n    [InlineData(23, \"23 ժամից\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"երեկ\")]\r\n    [InlineData(2, \"2 օր առաջ\")]\r\n    [InlineData(25, \"25 օր առաջ\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"վաղը\")]\r\n    [InlineData(2, \"2 օրից\")]\r\n    [InlineData(25, \"25 օրից\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"մեկ ամիս առաջ\")]\r\n    [InlineData(11, \"11 ամիս առաջ\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"մեկ ամսից\")]\r\n    [InlineData(11, \"11 ամսից\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"մեկ տարի առաջ\")]\r\n    [InlineData(2, \"2 տարի առաջ\")]\r\n    [InlineData(21, \"21 տարի առաջ\")]\r\n    [InlineData(111, \"111 տարի առաջ\")]\r\n    [InlineData(121, \"121 տարի առաջ\")]\r\n    [InlineData(222, \"222 տարի առաջ\")]\r\n    [InlineData(325, \"325 տարի առաջ\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"մեկ տարուց\")]\r\n    [InlineData(2, \"2 տարուց\")]\r\n    [InlineData(21, \"21 տարուց\")]\r\n    [InlineData(111, \"111 տարուց\")]\r\n    [InlineData(121, \"121 տարուց\")]\r\n    [InlineData(222, \"222 տարուց\")]\r\n    [InlineData(325, \"325 տարուց\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"հիմա\", 0, TimeUnit.Day, Tense.Past);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/hy/NumberToWordsTests.cs",
    "content": "﻿namespace hy;\r\n\r\n[UseCulture(\"hy\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"զրո\")]\r\n    [InlineData(1, \"մեկ\")]\r\n    [InlineData(10, \"տաս\")]\r\n    [InlineData(11, \"տասնմեկ\")]\r\n    [InlineData(12, \"տասներկու\")]\r\n    [InlineData(13, \"տասներեք\")]\r\n    [InlineData(14, \"տասնչորս\")]\r\n    [InlineData(15, \"տասնհինգ\")]\r\n    [InlineData(16, \"տասնվեց\")]\r\n    [InlineData(17, \"տասնյոթ\")]\r\n    [InlineData(18, \"տասնութ\")]\r\n    [InlineData(19, \"տասնինը\")]\r\n    [InlineData(20, \"քսան\")]\r\n    [InlineData(30, \"երեսուն\")]\r\n    [InlineData(40, \"քառասուն\")]\r\n    [InlineData(50, \"հիսուն\")]\r\n    [InlineData(60, \"վաթսուն\")]\r\n    [InlineData(70, \"յոթանասուն\")]\r\n    [InlineData(80, \"ութսուն\")]\r\n    [InlineData(90, \"իննսուն\")]\r\n    [InlineData(100, \"հարյուր\")]\r\n    [InlineData(200, \"երկու հարյուր\")]\r\n    [InlineData(300, \"երեք հարյուր\")]\r\n    [InlineData(400, \"չորս հարյուր\")]\r\n    [InlineData(500, \"հինգ հարյուր\")]\r\n    [InlineData(600, \"վեց հարյուր\")]\r\n    [InlineData(700, \"յոթ հարյուր\")]\r\n    [InlineData(800, \"ութ հարյուր\")]\r\n    [InlineData(900, \"ինը հարյուր\")]\r\n    [InlineData(1000, \"հազար\")]\r\n    [InlineData(2000, \"երկու հազար\")]\r\n    [InlineData(3000, \"երեք հազար\")]\r\n    [InlineData(4000, \"չորս հազար\")]\r\n    [InlineData(5000, \"հինգ հազար\")]\r\n    [InlineData(10000, \"տաս հազար\")]\r\n    [InlineData(100000, \"հարյուր հազար\")]\r\n    [InlineData(1000000, \"մեկ միլիոն\")]\r\n    [InlineData(2000000, \"երկու միլիոն\")]\r\n    [InlineData(10000000, \"տաս միլիոն\")]\r\n    [InlineData(100000000, \"հարյուր միլիոն\")]\r\n    [InlineData(1000000000, \"մեկ միլիարդ\")]\r\n    [InlineData(2000000000, \"երկու միլիարդ\")]\r\n    [InlineData(3000000000, \"երեք միլիարդ\")]\r\n    [InlineData(4000000000, \"չորս միլիարդ\")]\r\n    [InlineData(122, \"հարյուր քսաներկու\")]\r\n    [InlineData(3501, \"երեք հազար հինգ հարյուր մեկ\")]\r\n    [InlineData(111, \"հարյուր տասնմեկ\")]\r\n    [InlineData(1112, \"հազար հարյուր տասներկու\")]\r\n    [InlineData(11213, \"տասնմեկ հազար երկու հարյուր տասներեք\")]\r\n    [InlineData(121314, \"հարյուր քսանմեկ հազար երեք հարյուր տասնչորս\")]\r\n    [InlineData(2132415, \"երկու միլիոն հարյուր երեսուներկու հազար չորս հարյուր տասնհինգ\")]\r\n    [InlineData(12345516, \"տասներկու միլիոն երեք հարյուր քառասունհինգ հազար հինգ հարյուր տասնվեց\")]\r\n    [InlineData(751633617, \"յոթ հարյուր հիսունմեկ միլիոն վեց հարյուր երեսուներեք հազար վեց հարյուր տասնյոթ\")]\r\n    [InlineData(1111111118, \"մեկ միլիարդ հարյուր տասնմեկ միլիոն հարյուր տասնմեկ հազար հարյուր տասնութ\")]\r\n    [InlineData(4111111118, \"չորս միլիարդ հարյուր տասնմեկ միլիոն հարյուր տասնմեկ հազար հարյուր տասնութ\")]\r\n    [InlineData(-751633617, \"մինուս յոթ հարյուր հիսունմեկ միլիոն վեց հարյուր երեսուներեք հազար վեց հարյուր տասնյոթ\")]\r\n    [InlineData(999999999999, \"ինը հարյուր իննսունինը միլիարդ ինը հարյուր իննսունինը միլիոն ինը հարյուր իննսունինը հազար ինը հարյուր իննսունինը\")]\r\n    [InlineData(1_000_000_000_000, \"մեկ տրիլիոն\")]\r\n    [InlineData(3_000_000_000_000, \"երեք տրիլիոն\")]\r\n    [InlineData(5_000_000_000_000, \"հինգ տրիլիոն\")]\r\n    [InlineData(999_000_000_000_000, \"ինը հարյուր իննսունինը տրիլիոն\")]\r\n    [InlineData(\r\n        long.MaxValue,\r\n        \"ինը քվինտիլիոն \" +\r\n        \"երկու հարյուր քսաներեք կվադրիլիոն \" +\r\n        \"երեք հարյուր յոթանասուներկու տրիլիոն \" +\r\n        \"երեսունվեց միլիարդ \" +\r\n        \"ութ հարյուր հիսունչորս միլիոն \" +\r\n        \"յոթ հարյուր յոթանասունհինգ հազար \" +\r\n        \"ութ հարյուր յոթ\")]\r\n    [InlineData(\r\n        long.MinValue,\r\n        \"մինուս ինը քվինտիլիոն \" +\r\n        \"երկու հարյուր քսաներեք կվադրիլիոն \" +\r\n        \"երեք հարյուր յոթանասուներկու տրիլիոն \" +\r\n        \"երեսունվեց միլիարդ \" +\r\n        \"ութ հարյուր հիսունչորս միլիոն \" +\r\n        \"յոթ հարյուր յոթանասունհինգ հազար \" +\r\n        \"ութ հարյուր ութ\")]\r\n    public void ToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"զրոյական\")]\r\n    [InlineData(1, \"առաջին\")]\r\n    [InlineData(2, \"երկրորդ\")]\r\n    [InlineData(3, \"երրորդ\")]\r\n    [InlineData(10, \"տասերորդ\")]\r\n    [InlineData(11, \"տասնմեկերորդ\")]\r\n    [InlineData(12, \"տասներկուերորդ\")]\r\n    [InlineData(13, \"տասներեքերորդ\")]\r\n    [InlineData(14, \"տասնչորսերորդ\")]\r\n    [InlineData(15, \"տասնհինգերորդ\")]\r\n    [InlineData(16, \"տասնվեցերորդ\")]\r\n    [InlineData(17, \"տասնյոթերորդ\")]\r\n    [InlineData(18, \"տասնութերորդ\")]\r\n    [InlineData(19, \"տասնինըերորդ\")]\r\n    [InlineData(20, \"քսաներորդ\")]\r\n    [InlineData(30, \"երեսուներորդ\")]\r\n    [InlineData(40, \"քառասուներորդ\")]\r\n    [InlineData(50, \"հիսուներորդ\")]\r\n    [InlineData(60, \"վաթսուներորդ\")]\r\n    [InlineData(70, \"յոթանասուներորդ\")]\r\n    [InlineData(80, \"ութսուներորդ\")]\r\n    [InlineData(90, \"իննսուներորդ\")]\r\n    [InlineData(100, \"հարյուրերորդ\")]\r\n    [InlineData(200, \"երկու հարյուրերորդ\")]\r\n    [InlineData(300, \"երեք հարյուրերորդ\")]\r\n    [InlineData(400, \"չորս հարյուրերորդ\")]\r\n    [InlineData(500, \"հինգ հարյուրերորդ\")]\r\n    [InlineData(600, \"վեց հարյուրերորդ\")]\r\n    [InlineData(700, \"յոթ հարյուրերորդ\")]\r\n    [InlineData(800, \"ութ հարյուրերորդ\")]\r\n    [InlineData(900, \"ինը հարյուրերորդ\")]\r\n    [InlineData(1000, \"հազարերորդ\")]\r\n    [InlineData(2000, \"երկու հազարերորդ\")]\r\n    [InlineData(3000, \"երեք հազարերորդ\")]\r\n    [InlineData(4000, \"չորս հազարերորդ\")]\r\n    [InlineData(5000, \"հինգ հազարերորդ\")]\r\n    [InlineData(10000, \"տաս հազարերորդ\")]\r\n    [InlineData(21000, \"քսանմեկ հազարերորդ\")]\r\n    [InlineData(100000, \"հարյուր հազարերորդ\")]\r\n    [InlineData(101000, \"հարյուր մեկ հազարերորդ\")]\r\n    [InlineData(1000000, \"մեկ միլիոներորդ\")]\r\n    [InlineData(121000, \"հարյուր քսանմեկ հազարերորդ\")]\r\n    [InlineData(200000, \"երկու հարյուր հազարերորդ\")]\r\n    [InlineData(2000000, \"երկու միլիոներորդ\")]\r\n    [InlineData(10000000, \"տաս միլիոներորդ\")]\r\n    [InlineData(21000000, \"քսանմեկ միլիոներորդ\")]\r\n    [InlineData(100000000, \"հարյուր միլիոներորդ\")]\r\n    [InlineData(230000000, \"երկու հարյուր երեսուն միլիոներորդ\")]\r\n    [InlineData(1000000000, \"մեկ միլիարդերորդ\")]\r\n    [InlineData(2000000000, \"երկու միլիարդերորդ\")]\r\n    [InlineData(122, \"հարյուր քսաներկուերորդ\")]\r\n    [InlineData(3501, \"երեք հազար հինգ հարյուր մեկերորդ\")]\r\n    [InlineData(111, \"հարյուր տասնմեկերորդ\")]\r\n    [InlineData(1112, \"հազար հարյուր տասներկուերորդ\")]\r\n    [InlineData(11213, \"տասնմեկ հազար երկու հարյուր տասներեքերորդ\")]\r\n    [InlineData(121314, \"հարյուր քսանմեկ հազար երեք հարյուր տասնչորսերորդ\")]\r\n    [InlineData(2132415, \"երկու միլիոն հարյուր երեսուներկու հազար չորս հարյուր տասնհինգերորդ\")]\r\n    [InlineData(12345516, \"տասներկու միլիոն երեք հարյուր քառասունհինգ հազար հինգ հարյուր տասնվեցերորդ\")]\r\n    [InlineData(751633617, \"յոթ հարյուր հիսունմեկ միլիոն վեց հարյուր երեսուներեք հազար վեց հարյուր տասնյոթերորդ\")]\r\n    [InlineData(1111111118, \"մեկ միլիարդ հարյուր տասնմեկ միլիոն հարյուր տասնմեկ հազար հարյուր տասնութերորդ\")]\r\n    [InlineData(1111111000, \"մեկ միլիարդ հարյուր տասնմեկ միլիոն հարյուր տասնմեկ հազարերորդ\")]\r\n    [InlineData(1234567000, \"մեկ միլիարդ երկու հարյուր երեսունչորս միլիոն հինգ հարյուր վաթսունյոթ հազարերորդ\")]\r\n    [InlineData(-751633617, \"մինուս յոթ հարյուր հիսունմեկ միլիոն վեց հարյուր երեսուներեք հազար վեց հարյուր տասնյոթերորդ\")]\r\n    public void ToOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/hy/OrdinalizeTests.cs",
    "content": "﻿namespace hy;\r\n\r\n[UseCulture(\"hy\")]\r\npublic class OrdinalizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"0\", \"0-րդ\")]\r\n    [InlineData(\"1\", \"1-ին\")]\r\n    [InlineData(\"2\", \"2-րդ\")]\r\n    [InlineData(\"103\", \"103-րդ\")]\r\n    [InlineData(\"1001\", \"1001-րդ\")]\r\n    public void OrdinalizeStringMasculine(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0-րդ\")]\r\n    [InlineData(\"1\", \"1-ին\")]\r\n    [InlineData(\"2\", \"2-րդ\")]\r\n    [InlineData(\"103\", \"103-րդ\")]\r\n    [InlineData(\"1001\", \"1001-րդ\")]\r\n    public void OrdinalizeStringFeminine(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0-րդ\")]\r\n    [InlineData(\"1\", \"1-ին\")]\r\n    [InlineData(\"2\", \"2-րդ\")]\r\n    [InlineData(\"103\", \"103-րդ\")]\r\n    [InlineData(\"1001\", \"1001-րդ\")]\r\n    public void OrdinalizeStringNeuter(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Neuter), ordinalized);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/hy/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace hy;\r\n\r\n[UseCulture(\"hy\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"մեկ տարի\")]\r\n    [InlineData(731, \"2 տարի\")]\r\n    [InlineData(1096, \"3 տարի\")]\r\n    [InlineData(4018, \"11 տարի\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"մեկ ամիս\")]\r\n    [InlineData(61, \"2 ամիս\")]\r\n    [InlineData(92, \"3 ամիս\")]\r\n    [InlineData(335, \"11 ամիս\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"մեկ շաբաթ\")]\r\n    [InlineData(14, \"2 շաբաթ\")]\r\n    [InlineData(21, \"3 շաբաթ\")]\r\n    [InlineData(28, \"4 շաբաթ\")]\r\n    [InlineData(35, \"5 շաբաթ\")]\r\n    [InlineData(77, \"11 շաբաթ\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"մեկ օր\")]\r\n    [InlineData(2, \"2 օր\")]\r\n    [InlineData(3, \"3 օր\")]\r\n    [InlineData(4, \"4 օր\")]\r\n    [InlineData(5, \"5 օր\")]\r\n    [InlineData(6, \"6 օր\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"մեկ ժամ\")]\r\n    [InlineData(2, \"2 ժամ\")]\r\n    [InlineData(3, \"3 ժամ\")]\r\n    [InlineData(4, \"4 ժամ\")]\r\n    [InlineData(5, \"5 ժամ\")]\r\n    [InlineData(6, \"6 ժամ\")]\r\n    [InlineData(10, \"10 ժամ\")]\r\n    [InlineData(11, \"11 ժամ\")]\r\n    [InlineData(19, \"19 ժամ\")]\r\n    [InlineData(20, \"20 ժամ\")]\r\n    [InlineData(21, \"21 ժամ\")]\r\n    [InlineData(22, \"22 ժամ\")]\r\n    [InlineData(23, \"23 ժամ\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"մեկ րոպե\")]\r\n    [InlineData(2, \"2 րոպե\")]\r\n    [InlineData(3, \"3 րոպե\")]\r\n    [InlineData(4, \"4 րոպե\")]\r\n    [InlineData(5, \"5 րոպե\")]\r\n    [InlineData(6, \"6 րոպե\")]\r\n    [InlineData(10, \"10 րոպե\")]\r\n    [InlineData(11, \"11 րոպե\")]\r\n    [InlineData(19, \"19 րոպե\")]\r\n    [InlineData(20, \"20 րոպե\")]\r\n    [InlineData(21, \"21 րոպե\")]\r\n    [InlineData(22, \"22 րոպե\")]\r\n    [InlineData(23, \"23 րոպե\")]\r\n    [InlineData(24, \"24 րոպե\")]\r\n    [InlineData(25, \"25 րոպե\")]\r\n    [InlineData(40, \"40 րոպե\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"մեկ վայրկյան\")]\r\n    [InlineData(2, \"2 վայրկյան\")]\r\n    [InlineData(3, \"3 վայրկյան\")]\r\n    [InlineData(4, \"4 վայրկյան\")]\r\n    [InlineData(5, \"5 վայրկյան\")]\r\n    [InlineData(6, \"6 վայրկյան\")]\r\n    [InlineData(10, \"10 վայրկյան\")]\r\n    [InlineData(11, \"11 վայրկյան\")]\r\n    [InlineData(19, \"19 վայրկյան\")]\r\n    [InlineData(20, \"20 վայրկյան\")]\r\n    [InlineData(21, \"21 վայրկյան\")]\r\n    [InlineData(22, \"22 վայրկյան\")]\r\n    [InlineData(23, \"23 վայրկյան\")]\r\n    [InlineData(24, \"24 վայրկյան\")]\r\n    [InlineData(25, \"25 վայրկյան\")]\r\n    [InlineData(40, \"40 վայրկյան\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"մեկ միլիվայրկյան\")]\r\n    [InlineData(2, \"2 միլիվայրկյան\")]\r\n    [InlineData(3, \"3 միլիվայրկյան\")]\r\n    [InlineData(4, \"4 միլիվայրկյան\")]\r\n    [InlineData(5, \"5 միլիվայրկյան\")]\r\n    [InlineData(6, \"6 միլիվայրկյան\")]\r\n    [InlineData(10, \"10 միլիվայրկյան\")]\r\n    [InlineData(11, \"11 միլիվայրկյան\")]\r\n    [InlineData(19, \"19 միլիվայրկյան\")]\r\n    [InlineData(20, \"20 միլիվայրկյան\")]\r\n    [InlineData(21, \"21 միլիվայրկյան\")]\r\n    [InlineData(22, \"22 միլիվայրկյան\")]\r\n    [InlineData(23, \"23 միլիվայրկյան\")]\r\n    [InlineData(24, \"24 միլիվայրկյան\")]\r\n    [InlineData(25, \"25 միլիվայրկյան\")]\r\n    [InlineData(40, \"40 միլիվայրկյան\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 միլիվայրկյան\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"ժամանակը բացակայում է\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/id/DateHumanizeTests.cs",
    "content": "﻿namespace id;\r\n\r\n[UseCulture(\"id-ID\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"sedetik yang lalu\")]\r\n    [InlineData(10, \"10 detik yang lalu\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"sedetik dari sekarang\")]\r\n    [InlineData(10, \"10 detik dari sekarang\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"semenit yang lalu\")]\r\n    [InlineData(10, \"10 menit yang lalu\")]\r\n    [InlineData(60, \"sejam yang lalu\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"semenit dari sekarang\")]\r\n    [InlineData(10, \"10 menit dari sekarang\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"sejam yang lalu\")]\r\n    [InlineData(10, \"10 jam yang lalu\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"sejam dari sekarang\")]\r\n    [InlineData(10, \"10 jam dari sekarang\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"kemarin\")]\r\n    [InlineData(10, \"10 hari yang lalu\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"besok\")]\r\n    [InlineData(10, \"10 hari dari sekarang\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"sebulan yang lalu\")]\r\n    [InlineData(10, \"10 bulan yang lalu\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"sebulan dari sekarang\")]\r\n    [InlineData(10, \"10 bulan dari sekarang\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"setahun yang lalu\")]\r\n    [InlineData(2, \"2 tahun yang lalu\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"setahun dari sekarang\")]\r\n    [InlineData(2, \"2 tahun dari sekarang\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/id/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace id;\r\n\r\n[UseCulture(\"id-ID\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 tahun\")]\r\n    [InlineData(731, \"2 tahun\")]\r\n    [InlineData(1096, \"3 tahun\")]\r\n    [InlineData(4018, \"11 tahun\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 bulan\")]\r\n    [InlineData(61, \"2 bulan\")]\r\n    [InlineData(92, \"3 bulan\")]\r\n    [InlineData(335, \"11 bulan\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(14, \"2 minggu\")]\r\n    [InlineData(7, \"1 minggu\")]\r\n    public void Weeks(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 hari\")]\r\n    [InlineData(1, \"1 hari\")]\r\n    public void Days(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 jam\")]\r\n    [InlineData(1, \"1 jam\")]\r\n    public void Hours(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan.FromHours(hours).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 menit\")]\r\n    [InlineData(1, \"1 menit\")]\r\n    public void Minutes(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMinutes(minutes).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 detik\")]\r\n    [InlineData(1, \"1 detik\")]\r\n    public void Seconds(int seconds, string expected)\r\n    {\r\n        var actual = TimeSpan.FromSeconds(seconds).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 milidetik\")]\r\n    [InlineData(1, \"1 milidetik\")]\r\n    public void Milliseconds(int ms, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTime()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize();\r\n        Assert.Equal(\"0 milidetik\", actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTimeToWords()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(toWords: true);\r\n        Assert.Equal(\"waktu kosong\", actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/invariant/NumberToWordsTests.cs",
    "content": "﻿namespace invariant;\r\n\r\n[UseCulture(\"\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [InlineData(1, \"one\")]\r\n    [InlineData(10, \"ten\")]\r\n    [InlineData(11, \"eleven\")]\r\n    [InlineData(20, \"twenty\")]\r\n    [InlineData(122, \"one hundred and twenty-two\")]\r\n    [InlineData(3501, \"three thousand five hundred and one\")]\r\n    [InlineData(100, \"one hundred\")]\r\n    [InlineData(1000, \"one thousand\")]\r\n    [InlineData(100000, \"one hundred thousand\")]\r\n    [InlineData(1000000, \"one million\")]\r\n    [InlineData(10000000, \"ten million\")]\r\n    [InlineData(100000000, \"one hundred million\")]\r\n    [InlineData(1000000000, \"one billion\")]\r\n    [InlineData(111, \"one hundred and eleven\")]\r\n    [InlineData(1111, \"one thousand one hundred and eleven\")]\r\n    [InlineData(111111, \"one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(1111111, \"one million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(11111111, \"eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(111111111, \"one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(1111111111, \"one billion one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(123, \"one hundred and twenty-three\")]\r\n    [InlineData(1234, \"one thousand two hundred and thirty-four\")]\r\n    [InlineData(12345, \"twelve thousand three hundred and forty-five\")]\r\n    [InlineData(123456, \"one hundred and twenty-three thousand four hundred and fifty-six\")]\r\n    [InlineData(1234567, \"one million two hundred and thirty-four thousand five hundred and sixty-seven\")]\r\n    [InlineData(12345678, \"twelve million three hundred and forty-five thousand six hundred and seventy-eight\")]\r\n    [InlineData(123456789, \"one hundred and twenty-three million four hundred and fifty-six thousand seven hundred and eighty-nine\")]\r\n    [InlineData(1234567890, \"one billion two hundred and thirty-four million five hundred and sixty-seven thousand eight hundred and ninety\")]\r\n    [Theory]\r\n    public void ToWordsInt(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/invariant/ToQuantityTests.cs",
    "content": "﻿namespace invariant;\r\n\r\n[UseCulture(\"\")]\r\npublic class ToQuantityTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"case\", 0, \"0 cases\")]\r\n    [InlineData(\"case\", 1, \"1 case\")]\r\n    [InlineData(\"case\", 5, \"5 cases\")]\r\n    [InlineData(\"man\", 0, \"0 men\")]\r\n    [InlineData(\"man\", 1, \"1 man\")]\r\n    [InlineData(\"man\", 2, \"2 men\")]\r\n    [InlineData(\"men\", 2, \"2 men\")]\r\n    [InlineData(\"process\", 2, \"2 processes\")]\r\n    [InlineData(\"process\", 1, \"1 process\")]\r\n    [InlineData(\"processes\", 2, \"2 processes\")]\r\n    [InlineData(\"processes\", 1, \"1 process\")]\r\n    public void ToQuantity(string word, int quantity, string expected) =>\r\n        Assert.Equal(expected, word.ToQuantity(quantity));\r\n\r\n    [Theory]\r\n    [InlineData(\"case\", 0, \"cases\")]\r\n    [InlineData(\"case\", 1, \"case\")]\r\n    [InlineData(\"case\", 5, \"cases\")]\r\n    [InlineData(\"man\", 0, \"men\")]\r\n    [InlineData(\"man\", 1, \"man\")]\r\n    [InlineData(\"man\", 2, \"men\")]\r\n    [InlineData(\"men\", 2, \"men\")]\r\n    [InlineData(\"process\", 2, \"processes\")]\r\n    [InlineData(\"process\", 1, \"process\")]\r\n    [InlineData(\"processes\", 2, \"processes\")]\r\n    [InlineData(\"processes\", 1, \"process\")]\r\n    public void ToQuantityWithNoQuantity(string word, int quantity, string expected) =>\r\n        Assert.Equal(expected, word.ToQuantity(quantity, ShowQuantityAs.None));\r\n\r\n    [Theory]\r\n    [InlineData(\"case\", 0, \"0 cases\")]\r\n    [InlineData(\"case\", 1, \"1 case\")]\r\n    [InlineData(\"case\", 5, \"5 cases\")]\r\n    [InlineData(\"man\", 0, \"0 men\")]\r\n    [InlineData(\"man\", 1, \"1 man\")]\r\n    [InlineData(\"man\", 2, \"2 men\")]\r\n    [InlineData(\"men\", 2, \"2 men\")]\r\n    [InlineData(\"process\", 2, \"2 processes\")]\r\n    [InlineData(\"process\", 1, \"1 process\")]\r\n    [InlineData(\"processes\", 2, \"2 processes\")]\r\n    [InlineData(\"processes\", 1, \"1 process\")]\r\n    public void ToQuantityNumeric(string word, int quantity, string expected) =>\r\n        // ReSharper disable once RedundantArgumentDefaultValue\r\n        Assert.Equal(expected, word.ToQuantity(quantity, ShowQuantityAs.Numeric));\r\n\r\n    [Theory]\r\n    [InlineData(\"case\", 0, \"zero cases\")]\r\n    [InlineData(\"case\", 1, \"one case\")]\r\n    [InlineData(\"case\", 5, \"five cases\")]\r\n    [InlineData(\"man\", 0, \"zero men\")]\r\n    [InlineData(\"man\", 1, \"one man\")]\r\n    [InlineData(\"man\", 2, \"two men\")]\r\n    [InlineData(\"men\", 2, \"two men\")]\r\n    [InlineData(\"process\", 2, \"two processes\")]\r\n    [InlineData(\"process\", 1, \"one process\")]\r\n    [InlineData(\"processes\", 2, \"two processes\")]\r\n    [InlineData(\"processes\", 1200, \"one thousand two hundred processes\")]\r\n    [InlineData(\"processes\", 1, \"one process\")]\r\n    public void ToQuantityWords(string word, int quantity, string expected) =>\r\n        Assert.Equal(expected, word.ToQuantity(quantity, ShowQuantityAs.Words));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/is/Bytes/ByteSizeExtensionsTests.cs",
    "content": "﻿namespace @is.Bytes;\r\n\r\n[UseCulture(\"is\")]\r\npublic class ByteSizeExtensionsTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, null, \"2 TB\")]\r\n    [InlineData(2, \"GB\", \"2048 GB\")]\r\n    [InlineData(2.123, \"#.#\", \"2,1 TB\")]\r\n    public void HumanizesTerabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Terabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 b\")]\r\n    [InlineData(0, \"GB\", \"0 GB\")]\r\n    [InlineData(2, null, \"2 GB\")]\r\n    [InlineData(2, \"MB\", \"2048 MB\")]\r\n    [InlineData(2.123, \"#.##\", \"2,12 GB\")]\r\n    public void HumanizesGigabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Gigabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 b\")]\r\n    [InlineData(0, \"MB\", \"0 MB\")]\r\n    [InlineData(2, null, \"2 MB\")]\r\n    [InlineData(2, \"KB\", \"2048 kB\")]\r\n    [InlineData(2.123, \"#\", \"2 MB\")]\r\n    public void HumanizesMegabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Megabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 b\")]\r\n    [InlineData(0, \"KB\", \"0 kB\")]\r\n    [InlineData(2, null, \"2 kB\")]\r\n    [InlineData(2, \"B\", \"2048 B\")]\r\n    [InlineData(2.123, \"#.####\", \"2,123 kB\")]\r\n    public void HumanizesKilobytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Kilobytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 b\")]\r\n    [InlineData(0, \"#.##\", \"0 b\")]\r\n    [InlineData(0, \"#.## B\", \"0 B\")]\r\n    [InlineData(0, \"B\", \"0 B\")]\r\n    [InlineData(2, null, \"2 B\")]\r\n    [InlineData(2000, \"KB\", \"1,95 kB\")]\r\n    [InlineData(2123, \"#.##\", \"2,07 kB\")]\r\n    [InlineData(10000000, \"KB\", \"9765,63 kB\")]\r\n    [InlineData(10000000, \"#,##0 KB\", \"9.766 kB\")]\r\n    [InlineData(10000000, \"#,##0.# KB\", \"9.765,6 kB\")]\r\n    public void HumanizesBytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Bytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 b\")]\r\n    [InlineData(0, \"b\", \"0 b\")]\r\n    [InlineData(2, null, \"2 b\")]\r\n    [InlineData(12, \"B\", \"1,5 B\")]\r\n    [InlineData(10000, \"#.# KB\", \"1,2 kB\")]\r\n    public void HumanizesBits(long input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Bits().Humanize(format));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/is/Bytes/ToFullWordsTests.cs",
    "content": "﻿namespace @is.Bytes;\r\n\r\n[UseCulture(\"is\")]\r\npublic class ToFullWordsTests\r\n{\r\n    [Fact]\r\n    public void ReturnsSingularBit() =>\r\n        Assert.Equal(\"1 biti\", ByteSize.FromBits(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralBits() =>\r\n        Assert.Equal(\"2 biti\", ByteSize.FromBits(2).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularByte() =>\r\n        Assert.Equal(\"1 bæti\", ByteSize.FromBytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralBytes() =>\r\n        Assert.Equal(\"10 bæti\", ByteSize.FromBytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularKiloByte() =>\r\n        Assert.Equal(\"1 kílóbæti\", ByteSize.FromKilobytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralKilobytes() =>\r\n        Assert.Equal(\"10 kílóbæti\", ByteSize.FromKilobytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularMegabyte() =>\r\n        Assert.Equal(\"1 megabæti\", ByteSize.FromMegabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralMegabytes() =>\r\n        Assert.Equal(\"10 megabæti\", ByteSize.FromMegabytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularGigabyte() =>\r\n        Assert.Equal(\"1 gígabæti\", ByteSize.FromGigabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralGigabytes() =>\r\n        Assert.Equal(\"10 gígabæti\", ByteSize.FromGigabytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularTerabyte() =>\r\n        Assert.Equal(\"1 terabæti\", ByteSize.FromTerabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralTerabytes() =>\r\n        Assert.Equal(\"10 terabæti\", ByteSize.FromTerabytes(10).ToFullWords());\r\n\r\n    [Theory]\r\n    [InlineData(229376, \"B\", \"229376 bæti\")]\r\n    [InlineData(229376, \"# KB\", \"224 kílóbæti\")]\r\n    public void ToFullWordsFormatted(double input, string format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, ByteSize.FromBytes(input).ToFullWords(format));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/is/Bytes/ToStringTests.cs",
    "content": "﻿namespace @is.Bytes;\r\n\r\n[UseCulture(\"is\")]\r\npublic class ToStringTests\r\n{\r\n    [Fact]\r\n    public void ReturnsLargestMetricSuffix() =>\r\n        Assert.Equal(\"10,5 kB\", ByteSize.FromKilobytes(10.5).ToString());\r\n\r\n    [Fact]\r\n    public void ReturnsDefaultNumberFormat() =>\r\n        Assert.Equal(\"10,5 kB\", ByteSize.FromKilobytes(10.5).ToString(\"KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsProvidedNumberFormat() =>\r\n        Assert.Equal(\"10,1234 kB\", ByteSize.FromKilobytes(10.1234).ToString(\"#.#### KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBits() =>\r\n        Assert.Equal(\"10 b\", ByteSize.FromBits(10).ToString(\"##.#### b\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBytes() =>\r\n        Assert.Equal(\"10 B\", ByteSize.FromBytes(10).ToString(\"##.#### B\"));\r\n\r\n    [Fact]\r\n    public void ReturnsKilobytes() =>\r\n        Assert.Equal(\"10 kB\", ByteSize.FromKilobytes(10).ToString(\"##.#### KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsMegabytes() =>\r\n        Assert.Equal(\"10 MB\", ByteSize.FromMegabytes(10).ToString(\"##.#### MB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsGigabytes() =>\r\n        Assert.Equal(\"10 GB\", ByteSize.FromGigabytes(10).ToString(\"##.#### GB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsTerabytes() =>\r\n        Assert.Equal(\"10 TB\", ByteSize.FromTerabytes(10).ToString(\"##.#### TB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsSelectedFormat() =>\r\n        Assert.Equal(\"10,0 TB\", ByteSize.FromTerabytes(10).ToString(\"0.0 TB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsLargestMetricPrefixLargerThanZero() =>\r\n        Assert.Equal(\"512 kB\", ByteSize.FromMegabytes(.5).ToString(\"#.#\"));\r\n\r\n    [Fact]\r\n    public void ReturnsLargestMetricPrefixLargerThanZeroForNegativeValues() =>\r\n        Assert.Equal(\"-512 kB\", ByteSize.FromMegabytes(-.5).ToString(\"#.#\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBytesViaGeneralFormat() =>\r\n        Assert.Equal(\"10 B\", $\"{ByteSize.FromBytes(10)}\");\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/is/CollectionFormatterTests.cs",
    "content": "﻿namespace @is;\r\n\r\n[UseCulture(\"is\")]\r\npublic class CollectionFormatterTests\r\n{\r\n    [Fact]\r\n    public void OneItem()\r\n    {\r\n        var collection = new List<int>([1]);\r\n        var humanized = \"1\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void TwoItems()\r\n    {\r\n        var collection = new List<int>([1, 2]);\r\n        var humanized = \"1 og 2\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void MoreThanTwoItems()\r\n    {\r\n        var collection = new List<int>([1, 2, 3]);\r\n        var humanized = \"1, 2 og 3\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/is/DateHumanizeTests.cs",
    "content": "﻿namespace @is;\r\n\r\n[UseCulture(\"is\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, \"fyrir 2 dögum\")]\r\n    [InlineData(1, \"í gær\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"eftir 2 daga\")]\r\n    [InlineData(1, \"á morgun\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"fyrir 2 klukkustundum\")]\r\n    [InlineData(1, \"fyrir einni klukkustund\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"eftir 2 klukkustundir\")]\r\n    [InlineData(1, \"eftir eina klukkustund\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"fyrir 2 mínútum\")]\r\n    [InlineData(-1, \"fyrir einni mínútu\")]\r\n    [InlineData(60, \"fyrir einni klukkustund\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"eftir 2 mínútur\")]\r\n    [InlineData(1, \"eftir eina mínútu\")]\r\n    [InlineData(10, \"eftir 10 mínútur\")]\r\n    [InlineData(59, \"eftir 59 mínútur\")]\r\n    [InlineData(60, \"eftir eina klukkustund\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"fyrir 2 mánuðum\")]\r\n    [InlineData(1, \"fyrir einum mánuði\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"eftir 2 mánuði\")]\r\n    [InlineData(1, \"eftir einn mánuð\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"fyrir 2 sekúndum\")]\r\n    [InlineData(1, \"fyrir einni sekúndu\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"eftir 2 sekúndur\")]\r\n    [InlineData(1, \"eftir eina sekúndu\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"fyrir 2 árum\")]\r\n    [InlineData(1, \"fyrir einu ári\")]\r\n    [InlineData(20, \"fyrir 20 árum\")]\r\n    [InlineData(30, \"fyrir 30 árum\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"eftir 2 ár\")]\r\n    [InlineData(1, \"eftir eitt ár\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"núna\")]\r\n    public void RightNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/is/HeadingTests.cs",
    "content": "﻿namespace @is;\r\n\r\n[UseCulture(\"is\")]\r\npublic class HeadingTests\r\n{\r\n    [InlineData(0, \"N\")]\r\n    [InlineData(11.2, \"N\")]\r\n    [InlineData(11.3, \"NNA\")]\r\n    [InlineData(22.5, \"NNA\")]\r\n    [InlineData(33.7, \"NNA\")]\r\n    [InlineData(33.8, \"NA\")]\r\n    [InlineData(45, \"NA\")]\r\n    [InlineData(56.2, \"NA\")]\r\n    [InlineData(56.3, \"ANA\")]\r\n    [InlineData(67.5, \"ANA\")]\r\n    [InlineData(78.7, \"ANA\")]\r\n    [InlineData(78.8, \"A\")]\r\n    [InlineData(90, \"A\")]\r\n    [InlineData(101.2, \"A\")]\r\n    [InlineData(101.3, \"ASA\")]\r\n    [InlineData(112.5, \"ASA\")]\r\n    [InlineData(123.7, \"ASA\")]\r\n    [InlineData(123.8, \"SA\")]\r\n    [InlineData(135, \"SA\")]\r\n    [InlineData(146.2, \"SA\")]\r\n    [InlineData(146.3, \"SSA\")]\r\n    [InlineData(157.5, \"SSA\")]\r\n    [InlineData(168.7, \"SSA\")]\r\n    [InlineData(168.8, \"S\")]\r\n    [InlineData(180, \"S\")]\r\n    [InlineData(191.2, \"S\")]\r\n    [InlineData(191.3, \"SSV\")]\r\n    [InlineData(202.5, \"SSV\")]\r\n    [InlineData(213.7, \"SSV\")]\r\n    [InlineData(213.8, \"SV\")]\r\n    [InlineData(225, \"SV\")]\r\n    [InlineData(236.2, \"SV\")]\r\n    [InlineData(236.3, \"VSV\")]\r\n    [InlineData(247.5, \"VSV\")]\r\n    [InlineData(258.7, \"VSV\")]\r\n    [InlineData(258.8, \"V\")]\r\n    [InlineData(270, \"V\")]\r\n    [InlineData(281.2, \"V\")]\r\n    [InlineData(281.3, \"VNV\")]\r\n    [InlineData(292.5, \"VNV\")]\r\n    [InlineData(303.7, \"VNV\")]\r\n    [InlineData(303.8, \"NV\")]\r\n    [InlineData(315, \"NV\")]\r\n    [InlineData(326.2, \"NV\")]\r\n    [InlineData(326.3, \"NNV\")]\r\n    [InlineData(337.5, \"NNV\")]\r\n    [InlineData(348.7, \"NNV\")]\r\n    [InlineData(348.8, \"N\")]\r\n    [InlineData(720, \"N\")]\r\n    [Theory]\r\n    public void ToHeadingAbbreviated(double heading, string expected) =>\r\n        Assert.Equal(expected, heading.ToHeading());\r\n\r\n    [InlineData(0, \"norður\")]\r\n    [InlineData(45, \"norðaustur\")]\r\n    [InlineData(67.5, \"austnorðaustur\")]\r\n    [InlineData(90, \"austur\")]\r\n    [InlineData(112.5, \"austsuðaustur\")]\r\n    [InlineData(135, \"suðaustur\")]\r\n    [InlineData(157.5, \"suðsuðaustur\")]\r\n    [InlineData(180, \"suður\")]\r\n    [InlineData(202.5, \"suðsuðvestur\")]\r\n    [InlineData(225, \"suðvestur\")]\r\n    [InlineData(247.5, \"vestsuðvestur\")]\r\n    [InlineData(270, \"vestur\")]\r\n    [InlineData(292.5, \"vestnorðvestur\")]\r\n    [InlineData(315, \"norðvestur\")]\r\n    [InlineData(337.5, \"norðnorðvestur\")]\r\n    [InlineData(720, \"norður\")]\r\n    [Theory]\r\n    public void ToHeading(double heading, string expected) =>\r\n        Assert.Equal(expected, heading.ToHeading(HeadingStyle.Full));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/is/NumberToWordsTests.cs",
    "content": "﻿namespace @is;\r\n\r\n[UseCulture(\"is\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"núll\")]\r\n    [InlineData(1, \"einn\")]\r\n    [InlineData(-10, \"mínus tíu\")]\r\n    [InlineData(10, \"tíu\")]\r\n    [InlineData(11, \"ellefu\")]\r\n    [InlineData(122, \"eitt hundrað tuttugu og tveir\")]\r\n    [InlineData(3501, \"þrjú þúsund fimm hundruð og einn\")]\r\n    [InlineData(100, \"eitt hundrað\")]\r\n    [InlineData(1000, \"eitt þúsund\")]\r\n    [InlineData(100000, \"eitt hundrað þúsund\")]\r\n    [InlineData(1000000, \"ein milljón\")]\r\n    [InlineData(10000000, \"tíu milljónir\")]\r\n    [InlineData(100000000, \"eitt hundrað milljónir\")]\r\n    [InlineData(100000001L, \"eitt hundrað milljónir og einn\")]\r\n    [InlineData(100000001L, \"eitt hundrað milljónir og ein\", GrammaticalGender.Feminine)]\r\n    [InlineData(100000001L, \"eitt hundrað milljónir og eitt\", GrammaticalGender.Neuter)]\r\n    [InlineData(100000002L, \"eitt hundrað milljónir og tveir\")]\r\n    [InlineData(100001999L, \"eitt hundrað milljónir eitt þúsund níu hundruð níutíu og níu\")]\r\n    [InlineData(100002000L, \"eitt hundrað milljónir og tvö þúsund\")]\r\n    [InlineData(100002000L, \"eitt hundrað milljónir og tvö þúsund\", GrammaticalGender.Feminine)]\r\n    [InlineData(100002000L, \"eitt hundrað milljónir og tvö þúsund\", GrammaticalGender.Neuter)]\r\n    [InlineData(100002001L, \"eitt hundrað milljónir tvö þúsund og einn\")]\r\n    [InlineData(100002002L, \"eitt hundrað milljónir tvö þúsund og tveir\")]\r\n    [InlineData(100031999L, \"eitt hundrað milljónir þrjátíu og eitt þúsund níu hundruð níutíu og níu\")]\r\n    [InlineData(1000000000, \"einn milljarður\")]\r\n    [InlineData(111, \"eitt hundrað og ellefu\")]\r\n    [InlineData(1111, \"eitt þúsund eitt hundrað og ellefu\")]\r\n    [InlineData(111111, \"eitt hundrað og ellefu þúsund eitt hundrað og ellefu\")]\r\n    [InlineData(1111111, \"ein milljón eitt hundrað og ellefu þúsund eitt hundrað og ellefu\")]\r\n    [InlineData(11111111, \"ellefu milljónir eitt hundrað og ellefu þúsund eitt hundrað og ellefu\")]\r\n    [InlineData(111111111, \"eitt hundrað og ellefu milljónir eitt hundrað og ellefu þúsund eitt hundrað og ellefu\")]\r\n    [InlineData(1111111111, \"einn milljarður eitt hundrað og ellefu milljónir eitt hundrað og ellefu þúsund eitt hundrað og ellefu\")]\r\n    [InlineData(10000000000L, \"tíu milljarðar\")]\r\n    [InlineData(10000000001L, \"tíu milljarðar og einn\")]\r\n    [InlineData(10000000002L, \"tíu milljarðar og tveir\")]\r\n    [InlineData(123, \"eitt hundrað tuttugu og þrír\")]\r\n    [InlineData(124, \"eitt hundrað tuttugu og fjórir\")]\r\n    [InlineData(1234, \"eitt þúsund tvö hundruð þrjátíu og fjórir\")]\r\n    [InlineData(12345, \"tólf þúsund þrjú hundruð fjörutíu og fimm\")]\r\n    [InlineData(123456, \"eitt hundrað tuttugu og þrjú þúsund fjögur hundruð fimmtíu og sex\")]\r\n    [InlineData(1234567, \"ein milljón tvö hundruð þrjátíu og fjögur þúsund fimm hundruð sextíu og sjö\")]\r\n    [InlineData(12345678, \"tólf milljónir þrjú hundruð fjörutíu og fimm þúsund sex hundruð sjötíu og átta\")]\r\n    [InlineData(123456789, \"eitt hundrað tuttugu og þrjár milljónir fjögur hundruð fimmtíu og sex þúsund sjö hundruð áttatíu og níu\")]\r\n    [InlineData(1234567890, \"einn milljarður tvö hundruð þrjátíu og fjórar milljónir fimm hundruð sextíu og sjö þúsund átta hundruð og níutíu\")]\r\n    [InlineData(1234567899, \"einn milljarður tvö hundruð þrjátíu og fjórar milljónir fimm hundruð sextíu og sjö þúsund átta hundruð níutíu og níu\")]\r\n    [InlineData(108, \"eitt hundrað og átta\")]\r\n    [InlineData(678, \"sex hundruð sjötíu og átta\")]\r\n    [InlineData(2013, \"tvö þúsund og þrettán\")]\r\n    [InlineData(2577, \"tvö þúsund fimm hundruð sjötíu og sjö\")]\r\n    [InlineData(17053980, \"sautján milljónir fimmtíu og þrjú þúsund níu hundruð og áttatíu\")]\r\n    [InlineData(415618, \"fjögur hundruð og fimmtán þúsund sex hundruð og átján\")]\r\n    [InlineData(16415618, \"sextán milljónir fjögur hundruð og fimmtán þúsund sex hundruð og átján\")]\r\n    [InlineData(322, \"þrjú hundruð tuttugu og tveir\")]\r\n    [InlineData(322, \"þrjú hundruð tuttugu og tvær\", GrammaticalGender.Feminine)]\r\n    public void IntToWords(long number, string expected, GrammaticalGender gender = GrammaticalGender.Masculine) =>\r\n        Assert.Equal(expected, number.ToWords(gender));\r\n\r\n    [Theory]\r\n    [InlineData(100_000_000_000L, \"eitt hundrað milljarðar\")]\r\n    [InlineData(1_000_000_000_000L, \"ein billjón\")]\r\n    [InlineData(100_000_000_000_000L, \"eitt hundrað billjónir\")]\r\n    [InlineData(1_000_000_000_000_000L, \"einn billjarður\")]\r\n    [InlineData(100_000_000_000_000_000L, \"eitt hundrað billjarðar\")]\r\n    [InlineData(1_000_000_000_000_000_000L, \"ein trilljón\")]\r\n    [InlineData(9_223_372_036_854_775_807L, \"níu trilljónir tvö hundruð tuttugu og þrír billjarðar þrjú hundruð sjötíu og tvær billjónir þrjátíu og sex milljarðar átta hundruð fimmtíu og fjórar milljónir sjö hundruð sjötíu og fimm þúsund átta hundruð og sjö\")]\r\n    public void LongToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"núllti\")]\r\n    [InlineData(1, \"fyrsti\")]\r\n    [InlineData(2, \"annar\", GrammaticalGender.Masculine)]\r\n    [InlineData(2, \"önnur\", GrammaticalGender.Feminine)]\r\n    [InlineData(2, \"annað\", GrammaticalGender.Neuter)]\r\n    [InlineData(3, \"þriðji\")]\r\n    [InlineData(4, \"fjórði\")]\r\n    [InlineData(5, \"fimmti\")]\r\n    [InlineData(5, \"fimmta\", GrammaticalGender.Neuter)]\r\n    [InlineData(6, \"sjötti\")]\r\n    [InlineData(7, \"sjöundi\")]\r\n    [InlineData(8, \"áttundi\")]\r\n    [InlineData(9, \"níundi\")]\r\n    [InlineData(10, \"tíundi\")]\r\n    [InlineData(11, \"ellefti\")]\r\n    [InlineData(12, \"tólfti\")]\r\n    [InlineData(13, \"þrettándi\")]\r\n    [InlineData(14, \"fjórtándi\")]\r\n    [InlineData(15, \"fimmtándi\")]\r\n    [InlineData(16, \"sextándi\")]\r\n    [InlineData(17, \"sautjándi\")]\r\n    [InlineData(18, \"átjándi\")]\r\n    [InlineData(19, \"nítjándi\")]\r\n    [InlineData(6, \"sjötta\", GrammaticalGender.Feminine)]\r\n    [InlineData(7, \"sjöunda\", GrammaticalGender.Feminine)]\r\n    [InlineData(8, \"áttunda\", GrammaticalGender.Feminine)]\r\n    [InlineData(9, \"níunda\", GrammaticalGender.Feminine)]\r\n    [InlineData(10, \"tíunda\", GrammaticalGender.Feminine)]\r\n    [InlineData(11, \"ellefta\", GrammaticalGender.Feminine)]\r\n    [InlineData(12, \"tólfta\", GrammaticalGender.Feminine)]\r\n    [InlineData(13, \"þrettánda\", GrammaticalGender.Feminine)]\r\n    [InlineData(14, \"fjórtánda\", GrammaticalGender.Feminine)]\r\n    [InlineData(15, \"fimmtánda\", GrammaticalGender.Feminine)]\r\n    [InlineData(16, \"sextánda\", GrammaticalGender.Feminine)]\r\n    [InlineData(17, \"sautjánda\", GrammaticalGender.Feminine)]\r\n    [InlineData(18, \"átjánda\", GrammaticalGender.Feminine)]\r\n    [InlineData(19, \"nítjánda\", GrammaticalGender.Feminine)]\r\n    [InlineData(20, \"tuttugasti\")]\r\n    [InlineData(21, \"tuttugasti og fyrsti\")]\r\n    [InlineData(22, \"tuttugasti og annar\")]\r\n    [InlineData(30, \"þrítugasti\")]\r\n    [InlineData(40, \"fertugasti\")]\r\n    [InlineData(50, \"fimmtugasti\")]\r\n    [InlineData(60, \"sextugasti\")]\r\n    [InlineData(70, \"sjötugasti\")]\r\n    [InlineData(80, \"áttugasti\")]\r\n    [InlineData(90, \"nítugasti\")]\r\n    [InlineData(95, \"nítugasti og fimmti\")]\r\n    [InlineData(96, \"nítugasti og sjötti\")]\r\n    [InlineData(44, \"fertugasta og fjórða\", GrammaticalGender.Feminine)]\r\n    [InlineData(44, \"fertugasti og fjórði\")]\r\n    [InlineData(77, \"sjötugasti og sjöundi\")]\r\n    [InlineData(87, \"áttugasta og sjöunda\", GrammaticalGender.Feminine)]\r\n    [InlineData(99, \"nítugasta og níunda\", GrammaticalGender.Neuter)]\r\n    [InlineData(100, \"eitt hundraðasti\")]\r\n    [InlineData(101, \"eitt hundraðasti og fyrsti\")]\r\n    [InlineData(106, \"eitt hundraðasti og sjötti\")]\r\n    [InlineData(108, \"eitt hundraðasti og áttundi\")]\r\n    [InlineData(112, \"eitt hundraðasti og tólfti\")]\r\n    [InlineData(119, \"eitt hundraðasti og nítjándi\")]\r\n    [InlineData(120, \"eitt hundrað og tuttugasti\")]\r\n    [InlineData(121, \"eitt hundrað tuttugasti og fyrsti\")]\r\n    [InlineData(130, \"eitt hundrað og þrítugasti\")]\r\n    [InlineData(131, \"eitt hundrað þrítugasti og fyrsti\")]\r\n    [InlineData(1000, \"eitt þúsundasta\", GrammaticalGender.Feminine)]\r\n    [InlineData(1001, \"eitt þúsundasti og fyrsti\")]\r\n    [InlineData(1005, \"eitt þúsundasti og fimmti\")]\r\n    [InlineData(1008, \"eitt þúsundasti og áttundi\")]\r\n    [InlineData(1012, \"eitt þúsundasti og tólfti\")]\r\n    [InlineData(1021, \"eitt þúsund tuttugasti og fyrsti\")]\r\n    [InlineData(10000, \"tíu þúsundasti\")]\r\n    [InlineData(10121, \"tíu þúsund eitt hundrað tuttugasti og fyrsti\")]\r\n    [InlineData(100000, \"eitt hundrað þúsundasti\")]\r\n    [InlineData(100001, \"eitt hundrað þúsundasti og fyrsti\")]\r\n    [InlineData(1000000, \"ein milljónasti\")]\r\n    [InlineData(2000000, \"tvær milljónasti\")] // https://www.mbl.is/frettir/innlent/2012/12/19/tvo_milljonasti_eda_tvimilljonasti/\r\n    [InlineData(1530, \"eitt þúsund fimm hundruð og þrítugasti\")]\r\n    [InlineData(530, \"fimm hundruð og þrítugasti\")]\r\n    [InlineData(2070, \"tvö þúsund og sjötugasti\")]\r\n    [InlineData(4444, \"fjögur þúsund fjögur hundruð fertugasti og fjórði\")]\r\n    [InlineData(267, \"tvö hundruð sextugasti og sjöundi\")]\r\n    [InlineData(700, \"sjö hundruðasti\")]\r\n    [InlineData(707, \"sjö hundruðasti og sjöundi\")]\r\n    [InlineData(717, \"sjö hundruðasti og sautjándi\")]\r\n    [InlineData(777, \"sjö hundruð sjötugasti og sjöundi\")]\r\n    [InlineData(3019, \"þrjú þúsundasti og nítjándi\")]\r\n    [InlineData(5315, \"fimm þúsund þrjú hundruðasti og fimmtándi\")]\r\n    [InlineData(6471, \"sex þúsund fjögur hundruð sjötugasti og fyrsti\")]\r\n    [InlineData(7000, \"sjö þúsundasti\")]\r\n    [InlineData(7007, \"sjö þúsundasti og sjöundi\")]\r\n    [InlineData(7017, \"sjö þúsundasti og sautjándi\")]\r\n    [InlineData(7777, \"sjö þúsund sjö hundruð sjötugasti og sjöundi\")]\r\n    [InlineData(5315, \"fimm þúsund þrjú hundruðasta og fimmtánda\", GrammaticalGender.Feminine)]\r\n    [InlineData(1044, \"eitt þúsund fertugasti og fjórði\")]\r\n    [InlineData(315, \"þrjú hundruðasti og fimmtándi\")]\r\n    [InlineData(777, \"sjö hundruð sjötugasta og sjöunda\", GrammaticalGender.Neuter)]\r\n    [InlineData(102000, \"eitt hundrað og tvö þúsundasti\")]\r\n    [InlineData(1002000, \"ein milljón og tvö þúsundasti\")]\r\n    public void ToOrdinalWords(int number, string words, GrammaticalGender gender = GrammaticalGender.Masculine) =>\r\n        Assert.Equal(words, number.ToOrdinalWords(gender));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/is/OrdinalizeTests.cs",
    "content": "﻿namespace @is;\r\n\r\n[UseCulture(\"is\")]\r\npublic class OrdinalizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"0\", \"0.\")]\r\n    [InlineData(\"1\", \"1.\")]\r\n    [InlineData(\"2\", \"2.\")]\r\n    [InlineData(\"3\", \"3.\")]\r\n    [InlineData(\"4\", \"4.\")]\r\n    [InlineData(\"5\", \"5.\")]\r\n    [InlineData(\"6\", \"6.\")]\r\n    [InlineData(\"23\", \"23.\")]\r\n    [InlineData(\"100\", \"100.\")]\r\n    [InlineData(\"101\", \"101.\")]\r\n    [InlineData(\"102\", \"102.\")]\r\n    [InlineData(\"103\", \"103.\")]\r\n    [InlineData(\"1001\", \"1001.\")]\r\n    public void OrdinalizeString(string number, string ordinalized) =>\r\n        Assert.Equal(ordinalized, number.Ordinalize());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/is/ResourcesTests.cs",
    "content": "﻿namespace @is;\r\n\r\npublic class ResourcesTests\r\n{\r\n    [Fact]\r\n    [UseCulture(\"is\")]\r\n    public void GetCultureSpecificTranslationsWithImplicitCulture()\r\n    {\r\n        var format = Resources.GetResource(\"DateHumanize_MultipleYearsAgo\");\r\n        Assert.Equal(\"fyrir {0} árum\", format);\r\n    }\r\n\r\n    [Fact]\r\n    public void GetCultureSpecificTranslationsWithExplicitCulture()\r\n    {\r\n        var format = Resources.GetResource(\"DateHumanize_SingleYearAgo\", new(\"is\"));\r\n        Assert.Equal(\"fyrir einu ári\", format);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/is/TimeOnlyHumanizeTests.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace @is;\r\n\r\n[UseCulture(\"is\")]\r\npublic class TimeOnlyHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"13:07:05\", \"13:07:05\", \"núna\")]\r\n    [InlineData(\"13:08:05\", \"1:08:05\", \"eftir 12 klukkustundir\")]\r\n    [InlineData(\"13:08:05\", \"13:38:05\", \"fyrir 30 mínútum\")]\r\n    [InlineData(\"13:07:02\", \"17:07:05\", \"fyrir 4 klukkustundum\")]\r\n    public void DefaultStrategy(string inputTime, string timeToCompareAgainst, string expectedResult)\r\n    {\r\n        Configurator.TimeOnlyHumanizeStrategy = new DefaultTimeOnlyHumanizeStrategy();\r\n\r\n        var parsedInputTime = TimeOnly.Parse(inputTime);\r\n        var parsedBaseTime = TimeOnly.Parse(timeToCompareAgainst);\r\n        var actualResult = parsedInputTime.Humanize(parsedBaseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(\"18:10:49\", \"13:07:04\", \"eftir 5 klukkustundir\", 0.75)]\r\n    [InlineData(\"13:10:49\", \"13:07:04\", \"eftir 4 mínútur\", 0.5)]\r\n    [InlineData(\"18:10:49\", \"13:07:04\", \"eftir 5 klukkustundir\", 1.0)]\r\n    public void PrecisionStrategy(string inputTime, string timeToCompareAgainst, string expectedResult, double precision)\r\n    {\r\n        Configurator.TimeOnlyHumanizeStrategy = new PrecisionTimeOnlyHumanizeStrategy(precision);\r\n\r\n        var parsedInputTime = TimeOnly.Parse(inputTime);\r\n        var parsedBaseTime = TimeOnly.Parse(timeToCompareAgainst);\r\n        var actualResult = parsedInputTime.Humanize(parsedBaseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void TestNever() =>\r\n        Assert.Equal(\"aldrei\", ((TimeOnly?)null).Humanize());\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/is/TimeSpanHumanizeTests.cs",
    "content": "namespace @is;\r\n\r\n[UseCulture(\"is\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"1 ár\")]\r\n    [InlineData(731, \"2 ár\")]\r\n    [InlineData(1096, \"3 ár\")]\r\n    [InlineData(4018, \"11 ár\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"eitt ár\")]\r\n    [InlineData(731, \"tvö ár\")]\r\n    [InlineData(1096, \"þrjú ár\")]\r\n    [InlineData(4018, \"ellefu ár\")]\r\n    public void YearsToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: true));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"1 mánuður\")]\r\n    [InlineData(61, \"2 mánuðir\")]\r\n    [InlineData(92, \"3 mánuðir\")]\r\n    [InlineData(335, \"11 mánuðir\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"einn mánuður\")]\r\n    [InlineData(61, \"tveir mánuðir\")]\r\n    [InlineData(92, \"þrír mánuðir\")]\r\n    [InlineData(335, \"ellefu mánuðir\")]\r\n    public void MonthsToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"ein vika\")]\r\n    [InlineData(14, \"2 vikur\")]\r\n    [InlineData(21, \"3 vikur\")]\r\n    [InlineData(77, \"11 vikur\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(7, \"ein vika\")]\r\n    [InlineData(14, \"tvær vikur\")]\r\n    [InlineData(21, \"þrjár vikur\")]\r\n    [InlineData(77, \"ellefu vikur\")]\r\n    public void WeeksToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"einn dagur\")]\r\n    [InlineData(2, \"2 dagar\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"einn dagur\")]\r\n    [InlineData(2, \"tveir dagar\")]\r\n    public void DaysToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ein klukkustund\")]\r\n    [InlineData(2, \"2 klukkustundir\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ein klukkustund\")]\r\n    [InlineData(2, \"tvær klukkustundir\")]\r\n    public void HoursToWords(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ein mínúta\")]\r\n    [InlineData(2, \"2 mínútur\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ein mínúta\")]\r\n    [InlineData(2, \"tvær mínútur\")]\r\n    public void MinutesToWords(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ein sekúnda\")]\r\n    [InlineData(2, \"2 sekúndur\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ein sekúnda\")]\r\n    [InlineData(2, \"tvær sekúndur\")]\r\n    public void SecondsToWords(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ein millisekúnda\")]\r\n    [InlineData(2, \"2 millisekúndur\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ein millisekúnda\")]\r\n    [InlineData(2, \"tvær millisekúndur\")]\r\n    public void MillisecondsToWords(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize(toWords: true));\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 millisekúndur\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"engin stund\", TimeSpan.Zero.Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1299630020, 5, \"tvær vikur, einn dagur, ein klukkustund, þrjátíu sekúndur, tuttugu millisekúndur\")]\r\n    public void TimeSpanWithNumbersConvertedToWords(int milliseconds, int precision, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize(precision, toWords: true);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/it/CollectionFormatterTests.cs",
    "content": "﻿namespace it;\r\n\r\n[UseCulture(\"it\")]\r\npublic class CollectionFormatterTests\r\n{\r\n    [Fact]\r\n    public void OneItem()\r\n    {\r\n        var collection = new List<int>([1]);\r\n        var humanized = \"1\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void TwoItems()\r\n    {\r\n        var collection = new List<int>([1, 2]);\r\n        var humanized = \"1 e 2\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void MoreThanTwoItems()\r\n    {\r\n        var collection = new List<int>([1, 2, 3]);\r\n        var humanized = \"1, 2 e 3\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/it/DateHumanizeTests.cs",
    "content": "﻿namespace it;\r\n\r\n[UseCulture(\"it\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(-2, \"2 giorni fa\")]\r\n    [InlineData(-1, \"ieri\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"tra 2 giorni\")]\r\n    [InlineData(1, \"domani\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 ore fa\")]\r\n    [InlineData(-1, \"un'ora fa\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"tra 2 ore\")]\r\n    [InlineData(1, \"tra un'ora\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 minuti fa\")]\r\n    [InlineData(-1, \"un minuto fa\")]\r\n    [InlineData(60, \"un'ora fa\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"tra 2 minuti\")]\r\n    [InlineData(1, \"tra un minuto\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 mesi fa\")]\r\n    [InlineData(-1, \"un mese fa\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"tra 2 mesi\")]\r\n    [InlineData(1, \"tra un mese\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 secondi fa\")]\r\n    [InlineData(-1, \"un secondo fa\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"tra 2 secondi\")]\r\n    [InlineData(1, \"tra un secondo\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 anni fa\")]\r\n    [InlineData(-1, \"un anno fa\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"tra 2 anni\")]\r\n    [InlineData(1, \"tra un anno\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"adesso\")]\r\n    public void Now(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/it/NumberToWordsTests.cs",
    "content": "﻿namespace it;\r\n\r\n[UseCulture(\"it\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"uno\")]\r\n    [InlineData(-1, \"meno uno\")]\r\n    [InlineData(3, \"tre\")]\r\n    [InlineData(10, \"dieci\")]\r\n    [InlineData(11, \"undici\")]\r\n    [InlineData(21, \"ventuno\")]\r\n    [InlineData(38, \"trentotto\")]\r\n    [InlineData(122, \"centoventidue\")]\r\n    [InlineData(3501, \"tremilacinquecentouno\")]\r\n    [InlineData(-3501, \"meno tremilacinquecentouno\")]\r\n    [InlineData(100, \"cento\")]\r\n    [InlineData(1000, \"mille\")]\r\n    [InlineData(2000, \"duemila\")]\r\n    [InlineData(10000, \"diecimila\")]\r\n    [InlineData(100000, \"centomila\")]\r\n    [InlineData(1000000, \"un milione\")]\r\n    [InlineData(5000000, \"cinque milioni\")]\r\n    [InlineData(10000000, \"dieci milioni\")]\r\n    [InlineData(100000000, \"cento milioni\")]\r\n    [InlineData(1000000000, \"un miliardo\")]\r\n    [InlineData(2000000000, \"due miliardi\")]\r\n    [InlineData(2147483647, \"due miliardi centoquarantasette milioni quattrocentoottantatremilaseicentoquarantasette\")]  // int.MaxValue\r\n    //[InlineData(9000000000, \"nove miliardi\")]  // int = System.Int32, fixed in API, is not big enough\r\n    //[InlineData(10000000000, \"dieci miliardi\")]  // int = System.Int32, fixed in API, is not big enough\r\n    //[InlineData(100000000000, \"cento miliardi\")]  // int = System.Int32, fixed in API, is not big enough\r\n    [InlineData(101, \"centouno\")]\r\n    [InlineData(1001, \"milleuno\")]\r\n    [InlineData(10001, \"diecimilauno\")]\r\n    [InlineData(100001, \"centomilauno\")]\r\n    [InlineData(1000001, \"un milione uno\")]\r\n    [InlineData(10000001, \"dieci milioni uno\")]\r\n    [InlineData(100000001, \"cento milioni uno\")]\r\n    [InlineData(1000000001, \"un miliardo uno\")]\r\n    [InlineData(111, \"centoundici\")]\r\n    [InlineData(1111, \"millecentoundici\")]\r\n    [InlineData(111111, \"centoundicimilacentoundici\")]\r\n    [InlineData(1111101, \"un milione centoundicimilacentouno\")]\r\n    [InlineData(1111111, \"un milione centoundicimilacentoundici\")]\r\n    [InlineData(11111111, \"undici milioni centoundicimilacentoundici\")]\r\n    [InlineData(111111111, \"centoundici milioni centoundicimilacentoundici\")]\r\n    [InlineData(1101111101, \"un miliardo centouno milioni centoundicimilacentouno\")]\r\n    [InlineData(1111111111, \"un miliardo centoundici milioni centoundicimilacentoundici\")]\r\n    [InlineData(8100, \"ottomilacento\")]\r\n    [InlineData(43, \"quarantatré\")]  // Ref. http://dizionari.corriere.it/dizionario-si-dice/V/ventitre.shtml\r\n    [InlineData(123, \"centoventitré\")]\r\n    [InlineData(1234, \"milleduecentotrentaquattro\")]\r\n    [InlineData(12345, \"dodicimilatrecentoquarantacinque\")]\r\n    [InlineData(123456, \"centoventitremilaquattrocentocinquantasei\")]\r\n    [InlineData(1234567, \"un milione duecentotrentaquattromilacinquecentosessantasette\")]\r\n    [InlineData(12345678, \"dodici milioni trecentoquarantacinquemilaseicentosettantotto\")]\r\n    [InlineData(123456789, \"centoventitré milioni quattrocentocinquantaseimilasettecentoottantanove\")]\r\n    [InlineData(1234567890, \"un miliardo duecentotrentaquattro milioni cinquecentosessantasettemilaottocentonovanta\")]\r\n    [InlineData(1999, \"millenovecentonovantanove\")]\r\n    [InlineData(2014, \"duemilaquattordici\")]\r\n    [InlineData(2048, \"duemilaquarantotto\")]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"una\")]\r\n    [InlineData(-1, \"meno una\")]\r\n    [InlineData(3, \"tre\")]\r\n    [InlineData(21, \"ventuno\")]\r\n    [InlineData(101, \"centouno\")]\r\n    [InlineData(1001, \"milleuno\")]\r\n    [InlineData(10001, \"diecimilauno\")]\r\n    [InlineData(100001, \"centomilauno\")]\r\n    public void ToFeminineWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"uno\")]\r\n    [InlineData(-1, \"meno uno\")]\r\n    [InlineData(3, \"tre\")]\r\n    [InlineData(21, \"ventuno\")]\r\n    [InlineData(101, \"centouno\")]\r\n    [InlineData(1001, \"milleuno\")]\r\n    [InlineData(10001, \"diecimilauno\")]\r\n    [InlineData(100001, \"centomilauno\")]\r\n    public void ToMasculineWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Masculine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"primo\")]\r\n    [InlineData(2, \"secondo\")]\r\n    [InlineData(9, \"nono\")]\r\n    [InlineData(10, \"decimo\")]\r\n    [InlineData(11, \"undicesimo\")]\r\n    [InlineData(15, \"quindicesimo\")]\r\n    [InlineData(18, \"diciottesimo\")]\r\n    [InlineData(20, \"ventesimo\")]\r\n    [InlineData(21, \"ventunesimo\")]\r\n    [InlineData(22, \"ventiduesimo\")]\r\n    [InlineData(28, \"ventottesimo\")]\r\n    [InlineData(30, \"trentesimo\")]\r\n    [InlineData(44, \"quarantaquattresimo\")]\r\n    [InlineData(55, \"cinquantacinquesimo\")]\r\n    [InlineData(60, \"sessantesimo\")]\r\n    [InlineData(63, \"sessantatreesimo\")]\r\n    [InlineData(66, \"sessantaseiesimo\")]\r\n    [InlineData(77, \"settantasettesimo\")]\r\n    [InlineData(88, \"ottantottesimo\")]\r\n    [InlineData(99, \"novantanovesimo\")]\r\n    [InlineData(100, \"centesimo\")]\r\n    [InlineData(101, \"centounesimo\")]\r\n    [InlineData(102, \"centoduesimo\")]\r\n    [InlineData(105, \"centocinquesimo\")]\r\n    [InlineData(109, \"centonovesimo\")]\r\n    [InlineData(110, \"centodecimo\")]\r\n    [InlineData(119, \"centodiciannovesimo\")]\r\n    [InlineData(120, \"centoventesimo\")]\r\n    [InlineData(121, \"centoventunesimo\")]\r\n    [InlineData(200, \"duecentesimo\")]\r\n    [InlineData(201, \"duecentounesimo\")]\r\n    [InlineData(240, \"duecentoquarantesimo\")]\r\n    [InlineData(300, \"trecentesimo\")]\r\n    [InlineData(900, \"novecentesimo\")]\r\n    [InlineData(1000, \"millesimo\")]\r\n    [InlineData(1001, \"milleunesimo\")]\r\n    [InlineData(1002, \"milleduesimo\")]\r\n    [InlineData(1003, \"milletreesimo\")]\r\n    [InlineData(1009, \"millenovesimo\")]\r\n    [InlineData(1010, \"milledecimo\")]\r\n    [InlineData(1021, \"milleventunesimo\")]\r\n    [InlineData(2000, \"duemillesimo\")]\r\n    [InlineData(2001, \"duemilaunesimo\")]\r\n    [InlineData(3000, \"tremillesimo\")]\r\n    [InlineData(10000, \"diecimillesimo\")]\r\n    [InlineData(10001, \"diecimilaunesimo\")]\r\n    [InlineData(10121, \"diecimilacentoventunesimo\")]\r\n    [InlineData(100000, \"centomillesimo\")]\r\n    [InlineData(100001, \"centomilaunesimo\")]\r\n    [InlineData(1000000, \"milionesimo\")]\r\n    [InlineData(1000001, \"un milione unesimo\")]\r\n    [InlineData(1000002, \"un milione duesimo\")]\r\n    [InlineData(2000000, \"duemilionesimo\")]\r\n    [InlineData(10000000, \"diecimilionesimo\")]\r\n    [InlineData(100000000, \"centomilionesimo\")]\r\n    [InlineData(1000000000, \"miliardesimo\")]\r\n    [InlineData(2000000000, \"duemiliardesimo\")]\r\n    public void ToOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"prima\")]\r\n    [InlineData(2, \"seconda\")]\r\n    [InlineData(5, \"quinta\")]\r\n    [InlineData(9, \"nona\")]\r\n    [InlineData(10, \"decima\")]\r\n    [InlineData(11, \"undicesima\")]\r\n    [InlineData(18, \"diciottesima\")]\r\n    [InlineData(20, \"ventesima\")]\r\n    [InlineData(21, \"ventunesima\")]\r\n    [InlineData(100, \"centesima\")]\r\n    [InlineData(101, \"centounesima\")]\r\n    [InlineData(200, \"duecentesima\")]\r\n    [InlineData(1000, \"millesima\")]\r\n    [InlineData(1001, \"milleunesima\")]\r\n    [InlineData(10000, \"diecimillesima\")]\r\n    public void ToFeminineOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"primo\")]\r\n    [InlineData(2, \"secondo\")]\r\n    [InlineData(5, \"quinto\")]\r\n    [InlineData(9, \"nono\")]\r\n    [InlineData(10, \"decimo\")]\r\n    [InlineData(11, \"undicesimo\")]\r\n    [InlineData(18, \"diciottesimo\")]\r\n    [InlineData(20, \"ventesimo\")]\r\n    [InlineData(21, \"ventunesimo\")]\r\n    [InlineData(100, \"centesimo\")]\r\n    [InlineData(101, \"centounesimo\")]\r\n    [InlineData(200, \"duecentesimo\")]\r\n    [InlineData(1000, \"millesimo\")]\r\n    [InlineData(1001, \"milleunesimo\")]\r\n    [InlineData(10000, \"diecimillesimo\")]\r\n    public void ToMasculineOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Masculine));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/it/OrdinalizerTests.cs",
    "content": "﻿namespace it;\r\n\r\n[UseCulture(\"it\")]\r\npublic class OrdinalizerTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"0\")]  // No ordinal for 0 in italian (neologism apart)\r\n    [InlineData(1, \"1°\")]\r\n    [InlineData(11, \"11°\")]\r\n    [InlineData(111, \"111°\")]\r\n    public void GenderlessNumber(int number, string expected) =>\r\n        Assert.Equal(expected, number.Ordinalize());\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0\")]  // No ordinal for 0 in italian (neologism apart)\r\n    [InlineData(\"1\", \"1°\")]\r\n    [InlineData(\"11\", \"11°\")]\r\n    [InlineData(\"111\", \"111°\")]\r\n    public void GenderlessText(string number, string expected) =>\r\n        Assert.Equal(expected, number.Ordinalize());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]  // No ordinal for 0 in italian (neologism apart)\r\n    [InlineData(1, \"1°\")]\r\n    [InlineData(11, \"11°\")]\r\n    [InlineData(111, \"111°\")]\r\n    public void MasculineNumber(int number, string expected) =>\r\n        Assert.Equal(expected, number.Ordinalize(GrammaticalGender.Masculine));\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0\")]  // No ordinal for 0 in italian (neologism apart)\r\n    [InlineData(\"1\", \"1°\")]\r\n    [InlineData(\"11\", \"11°\")]\r\n    [InlineData(\"111\", \"111°\")]\r\n    public void MasculineText(string number, string expected) =>\r\n        Assert.Equal(expected, number.Ordinalize(GrammaticalGender.Masculine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]  // No ordinal for 0 in italian (neologism apart)\r\n    [InlineData(1, \"1ª\")]\r\n    [InlineData(11, \"11ª\")]\r\n    [InlineData(111, \"111ª\")]\r\n    public void FeminineNumber(int number, string expected) =>\r\n        Assert.Equal(expected, number.Ordinalize(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0\")]  // No ordinal for 0 in italian (neologism apart)\r\n    [InlineData(\"1\", \"1ª\")]\r\n    [InlineData(\"11\", \"11ª\")]\r\n    [InlineData(\"111\", \"111ª\")]\r\n    public void FeminineText(string number, string expected) =>\r\n        Assert.Equal(expected, number.Ordinalize(GrammaticalGender.Feminine));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/it/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace it;\r\n\r\n[UseCulture(\"it\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 anno\")]\r\n    [InlineData(366, \"un anno\", true)]\r\n    [InlineData(731, \"2 anni\")]\r\n    [InlineData(1096, \"3 anni\")]\r\n    [InlineData(4018, \"11 anni\")]\r\n    public void Years(int days, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: toWords));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 mese\")]\r\n    [InlineData(31, \"un mese\", true)]\r\n    [InlineData(61, \"2 mesi\")]\r\n    [InlineData(92, \"3 mesi\")]\r\n    [InlineData(335, \"11 mesi\")]\r\n    public void Months(int days, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 settimana\")]\r\n    [InlineData(7, \"una settimana\", true)]\r\n    [InlineData(14, \"2 settimane\")]\r\n    public void Weeks(int days, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 giorno\")]\r\n    [InlineData(1, \"un giorno\", true)]\r\n    [InlineData(2, \"2 giorni\")]\r\n    public void Days(int days, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 ora\")]\r\n    [InlineData(1, \"una ora\", true)]\r\n    [InlineData(2, \"2 ore\")]\r\n    public void Hours(int hours, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize(toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 minuto\")]\r\n    [InlineData(1, \"un minuto\", true)]\r\n    [InlineData(2, \"2 minuti\")]\r\n    public void Minutes(int minutes, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize(toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 secondo\")]\r\n    [InlineData(1, \"un secondo\", true)]\r\n    [InlineData(2, \"2 secondi\")]\r\n    public void Seconds(int seconds, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize(toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 millisecondo\")]\r\n    [InlineData(1, \"un millisecondo\", true)]\r\n    [InlineData(2, \"2 millisecondi\")]\r\n    public void Milliseconds(int milliseconds, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize(toWords: toWords));\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 millisecondi\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This does not make much sense in italian, anyway\r\n        Assert.Equal(\"0 secondi\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ja/DateHumanizeTests.cs",
    "content": "﻿namespace ja;\r\n\r\n[UseCulture(\"ja\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"1 秒前\")]\r\n    [InlineData(2, \"2 秒前\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 秒後\")]\r\n    [InlineData(2, \"2 秒後\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 分前\")]\r\n    [InlineData(2, \"2 分前\")]\r\n    [InlineData(60, \"1 時間前\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 分後\")]\r\n    [InlineData(2, \"2 分後\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 時間前\")]\r\n    [InlineData(2, \"2 時間前\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 時間後\")]\r\n    [InlineData(2, \"2 時間後\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"昨日\")]\r\n    [InlineData(2, \"2 日前\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"明日\")]\r\n    [InlineData(2, \"2 日後\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"先月\")]\r\n    [InlineData(2, \"2 か月前\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"来月\")]\r\n    [InlineData(2, \"2 か月後\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"去年\")]\r\n    [InlineData(2, \"2 年前\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"来年\")]\r\n    [InlineData(2, \"2 年後\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"今\", 0, TimeUnit.Day, Tense.Past);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ja/NumberToWordsTests.cs",
    "content": "﻿namespace ja;\r\n\r\n[UseCulture(\"ja\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"〇\")]\r\n    [InlineData(1, \"一\")]\r\n    [InlineData(10, \"十\")]\r\n    [InlineData(11, \"十一\")]\r\n    [InlineData(122, \"百二十二\")]\r\n    [InlineData(3501, \"三千五百一\")]\r\n    [InlineData(100, \"百\")]\r\n    [InlineData(1000, \"千\")]\r\n    [InlineData(10000, \"一万\")]\r\n    [InlineData(100000, \"十万\")]\r\n    [InlineData(1000000, \"百万\")]\r\n    [InlineData(10000000, \"千万\")]\r\n    [InlineData(100000000, \"一億\")]\r\n    [InlineData(1000000000, \"十億\")]\r\n    [InlineData(111, \"百十一\")]\r\n    [InlineData(1111, \"千百十一\")]\r\n    [InlineData(11111, \"一万千百十一\")]\r\n    [InlineData(111111, \"十一万千百十一\")]\r\n    [InlineData(1111111, \"百十一万千百十一\")]\r\n    [InlineData(11111111, \"千百十一万千百十一\")]\r\n    [InlineData(111111111, \"一億千百十一万千百十一\")]\r\n    [InlineData(1111111111, \"十一億千百十一万千百十一\")]\r\n    [InlineData(123, \"百二十三\")]\r\n    [InlineData(1234, \"千二百三十四\")]\r\n    [InlineData(12345, \"一万二千三百四十五\")]\r\n    [InlineData(123456, \"十二万三千四百五十六\")]\r\n    [InlineData(1234567, \"百二十三万四千五百六十七\")]\r\n    [InlineData(12345678, \"千二百三十四万五千六百七十八\")]\r\n    [InlineData(123456789, \"一億二千三百四十五万六千七百八十九\")]\r\n    [InlineData(1234567890, \"十二億三千四百五十六万七千八百九十\")]\r\n    [InlineData(-123, \"マイナス 百二十三\")]\r\n    public void ToWordsInt(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1L, \"一\")]\r\n    [InlineData(11L, \"十一\")]\r\n    [InlineData(111L, \"百十一\")]\r\n    [InlineData(1111L, \"千百十一\")]\r\n    [InlineData(11111L, \"一万千百十一\")]\r\n    [InlineData(111111L, \"十一万千百十一\")]\r\n    [InlineData(1111111L, \"百十一万千百十一\")]\r\n    [InlineData(11111111L, \"千百十一万千百十一\")]\r\n    [InlineData(111111111L, \"一億千百十一万千百十一\")]\r\n    [InlineData(1111111111L, \"十一億千百十一万千百十一\")]\r\n    [InlineData(11111111111L, \"百十一億千百十一万千百十一\")]\r\n    [InlineData(111111111111L, \"千百十一億千百十一万千百十一\")]\r\n    [InlineData(1111111111111L, \"一兆千百十一億千百十一万千百十一\")]\r\n    [InlineData(11111111111111L, \"十一兆千百十一億千百十一万千百十一\")]\r\n    [InlineData(111111111111111L, \"百十一兆千百十一億千百十一万千百十一\")]\r\n    [InlineData(1111111111111111L, \"千百十一兆千百十一億千百十一万千百十一\")]\r\n    [InlineData(11111111111111111L, \"一京千百十一兆千百十一億千百十一万千百十一\")]\r\n    [InlineData(111111111111111111L, \"十一京千百十一兆千百十一億千百十一万千百十一\")]\r\n    [InlineData(1111111111111111111L, \"百十一京千百十一兆千百十一億千百十一万千百十一\")]\r\n    public void ToWordsLong(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"〇番目\")]\r\n    [InlineData(1, \"一番目\")]\r\n    [InlineData(2, \"二番目\")]\r\n    [InlineData(3, \"三番目\")]\r\n    [InlineData(10, \"十番目\")]\r\n    [InlineData(11, \"十一番目\")]\r\n    [InlineData(100, \"百番目\")]\r\n    [InlineData(112, \"百十二番目\")]\r\n    [InlineData(1000000, \"百万番目\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ja/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace ja;\r\n\r\n[UseCulture(\"ja\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 年\")]\r\n    [InlineData(731, \"2 年\")]\r\n    [InlineData(1096, \"3 年\")]\r\n    [InlineData(4018, \"11 年\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 ヶ月\")]\r\n    [InlineData(61, \"2 ヶ月\")]\r\n    [InlineData(92, \"3 ヶ月\")]\r\n    [InlineData(335, \"11 ヶ月\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 週間\")]\r\n    [InlineData(14, \"2 週間\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 日\")]\r\n    [InlineData(2, \"2 日\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 時間\")]\r\n    [InlineData(2, \"2 時間\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 分\")]\r\n    [InlineData(2, \"2 分\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 秒\")]\r\n    [InlineData(2, \"2 秒\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 ミリ秒\")]\r\n    [InlineData(2, \"2 ミリ秒\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 ミリ秒\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"0 秒\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ko-KR/NumberToWordsTests.cs",
    "content": "﻿namespace koKR;\r\n\r\n[UseCulture(\"ko-KR\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"영\")]\r\n    [InlineData(1, \"일\")]\r\n    [InlineData(10, \"십\")]\r\n    [InlineData(11, \"십일\")]\r\n    [InlineData(122, \"백이십이\")]\r\n    [InlineData(3501, \"삼천오백일\")]\r\n    [InlineData(100, \"백\")]\r\n    [InlineData(1000, \"천\")]\r\n    [InlineData(10000, \"일만\")]\r\n    [InlineData(100000, \"십만\")]\r\n    [InlineData(1000000, \"백만\")]\r\n    [InlineData(10000000, \"천만\")]\r\n    [InlineData(100000000, \"일억\")]\r\n    [InlineData(1000000000, \"십억\")]\r\n    [InlineData(111, \"백십일\")]\r\n    [InlineData(1111, \"천백십일\")]\r\n    [InlineData(11111, \"일만천백십일\")]\r\n    [InlineData(111111, \"십일만천백십일\")]\r\n    [InlineData(1111111, \"백십일만천백십일\")]\r\n    [InlineData(11111111, \"천백십일만천백십일\")]\r\n    [InlineData(111111111, \"일억천백십일만천백십일\")]\r\n    [InlineData(1111111111, \"십일억천백십일만천백십일\")]\r\n    [InlineData(123, \"백이십삼\")]\r\n    [InlineData(1234, \"천이백삼십사\")]\r\n    [InlineData(12345, \"일만이천삼백사십오\")]\r\n    [InlineData(123456, \"십이만삼천사백오십육\")]\r\n    [InlineData(1234567, \"백이십삼만사천오백육십칠\")]\r\n    [InlineData(12345678, \"천이백삼십사만오천육백칠십팔\")]\r\n    [InlineData(123456789, \"일억이천삼백사십오만육천칠백팔십구\")]\r\n    [InlineData(1234567890, \"십이억삼천사백오십육만칠천팔백구십\")]\r\n    [InlineData(-123, \"마이너스 백이십삼\")]\r\n    public void ToWordsInt(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1L, \"일\")]\r\n    [InlineData(11L, \"십일\")]\r\n    [InlineData(111L, \"백십일\")]\r\n    [InlineData(1111L, \"천백십일\")]\r\n    [InlineData(11111L, \"일만천백십일\")]\r\n    [InlineData(111111L, \"십일만천백십일\")]\r\n    [InlineData(1111111L, \"백십일만천백십일\")]\r\n    [InlineData(11111111L, \"천백십일만천백십일\")]\r\n    [InlineData(111111111L, \"일억천백십일만천백십일\")]\r\n    [InlineData(1111111111L, \"십일억천백십일만천백십일\")]\r\n    [InlineData(11111111111L, \"백십일억천백십일만천백십일\")]\r\n    [InlineData(111111111111L, \"천백십일억천백십일만천백십일\")]\r\n    [InlineData(1111111111111L, \"일조천백십일억천백십일만천백십일\")]\r\n    [InlineData(11111111111111L, \"십일조천백십일억천백십일만천백십일\")]\r\n    [InlineData(111111111111111L, \"백십일조천백십일억천백십일만천백십일\")]\r\n    [InlineData(1111111111111111L, \"천백십일조천백십일억천백십일만천백십일\")]\r\n    [InlineData(11111111111111111L, \"일경천백십일조천백십일억천백십일만천백십일\")]\r\n    [InlineData(111111111111111111L, \"십일경천백십일조천백십일억천백십일만천백십일\")]\r\n    [InlineData(1111111111111111111L, \"백십일경천백십일조천백십일억천백십일만천백십일\")]\r\n    public void ToWordsLong(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"영번째\")]\r\n    [InlineData(1, \"첫번째\")]\r\n    [InlineData(2, \"두번째\")]\r\n    [InlineData(3, \"세번째\")]\r\n    [InlineData(10, \"열번째\")]\r\n    [InlineData(11, \"열한번째\")]\r\n    [InlineData(100, \"백번째\")]\r\n    [InlineData(112, \"백십이번째\")]\r\n    [InlineData(1000000, \"백만번째\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ko-KR/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace koKR;\r\n\r\n[UseCulture(\"ko-KR\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1년\")]\r\n    [InlineData(731, \"2년\")]\r\n    [InlineData(1096, \"3년\")]\r\n    [InlineData(4018, \"11년\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1개월\")]\r\n    [InlineData(61, \"2개월\")]\r\n    [InlineData(92, \"3개월\")]\r\n    [InlineData(335, \"11개월\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(7, \"1주\")]\r\n    [InlineData(14, \"2주\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1일\")]\r\n    [InlineData(2, \"2일\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1시간\")]\r\n    [InlineData(2, \"2시간\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1분\")]\r\n    [InlineData(2, \"2분\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1초\")]\r\n    [InlineData(2, \"2초\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1밀리초\")]\r\n    [InlineData(2, \"2밀리초\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0밀리초\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"방금\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ku/DateHumanizeTests.cs",
    "content": "﻿namespace ku;\r\n\r\n[UseCulture(\"ku\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(-1, \"دوێنێ\")]\r\n    [InlineData(-2, \"2 ڕۆژ لەمەوبەر\")]\r\n    [InlineData(-3, \"3 ڕۆژ لەمەوبەر\")]\r\n    [InlineData(-11, \"11 ڕۆژ لەمەوبەر\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"بەیانی\")]\r\n    [InlineData(2, \"2 ڕۆژی دیکە\")]\r\n    [InlineData(10, \"10 ڕۆژی دیکە\")]\r\n    [InlineData(17, \"17 ڕۆژی دیکە\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 کاتژمێر لەمەوبەر\")]\r\n    [InlineData(-1, \"کاتژمێرێک لەمەوبەر\")]\r\n    [InlineData(-3, \"3 کاتژمێر لەمەوبەر\")]\r\n    [InlineData(-11, \"11 کاتژمێر لەمەوبەر\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"کاتژمێرێکی دیکە\")]\r\n    [InlineData(2, \"2 کاتژمێری دیکە\")]\r\n    [InlineData(10, \"10 کاتژمێری دیکە\")]\r\n    [InlineData(23, \"23 کاتژمێری دیکە\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 خولەک لەمەوبەر\")]\r\n    [InlineData(-1, \"خولەکێک لەمەوبەر\")]\r\n    [InlineData(-3, \"3 خولەک لەمەوبەر\")]\r\n    [InlineData(-11, \"11 خولەک لەمەوبەر\")]\r\n    [InlineData(60, \"کاتژمێرێک لەمەوبەر\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"خولەکێکی دیکە\")]\r\n    [InlineData(2, \"2 خولەکی دیکە\")]\r\n    [InlineData(10, \"10 خولەکی دیکە\")]\r\n    [InlineData(23, \"23 خولەکی دیکە\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 مانگ لەمەوبەر\")]\r\n    [InlineData(-1, \"مانگێک لەمەوبەر\")]\r\n    [InlineData(-3, \"3 مانگ لەمەوبەر\")]\r\n    [InlineData(-11, \"11 مانگ لەمەوبەر\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"مانگێکی دیکە\")]\r\n    [InlineData(2, \"2 مانگی دیکە\")]\r\n    [InlineData(10, \"10 مانگی دیکە\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 چرکە لەمەوبەر\")]\r\n    [InlineData(-1, \"چرکەیەک لەمەوبەر\")]\r\n    [InlineData(-3, \"3 چرکە لەمەوبەر\")]\r\n    [InlineData(-11, \"11 چرکە لەمەوبەر\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"ئێستا\")]\r\n    [InlineData(1, \"چرکەیەکی دیکە\")]\r\n    [InlineData(2, \"2 چرکەی دیکە\")]\r\n    [InlineData(10, \"10 چرکەی دیکە\")]\r\n    [InlineData(24, \"24 چرکەی دیکە\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 ساڵ لەمەوبەر\")]\r\n    [InlineData(-1, \"ساڵێک لەمەوبەر\")]\r\n    [InlineData(-3, \"3 ساڵ لەمەوبەر\")]\r\n    [InlineData(-11, \"11 ساڵ لەمەوبەر\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ساڵێکی دیکە\")]\r\n    [InlineData(2, \"2 ساڵی دیکە\")]\r\n    [InlineData(7, \"7 ساڵی دیکە\")]\r\n    [InlineData(55, \"55 ساڵی دیکە\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ku/NumberToWordsTests.cs",
    "content": "﻿namespace ku;\r\n\r\n[UseCulture(\"ku\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(-1, \"نێگەتیڤ یەک\")]\r\n    [InlineData(-10, \"نێگەتیڤ دە\")]\r\n    [InlineData(-100, \"نێگەتیڤ سەد\")]\r\n    [InlineData(-999, \"نێگەتیڤ نۆ سەد و نەوەد و نۆ\")]\r\n    [InlineData(-1000, \"نێگەتیڤ هەزار\")]\r\n    [InlineData(-1000000, \"نێگەتیڤ یەک میلیۆن\")]\r\n    [InlineData(1, \"یەک\")]\r\n    [InlineData(10, \"دە\")]\r\n    [InlineData(11, \"یازدە\")]\r\n    [InlineData(122, \"سەد و بیست و دوو\")]\r\n    [InlineData(3501, \"سێ هەزار و پێنج سەد و یەک\")]\r\n    [InlineData(100, \"سەد\")]\r\n    [InlineData(1000, \"هەزار\")]\r\n    [InlineData(100000, \"سەد هەزار\")]\r\n    [InlineData(100001, \"سەد هەزار و یەک\")]\r\n    [InlineData(101000, \"سەد و یەک هەزار\")]\r\n    [InlineData(1000000, \"یەک میلیۆن\")]\r\n    [InlineData(51000, \"پەنجا و یەک هەزار\")]\r\n    [InlineData(151000, \"سەد و پەنجا و یەک هەزار\")]\r\n    [InlineData(10000000, \"دە میلیۆن\")]\r\n    [InlineData(100000000, \"سەد میلیۆن\")]\r\n    [InlineData(1000000000, \"یەک میلیارد\")]\r\n    [InlineData(111, \"سەد و یازدە\")]\r\n    [InlineData(1111, \"هەزار و سەد و یازدە\")]\r\n    [InlineData(111111, \"سەد و یازدە هەزار و سەد و یازدە\")]\r\n    [InlineData(1001001, \"یەک میلیۆن و یەک هەزار و یەک\")]\r\n    [InlineData(1111111, \"یەک میلیۆن و سەد و یازدە هەزار و سەد و یازدە\")]\r\n    [InlineData(11111111, \"یازدە میلیۆن و سەد و یازدە هەزار و سەد و یازدە\")]\r\n    [InlineData(111111111, \"سەد و یازدە میلیۆن و سەد و یازدە هەزار و سەد و یازدە\")]\r\n    [InlineData(1111111111, \"یەک میلیارد و سەد و یازدە میلیۆن و سەد و یازدە هەزار و سەد و یازدە\")]\r\n    [InlineData(123, \"سەد و بیست و سێ\")]\r\n    [InlineData(1234, \"هەزار و دوو سەد و سی و چوار\")]\r\n    [InlineData(12345, \"دوازدە هەزار و سێ سەد و چل و پێنج\")]\r\n    [InlineData(123456, \"سەد و بیست و سێ هەزار و چوار سەد و پەنجا و شەش\")]\r\n    [InlineData(1234567, \"یەک میلیۆن و دوو سەد و سی و چوار هەزار و پێنج سەد و شەست و حەوت\")]\r\n    [InlineData(12345678, \"دوازدە میلیۆن و سێ سەد و چل و پێنج هەزار و شەش سەد و حەفتا و هەشت\")]\r\n    [InlineData(123456789, \"سەد و بیست و سێ میلیۆن و چوار سەد و پەنجا و شەش هەزار و حەوت سەد و هەشتا و نۆ\")]\r\n    [InlineData(1234567890, \"یەک میلیارد و دوو سەد و سی و چوار میلیۆن و پێنج سەد و شەست و حەوت هەزار و هەشت سەد و نەوەد\")]\r\n    public void ToWordsKurdish(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"سفرەم\")]\r\n    [InlineData(1, \"یەکەم\")]\r\n    [InlineData(2, \"دووەم\")]\r\n    [InlineData(3, \"سێیەم\")]\r\n    [InlineData(4, \"چوارەم\")]\r\n    [InlineData(5, \"پێنجەم\")]\r\n    [InlineData(6, \"شەشەم\")]\r\n    [InlineData(7, \"حەوتەم\")]\r\n    [InlineData(8, \"هەشتەم\")]\r\n    [InlineData(9, \"نۆیەم\")]\r\n    [InlineData(10, \"دەیەم\")]\r\n    [InlineData(11, \"یازدەیەم\")]\r\n    [InlineData(12, \"دوازدەیەم\")]\r\n    [InlineData(13, \"سێزدەیەم\")]\r\n    [InlineData(21, \"بیست و یەکەم\")]\r\n    [InlineData(22, \"بیست و دووەم\")]\r\n    [InlineData(23, \"بیست و سێیەم\")]\r\n    [InlineData(24, \"بیست و چوارەم\")]\r\n    [InlineData(25, \"بیست و پێنجەم\")]\r\n    [InlineData(30, \"سییەم\")]\r\n    [InlineData(40, \"چلەم\")]\r\n    [InlineData(50, \"پەنجایەم\")]\r\n    [InlineData(60, \"شەستەم\")]\r\n    [InlineData(70, \"حەفتایەم\")]\r\n    [InlineData(80, \"هەشتایەم\")]\r\n    [InlineData(90, \"نەوەدەم\")]\r\n    [InlineData(100, \"سەدەم\")]\r\n    [InlineData(200, \"دوو سەدەم\")]\r\n    [InlineData(1000, \"هەزارەم\")]\r\n    [InlineData(1001, \"هەزار و یەکەم\")]\r\n    [InlineData(1333, \"هەزار و سێ سەد و سی و سێیەم\")]\r\n    [InlineData(1000000, \"یەک میلیۆنەم\")]\r\n    public void ToOrdinalWordsKurdish(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ku/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace ku;\r\n\r\n[UseCulture(\"ku\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"1 ساڵ\")]\r\n    [InlineData(731, \"2 ساڵ\")]\r\n    [InlineData(1096, \"3 ساڵ\")]\r\n    [InlineData(4018, \"11 ساڵ\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"1 مانگ\")]\r\n    [InlineData(61, \"2 مانگ\")]\r\n    [InlineData(92, \"3 مانگ\")]\r\n    [InlineData(335, \"11 مانگ\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 هەفتە\")]\r\n    [InlineData(77, \"11 هەفتە\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 ڕۆژ\")]\r\n    [InlineData(3, \"3 ڕۆژ\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 کاتژمێر\")]\r\n    [InlineData(11, \"11 کاتژمێر\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 خولەک\")]\r\n    [InlineData(11, \"11 خولەک\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 چرکە\")]\r\n    [InlineData(11, \"11 چرکە\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 میلیچرکە\")]\r\n    [InlineData(11, \"11 میلیچرکە\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 میلیچرکە\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"ئێستا\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lb/Bytes/ByteRateTests.cs",
    "content": "﻿namespace lb.Bytes;\r\n\r\n[UseCulture(\"lb-LU\")]\r\npublic class ByteRateTests\r\n{\r\n    [Theory]\r\n    [InlineData(400, 1, \"400 B/s\")]\r\n    [InlineData(4 * 1024, 1, \"4 KB/s\")]\r\n    [InlineData(4 * 1024 * 1024, 1, \"4 MB/s\")]\r\n    [InlineData(4 * 2 * 1024 * 1024, 2, \"4 MB/s\")]\r\n    [InlineData(4 * 1024, 0.1, \"40 KB/s\")]\r\n    [InlineData(15 * 60 * 1024 * 1024, 60, \"15 MB/s\")]\r\n    public void HumanizesRates(long inputBytes, double perSeconds, string expectedValue)\r\n    {\r\n        var size = new ByteSize(inputBytes);\r\n        var interval = TimeSpan.FromSeconds(perSeconds);\r\n\r\n        var rate = size\r\n            .Per(interval)\r\n            .Humanize();\r\n\r\n        Assert.Equal(expectedValue, rate);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, 1, TimeUnit.Second, \"1 MB/s\")]\r\n    [InlineData(1, 60, TimeUnit.Minute, \"1 MB/min\")]\r\n    [InlineData(1, 60 * 60, TimeUnit.Hour, \"1 MB/h\")]\r\n    [InlineData(10, 1, TimeUnit.Second, \"10 MB/s\")]\r\n    [InlineData(10, 60, TimeUnit.Minute, \"10 MB/min\")]\r\n    [InlineData(10, 60 * 60, TimeUnit.Hour, \"10 MB/h\")]\r\n    [InlineData(1, 10 * 1, TimeUnit.Second, \"102,4 KB/s\")]\r\n    [InlineData(1, 10 * 60, TimeUnit.Minute, \"102,4 KB/min\")]\r\n    [InlineData(1, 10 * 60 * 60, TimeUnit.Hour, \"102,4 KB/h\")]\r\n    public void TimeUnitTests(long megabytes, double measurementIntervalSeconds, TimeUnit displayInterval, string expectedValue)\r\n    {\r\n        var size = ByteSize.FromMegabytes(megabytes);\r\n        var measurementInterval = TimeSpan.FromSeconds(measurementIntervalSeconds);\r\n\r\n        var rate = size.Per(measurementInterval);\r\n        var text = rate.Humanize(displayInterval);\r\n\r\n        Assert.Equal(expectedValue, text);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(19854651984, 1, TimeUnit.Second, null, \"18,49 GB/s\")]\r\n    [InlineData(19854651984, 1, TimeUnit.Second, \"#.##\", \"18,49 GB/s\")]\r\n    public void FormattedTimeUnitTests(long bytes, int measurementIntervalSeconds, TimeUnit displayInterval, string? format, string expectedValue)\r\n    {\r\n        var size = ByteSize.FromBytes(bytes);\r\n        var measurementInterval = TimeSpan.FromSeconds(measurementIntervalSeconds);\r\n        var rate = size.Per(measurementInterval);\r\n        var text = rate.Humanize(format, displayInterval);\r\n\r\n        Assert.Equal(expectedValue, text);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(TimeUnit.Millisecond)]\r\n    [InlineData(TimeUnit.Day)]\r\n    [InlineData(TimeUnit.Month)]\r\n    [InlineData(TimeUnit.Week)]\r\n    [InlineData(TimeUnit.Year)]\r\n    public void ThrowsOnUnsupportedData(TimeUnit units)\r\n    {\r\n        var dummyRate = ByteSize\r\n            .FromBits(1)\r\n            .Per(TimeSpan.FromSeconds(1));\r\n\r\n        Assert.Throws<NotSupportedException>(() => dummyRate.Humanize(units));\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lb/Bytes/ByteSizeExtensionsTests.cs",
    "content": "﻿namespace lb.Bytes;\r\n\r\n[UseCulture(\"lb-LU\")]\r\npublic class ByteSizeExtensionsTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, null, \"2 TB\")]\r\n    [InlineData(2, \"GB\", \"2048 GB\")]\r\n    [InlineData(2.123, \"#.#\", \"2,1 TB\")]\r\n    public void HumanizesTerabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Terabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"GB\", \"0 GB\")]\r\n    [InlineData(2, null, \"2 GB\")]\r\n    [InlineData(2, \"MB\", \"2048 MB\")]\r\n    [InlineData(2.123, \"#.##\", \"2,12 GB\")]\r\n    public void HumanizesGigabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Gigabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"MB\", \"0 MB\")]\r\n    [InlineData(2, null, \"2 MB\")]\r\n    [InlineData(2, \"KB\", \"2048 KB\")]\r\n    [InlineData(2.123, \"#\", \"2 MB\")]\r\n    public void HumanizesMegabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Megabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"KB\", \"0 KB\")]\r\n    [InlineData(2, null, \"2 KB\")]\r\n    [InlineData(2, \"B\", \"2048 B\")]\r\n    [InlineData(2.123, \"#.####\", \"2,123 KB\")]\r\n    public void HumanizesKilobytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Kilobytes().Humanize(format));\r\n\r\n#if NET6_0_OR_GREATER // the lb/lb-LU locales apparently don't have the correct group separator pre .NET 6\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"#.##\", \"0 bit\")]\r\n    [InlineData(0, \"#.## B\", \"0 B\")]\r\n    [InlineData(0, \"B\", \"0 B\")]\r\n    [InlineData(2, null, \"2 B\")]\r\n    [InlineData(2000, \"KB\", \"1,95 KB\")]\r\n    [InlineData(2123, \"#.##\", \"2,07 KB\")]\r\n    [InlineData(10000000, \"KB\", \"9765,63 KB\")]\r\n    [InlineData(10000000, \"#,##0 KB\", \"9.766 KB\")]\r\n    [InlineData(10000000, \"#,##0.# KB\", \"9.765,6 KB\")]\r\n    public void HumanizesBytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Bytes().Humanize(format));\r\n#endif\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"b\", \"0 bit\")]\r\n    [InlineData(2, null, \"2 bit\")]\r\n    [InlineData(12, \"B\", \"1,5 B\")]\r\n    [InlineData(10000, \"#.# KB\", \"1,2 KB\")]\r\n    public void HumanizesBits(long input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Bits().Humanize(format));\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lb/Bytes/ToFullWordsTests.cs",
    "content": "﻿namespace lb.Bytes;\r\n\r\n[UseCulture(\"lb-LU\")]\r\npublic class ToFullWordsTests\r\n{\r\n    [Fact]\r\n    public void ReturnsSingularBit() =>\r\n        Assert.Equal(\"1 Bit\", ByteSize.FromBits(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralBits() =>\r\n        Assert.Equal(\"2 Bit\", ByteSize.FromBits(2).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularByte() =>\r\n        Assert.Equal(\"1 Byte\", ByteSize.FromBytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralBytes() =>\r\n        Assert.Equal(\"10 Byte\", ByteSize.FromBytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularKiloByte() =>\r\n        Assert.Equal(\"1 Kilobyte\", ByteSize.FromKilobytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralKilobytes() =>\r\n        Assert.Equal(\"10 Kilobyte\", ByteSize.FromKilobytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularMegabyte() =>\r\n        Assert.Equal(\"1 Megabyte\", ByteSize.FromMegabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralMegabytes() =>\r\n        Assert.Equal(\"10 Megabyte\", ByteSize.FromMegabytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularGigabyte() =>\r\n        Assert.Equal(\"1 Gigabyte\", ByteSize.FromGigabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralGigabytes() =>\r\n        Assert.Equal(\"10 Gigabyte\", ByteSize.FromGigabytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularTerabyte() =>\r\n        Assert.Equal(\"1 Terabyte\", ByteSize.FromTerabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralTerabytes() =>\r\n        Assert.Equal(\"10 Terabyte\", ByteSize.FromTerabytes(10).ToFullWords());\r\n\r\n    [Theory]\r\n    [InlineData(229376, \"B\", \"229376 Byte\")]\r\n    [InlineData(229376, \"# KB\", \"224 Kilobyte\")]\r\n    public void ToFullWordsFormatted(double input, string format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, ByteSize.FromBytes(input).ToFullWords(format));\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lb/Bytes/ToStringTests.cs",
    "content": "﻿namespace lb.Bytes;\r\n\r\n[UseCulture(\"lb-LU\")]\r\npublic class ToStringTests\r\n{\r\n    [Fact]\r\n    public void ReturnsLargestMetricSuffix() =>\r\n        Assert.Equal(\"10,5 KB\", ByteSize.FromKilobytes(10.5).ToString());\r\n\r\n    [Fact]\r\n    public void ReturnsDefaultNumberFormat() =>\r\n        Assert.Equal(\"10,5 KB\", ByteSize.FromKilobytes(10.5).ToString(\"KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsProvidedNumberFormat() =>\r\n        Assert.Equal(\"10,1234 KB\", ByteSize.FromKilobytes(10.1234).ToString(\"#.#### KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBits() =>\r\n        Assert.Equal(\"10 bit\", ByteSize.FromBits(10).ToString(\"##.#### b\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBytes() =>\r\n        Assert.Equal(\"10 B\", ByteSize.FromBytes(10).ToString(\"##.#### B\"));\r\n\r\n    [Fact]\r\n    public void ReturnsKilobytes() =>\r\n        Assert.Equal(\"10 KB\", ByteSize.FromKilobytes(10).ToString(\"##.#### KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsMegabytes() =>\r\n        Assert.Equal(\"10 MB\", ByteSize.FromMegabytes(10).ToString(\"##.#### MB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsGigabytes() =>\r\n        Assert.Equal(\"10 GB\", ByteSize.FromGigabytes(10).ToString(\"##.#### GB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsTerabytes() =>\r\n        Assert.Equal(\"10 TB\", ByteSize.FromTerabytes(10).ToString(\"##.#### TB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsSelectedFormat() =>\r\n        Assert.Equal(\"10,0 TB\", ByteSize.FromTerabytes(10).ToString(\"0.0 TB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsLargestMetricPrefixLargerThanZero() =>\r\n        Assert.Equal(\"512 KB\", ByteSize.FromMegabytes(.5).ToString(\"#.#\"));\r\n\r\n    [Fact]\r\n    public void ReturnsLargestMetricPrefixLargerThanZeroForNegativeValues() =>\r\n        Assert.Equal(\"-512 KB\", ByteSize.FromMegabytes(-.5).ToString(\"#.#\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBytesViaGeneralFormat() =>\r\n        Assert.Equal(\"10 B\", $\"{ByteSize.FromBytes(10)}\");\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lb/CollectionFormatterTests.cs",
    "content": "﻿namespace lb;\r\n\r\n[UseCulture(\"lb-LU\")]\r\npublic class CollectionFormatterTests\r\n{\r\n    [Fact]\r\n    public void OneItem()\r\n    {\r\n        var collection = new List<int>([1]);\r\n        var humanized = \"1\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void TwoItems()\r\n    {\r\n        var collection = new List<int>([1, 2]);\r\n        var humanized = \"1 an 2\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void MoreThanTwoItems()\r\n    {\r\n        var collection = new List<int>([1, 2, 3]);\r\n        var humanized = \"1, 2 an 3\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lb/DateHumanizeTests.cs",
    "content": "﻿namespace lb;\r\n\r\n[UseCulture(\"lb-LU\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"virun enger Sekonn\")]\r\n    [InlineData(2, \"virun 2 Sekonnen\")]\r\n    [InlineData(4, \"viru 4 Sekonnen\")]\r\n    [InlineData(10, \"virun 10 Sekonnen\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"an enger Sekonn\")]\r\n    [InlineData(2, \"an 2 Sekonnen\")]\r\n    [InlineData(4, \"a 4 Sekonnen\")]\r\n    [InlineData(10, \"an 10 Sekonnen\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"virun enger Minutt\")]\r\n    [InlineData(2, \"virun 2 Minutten\")]\r\n    [InlineData(4, \"viru 4 Minutten\")]\r\n    [InlineData(10, \"virun 10 Minutten\")]\r\n    [InlineData(60, \"virun enger Stonn\")]\r\n    [InlineData(240, \"viru 4 Stonnen\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"an enger Minutt\")]\r\n    [InlineData(2, \"an 2 Minutten\")]\r\n    [InlineData(4, \"a 4 Minutten\")]\r\n    [InlineData(10, \"an 10 Minutten\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"virun enger Stonn\")]\r\n    [InlineData(2, \"virun 2 Stonnen\")]\r\n    [InlineData(4, \"viru 4 Stonnen\")]\r\n    [InlineData(10, \"virun 10 Stonnen\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"an enger Stonn\")]\r\n    [InlineData(2, \"an 2 Stonnen\")]\r\n    [InlineData(4, \"a 4 Stonnen\")]\r\n    [InlineData(10, \"an 10 Stonnen\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"gëschter\")]\r\n    [InlineData(2, \"virgëschter\")]\r\n    [InlineData(4, \"viru 4 Deeg\")]\r\n    [InlineData(10, \"virun 10 Deeg\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"muer\")]\r\n    [InlineData(2, \"iwwermuer\")]\r\n    [InlineData(4, \"a 4 Deeg\")]\r\n    [InlineData(10, \"an 10 Deeg\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"virun engem Mount\")]\r\n    [InlineData(2, \"virun 2 Méint\")]\r\n    [InlineData(4, \"viru 4 Méint\")]\r\n    [InlineData(10, \"virun 10 Méint\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"an engem Mount\")]\r\n    [InlineData(2, \"an 2 Méint\")]\r\n    [InlineData(4, \"a 4 Méint\")]\r\n    [InlineData(10, \"an 10 Méint\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"virun engem Joer\")]\r\n    [InlineData(2, \"virun 2 Joer\")]\r\n    [InlineData(4, \"viru 4 Joer\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"an engem Joer\")]\r\n    [InlineData(2, \"an 2 Joer\")]\r\n    [InlineData(4, \"a 4 Joer\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lb/DateToOrdinalWordsTests.cs",
    "content": "﻿namespace lb;\r\n\r\n[UseCulture(\"lb-LU\")]\r\npublic class DateToOrdinalWordsTests\r\n{\r\n    [Fact]\r\n    public void OrdinalizeString() =>\r\n        Assert.Equal(\"1. Abrëll 2015\", new DateTime(2015, 4, 1).ToOrdinalWords());\r\n\r\n#if NET6_0_OR_GREATER\r\n    [Fact]\r\n    public void OrdinalizeDateOnlyString() =>\r\n        Assert.Equal(\"1. Abrëll 2015\", new DateOnly(2015, 4, 1).ToOrdinalWords());\r\n#endif\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lb/NumberToWordsTests.cs",
    "content": "﻿namespace lb;\r\n\r\n[UseCulture(\"lb-LU\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"null\")]\r\n    [InlineData(1, \"een\")]\r\n    [InlineData(2, \"zwee\")]\r\n    [InlineData(3, \"dräi\")]\r\n    [InlineData(4, \"véier\")]\r\n    [InlineData(5, \"fënnef\")]\r\n    [InlineData(6, \"sechs\")]\r\n    [InlineData(7, \"siwen\")]\r\n    [InlineData(8, \"aacht\")]\r\n    [InlineData(9, \"néng\")]\r\n    [InlineData(10, \"zéng\")]\r\n    [InlineData(20, \"zwanzeg\")]\r\n    [InlineData(30, \"drësseg\")]\r\n    [InlineData(40, \"véierzeg\")]\r\n    [InlineData(50, \"fofzeg\")]\r\n    [InlineData(60, \"sechzeg\")]\r\n    [InlineData(70, \"siwwenzeg\")]\r\n    [InlineData(80, \"achtzeg\")]\r\n    [InlineData(90, \"nonzeg\")]\r\n    [InlineData(100, \"eenhonnert\")]\r\n    [InlineData(200, \"zweehonnert\")]\r\n    [InlineData(1000, \"eendausend\")]\r\n    [InlineData(10000, \"zéngdausend\")]\r\n    [InlineData(100000, \"eenhonnertdausend\")]\r\n    [InlineData(1000000, \"eng Millioun\")]\r\n    [InlineData(10000000, \"zéng Milliounen\")]\r\n    [InlineData(100000000, \"eenhonnert Milliounen\")]\r\n    [InlineData(1000000000, \"eng Milliard\")]\r\n    [InlineData(2000000000, \"zwou Milliarden\")]\r\n    [InlineData(122, \"eenhonnertzweeanzwanzeg\")]\r\n    [InlineData(3501, \"dräidausendfënnefhonnerteen\")]\r\n    [InlineData(111, \"eenhonnerteelef\")]\r\n    [InlineData(1112, \"eendausendeenhonnertzwielef\")]\r\n    [InlineData(11213, \"eelefdausendzweehonnertdräizéng\")]\r\n    [InlineData(121314, \"eenhonnerteenanzwanzegdausenddräihonnertvéierzéng\")]\r\n    [InlineData(2132415, \"zwou Milliounen eenhonnertzweeandrëssegdausendvéierhonnertfofzéng\")]\r\n    [InlineData(12345516, \"zwielef Milliounen dräihonnertfënnefavéierzegdausendfënnefhonnertsiechzéng\")]\r\n    [InlineData(751633617, \"siwenhonnerteenafofzeg Milliounen sechshonnertdräiandrëssegdausendsechshonnertsiwwenzéng\")]\r\n    [InlineData(1111111118, \"eng Milliard eenhonnerteelef Milliounen eenhonnerteelefdausendeenhonnertuechtzéng\")]\r\n    [InlineData(35484694489515, \"fënnefandrësseg Billiounen véierhonnertvéieranachtzeg Milliarden sechshonnertvéierannonzeg Milliounen véierhonnertnénganachtzegdausendfënnefhonnertfofzéng\")]\r\n    [InlineData(8183162164626926, \"aacht Billiarden eenhonnertdräianachtzeg Billiounen eenhonnertzweeasechzeg Milliarden eenhonnertvéierasechzeg Milliounen sechshonnertsechsanzwanzegdausendnénghonnertsechsanzwanzeg\")]\r\n    [InlineData(4564121926659524672, \"véier Trilliounen fënnefhonnertvéierasechzeg Billiarden eenhonnerteenanzwanzeg Billiounen nénghonnertsechsanzwanzeg Milliarden sechshonnertnéngafofzeg Milliounen fënnefhonnertvéieranzwanzegdausendsechshonnertzweeasiwwenzeg\")]\r\n    [InlineData(-751633619, \"minus siwenhonnerteenafofzeg Milliounen sechshonnertdräiandrëssegdausendsechshonnertnonzéng\")]\r\n    public void ToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"eng\")]\r\n    [InlineData(2, \"zwou\")]\r\n    [InlineData(3501, \"dräidausendfënnefhonnerteng\")]\r\n    [InlineData(3502, \"dräidausendfënnefhonnertzwou\")]\r\n    public void ToWordsFeminine(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nullten\")]\r\n    [InlineData(1, \"éischten\")]\r\n    [InlineData(2, \"zweeten\")]\r\n    [InlineData(3, \"drëtten\")]\r\n    [InlineData(4, \"véierten\")]\r\n    [InlineData(5, \"fënneften\")]\r\n    [InlineData(6, \"sechsten\")]\r\n    [InlineData(7, \"siwenten\")]\r\n    [InlineData(8, \"aachten\")]\r\n    [InlineData(9, \"néngten\")]\r\n    [InlineData(10, \"zéngten\")]\r\n    [InlineData(20, \"zwanzegsten\")]\r\n    [InlineData(30, \"drëssegsten\")]\r\n    [InlineData(40, \"véierzegsten\")]\r\n    [InlineData(50, \"fofzegsten\")]\r\n    [InlineData(60, \"sechzegsten\")]\r\n    [InlineData(70, \"siwwenzegsten\")]\r\n    [InlineData(80, \"achtzegsten\")]\r\n    [InlineData(90, \"nonzegsten\")]\r\n    [InlineData(100, \"eenhonnertsten\")]\r\n    [InlineData(200, \"zweehonnertsten\")]\r\n    [InlineData(1000, \"eendausendsten\")]\r\n    [InlineData(10000, \"zéngdausendsten\")]\r\n    [InlineData(100000, \"eenhonnertdausendsten\")]\r\n    [InlineData(1000000, \"eemilliounsten\")]\r\n    [InlineData(10000000, \"zéngmilliounsten\")]\r\n    [InlineData(100000000, \"eenhonnertmilliounsten\")]\r\n    [InlineData(1000000000, \"eemilliardsten\")]\r\n    [InlineData(2000000000, \"zwoumilliardsten\")]\r\n    [InlineData(122, \"eenhonnertzweeanzwanzegsten\")]\r\n    [InlineData(3501, \"dräidausendfënnefhonnertéischten\")]\r\n    [InlineData(111, \"eenhonnerteeleften\")]\r\n    [InlineData(1112, \"eendausendeenhonnertzwieleften\")]\r\n    [InlineData(11213, \"eelefdausendzweehonnertdräizéngten\")]\r\n    [InlineData(121314, \"eenhonnerteenanzwanzegdausenddräihonnertvéierzéngten\")]\r\n    [InlineData(2132415, \"zwoumilliouneneenhonnertzweeandrëssegdausendvéierhonnertfofzéngten\")]\r\n    [InlineData(12345516, \"zwielefmilliounendräihonnertfënnefavéierzegdausendfënnefhonnertsiechzéngten\")]\r\n    [InlineData(751633617, \"siwenhonnerteenafofzegmilliounensechshonnertdräiandrëssegdausendsechshonnertsiwwenzéngten\")]\r\n    [InlineData(1111111118, \"engmilliardeenhonnerteelefmilliouneneenhonnerteelefdausendeenhonnertuechtzéngten\")]\r\n    [InlineData(-751633619, \"minus siwenhonnerteenafofzegmilliounensechshonnertdräiandrëssegdausendsechshonnertnonzéngten\")]\r\n    public void ToOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nullt\")]\r\n    [InlineData(1, \"éischt\")]\r\n    [InlineData(2, \"zweet\")]\r\n    [InlineData(3, \"drëtt\")]\r\n    [InlineData(4, \"véiert\")]\r\n    [InlineData(5, \"fënneft\")]\r\n    [InlineData(6, \"sechst\")]\r\n    [InlineData(7, \"siwent\")]\r\n    [InlineData(8, \"aacht\")]\r\n    [InlineData(9, \"néngt\")]\r\n    [InlineData(10, \"zéngt\")]\r\n    [InlineData(111, \"eenhonnerteeleft\")]\r\n    [InlineData(1112, \"eendausendeenhonnertzwieleft\")]\r\n    [InlineData(11213, \"eelefdausendzweehonnertdräizéngt\")]\r\n    [InlineData(121314, \"eenhonnerteenanzwanzegdausenddräihonnertvéierzéngt\")]\r\n    [InlineData(2132415, \"zwoumilliouneneenhonnertzweeandrëssegdausendvéierhonnertfofzéngt\")]\r\n    [InlineData(12345516, \"zwielefmilliounendräihonnertfënnefavéierzegdausendfënnefhonnertsiechzéngt\")]\r\n    [InlineData(751633617, \"siwenhonnerteenafofzegmilliounensechshonnertdräiandrëssegdausendsechshonnertsiwwenzéngt\")]\r\n    [InlineData(1111111118, \"engmilliardeenhonnerteelefmilliouneneenhonnerteelefdausendeenhonnertuechtzéngt\")]\r\n    [InlineData(-751633619, \"minus siwenhonnerteenafofzegmilliounensechshonnertdräiandrëssegdausendsechshonnertnonzéngt\")]\r\n    public void ToOrdinalWordsFeminine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nullt\")]\r\n    [InlineData(1, \"éischt\")]\r\n    [InlineData(2, \"zweet\")]\r\n    [InlineData(3, \"drëtt\")]\r\n    [InlineData(4, \"véiert\")]\r\n    [InlineData(5, \"fënneft\")]\r\n    [InlineData(6, \"sechst\")]\r\n    [InlineData(7, \"siwent\")]\r\n    [InlineData(8, \"aacht\")]\r\n    [InlineData(9, \"néngt\")]\r\n    [InlineData(10, \"zéngt\")]\r\n    [InlineData(111, \"eenhonnerteeleft\")]\r\n    [InlineData(1112, \"eendausendeenhonnertzwieleft\")]\r\n    [InlineData(11213, \"eelefdausendzweehonnertdräizéngt\")]\r\n    [InlineData(121314, \"eenhonnerteenanzwanzegdausenddräihonnertvéierzéngt\")]\r\n    [InlineData(2132415, \"zwoumilliouneneenhonnertzweeandrëssegdausendvéierhonnertfofzéngt\")]\r\n    [InlineData(12345516, \"zwielefmilliounendräihonnertfënnefavéierzegdausendfënnefhonnertsiechzéngt\")]\r\n    [InlineData(751633617, \"siwenhonnerteenafofzegmilliounensechshonnertdräiandrëssegdausendsechshonnertsiwwenzéngt\")]\r\n    [InlineData(1111111118, \"engmilliardeenhonnerteelefmilliouneneenhonnerteelefdausendeenhonnertuechtzéngt\")]\r\n    [InlineData(-751633619, \"minus siwenhonnerteenafofzegmilliounensechshonnertdräiandrëssegdausendsechshonnertnonzéngt\")]\r\n    public void ToOrdinalWordsNeuter(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Neuter));\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lb/OrdinalizeTests.cs",
    "content": "﻿namespace lb;\r\n\r\n[UseCulture(\"lb-LU\")]\r\npublic class OrdinalizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"0\", \"0.\")]\r\n    [InlineData(\"1\", \"1.\")]\r\n    [InlineData(\"2\", \"2.\")]\r\n    [InlineData(\"3\", \"3.\")]\r\n    [InlineData(\"4\", \"4.\")]\r\n    [InlineData(\"5\", \"5.\")]\r\n    [InlineData(\"6\", \"6.\")]\r\n    [InlineData(\"23\", \"23.\")]\r\n    [InlineData(\"100\", \"100.\")]\r\n    [InlineData(\"101\", \"101.\")]\r\n    [InlineData(\"102\", \"102.\")]\r\n    [InlineData(\"103\", \"103.\")]\r\n    [InlineData(\"1001\", \"1001.\")]\r\n    public void OrdinalizeString(string number, string ordinalized) =>\r\n        Assert.Equal(ordinalized, number.Ordinalize());\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lb/TimeOnlyHumanizeTests.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace lb;\r\n\r\n[UseCulture(\"lb-LU\")]\r\npublic class TimeOnlyHumanizeTests\r\n{\r\n    [Fact]\r\n    public void DefaultStrategy_SameTime()\r\n    {\r\n        var inputTime = new TimeOnly(13, 07, 05);\r\n        var baseTime = new TimeOnly(13, 07, 05);\r\n\r\n        const string expectedResult = \"elo\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void DefaultStrategy_HoursApart()\r\n    {\r\n        var inputTime = new TimeOnly(3, 08, 05);\r\n        var baseTime = new TimeOnly(1, 08, 05);\r\n\r\n        const string expectedResult = \"an 2 Stonnen\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void DefaultStrategy_HoursAgo()\r\n    {\r\n        var inputTime = new TimeOnly(13, 07, 02);\r\n        var baseTime = new TimeOnly(17, 07, 05);\r\n\r\n        const string expectedResult = \"viru 4 Stonnen\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void PrecisionStrategy_NextDay()\r\n    {\r\n        var inputTime = new TimeOnly(18, 10, 49);\r\n        var baseTime = new TimeOnly(13, 07, 04);\r\n\r\n        const string expectedResult = \"a 5 Stonnen\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void Never()\r\n    {\r\n        TimeOnly? never = null;\r\n        Assert.Equal(\"ni\", never.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void Nullable_ExpectSame()\r\n    {\r\n        TimeOnly? never = new TimeOnly(23, 12, 7);\r\n        Assert.Equal(never.Value.Humanize(), never.Humanize());\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lb/TimeSpanHumanizeTests.cs",
    "content": "namespace lb;\r\n\r\n[UseCulture(\"lb-LU\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"1 Joer\")]\r\n    [InlineData(731, \"2 Joer\")]\r\n    [InlineData(1096, \"3 Joer\")]\r\n    [InlineData(4018, \"11 Joer\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"ee Joer\")]\r\n    [InlineData(731, \"zwee Joer\")]\r\n    [InlineData(1096, \"dräi Joer\")]\r\n    [InlineData(4018, \"eelef Joer\")]\r\n    public void YearsToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: true));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"1 Mount\")]\r\n    [InlineData(61, \"2 Méint\")]\r\n    [InlineData(92, \"3 Méint\")]\r\n    [InlineData(335, \"11 Méint\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"ee Mount\")]\r\n    [InlineData(61, \"zwee Méint\")]\r\n    [InlineData(92, \"dräi Méint\")]\r\n    [InlineData(335, \"eelef Méint\")]\r\n    public void MonthsToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 Woch\")]\r\n    [InlineData(14, \"2 Wochen\")]\r\n    [InlineData(21, \"3 Wochen\")]\r\n    [InlineData(77, \"11 Wochen\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(7, \"eng Woch\")]\r\n    [InlineData(14, \"zwou Wochen\")]\r\n    [InlineData(21, \"dräi Wochen\")]\r\n    [InlineData(77, \"eelef Wochen\")]\r\n    public void WeeksToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 Dag\")]\r\n    [InlineData(2, \"2 Deeg\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"een Dag\")]\r\n    [InlineData(2, \"zwee Deeg\")]\r\n    public void DaysToWords(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 Stonn\")]\r\n    [InlineData(2, \"2 Stonnen\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"eng Stonn\")]\r\n    [InlineData(2, \"zwou Stonnen\")]\r\n    public void HoursToWords(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 Minutt\")]\r\n    [InlineData(2, \"2 Minutten\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"eng Minutt\")]\r\n    [InlineData(2, \"zwou Minutten\")]\r\n    public void MinutesToWords(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 Sekonn\")]\r\n    [InlineData(2, \"2 Sekonnen\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"eng Sekonn\")]\r\n    [InlineData(2, \"zwou Sekonnen\")]\r\n    public void SecondsToWords(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 Millisekonn\")]\r\n    [InlineData(2, \"2 Millisekonnen\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"eng Millisekonn\")]\r\n    [InlineData(2, \"zwou Millisekonnen\")]\r\n    public void MillisecondsToWords(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize(toWords: true));\r\n\r\n    [Theory]\r\n    [InlineData(TimeUnit.Year, \"0 Joer\")]\r\n    [InlineData(TimeUnit.Month, \"0 Méint\")]\r\n    [InlineData(TimeUnit.Week, \"0 Wochen\")]\r\n    [InlineData(TimeUnit.Day, \"0 Deeg\")]\r\n    [InlineData(TimeUnit.Hour, \"0 Stonnen\")]\r\n    [InlineData(TimeUnit.Minute, \"0 Minutten\")]\r\n    [InlineData(TimeUnit.Second, \"0 Sekonnen\")]\r\n    [InlineData(TimeUnit.Millisecond, \"0 Millisekonnen\")]\r\n    public void NoTime(TimeUnit minUnit, string expected)\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(minUnit: minUnit);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"Keng Zäit\", TimeSpan.Zero.Humanize(toWords: true));\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lb/TimeToClockNotationTests.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace lb;\r\n\r\n[UseCulture(\"lb-LU\")]\r\npublic class TimeToClockNotationTests\r\n{\r\n    [Theory]\r\n    [InlineData(00, 00, \"Mëtternuecht\")]\r\n    [InlineData(00, 07, \"siwe Minutten op zwielef\")]\r\n    [InlineData(01, 11, \"eelef Minutten op eng\")]\r\n    [InlineData(04, 00, \"véier Auer\")]\r\n    [InlineData(05, 01, \"eng Minutt op fënnef\")]\r\n    [InlineData(06, 05, \"fënnef op sechs\")]\r\n    [InlineData(07, 10, \"zéng op siwen\")]\r\n    [InlineData(08, 15, \"Véirel op aacht\")]\r\n    [InlineData(09, 20, \"zwanzeg op néng\")]\r\n    [InlineData(10, 25, \"fënnef vir hallwer eelef\")]\r\n    [InlineData(11, 30, \"hallwer zwielef\")]\r\n    [InlineData(12, 00, \"Mëtteg\")]\r\n    [InlineData(12, 39, \"eenanzwanzeg Minutten vir eng\")]\r\n    [InlineData(13, 23, \"dräianzwanzeg Minutten op eng\")]\r\n    [InlineData(14, 32, \"zwou Minutten op hallwer dräi\")]\r\n    [InlineData(15, 35, \"fënnef op hallwer véier\")]\r\n    [InlineData(16, 40, \"zwanzeg vir fënnef\")]\r\n    [InlineData(17, 45, \"Véirel vir sechs\")]\r\n    [InlineData(18, 50, \"zéng vir siwen\")]\r\n    [InlineData(19, 52, \"aacht Minutten vir aacht\")]\r\n    [InlineData(20, 55, \"fënnef vir néng\")]\r\n    [InlineData(21, 58, \"zwou Minutten vir zéng\")]\r\n    [InlineData(22, 59, \"eng Minutt vir eelef\")]\r\n    public void ConvertToClockNotationTimeOnlyString(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation();\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(00, 00, \"Mëtternuecht\")]\r\n    [InlineData(00, 07, \"fënnef op zwielef\")]\r\n    [InlineData(01, 11, \"zéng op eng\")]\r\n    [InlineData(04, 00, \"véier Auer\")]\r\n    [InlineData(05, 01, \"fënnef Auer\")]\r\n    [InlineData(06, 05, \"fënnef op sechs\")]\r\n    [InlineData(07, 10, \"zéng op siwen\")]\r\n    [InlineData(08, 15, \"Véirel op aacht\")]\r\n    [InlineData(09, 20, \"zwanzeg op néng\")]\r\n    [InlineData(10, 25, \"fënnef vir hallwer eelef\")]\r\n    [InlineData(11, 30, \"hallwer zwielef\")]\r\n    [InlineData(12, 00, \"Mëtteg\")]\r\n    [InlineData(12, 39, \"zwanzeg vir eng\")]\r\n    [InlineData(13, 23, \"fënnef vir hallwer zwou\")]\r\n    [InlineData(14, 32, \"hallwer dräi\")]\r\n    [InlineData(15, 35, \"fënnef op hallwer véier\")]\r\n    [InlineData(16, 40, \"zwanzeg vir fënnef\")]\r\n    [InlineData(17, 45, \"Véirel vir sechs\")]\r\n    [InlineData(18, 50, \"zéng vir siwen\")]\r\n    [InlineData(19, 52, \"zéng vir aacht\")]\r\n    [InlineData(20, 55, \"fënnef vir néng\")]\r\n    [InlineData(21, 58, \"zéng Auer\")]\r\n    [InlineData(22, 59, \"eelef Auer\")]\r\n    public void ConvertToRoundedClockNotationTimeOnlyString(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes);\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lt/DateHumanizeTests.cs",
    "content": "namespace lt;\r\n\r\n[UseCulture(\"lt\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"dabar\", 0, TimeUnit.Millisecond, Tense.Past);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lt/DateToOrdinalWordsTests.cs",
    "content": "﻿namespace lt;\r\n\r\n[UseCulture(\"lt\")]\r\npublic class DateToOrdinalWordsTests\r\n{\r\n    [Fact]\r\n    public void OrdinalizeString() =>\r\n        Assert.Equal(\"2015 m. sausio 1 d.\", new DateTime(2015, 1, 1).ToOrdinalWords());\r\n\r\n#if NET6_0_OR_GREATER\r\n    [Fact]\r\n    public void OrdinalizeDateOnlyString() =>\r\n        Assert.Equal(\"2015 m. sausio 1 d.\", new DateOnly(2015, 1, 1).ToOrdinalWords());\r\n#endif\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lt/NumberToWordsTests.cs",
    "content": "﻿namespace lt;\r\n\r\n[UseCulture(\"lt\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(-1, \"minus vienas\")]\r\n    [InlineData(0, \"nulis\")]\r\n    [InlineData(1, \"vienas\")]\r\n    [InlineData(11, \"vienuolika\")]\r\n    [InlineData(21, \"dvidešimt vienas\")]\r\n    [InlineData(22, \"dvidešimt du\")]\r\n    [InlineData(26, \"dvidešimt šeši\")]\r\n    [InlineData(30, \"trisdešimt\")]\r\n    [InlineData(31, \"trisdešimt vienas\")]\r\n    [InlineData(33, \"trisdešimt trys\")]\r\n    [InlineData(37, \"trisdešimt septyni\")]\r\n    [InlineData(40, \"keturiasdešimt\")]\r\n    [InlineData(41, \"keturiasdešimt vienas\")]\r\n    [InlineData(44, \"keturiasdešimt keturi\")]\r\n    [InlineData(48, \"keturiasdešimt aštuoni\")]\r\n    [InlineData(50, \"penkiasdešimt\")]\r\n    [InlineData(51, \"penkiasdešimt vienas\")]\r\n    [InlineData(55, \"penkiasdešimt penki\")]\r\n    [InlineData(59, \"penkiasdešimt devyni\")]\r\n    [InlineData(60, \"šešiasdešimt\")]\r\n    [InlineData(61, \"šešiasdešimt vienas\")]\r\n    [InlineData(62, \"šešiasdešimt du\")]\r\n    [InlineData(66, \"šešiasdešimt šeši\")]\r\n    [InlineData(70, \"septyniasdešimt\")]\r\n    [InlineData(71, \"septyniasdešimt vienas\")]\r\n    [InlineData(73, \"septyniasdešimt trys\")]\r\n    [InlineData(77, \"septyniasdešimt septyni\")]\r\n    [InlineData(80, \"aštuoniasdešimt\")]\r\n    [InlineData(81, \"aštuoniasdešimt vienas\")]\r\n    [InlineData(84, \"aštuoniasdešimt keturi\")]\r\n    [InlineData(88, \"aštuoniasdešimt aštuoni\")]\r\n    [InlineData(90, \"devyniasdešimt\")]\r\n    [InlineData(91, \"devyniasdešimt vienas\")]\r\n    [InlineData(95, \"devyniasdešimt penki\")]\r\n    [InlineData(99, \"devyniasdešimt devyni\")]\r\n    [InlineData(100, \"šimtas\")]\r\n    [InlineData(101, \"šimtas vienas\")]\r\n    [InlineData(105, \"šimtas penki\")]\r\n    [InlineData(110, \"šimtas dešimt\")]\r\n    [InlineData(151, \"šimtas penkiasdešimt vienas\")]\r\n    [InlineData(200, \"du šimtai\")]\r\n    [InlineData(202, \"du šimtai du\")]\r\n    [InlineData(206, \"du šimtai šeši\")]\r\n    [InlineData(220, \"du šimtai dvidešimt\")]\r\n    [InlineData(262, \"du šimtai šešiasdešimt du\")]\r\n    [InlineData(300, \"trys šimtai\")]\r\n    [InlineData(303, \"trys šimtai trys\")]\r\n    [InlineData(307, \"trys šimtai septyni\")]\r\n    [InlineData(330, \"trys šimtai trisdešimt\")]\r\n    [InlineData(373, \"trys šimtai septyniasdešimt trys\")]\r\n    [InlineData(400, \"keturi šimtai\")]\r\n    [InlineData(404, \"keturi šimtai keturi\")]\r\n    [InlineData(408, \"keturi šimtai aštuoni\")]\r\n    [InlineData(440, \"keturi šimtai keturiasdešimt\")]\r\n    [InlineData(484, \"keturi šimtai aštuoniasdešimt keturi\")]\r\n    [InlineData(500, \"penki šimtai\")]\r\n    [InlineData(505, \"penki šimtai penki\")]\r\n    [InlineData(509, \"penki šimtai devyni\")]\r\n    [InlineData(550, \"penki šimtai penkiasdešimt\")]\r\n    [InlineData(595, \"penki šimtai devyniasdešimt penki\")]\r\n    [InlineData(600, \"šeši šimtai\")]\r\n    [InlineData(601, \"šeši šimtai vienas\")]\r\n    [InlineData(606, \"šeši šimtai šeši\")]\r\n    [InlineData(616, \"šeši šimtai šešiolika\")]\r\n    [InlineData(660, \"šeši šimtai šešiasdešimt\")]\r\n    [InlineData(700, \"septyni šimtai\")]\r\n    [InlineData(702, \"septyni šimtai du\")]\r\n    [InlineData(707, \"septyni šimtai septyni\")]\r\n    [InlineData(727, \"septyni šimtai dvidešimt septyni\")]\r\n    [InlineData(770, \"septyni šimtai septyniasdešimt\")]\r\n    [InlineData(800, \"aštuoni šimtai\")]\r\n    [InlineData(803, \"aštuoni šimtai trys\")]\r\n    [InlineData(808, \"aštuoni šimtai aštuoni\")]\r\n    [InlineData(838, \"aštuoni šimtai trisdešimt aštuoni\")]\r\n    [InlineData(880, \"aštuoni šimtai aštuoniasdešimt\")]\r\n    [InlineData(900, \"devyni šimtai\")]\r\n    [InlineData(904, \"devyni šimtai keturi\")]\r\n    [InlineData(909, \"devyni šimtai devyni\")]\r\n    [InlineData(949, \"devyni šimtai keturiasdešimt devyni\")]\r\n    [InlineData(990, \"devyni šimtai devyniasdešimt\")]\r\n    [InlineData(1000, \"tūkstantis\")]\r\n    [InlineData(1001, \"tūkstantis vienas\")]\r\n    [InlineData(1012, \"tūkstantis dvylika\")]\r\n    [InlineData(1100, \"tūkstantis šimtas\")]\r\n    [InlineData(1234, \"tūkstantis du šimtai trisdešimt keturi\")]\r\n    [InlineData(2000, \"du tūkstančiai\")]\r\n    [InlineData(2002, \"du tūkstančiai du\")]\r\n    [InlineData(2023, \"du tūkstančiai dvidešimt trys\")]\r\n    [InlineData(2345, \"du tūkstančiai trys šimtai keturiasdešimt penki\")]\r\n    [InlineData(3000, \"trys tūkstančiai\")]\r\n    [InlineData(3003, \"trys tūkstančiai trys\")]\r\n    [InlineData(3034, \"trys tūkstančiai trisdešimt keturi\")]\r\n    [InlineData(3456, \"trys tūkstančiai keturi šimtai penkiasdešimt šeši\")]\r\n    [InlineData(4000, \"keturi tūkstančiai\")]\r\n    [InlineData(4004, \"keturi tūkstančiai keturi\")]\r\n    [InlineData(4045, \"keturi tūkstančiai keturiasdešimt penki\")]\r\n    [InlineData(4567, \"keturi tūkstančiai penki šimtai šešiasdešimt septyni\")]\r\n    [InlineData(5000, \"penki tūkstančiai\")]\r\n    [InlineData(5005, \"penki tūkstančiai penki\")]\r\n    [InlineData(5056, \"penki tūkstančiai penkiasdešimt šeši\")]\r\n    [InlineData(5678, \"penki tūkstančiai šeši šimtai septyniasdešimt aštuoni\")]\r\n    [InlineData(6000, \"šeši tūkstančiai\")]\r\n    [InlineData(6006, \"šeši tūkstančiai šeši\")]\r\n    [InlineData(6067, \"šeši tūkstančiai šešiasdešimt septyni\")]\r\n    [InlineData(6789, \"šeši tūkstančiai septyni šimtai aštuoniasdešimt devyni\")]\r\n    [InlineData(7000, \"septyni tūkstančiai\")]\r\n    [InlineData(7007, \"septyni tūkstančiai septyni\")]\r\n    [InlineData(7078, \"septyni tūkstančiai septyniasdešimt aštuoni\")]\r\n    [InlineData(7890, \"septyni tūkstančiai aštuoni šimtai devyniasdešimt\")]\r\n    [InlineData(8000, \"aštuoni tūkstančiai\")]\r\n    [InlineData(8008, \"aštuoni tūkstančiai aštuoni\")]\r\n    [InlineData(8089, \"aštuoni tūkstančiai aštuoniasdešimt devyni\")]\r\n    [InlineData(8901, \"aštuoni tūkstančiai devyni šimtai vienas\")]\r\n    [InlineData(9000, \"devyni tūkstančiai\")]\r\n    [InlineData(9009, \"devyni tūkstančiai devyni\")]\r\n    [InlineData(9012, \"devyni tūkstančiai dvylika\")]\r\n    [InlineData(9090, \"devyni tūkstančiai devyniasdešimt\")]\r\n    [InlineData(10000, \"dešimt tūkstančių\")]\r\n    [InlineData(10001, \"dešimt tūkstančių vienas\")]\r\n    [InlineData(20020, \"dvidešimt tūkstančių dvidešimt\")]\r\n    [InlineData(30300, \"trisdešimt tūkstančių trys šimtai\")]\r\n    [InlineData(44000, \"keturiasdešimt keturi tūkstančiai\")]\r\n    [InlineData(44231, \"keturiasdešimt keturi tūkstančiai du šimtai trisdešimt vienas\")]\r\n    [InlineData(100000, \"šimtas tūkstančių\")]\r\n    [InlineData(500000, \"penki šimtai tūkstančių\")]\r\n    [InlineData(1000000, \"milijonas\")]\r\n    [InlineData(6000000, \"šeši milijonai\")]\r\n    [InlineData(10000000, \"dešimt milijonų\")]\r\n    [InlineData(70000000, \"septyniasdešimt milijonų\")]\r\n    [InlineData(100000000, \"šimtas milijonų\")]\r\n    [InlineData(800000000, \"aštuoni šimtai milijonų\")]\r\n    [InlineData(9223372036854775807, \"devyni kvintilijonai du šimtai dvidešimt trys kvadrilijonai trys šimtai septyniasdešimt du trilijonai trisdešimt šeši milijardai aštuoni šimtai penkiasdešimt keturi milijonai septyni šimtai septyniasdešimt penki tūkstančiai aštuoni šimtai septyni\")]\r\n    public void ToWordsMasculine(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(gender: GrammaticalGender.Masculine));\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"minus viena\")]\r\n    [InlineData(0, \"nulis\")]\r\n    [InlineData(1, \"viena\")]\r\n    [InlineData(11, \"vienuolika\")]\r\n    [InlineData(21, \"dvidešimt viena\")]\r\n    [InlineData(22, \"dvidešimt dvi\")]\r\n    [InlineData(26, \"dvidešimt šešios\")]\r\n    [InlineData(30, \"trisdešimt\")]\r\n    [InlineData(31, \"trisdešimt viena\")]\r\n    [InlineData(33, \"trisdešimt trys\")]\r\n    [InlineData(37, \"trisdešimt septynios\")]\r\n    [InlineData(40, \"keturiasdešimt\")]\r\n    [InlineData(41, \"keturiasdešimt viena\")]\r\n    [InlineData(44, \"keturiasdešimt keturios\")]\r\n    [InlineData(48, \"keturiasdešimt aštuonios\")]\r\n    [InlineData(50, \"penkiasdešimt\")]\r\n    [InlineData(51, \"penkiasdešimt viena\")]\r\n    [InlineData(55, \"penkiasdešimt penkios\")]\r\n    [InlineData(59, \"penkiasdešimt devynios\")]\r\n    [InlineData(60, \"šešiasdešimt\")]\r\n    [InlineData(61, \"šešiasdešimt viena\")]\r\n    [InlineData(62, \"šešiasdešimt dvi\")]\r\n    [InlineData(66, \"šešiasdešimt šešios\")]\r\n    [InlineData(70, \"septyniasdešimt\")]\r\n    [InlineData(71, \"septyniasdešimt viena\")]\r\n    [InlineData(73, \"septyniasdešimt trys\")]\r\n    [InlineData(77, \"septyniasdešimt septynios\")]\r\n    [InlineData(80, \"aštuoniasdešimt\")]\r\n    [InlineData(81, \"aštuoniasdešimt viena\")]\r\n    [InlineData(84, \"aštuoniasdešimt keturios\")]\r\n    [InlineData(88, \"aštuoniasdešimt aštuonios\")]\r\n    [InlineData(90, \"devyniasdešimt\")]\r\n    [InlineData(91, \"devyniasdešimt viena\")]\r\n    [InlineData(95, \"devyniasdešimt penkios\")]\r\n    [InlineData(99, \"devyniasdešimt devynios\")]\r\n    [InlineData(100, \"šimtas\")]\r\n    [InlineData(101, \"šimtas viena\")]\r\n    [InlineData(105, \"šimtas penkios\")]\r\n    [InlineData(110, \"šimtas dešimt\")]\r\n    [InlineData(151, \"šimtas penkiasdešimt viena\")]\r\n    [InlineData(200, \"du šimtai\")]\r\n    [InlineData(202, \"du šimtai dvi\")]\r\n    [InlineData(206, \"du šimtai šešios\")]\r\n    [InlineData(220, \"du šimtai dvidešimt\")]\r\n    [InlineData(262, \"du šimtai šešiasdešimt dvi\")]\r\n    [InlineData(300, \"trys šimtai\")]\r\n    [InlineData(303, \"trys šimtai trys\")]\r\n    [InlineData(307, \"trys šimtai septynios\")]\r\n    [InlineData(330, \"trys šimtai trisdešimt\")]\r\n    [InlineData(373, \"trys šimtai septyniasdešimt trys\")]\r\n    [InlineData(400, \"keturi šimtai\")]\r\n    [InlineData(404, \"keturi šimtai keturios\")]\r\n    [InlineData(408, \"keturi šimtai aštuonios\")]\r\n    [InlineData(440, \"keturi šimtai keturiasdešimt\")]\r\n    [InlineData(484, \"keturi šimtai aštuoniasdešimt keturios\")]\r\n    [InlineData(500, \"penki šimtai\")]\r\n    [InlineData(505, \"penki šimtai penkios\")]\r\n    [InlineData(509, \"penki šimtai devynios\")]\r\n    [InlineData(550, \"penki šimtai penkiasdešimt\")]\r\n    [InlineData(595, \"penki šimtai devyniasdešimt penkios\")]\r\n    [InlineData(600, \"šeši šimtai\")]\r\n    [InlineData(601, \"šeši šimtai viena\")]\r\n    [InlineData(606, \"šeši šimtai šešios\")]\r\n    [InlineData(616, \"šeši šimtai šešiolika\")]\r\n    [InlineData(660, \"šeši šimtai šešiasdešimt\")]\r\n    [InlineData(700, \"septyni šimtai\")]\r\n    [InlineData(702, \"septyni šimtai dvi\")]\r\n    [InlineData(707, \"septyni šimtai septynios\")]\r\n    [InlineData(727, \"septyni šimtai dvidešimt septynios\")]\r\n    [InlineData(770, \"septyni šimtai septyniasdešimt\")]\r\n    [InlineData(800, \"aštuoni šimtai\")]\r\n    [InlineData(803, \"aštuoni šimtai trys\")]\r\n    [InlineData(808, \"aštuoni šimtai aštuonios\")]\r\n    [InlineData(838, \"aštuoni šimtai trisdešimt aštuonios\")]\r\n    [InlineData(880, \"aštuoni šimtai aštuoniasdešimt\")]\r\n    [InlineData(900, \"devyni šimtai\")]\r\n    [InlineData(904, \"devyni šimtai keturios\")]\r\n    [InlineData(909, \"devyni šimtai devynios\")]\r\n    [InlineData(949, \"devyni šimtai keturiasdešimt devynios\")]\r\n    [InlineData(990, \"devyni šimtai devyniasdešimt\")]\r\n    [InlineData(1000, \"tūkstantis\")]\r\n    [InlineData(1001, \"tūkstantis viena\")]\r\n    [InlineData(1012, \"tūkstantis dvylika\")]\r\n    [InlineData(1100, \"tūkstantis šimtas\")]\r\n    [InlineData(1234, \"tūkstantis du šimtai trisdešimt keturios\")]\r\n    [InlineData(2000, \"du tūkstančiai\")]\r\n    [InlineData(2002, \"du tūkstančiai dvi\")]\r\n    [InlineData(2023, \"du tūkstančiai dvidešimt trys\")]\r\n    [InlineData(2345, \"du tūkstančiai trys šimtai keturiasdešimt penkios\")]\r\n    [InlineData(3000, \"trys tūkstančiai\")]\r\n    [InlineData(3003, \"trys tūkstančiai trys\")]\r\n    [InlineData(3034, \"trys tūkstančiai trisdešimt keturios\")]\r\n    [InlineData(3456, \"trys tūkstančiai keturi šimtai penkiasdešimt šešios\")]\r\n    [InlineData(4000, \"keturi tūkstančiai\")]\r\n    [InlineData(4004, \"keturi tūkstančiai keturios\")]\r\n    [InlineData(4045, \"keturi tūkstančiai keturiasdešimt penkios\")]\r\n    [InlineData(4567, \"keturi tūkstančiai penki šimtai šešiasdešimt septynios\")]\r\n    [InlineData(5000, \"penki tūkstančiai\")]\r\n    [InlineData(5005, \"penki tūkstančiai penkios\")]\r\n    [InlineData(5056, \"penki tūkstančiai penkiasdešimt šešios\")]\r\n    [InlineData(5678, \"penki tūkstančiai šeši šimtai septyniasdešimt aštuonios\")]\r\n    [InlineData(6000, \"šeši tūkstančiai\")]\r\n    [InlineData(6006, \"šeši tūkstančiai šešios\")]\r\n    [InlineData(6067, \"šeši tūkstančiai šešiasdešimt septynios\")]\r\n    [InlineData(6789, \"šeši tūkstančiai septyni šimtai aštuoniasdešimt devynios\")]\r\n    [InlineData(7000, \"septyni tūkstančiai\")]\r\n    [InlineData(7007, \"septyni tūkstančiai septynios\")]\r\n    [InlineData(7078, \"septyni tūkstančiai septyniasdešimt aštuonios\")]\r\n    [InlineData(7890, \"septyni tūkstančiai aštuoni šimtai devyniasdešimt\")]\r\n    [InlineData(8000, \"aštuoni tūkstančiai\")]\r\n    [InlineData(8008, \"aštuoni tūkstančiai aštuonios\")]\r\n    [InlineData(8089, \"aštuoni tūkstančiai aštuoniasdešimt devynios\")]\r\n    [InlineData(8901, \"aštuoni tūkstančiai devyni šimtai viena\")]\r\n    [InlineData(9000, \"devyni tūkstančiai\")]\r\n    [InlineData(9009, \"devyni tūkstančiai devynios\")]\r\n    [InlineData(9012, \"devyni tūkstančiai dvylika\")]\r\n    [InlineData(9090, \"devyni tūkstančiai devyniasdešimt\")]\r\n    [InlineData(10000, \"dešimt tūkstančių\")]\r\n    [InlineData(10001, \"dešimt tūkstančių viena\")]\r\n    [InlineData(20020, \"dvidešimt tūkstančių dvidešimt\")]\r\n    [InlineData(30300, \"trisdešimt tūkstančių trys šimtai\")]\r\n    [InlineData(44000, \"keturiasdešimt keturi tūkstančiai\")]\r\n    [InlineData(44231, \"keturiasdešimt keturi tūkstančiai du šimtai trisdešimt viena\")]\r\n    [InlineData(100000, \"šimtas tūkstančių\")]\r\n    [InlineData(500000, \"penki šimtai tūkstančių\")]\r\n    [InlineData(1000000, \"milijonas\")]\r\n    [InlineData(6000000, \"šeši milijonai\")]\r\n    [InlineData(10000000, \"dešimt milijonų\")]\r\n    [InlineData(70000000, \"septyniasdešimt milijonų\")]\r\n    [InlineData(100000000, \"šimtas milijonų\")]\r\n    [InlineData(800000000, \"aštuoni šimtai milijonų\")]\r\n    [InlineData(9223372036854775807, \"devyni kvintilijonai du šimtai dvidešimt trys kvadrilijonai trys šimtai septyniasdešimt du trilijonai trisdešimt šeši milijardai aštuoni šimtai penkiasdešimt keturi milijonai septyni šimtai septyniasdešimt penki tūkstančiai aštuoni šimtai septynios\")]\r\n    public void ToWordsFeminine(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(gender: GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"minus pirmas\")]\r\n    [InlineData(0, \"nulinis\")]\r\n    [InlineData(1, \"pirmas\")]\r\n    [InlineData(21, \"dvidešimt pirmas\")]\r\n    [InlineData(22, \"dvidešimt antras\")]\r\n    [InlineData(26, \"dvidešimt šeštas\")]\r\n    [InlineData(30, \"trisdešimtas\")]\r\n    [InlineData(31, \"trisdešimt pirmas\")]\r\n    [InlineData(33, \"trisdešimt trečias\")]\r\n    [InlineData(37, \"trisdešimt septintas\")]\r\n    [InlineData(40, \"keturiasdešimtas\")]\r\n    [InlineData(41, \"keturiasdešimt pirmas\")]\r\n    [InlineData(44, \"keturiasdešimt ketvirtas\")]\r\n    [InlineData(48, \"keturiasdešimt aštuntas\")]\r\n    [InlineData(50, \"penkiasdešimtas\")]\r\n    [InlineData(51, \"penkiasdešimt pirmas\")]\r\n    [InlineData(55, \"penkiasdešimt penktas\")]\r\n    [InlineData(59, \"penkiasdešimt devintas\")]\r\n    [InlineData(60, \"šešiasdešimtas\")]\r\n    [InlineData(61, \"šešiasdešimt pirmas\")]\r\n    [InlineData(62, \"šešiasdešimt antras\")]\r\n    [InlineData(66, \"šešiasdešimt šeštas\")]\r\n    [InlineData(70, \"septyniasdešimtas\")]\r\n    [InlineData(71, \"septyniasdešimt pirmas\")]\r\n    [InlineData(73, \"septyniasdešimt trečias\")]\r\n    [InlineData(77, \"septyniasdešimt septintas\")]\r\n    [InlineData(80, \"aštuoniasdešimtas\")]\r\n    [InlineData(81, \"aštuoniasdešimt pirmas\")]\r\n    [InlineData(84, \"aštuoniasdešimt ketvirtas\")]\r\n    [InlineData(88, \"aštuoniasdešimt aštuntas\")]\r\n    [InlineData(90, \"devyniasdešimtas\")]\r\n    [InlineData(91, \"devyniasdešimt pirmas\")]\r\n    [InlineData(95, \"devyniasdešimt penktas\")]\r\n    [InlineData(99, \"devyniasdešimt devintas\")]\r\n    [InlineData(100, \"šimtas\")]\r\n    [InlineData(101, \"šimtas pirmas\")]\r\n    [InlineData(105, \"šimtas penktas\")]\r\n    [InlineData(110, \"šimtas dešimtas\")]\r\n    [InlineData(151, \"šimtas penkiasdešimt pirmas\")]\r\n    [InlineData(200, \"du šimtas\")]\r\n    [InlineData(202, \"du šimtai antras\")]\r\n    [InlineData(206, \"du šimtai šeštas\")]\r\n    [InlineData(220, \"du šimtai dvidešimtas\")]\r\n    [InlineData(262, \"du šimtai šešiasdešimt antras\")]\r\n    [InlineData(300, \"trys šimtas\")]\r\n    [InlineData(303, \"trys šimtai trečias\")]\r\n    [InlineData(307, \"trys šimtai septintas\")]\r\n    [InlineData(330, \"trys šimtai trisdešimtas\")]\r\n    [InlineData(373, \"trys šimtai septyniasdešimt trečias\")]\r\n    [InlineData(400, \"keturi šimtas\")]\r\n    [InlineData(404, \"keturi šimtai ketvirtas\")]\r\n    [InlineData(408, \"keturi šimtai aštuntas\")]\r\n    [InlineData(440, \"keturi šimtai keturiasdešimtas\")]\r\n    [InlineData(484, \"keturi šimtai aštuoniasdešimt ketvirtas\")]\r\n    [InlineData(500, \"penki šimtas\")]\r\n    [InlineData(505, \"penki šimtai penktas\")]\r\n    [InlineData(509, \"penki šimtai devintas\")]\r\n    [InlineData(550, \"penki šimtai penkiasdešimtas\")]\r\n    [InlineData(595, \"penki šimtai devyniasdešimt penktas\")]\r\n    [InlineData(600, \"šeši šimtas\")]\r\n    [InlineData(601, \"šeši šimtai pirmas\")]\r\n    [InlineData(606, \"šeši šimtai šeštas\")]\r\n    [InlineData(616, \"šeši šimtai šešioliktas\")]\r\n    [InlineData(660, \"šeši šimtai šešiasdešimtas\")]\r\n    [InlineData(700, \"septyni šimtas\")]\r\n    [InlineData(702, \"septyni šimtai antras\")]\r\n    [InlineData(707, \"septyni šimtai septintas\")]\r\n    [InlineData(727, \"septyni šimtai dvidešimt septintas\")]\r\n    [InlineData(770, \"septyni šimtai septyniasdešimtas\")]\r\n    [InlineData(800, \"aštuoni šimtas\")]\r\n    [InlineData(803, \"aštuoni šimtai trečias\")]\r\n    [InlineData(808, \"aštuoni šimtai aštuntas\")]\r\n    [InlineData(838, \"aštuoni šimtai trisdešimt aštuntas\")]\r\n    [InlineData(880, \"aštuoni šimtai aštuoniasdešimtas\")]\r\n    [InlineData(900, \"devyni šimtas\")]\r\n    [InlineData(904, \"devyni šimtai ketvirtas\")]\r\n    [InlineData(909, \"devyni šimtai devintas\")]\r\n    [InlineData(949, \"devyni šimtai keturiasdešimt devintas\")]\r\n    [InlineData(990, \"devyni šimtai devyniasdešimtas\")]\r\n    [InlineData(1000, \"tūkstantas\")]\r\n    [InlineData(1001, \"tūkstantis pirmas\")]\r\n    [InlineData(1012, \"tūkstantis dvyliktas\")]\r\n    [InlineData(1100, \"tūkstantis šimtas\")]\r\n    [InlineData(1234, \"tūkstantis du šimtai trisdešimt ketvirtas\")]\r\n    [InlineData(2000, \"du tūkstantas\")]\r\n    [InlineData(2002, \"du tūkstančiai antras\")]\r\n    [InlineData(2023, \"du tūkstančiai dvidešimt trečias\")]\r\n    [InlineData(2345, \"du tūkstančiai trys šimtai keturiasdešimt penktas\")]\r\n    [InlineData(3000, \"trys tūkstantas\")]\r\n    [InlineData(3003, \"trys tūkstančiai trečias\")]\r\n    [InlineData(3034, \"trys tūkstančiai trisdešimt ketvirtas\")]\r\n    [InlineData(3456, \"trys tūkstančiai keturi šimtai penkiasdešimt šeštas\")]\r\n    [InlineData(4000, \"keturi tūkstantas\")]\r\n    [InlineData(4004, \"keturi tūkstančiai ketvirtas\")]\r\n    [InlineData(4045, \"keturi tūkstančiai keturiasdešimt penktas\")]\r\n    [InlineData(4567, \"keturi tūkstančiai penki šimtai šešiasdešimt septintas\")]\r\n    [InlineData(5000, \"penki tūkstantas\")]\r\n    [InlineData(5005, \"penki tūkstančiai penktas\")]\r\n    [InlineData(5056, \"penki tūkstančiai penkiasdešimt šeštas\")]\r\n    [InlineData(5678, \"penki tūkstančiai šeši šimtai septyniasdešimt aštuntas\")]\r\n    [InlineData(6000, \"šeši tūkstantas\")]\r\n    [InlineData(6006, \"šeši tūkstančiai šeštas\")]\r\n    [InlineData(6067, \"šeši tūkstančiai šešiasdešimt septintas\")]\r\n    [InlineData(6789, \"šeši tūkstančiai septyni šimtai aštuoniasdešimt devintas\")]\r\n    [InlineData(7000, \"septyni tūkstantas\")]\r\n    [InlineData(7007, \"septyni tūkstančiai septintas\")]\r\n    [InlineData(7078, \"septyni tūkstančiai septyniasdešimt aštuntas\")]\r\n    [InlineData(7890, \"septyni tūkstančiai aštuoni šimtai devyniasdešimtas\")]\r\n    [InlineData(8000, \"aštuoni tūkstantas\")]\r\n    [InlineData(8008, \"aštuoni tūkstančiai aštuntas\")]\r\n    [InlineData(8089, \"aštuoni tūkstančiai aštuoniasdešimt devintas\")]\r\n    [InlineData(8901, \"aštuoni tūkstančiai devyni šimtai pirmas\")]\r\n    [InlineData(9000, \"devyni tūkstantas\")]\r\n    [InlineData(9009, \"devyni tūkstančiai devintas\")]\r\n    [InlineData(9012, \"devyni tūkstančiai dvyliktas\")]\r\n    [InlineData(9090, \"devyni tūkstančiai devyniasdešimtas\")]\r\n    [InlineData(10000, \"dešimt tūkstantas\")]\r\n    [InlineData(10001, \"dešimt tūkstančių pirmas\")]\r\n    [InlineData(20020, \"dvidešimt tūkstančių dvidešimtas\")]\r\n    [InlineData(30300, \"trisdešimt tūkstančių trys šimtas\")]\r\n    [InlineData(44000, \"keturiasdešimt keturi tūkstantas\")]\r\n    [InlineData(44231, \"keturiasdešimt keturi tūkstančiai du šimtai trisdešimt pirmas\")]\r\n    [InlineData(100000, \"šimtas tūkstantas\")]\r\n    [InlineData(500000, \"penki šimtai tūkstantas\")]\r\n    [InlineData(1000000, \"milijonas\")]\r\n    [InlineData(6000000, \"šeši milijonas\")]\r\n    [InlineData(10000000, \"dešimt milijonas\")]\r\n    [InlineData(70000000, \"septyniasdešimt milijonas\")]\r\n    [InlineData(100000000, \"šimtas milijonas\")]\r\n    [InlineData(800000000, \"aštuoni šimtai milijonas\")]\r\n    public void ToOrdinalWordsMasculine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Masculine));\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"minus pirma\")]\r\n    [InlineData(0, \"nulinė\")]\r\n    [InlineData(1, \"pirma\")]\r\n    [InlineData(21, \"dvidešimt pirma\")]\r\n    [InlineData(22, \"dvidešimt antra\")]\r\n    [InlineData(26, \"dvidešimt šešta\")]\r\n    [InlineData(30, \"trisdešimta\")]\r\n    [InlineData(31, \"trisdešimt pirma\")]\r\n    [InlineData(33, \"trisdešimt trečia\")]\r\n    [InlineData(37, \"trisdešimt septinta\")]\r\n    [InlineData(40, \"keturiasdešimta\")]\r\n    [InlineData(41, \"keturiasdešimt pirma\")]\r\n    [InlineData(44, \"keturiasdešimt ketvirta\")]\r\n    [InlineData(48, \"keturiasdešimt aštunta\")]\r\n    [InlineData(50, \"penkiasdešimta\")]\r\n    [InlineData(51, \"penkiasdešimt pirma\")]\r\n    [InlineData(55, \"penkiasdešimt penkta\")]\r\n    [InlineData(59, \"penkiasdešimt devinta\")]\r\n    [InlineData(60, \"šešiasdešimta\")]\r\n    [InlineData(61, \"šešiasdešimt pirma\")]\r\n    [InlineData(62, \"šešiasdešimt antra\")]\r\n    [InlineData(66, \"šešiasdešimt šešta\")]\r\n    [InlineData(70, \"septyniasdešimta\")]\r\n    [InlineData(71, \"septyniasdešimt pirma\")]\r\n    [InlineData(73, \"septyniasdešimt trečia\")]\r\n    [InlineData(77, \"septyniasdešimt septinta\")]\r\n    [InlineData(80, \"aštuoniasdešimta\")]\r\n    [InlineData(81, \"aštuoniasdešimt pirma\")]\r\n    [InlineData(84, \"aštuoniasdešimt ketvirta\")]\r\n    [InlineData(88, \"aštuoniasdešimt aštunta\")]\r\n    [InlineData(90, \"devyniasdešimta\")]\r\n    [InlineData(91, \"devyniasdešimt pirma\")]\r\n    [InlineData(95, \"devyniasdešimt penkta\")]\r\n    [InlineData(99, \"devyniasdešimt devinta\")]\r\n    [InlineData(100, \"šimta\")]\r\n    [InlineData(101, \"šimtas pirma\")]\r\n    [InlineData(105, \"šimtas penkta\")]\r\n    [InlineData(110, \"šimtas dešimta\")]\r\n    [InlineData(151, \"šimtas penkiasdešimt pirma\")]\r\n    [InlineData(200, \"du šimta\")]\r\n    [InlineData(202, \"du šimtai antra\")]\r\n    [InlineData(206, \"du šimtai šešta\")]\r\n    [InlineData(220, \"du šimtai dvidešimta\")]\r\n    [InlineData(262, \"du šimtai šešiasdešimt antra\")]\r\n    [InlineData(300, \"trys šimta\")]\r\n    [InlineData(303, \"trys šimtai trečia\")]\r\n    [InlineData(307, \"trys šimtai septinta\")]\r\n    [InlineData(330, \"trys šimtai trisdešimta\")]\r\n    [InlineData(373, \"trys šimtai septyniasdešimt trečia\")]\r\n    [InlineData(400, \"keturi šimta\")]\r\n    [InlineData(404, \"keturi šimtai ketvirta\")]\r\n    [InlineData(408, \"keturi šimtai aštunta\")]\r\n    [InlineData(440, \"keturi šimtai keturiasdešimta\")]\r\n    [InlineData(484, \"keturi šimtai aštuoniasdešimt ketvirta\")]\r\n    [InlineData(500, \"penki šimta\")]\r\n    [InlineData(505, \"penki šimtai penkta\")]\r\n    [InlineData(509, \"penki šimtai devinta\")]\r\n    [InlineData(550, \"penki šimtai penkiasdešimta\")]\r\n    [InlineData(595, \"penki šimtai devyniasdešimt penkta\")]\r\n    [InlineData(600, \"šeši šimta\")]\r\n    [InlineData(601, \"šeši šimtai pirma\")]\r\n    [InlineData(606, \"šeši šimtai šešta\")]\r\n    [InlineData(616, \"šeši šimtai šešiolikta\")]\r\n    [InlineData(660, \"šeši šimtai šešiasdešimta\")]\r\n    [InlineData(700, \"septyni šimta\")]\r\n    [InlineData(702, \"septyni šimtai antra\")]\r\n    [InlineData(707, \"septyni šimtai septinta\")]\r\n    [InlineData(727, \"septyni šimtai dvidešimt septinta\")]\r\n    [InlineData(770, \"septyni šimtai septyniasdešimta\")]\r\n    [InlineData(800, \"aštuoni šimta\")]\r\n    [InlineData(803, \"aštuoni šimtai trečia\")]\r\n    [InlineData(808, \"aštuoni šimtai aštunta\")]\r\n    [InlineData(838, \"aštuoni šimtai trisdešimt aštunta\")]\r\n    [InlineData(880, \"aštuoni šimtai aštuoniasdešimta\")]\r\n    [InlineData(900, \"devyni šimta\")]\r\n    [InlineData(904, \"devyni šimtai ketvirta\")]\r\n    [InlineData(909, \"devyni šimtai devinta\")]\r\n    [InlineData(949, \"devyni šimtai keturiasdešimt devinta\")]\r\n    [InlineData(990, \"devyni šimtai devyniasdešimta\")]\r\n    [InlineData(1000, \"tūkstanta\")]\r\n    [InlineData(1001, \"tūkstantis pirma\")]\r\n    [InlineData(1012, \"tūkstantis dvylikta\")]\r\n    [InlineData(1100, \"tūkstantis šimta\")]\r\n    [InlineData(1234, \"tūkstantis du šimtai trisdešimt ketvirta\")]\r\n    [InlineData(2000, \"du tūkstanta\")]\r\n    [InlineData(2002, \"du tūkstančiai antra\")]\r\n    [InlineData(2023, \"du tūkstančiai dvidešimt trečia\")]\r\n    [InlineData(2345, \"du tūkstančiai trys šimtai keturiasdešimt penkta\")]\r\n    [InlineData(3000, \"trys tūkstanta\")]\r\n    [InlineData(3003, \"trys tūkstančiai trečia\")]\r\n    [InlineData(3034, \"trys tūkstančiai trisdešimt ketvirta\")]\r\n    [InlineData(3456, \"trys tūkstančiai keturi šimtai penkiasdešimt šešta\")]\r\n    [InlineData(4000, \"keturi tūkstanta\")]\r\n    [InlineData(4004, \"keturi tūkstančiai ketvirta\")]\r\n    [InlineData(4045, \"keturi tūkstančiai keturiasdešimt penkta\")]\r\n    [InlineData(4567, \"keturi tūkstančiai penki šimtai šešiasdešimt septinta\")]\r\n    [InlineData(5000, \"penki tūkstanta\")]\r\n    [InlineData(5005, \"penki tūkstančiai penkta\")]\r\n    [InlineData(5056, \"penki tūkstančiai penkiasdešimt šešta\")]\r\n    [InlineData(5678, \"penki tūkstančiai šeši šimtai septyniasdešimt aštunta\")]\r\n    [InlineData(6000, \"šeši tūkstanta\")]\r\n    [InlineData(6006, \"šeši tūkstančiai šešta\")]\r\n    [InlineData(6067, \"šeši tūkstančiai šešiasdešimt septinta\")]\r\n    [InlineData(6789, \"šeši tūkstančiai septyni šimtai aštuoniasdešimt devinta\")]\r\n    [InlineData(7000, \"septyni tūkstanta\")]\r\n    [InlineData(7007, \"septyni tūkstančiai septinta\")]\r\n    [InlineData(7078, \"septyni tūkstančiai septyniasdešimt aštunta\")]\r\n    [InlineData(7890, \"septyni tūkstančiai aštuoni šimtai devyniasdešimta\")]\r\n    [InlineData(8000, \"aštuoni tūkstanta\")]\r\n    [InlineData(8008, \"aštuoni tūkstančiai aštunta\")]\r\n    [InlineData(8089, \"aštuoni tūkstančiai aštuoniasdešimt devinta\")]\r\n    [InlineData(8901, \"aštuoni tūkstančiai devyni šimtai pirma\")]\r\n    [InlineData(9000, \"devyni tūkstanta\")]\r\n    [InlineData(9009, \"devyni tūkstančiai devinta\")]\r\n    [InlineData(9012, \"devyni tūkstančiai dvylikta\")]\r\n    [InlineData(9090, \"devyni tūkstančiai devyniasdešimta\")]\r\n    [InlineData(10000, \"dešimt tūkstanta\")]\r\n    [InlineData(10001, \"dešimt tūkstančių pirma\")]\r\n    [InlineData(20020, \"dvidešimt tūkstančių dvidešimta\")]\r\n    [InlineData(30300, \"trisdešimt tūkstančių trys šimta\")]\r\n    [InlineData(44000, \"keturiasdešimt keturi tūkstanta\")]\r\n    [InlineData(44231, \"keturiasdešimt keturi tūkstančiai du šimtai trisdešimt pirma\")]\r\n    [InlineData(100000, \"šimtas tūkstanta\")]\r\n    [InlineData(500000, \"penki šimtai tūkstanta\")]\r\n    [InlineData(1000000, \"milijona\")]\r\n    [InlineData(6000000, \"šeši milijona\")]\r\n    [InlineData(10000000, \"dešimt milijona\")]\r\n    [InlineData(70000000, \"septyniasdešimt milijona\")]\r\n    [InlineData(100000000, \"šimtas milijona\")]\r\n    [InlineData(800000000, \"aštuoni šimtai milijona\")]\r\n    public void ToOrdinalWordsFeminine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lt/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace lt;\r\n\r\n[UseCulture(\"lt\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"1 metai\")]\r\n    [InlineData(731, \"2 metai\")]\r\n    [InlineData(1096, \"3 metai\")]\r\n    [InlineData(4018, \"11 metų\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"1 mėnuo\")]\r\n    [InlineData(61, \"2 mėnesiai\")]\r\n    [InlineData(280, \"9 mėnesiai\")]\r\n    [InlineData(330, \"10 mėnesių\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 savaitė\")]\r\n    [InlineData(14, \"2 savaitės\")]\r\n    [InlineData(21, \"3 savaitės\")]\r\n    [InlineData(77, \"11 savaičių\")]\r\n    [InlineData(147, \"21 savaitė\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 diena\")]\r\n    [InlineData(2, \"2 dienos\")]\r\n    [InlineData(9, \"9 dienos\")]\r\n    [InlineData(10, \"10 dienų\")]\r\n    [InlineData(17, \"17 dienų\")]\r\n    [InlineData(21, \"21 diena\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Day));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 valanda\")]\r\n    [InlineData(2, \"2 valandos\")]\r\n    [InlineData(3, \"3 valandos\")]\r\n    [InlineData(9, \"9 valandos\")]\r\n    [InlineData(10, \"10 valandų\")]\r\n    [InlineData(19, \"19 valandų\")]\r\n    [InlineData(21, \"21 valanda\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 minutė\")]\r\n    [InlineData(2, \"2 minutės\")]\r\n    [InlineData(3, \"3 minutės\")]\r\n    [InlineData(9, \"9 minutės\")]\r\n    [InlineData(10, \"10 minučių\")]\r\n    [InlineData(19, \"19 minučių\")]\r\n    [InlineData(21, \"21 minutė\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 sekundė\")]\r\n    [InlineData(2, \"2 sekundės\")]\r\n    [InlineData(3, \"3 sekundės\")]\r\n    [InlineData(9, \"9 sekundės\")]\r\n    [InlineData(10, \"10 sekundžių\")]\r\n    [InlineData(19, \"19 sekundžių\")]\r\n    [InlineData(21, \"21 sekundė\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 milisekundė\")]\r\n    [InlineData(2, \"2 milisekundės\")]\r\n    [InlineData(3, \"3 milisekundės\")]\r\n    [InlineData(9, \"9 milisekundės\")]\r\n    [InlineData(10, \"10 milisekundžių\")]\r\n    [InlineData(19, \"19 milisekundžių\")]\r\n    [InlineData(21, \"21 milisekundė\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 milisekundžių\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"nėra laiko\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lv/DateToOrdinalWordsTests.cs",
    "content": "﻿namespace lv;\r\n\r\n[UseCulture(\"lv\")]\r\npublic class DateToOrdinalWordsTests\r\n{\r\n    [Fact]\r\n    public void OrdinalizeString() =>\r\n        Assert.Equal(\"1 janvāris 2015\", new DateTime(2015, 1, 1).ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lv/NumberToWordsTests.cs",
    "content": "﻿namespace lv;\r\n\r\n[UseCulture(\"lv-LV\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(21, \"divdesmit viens\")]\r\n    [InlineData(22, \"divdesmit divi\")]\r\n    [InlineData(26, \"divdesmit seši\")]\r\n    [InlineData(30, \"trīsdesmit\")]\r\n    [InlineData(31, \"trīsdesmit viens\")]\r\n    [InlineData(33, \"trīsdesmit trīs\")]\r\n    [InlineData(37, \"trīsdesmit septiņi\")]\r\n    [InlineData(40, \"četrdesmit\")]\r\n    [InlineData(41, \"četrdesmit viens\")]\r\n    [InlineData(44, \"četrdesmit četri\")]\r\n    [InlineData(48, \"četrdesmit astoņi\")]\r\n    [InlineData(50, \"piecdesmit\")]\r\n    [InlineData(51, \"piecdesmit viens\")]\r\n    [InlineData(55, \"piecdesmit pieci\")]\r\n    [InlineData(59, \"piecdesmit deviņi\")]\r\n    [InlineData(60, \"sešdesmit\")]\r\n    [InlineData(61, \"sešdesmit viens\")]\r\n    [InlineData(62, \"sešdesmit divi\")]\r\n    [InlineData(66, \"sešdesmit seši\")]\r\n    [InlineData(70, \"septiņdesmit\")]\r\n    [InlineData(71, \"septiņdesmit viens\")]\r\n    [InlineData(73, \"septiņdesmit trīs\")]\r\n    [InlineData(77, \"septiņdesmit septiņi\")]\r\n    [InlineData(80, \"astoņdesmit\")]\r\n    [InlineData(81, \"astoņdesmit viens\")]\r\n    [InlineData(84, \"astoņdesmit četri\")]\r\n    [InlineData(88, \"astoņdesmit astoņi\")]\r\n    [InlineData(90, \"deviņdesmit\")]\r\n    [InlineData(91, \"deviņdesmit viens\")]\r\n    [InlineData(95, \"deviņdesmit pieci\")]\r\n    [InlineData(99, \"deviņdesmit deviņi\")]\r\n    [InlineData(100, \"simts\")]\r\n    [InlineData(101, \"simtu viens\")]\r\n    [InlineData(105, \"simtu pieci\")]\r\n    [InlineData(110, \"simtu desmit\")]\r\n    [InlineData(151, \"simtu piecdesmit viens\")]\r\n    [InlineData(200, \"divi simti\")]\r\n    [InlineData(202, \"divi simti divi\")]\r\n    [InlineData(206, \"divi simti seši\")]\r\n    [InlineData(220, \"divi simti divdesmit\")]\r\n    [InlineData(262, \"divi simti sešdesmit divi\")]\r\n    [InlineData(300, \"trīs simti\")]\r\n    [InlineData(303, \"trīs simti trīs\")]\r\n    [InlineData(307, \"trīs simti septiņi\")]\r\n    [InlineData(330, \"trīs simti trīsdesmit\")]\r\n    [InlineData(373, \"trīs simti septiņdesmit trīs\")]\r\n    [InlineData(400, \"četri simti\")]\r\n    [InlineData(404, \"četri simti četri\")]\r\n    [InlineData(408, \"četri simti astoņi\")]\r\n    [InlineData(440, \"četri simti četrdesmit\")]\r\n    [InlineData(484, \"četri simti astoņdesmit četri\")]\r\n    [InlineData(500, \"pieci simti\")]\r\n    [InlineData(505, \"pieci simti pieci\")]\r\n    [InlineData(509, \"pieci simti deviņi\")]\r\n    [InlineData(550, \"pieci simti piecdesmit\")]\r\n    [InlineData(595, \"pieci simti deviņdesmit pieci\")]\r\n    [InlineData(600, \"seši simti\")]\r\n    [InlineData(601, \"seši simti viens\")]\r\n    [InlineData(606, \"seši simti seši\")]\r\n    [InlineData(616, \"seši simti sešpadsmit\")]\r\n    [InlineData(660, \"seši simti sešdesmit\")]\r\n    [InlineData(700, \"septiņi simti\")]\r\n    [InlineData(702, \"septiņi simti divi\")]\r\n    [InlineData(707, \"septiņi simti septiņi\")]\r\n    [InlineData(727, \"septiņi simti divdesmit septiņi\")]\r\n    [InlineData(770, \"septiņi simti septiņdesmit\")]\r\n    [InlineData(800, \"astoņi simti\")]\r\n    [InlineData(803, \"astoņi simti trīs\")]\r\n    [InlineData(808, \"astoņi simti astoņi\")]\r\n    [InlineData(838, \"astoņi simti trīsdesmit astoņi\")]\r\n    [InlineData(880, \"astoņi simti astoņdesmit\")]\r\n    [InlineData(900, \"deviņi simti\")]\r\n    [InlineData(904, \"deviņi simti četri\")]\r\n    [InlineData(909, \"deviņi simti deviņi\")]\r\n    [InlineData(949, \"deviņi simti četrdesmit deviņi\")]\r\n    [InlineData(990, \"deviņi simti deviņdesmit\")]\r\n    [InlineData(1000, \"tūkstotis\")]\r\n    [InlineData(1001, \"tūkstoš viens\")]\r\n    [InlineData(1012, \"tūkstoš divpadsmit\")]\r\n    [InlineData(1100, \"tūkstoš viens simts\")]\r\n    [InlineData(1234, \"tūkstoš divi simti trīsdesmit četri\")]\r\n    [InlineData(2000, \"divi tūkstoši\")]\r\n    [InlineData(2002, \"divi tūkstoši divi\")]\r\n    [InlineData(2023, \"divi tūkstoši divdesmit trīs\")]\r\n    [InlineData(2345, \"divi tūkstoši trīs simti četrdesmit pieci\")]\r\n    [InlineData(3000, \"trīs tūkstoši\")]\r\n    [InlineData(3003, \"trīs tūkstoši trīs\")]\r\n    [InlineData(3034, \"trīs tūkstoši trīsdesmit četri\")]\r\n    [InlineData(3456, \"trīs tūkstoši četri simti piecdesmit seši\")]\r\n    [InlineData(4000, \"četri tūkstoši\")]\r\n    [InlineData(4004, \"četri tūkstoši četri\")]\r\n    [InlineData(4045, \"četri tūkstoši četrdesmit pieci\")]\r\n    [InlineData(4567, \"četri tūkstoši pieci simti sešdesmit septiņi\")]\r\n    [InlineData(5000, \"pieci tūkstoši\")]\r\n    [InlineData(5005, \"pieci tūkstoši pieci\")]\r\n    [InlineData(5056, \"pieci tūkstoši piecdesmit seši\")]\r\n    [InlineData(5678, \"pieci tūkstoši seši simti septiņdesmit astoņi\")]\r\n    [InlineData(6000, \"seši tūkstoši\")]\r\n    [InlineData(6006, \"seši tūkstoši seši\")]\r\n    [InlineData(6067, \"seši tūkstoši sešdesmit septiņi\")]\r\n    [InlineData(6789, \"seši tūkstoši septiņi simti astoņdesmit deviņi\")]\r\n    [InlineData(7000, \"septiņi tūkstoši\")]\r\n    [InlineData(7007, \"septiņi tūkstoši septiņi\")]\r\n    [InlineData(7078, \"septiņi tūkstoši septiņdesmit astoņi\")]\r\n    [InlineData(7890, \"septiņi tūkstoši astoņi simti deviņdesmit\")]\r\n    [InlineData(8000, \"astoņi tūkstoši\")]\r\n    [InlineData(8008, \"astoņi tūkstoši astoņi\")]\r\n    [InlineData(8089, \"astoņi tūkstoši astoņdesmit deviņi\")]\r\n    [InlineData(8901, \"astoņi tūkstoši deviņi simti viens\")]\r\n    [InlineData(9000, \"deviņi tūkstoši\")]\r\n    [InlineData(9009, \"deviņi tūkstoši deviņi\")]\r\n    [InlineData(9012, \"deviņi tūkstoši divpadsmit\")]\r\n    [InlineData(9090, \"deviņi tūkstoši deviņdesmit\")]\r\n    [InlineData(10000, \"desmit tūkstoši\")]\r\n    [InlineData(10001, \"desmit tūkstoši viens\")]\r\n    [InlineData(20020, \"divdesmit tūkstoši divdesmit\")]\r\n    [InlineData(30300, \"trīsdesmit tūkstoši trīs simti\")]\r\n    [InlineData(44000, \"četrdesmit četri tūkstoši\")]\r\n    [InlineData(44231, \"četrdesmit četri tūkstoši divi simti trīsdesmit viens\")]\r\n    [InlineData(100000, \"simts tūkstoši\")]\r\n    [InlineData(500000, \"pieci simti tūkstoši\")]\r\n    [InlineData(1000000, \"miljons\")]\r\n    [InlineData(6000000, \"seši miljoni\")]\r\n    [InlineData(10000000, \"desmit miljoni\")]\r\n    [InlineData(70000000, \"septiņdesmit miljoni\")]\r\n    [InlineData(100000000, \"simts miljoni\")]\r\n    [InlineData(800000000, \"astoņi simti miljoni\")]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(21, \"divdesmit pirmais\")]\r\n    [InlineData(22, \"divdesmit otrais\")]\r\n    [InlineData(26, \"divdesmit sestais\")]\r\n    [InlineData(30, \"trīsdesmitais\")]\r\n    [InlineData(31, \"trīsdesmit pirmais\")]\r\n    [InlineData(33, \"trīsdesmit trešais\")]\r\n    [InlineData(37, \"trīsdesmit septītais\")]\r\n    [InlineData(40, \"četrdesmitais\")]\r\n    [InlineData(41, \"četrdesmit pirmais\")]\r\n    [InlineData(44, \"četrdesmit ceturtais\")]\r\n    [InlineData(48, \"četrdesmit astotais\")]\r\n    [InlineData(50, \"piecdesmitais\")]\r\n    [InlineData(51, \"piecdesmit pirmais\")]\r\n    [InlineData(55, \"piecdesmit piektais\")]\r\n    [InlineData(59, \"piecdesmit devītais\")]\r\n    [InlineData(60, \"sešdesmitais\")]\r\n    [InlineData(61, \"sešdesmit pirmais\")]\r\n    [InlineData(62, \"sešdesmit otrais\")]\r\n    [InlineData(66, \"sešdesmit sestais\")]\r\n    [InlineData(70, \"septiņdesmitais\")]\r\n    [InlineData(71, \"septiņdesmit pirmais\")]\r\n    [InlineData(73, \"septiņdesmit trešais\")]\r\n    [InlineData(77, \"septiņdesmit septītais\")]\r\n    [InlineData(80, \"astoņdesmitais\")]\r\n    [InlineData(81, \"astoņdesmit pirmais\")]\r\n    [InlineData(84, \"astoņdesmit ceturtais\")]\r\n    [InlineData(88, \"astoņdesmit astotais\")]\r\n    [InlineData(90, \"deviņdesmitais\")]\r\n    [InlineData(91, \"deviņdesmit pirmais\")]\r\n    [InlineData(95, \"deviņdesmit piektais\")]\r\n    [InlineData(99, \"deviņdesmit devītais\")]\r\n    [InlineData(100, \"simtais\")]\r\n    [InlineData(101, \"simtu pirmais\")]\r\n    [InlineData(105, \"simtu piektais\")]\r\n    [InlineData(110, \"simtu desmitais\")]\r\n    [InlineData(151, \"simtu piecdesmit pirmais\")]\r\n    [InlineData(200, \"divsimtais\")]\r\n    [InlineData(202, \"divi simti otrais\")]\r\n    [InlineData(206, \"divi simti sestais\")]\r\n    [InlineData(220, \"divi simti divdesmitais\")]\r\n    [InlineData(262, \"divi simti sešdesmit otrais\")]\r\n    [InlineData(300, \"trīssimtais\")]\r\n    [InlineData(303, \"trīs simti trešais\")]\r\n    [InlineData(307, \"trīs simti septītais\")]\r\n    [InlineData(330, \"trīs simti trīsdesmitais\")]\r\n    [InlineData(373, \"trīs simti septiņdesmit trešais\")]\r\n    [InlineData(400, \"četrsimtais\")]\r\n    [InlineData(404, \"četri simti ceturtais\")]\r\n    [InlineData(408, \"četri simti astotais\")]\r\n    [InlineData(440, \"četri simti četrdesmitais\")]\r\n    [InlineData(484, \"četri simti astoņdesmit ceturtais\")]\r\n    [InlineData(500, \"piecsimtais\")]\r\n    [InlineData(505, \"pieci simti piektais\")]\r\n    [InlineData(509, \"pieci simti devītais\")]\r\n    [InlineData(550, \"pieci simti piecdesmitais\")]\r\n    [InlineData(595, \"pieci simti deviņdesmit piektais\")]\r\n    [InlineData(600, \"sešsimtais\")]\r\n    [InlineData(601, \"seši simti pirmais\")]\r\n    [InlineData(606, \"seši simti sestais\")]\r\n    [InlineData(616, \"seši simti sešpadsmitais\")]\r\n    [InlineData(660, \"seši simti sešdesmitais\")]\r\n    [InlineData(700, \"septiņsimtais\")]\r\n    [InlineData(702, \"septiņi simti otrais\")]\r\n    [InlineData(707, \"septiņi simti septītais\")]\r\n    [InlineData(727, \"septiņi simti divdesmit septītais\")]\r\n    [InlineData(770, \"septiņi simti septiņdesmitais\")]\r\n    [InlineData(800, \"astoņsimtais\")]\r\n    [InlineData(803, \"astoņi simti trešais\")]\r\n    [InlineData(808, \"astoņi simti astotais\")]\r\n    [InlineData(838, \"astoņi simti trīsdesmit astotais\")]\r\n    [InlineData(880, \"astoņi simti astoņdesmitais\")]\r\n    [InlineData(900, \"deviņsimtais\")]\r\n    [InlineData(904, \"deviņi simti ceturtais\")]\r\n    [InlineData(909, \"deviņi simti devītais\")]\r\n    [InlineData(949, \"deviņi simti četrdesmit devītais\")]\r\n    [InlineData(990, \"deviņi simti deviņdesmitais\")]\r\n    [InlineData(1000, \"tūkstošais\")]\r\n    [InlineData(1001, \"tūkstoš pirmais\")]\r\n    [InlineData(1012, \"tūkstoš divpadsmitais\")]\r\n    [InlineData(1100, \"tūkstoš simtais\")]\r\n    [InlineData(1234, \"tūkstoš divi simti trīsdesmit ceturtais\")]\r\n    [InlineData(2000, \"divi tūkstošais\")]\r\n    [InlineData(2002, \"divi tūkstoši otrais\")]\r\n    [InlineData(2023, \"divi tūkstoši divdesmit trešais\")]\r\n    [InlineData(2345, \"divi tūkstoši trīs simti četrdesmit piektais\")]\r\n    [InlineData(3000, \"trīs tūkstošais\")]\r\n    [InlineData(3003, \"trīs tūkstoši trešais\")]\r\n    [InlineData(3034, \"trīs tūkstoši trīsdesmit ceturtais\")]\r\n    [InlineData(3456, \"trīs tūkstoši četri simti piecdesmit sestais\")]\r\n    [InlineData(4000, \"četri tūkstošais\")]\r\n    [InlineData(4004, \"četri tūkstoši ceturtais\")]\r\n    [InlineData(4045, \"četri tūkstoši četrdesmit piektais\")]\r\n    [InlineData(4567, \"četri tūkstoši pieci simti sešdesmit septītais\")]\r\n    [InlineData(5000, \"pieci tūkstošais\")]\r\n    [InlineData(5005, \"pieci tūkstoši piektais\")]\r\n    [InlineData(5056, \"pieci tūkstoši piecdesmit sestais\")]\r\n    [InlineData(5678, \"pieci tūkstoši seši simti septiņdesmit astotais\")]\r\n    [InlineData(6000, \"seši tūkstošais\")]\r\n    [InlineData(6006, \"seši tūkstoši sestais\")]\r\n    [InlineData(6067, \"seši tūkstoši sešdesmit septītais\")]\r\n    [InlineData(6789, \"seši tūkstoši septiņi simti astoņdesmit devītais\")]\r\n    [InlineData(7000, \"septiņi tūkstošais\")]\r\n    [InlineData(7007, \"septiņi tūkstoši septītais\")]\r\n    [InlineData(7078, \"septiņi tūkstoši septiņdesmit astotais\")]\r\n    [InlineData(7890, \"septiņi tūkstoši astoņi simti deviņdesmitais\")]\r\n    [InlineData(8000, \"astoņi tūkstošais\")]\r\n    [InlineData(8008, \"astoņi tūkstoši astotais\")]\r\n    [InlineData(8089, \"astoņi tūkstoši astoņdesmit devītais\")]\r\n    [InlineData(8901, \"astoņi tūkstoši deviņi simti pirmais\")]\r\n    [InlineData(9000, \"deviņi tūkstošais\")]\r\n    [InlineData(9009, \"deviņi tūkstoši devītais\")]\r\n    [InlineData(9012, \"deviņi tūkstoši divpadsmitais\")]\r\n    [InlineData(9090, \"deviņi tūkstoši deviņdesmitais\")]\r\n    [InlineData(10000, \"desmit tūkstošais\")]\r\n    [InlineData(10001, \"desmit tūkstoši pirmais\")]\r\n    [InlineData(20020, \"divdesmit tūkstoši divdesmitais\")]\r\n    [InlineData(30300, \"trīsdesmit tūkstoši trīssimtais\")]\r\n    [InlineData(44000, \"četrdesmit četri tūkstošais\")]\r\n    [InlineData(44231, \"četrdesmit četri tūkstoši divi simti trīsdesmit pirmais\")]\r\n    [InlineData(100000, \"simts tūkstošais\")]\r\n    [InlineData(500000, \"pieci simti tūkstošais\")]\r\n    [InlineData(1000000, \"miljonais\")]\r\n    [InlineData(6000000, \"seši miljonais\")]\r\n    [InlineData(10000000, \"desmit miljonais\")]\r\n    [InlineData(70000000, \"septiņdesmit miljonais\")]\r\n    [InlineData(100000000, \"simts miljonais\")]\r\n    [InlineData(800000000, \"astoņi simti miljonais\")]\r\n    public void ToOrdinalWordsMasculine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Masculine));\r\n\r\n    [Theory]\r\n    [InlineData(21, \"divdesmit pirmā\")]\r\n    [InlineData(22, \"divdesmit otrā\")]\r\n    [InlineData(26, \"divdesmit sestā\")]\r\n    [InlineData(30, \"trīsdesmitā\")]\r\n    [InlineData(31, \"trīsdesmit pirmā\")]\r\n    [InlineData(33, \"trīsdesmit trešā\")]\r\n    [InlineData(37, \"trīsdesmit septītā\")]\r\n    [InlineData(40, \"četrdesmitā\")]\r\n    [InlineData(41, \"četrdesmit pirmā\")]\r\n    [InlineData(44, \"četrdesmit ceturtā\")]\r\n    [InlineData(48, \"četrdesmit astotā\")]\r\n    [InlineData(50, \"piecdesmitā\")]\r\n    [InlineData(51, \"piecdesmit pirmā\")]\r\n    [InlineData(55, \"piecdesmit piektā\")]\r\n    [InlineData(59, \"piecdesmit devītā\")]\r\n    [InlineData(60, \"sešdesmitā\")]\r\n    [InlineData(61, \"sešdesmit pirmā\")]\r\n    [InlineData(62, \"sešdesmit otrā\")]\r\n    [InlineData(66, \"sešdesmit sestā\")]\r\n    [InlineData(70, \"septiņdesmitā\")]\r\n    [InlineData(71, \"septiņdesmit pirmā\")]\r\n    [InlineData(73, \"septiņdesmit trešā\")]\r\n    [InlineData(77, \"septiņdesmit septītā\")]\r\n    [InlineData(80, \"astoņdesmitā\")]\r\n    [InlineData(81, \"astoņdesmit pirmā\")]\r\n    [InlineData(84, \"astoņdesmit ceturtā\")]\r\n    [InlineData(88, \"astoņdesmit astotā\")]\r\n    [InlineData(90, \"deviņdesmitā\")]\r\n    [InlineData(91, \"deviņdesmit pirmā\")]\r\n    [InlineData(95, \"deviņdesmit piektā\")]\r\n    [InlineData(99, \"deviņdesmit devītā\")]\r\n    [InlineData(100, \"simtā\")]\r\n    [InlineData(101, \"simtu pirmā\")]\r\n    [InlineData(105, \"simtu piektā\")]\r\n    [InlineData(110, \"simtu desmitā\")]\r\n    [InlineData(151, \"simtu piecdesmit pirmā\")]\r\n    [InlineData(200, \"divsimtā\")]\r\n    [InlineData(202, \"divi simti otrā\")]\r\n    [InlineData(206, \"divi simti sestā\")]\r\n    [InlineData(220, \"divi simti divdesmitā\")]\r\n    [InlineData(262, \"divi simti sešdesmit otrā\")]\r\n    [InlineData(300, \"trīssimtā\")]\r\n    [InlineData(303, \"trīs simti trešā\")]\r\n    [InlineData(307, \"trīs simti septītā\")]\r\n    [InlineData(330, \"trīs simti trīsdesmitā\")]\r\n    [InlineData(373, \"trīs simti septiņdesmit trešā\")]\r\n    [InlineData(400, \"četrsimtā\")]\r\n    [InlineData(404, \"četri simti ceturtā\")]\r\n    [InlineData(408, \"četri simti astotā\")]\r\n    [InlineData(440, \"četri simti četrdesmitā\")]\r\n    [InlineData(484, \"četri simti astoņdesmit ceturtā\")]\r\n    [InlineData(500, \"piecsimtā\")]\r\n    [InlineData(505, \"pieci simti piektā\")]\r\n    [InlineData(509, \"pieci simti devītā\")]\r\n    [InlineData(550, \"pieci simti piecdesmitā\")]\r\n    [InlineData(595, \"pieci simti deviņdesmit piektā\")]\r\n    [InlineData(600, \"sešsimtā\")]\r\n    [InlineData(601, \"seši simti pirmā\")]\r\n    [InlineData(606, \"seši simti sestā\")]\r\n    [InlineData(616, \"seši simti sešpadsmitā\")]\r\n    [InlineData(660, \"seši simti sešdesmitā\")]\r\n    [InlineData(700, \"septiņsimtā\")]\r\n    [InlineData(702, \"septiņi simti otrā\")]\r\n    [InlineData(707, \"septiņi simti septītā\")]\r\n    [InlineData(727, \"septiņi simti divdesmit septītā\")]\r\n    [InlineData(770, \"septiņi simti septiņdesmitā\")]\r\n    [InlineData(800, \"astoņsimtā\")]\r\n    [InlineData(803, \"astoņi simti trešā\")]\r\n    [InlineData(808, \"astoņi simti astotā\")]\r\n    [InlineData(838, \"astoņi simti trīsdesmit astotā\")]\r\n    [InlineData(880, \"astoņi simti astoņdesmitā\")]\r\n    [InlineData(900, \"deviņsimtā\")]\r\n    [InlineData(904, \"deviņi simti ceturtā\")]\r\n    [InlineData(909, \"deviņi simti devītā\")]\r\n    [InlineData(949, \"deviņi simti četrdesmit devītā\")]\r\n    [InlineData(990, \"deviņi simti deviņdesmitā\")]\r\n    [InlineData(1000, \"tūkstošā\")]\r\n    [InlineData(1001, \"tūkstoš pirmā\")]\r\n    [InlineData(1012, \"tūkstoš divpadsmitā\")]\r\n    [InlineData(1100, \"tūkstoš simtā\")]\r\n    [InlineData(1234, \"tūkstoš divi simti trīsdesmit ceturtā\")]\r\n    [InlineData(2000, \"divi tūkstošā\")]\r\n    [InlineData(2002, \"divi tūkstoši otrā\")]\r\n    [InlineData(2023, \"divi tūkstoši divdesmit trešā\")]\r\n    [InlineData(2345, \"divi tūkstoši trīs simti četrdesmit piektā\")]\r\n    [InlineData(3000, \"trīs tūkstošā\")]\r\n    [InlineData(3003, \"trīs tūkstoši trešā\")]\r\n    [InlineData(3034, \"trīs tūkstoši trīsdesmit ceturtā\")]\r\n    [InlineData(3456, \"trīs tūkstoši četri simti piecdesmit sestā\")]\r\n    [InlineData(4000, \"četri tūkstošā\")]\r\n    [InlineData(4004, \"četri tūkstoši ceturtā\")]\r\n    [InlineData(4045, \"četri tūkstoši četrdesmit piektā\")]\r\n    [InlineData(4567, \"četri tūkstoši pieci simti sešdesmit septītā\")]\r\n    [InlineData(5000, \"pieci tūkstošā\")]\r\n    [InlineData(5005, \"pieci tūkstoši piektā\")]\r\n    [InlineData(5056, \"pieci tūkstoši piecdesmit sestā\")]\r\n    [InlineData(5678, \"pieci tūkstoši seši simti septiņdesmit astotā\")]\r\n    [InlineData(6000, \"seši tūkstošā\")]\r\n    [InlineData(6006, \"seši tūkstoši sestā\")]\r\n    [InlineData(6067, \"seši tūkstoši sešdesmit septītā\")]\r\n    [InlineData(6789, \"seši tūkstoši septiņi simti astoņdesmit devītā\")]\r\n    [InlineData(7000, \"septiņi tūkstošā\")]\r\n    [InlineData(7007, \"septiņi tūkstoši septītā\")]\r\n    [InlineData(7078, \"septiņi tūkstoši septiņdesmit astotā\")]\r\n    [InlineData(7890, \"septiņi tūkstoši astoņi simti deviņdesmitā\")]\r\n    [InlineData(8000, \"astoņi tūkstošā\")]\r\n    [InlineData(8008, \"astoņi tūkstoši astotā\")]\r\n    [InlineData(8089, \"astoņi tūkstoši astoņdesmit devītā\")]\r\n    [InlineData(8901, \"astoņi tūkstoši deviņi simti pirmā\")]\r\n    [InlineData(9000, \"deviņi tūkstošā\")]\r\n    [InlineData(9009, \"deviņi tūkstoši devītā\")]\r\n    [InlineData(9012, \"deviņi tūkstoši divpadsmitā\")]\r\n    [InlineData(9090, \"deviņi tūkstoši deviņdesmitā\")]\r\n    [InlineData(10000, \"desmit tūkstošā\")]\r\n    [InlineData(10001, \"desmit tūkstoši pirmā\")]\r\n    [InlineData(20020, \"divdesmit tūkstoši divdesmitā\")]\r\n    [InlineData(30300, \"trīsdesmit tūkstoši trīssimtā\")]\r\n    [InlineData(44000, \"četrdesmit četri tūkstošā\")]\r\n    [InlineData(44231, \"četrdesmit četri tūkstoši divi simti trīsdesmit pirmā\")]\r\n    [InlineData(100000, \"simts tūkstošā\")]\r\n    [InlineData(500000, \"pieci simti tūkstošā\")]\r\n    [InlineData(1000000, \"miljonā\")]\r\n    [InlineData(6000000, \"seši miljonā\")]\r\n    [InlineData(10000000, \"desmit miljonā\")]\r\n    [InlineData(70000000, \"septiņdesmit miljonā\")]\r\n    [InlineData(100000000, \"simts miljonā\")]\r\n    [InlineData(800000000, \"astoņi simti miljonā\")]\r\n    public void ToOrdinalWordsFeminine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/lv/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace lv;\r\n\r\n[UseCulture(\"lv\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 gads\")]\r\n    [InlineData(731, \"2 gadi\")]\r\n    [InlineData(1096, \"3 gadi\")]\r\n    [InlineData(4018, \"11 gadi\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 mēnesis\")]\r\n    [InlineData(61, \"2 mēneši\")]\r\n    [InlineData(92, \"3 mēneši\")]\r\n    [InlineData(335, \"11 mēneši\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(7, \"1 nedēļa\")]\r\n    [InlineData(14, \"2 nedēļas\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1 diena\")]\r\n    [InlineData(2, \"2 dienas\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1 stunda\")]\r\n    [InlineData(2, \"2 stundas\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1 minūte\")]\r\n    [InlineData(2, \"2 minūtes\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1 sekunde\")]\r\n    [InlineData(2, \"2 sekundes\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1 milisekunde\")]\r\n    [InlineData(2, \"2 milisekundes\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 milisekundes\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"bez laika\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ms-MY/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace msMY;\r\n\r\n[UseCulture(\"ms-MY\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 tahun\")]\r\n    [InlineData(731, \"2 tahun\")]\r\n    [InlineData(1096, \"3 tahun\")]\r\n    [InlineData(4018, \"11 tahun\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 bulan\")]\r\n    [InlineData(61, \"2 bulan\")]\r\n    [InlineData(92, \"3 bulan\")]\r\n    [InlineData(335, \"11 bulan\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(7, \"1 minggu\")]\r\n    [InlineData(14, \"2 minggu\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1 hari\")]\r\n    [InlineData(2, \"2 hari\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1 jam\")]\r\n    [InlineData(2, \"2 jam\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1 minit\")]\r\n    [InlineData(2, \"2 minit\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1 saat\")]\r\n    [InlineData(2, \"2 saat\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(1, \"1 milisaat\")]\r\n    [InlineData(2, \"2 milisaat\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 milisaat\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"tiada masa\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/mt/DateHumanizeTests.cs",
    "content": "﻿namespace mt;\r\n\r\n[UseCulture(\"mt\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(-3, \"3 jiem ilu\")]\r\n    [InlineData(-2, \"jumejn ilu\")]\r\n    [InlineData(-1, \"il-bieraħ\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(3, \"3 jiem oħra\")]\r\n    [InlineData(2, \"pitgħada\")]\r\n    [InlineData(1, \"għada\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-3, \"3 siegħat ilu\")]\r\n    [InlineData(-2, \"sagħtejn ilu\")]\r\n    [InlineData(-1, \"siegħa ilu\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(3, \"3 siegħat oħra\")]\r\n    [InlineData(2, \"sagħtejn oħra\")]\r\n    [InlineData(1, \"siegħa oħra\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-3, \"3 minuti ilu\")]\r\n    [InlineData(-2, \"2 minuti ilu\")]\r\n    [InlineData(-1, \"minuta ilu\")]\r\n    [InlineData(60, \"siegħa ilu\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 minuti oħra\")]\r\n    [InlineData(1, \"minuta oħra\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-3, \"3 xhur ilu\")]\r\n    [InlineData(-2, \"xahrejn ilu\")]\r\n    [InlineData(-1, \"xahar ilu\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(3, \"3 xhur oħra\")]\r\n    [InlineData(2, \"xahrejn oħra\")]\r\n    [InlineData(1, \"xahar ieħor\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 sekondi ilu\")]\r\n    [InlineData(-1, \"sekonda ilu\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 sekondi oħra\")]\r\n    [InlineData(1, \"sekonda oħra\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-3, \"3 snin ilu\")]\r\n    [InlineData(-2, \"sentejn ilu\")]\r\n    [InlineData(-1, \"sena ilu\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(3, \"3 snin oħra\")]\r\n    [InlineData(2, \"sentejn oħra\")]\r\n    [InlineData(1, \"sena oħra\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"issa\")]\r\n    public void Now(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/mt/NumberToWordsTests.cs",
    "content": "﻿namespace mt;\r\n\r\n[UseCulture(\"mt\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"żero\")]\r\n    [InlineData(1, \"wieħed\")]\r\n    [InlineData(-1, \"wieħed inqas minn żero\")]\r\n    [InlineData(3, \"tlieta\")]\r\n    [InlineData(10, \"għaxra\")]\r\n    [InlineData(11, \"ħdax\")]\r\n    [InlineData(20, \"għoxrin\")]\r\n    [InlineData(-20, \"għoxrin inqas minn żero\")]\r\n    [InlineData(21, \"wieħed u għoxrin\")]\r\n    [InlineData(38, \"tmienja u tletin\")]\r\n    [InlineData(43, \"tlieta u erbgħin\")]\r\n    [InlineData(78, \"tmienja u sebgħin\")]\r\n    [InlineData(99, \"disgħa u disgħin\")]\r\n    [InlineData(100, \"mija\")]\r\n    [InlineData(101, \"mija u wieħed\")]\r\n    [InlineData(103, \"mija u tlieta\")]\r\n    [InlineData(110, \"mija u għaxra\")]\r\n    [InlineData(111, \"mija u ħdax\")]\r\n    [InlineData(121, \"mija u wieħed u għoxrin\")]\r\n    [InlineData(122, \"mija u tnejn u għoxrin\")]\r\n    [InlineData(123, \"mija u tlieta u għoxrin\")]\r\n    [InlineData(138, \"mija u tmienja u tletin\")]\r\n    [InlineData(143, \"mija u tlieta u erbgħin\")]\r\n    [InlineData(178, \"mija u tmienja u sebgħin\")]\r\n    [InlineData(199, \"mija u disgħa u disgħin\")]\r\n    [InlineData(200, \"mitejn\")]\r\n    [InlineData(201, \"mitejn u wieħed\")]\r\n    [InlineData(203, \"mitejn u tlieta\")]\r\n    [InlineData(210, \"mitejn u għaxra\")]\r\n    [InlineData(211, \"mitejn u ħdax\")]\r\n    [InlineData(221, \"mitejn u wieħed u għoxrin\")]\r\n    [InlineData(222, \"mitejn u tnejn u għoxrin\")]\r\n    [InlineData(223, \"mitejn u tlieta u għoxrin\")]\r\n    [InlineData(238, \"mitejn u tmienja u tletin\")]\r\n    [InlineData(243, \"mitejn u tlieta u erbgħin\")]\r\n    [InlineData(278, \"mitejn u tmienja u sebgħin\")]\r\n    [InlineData(299, \"mitejn u disgħa u disgħin\")]\r\n    [InlineData(300, \"tlett mija\")]\r\n    [InlineData(401, \"erbgħa mija u wieħed\")]\r\n    [InlineData(503, \"ħames mija u tlieta\")]\r\n    [InlineData(610, \"sitt mija u għaxra\")]\r\n    [InlineData(711, \"sebgħa mija u ħdax\")]\r\n    [InlineData(821, \"tminn mija u wieħed u għoxrin\")]\r\n    [InlineData(922, \"disgħa mija u tnejn u għoxrin\")]\r\n    [InlineData(323, \"tlett mija u tlieta u għoxrin\")]\r\n    [InlineData(438, \"erbgħa mija u tmienja u tletin\")]\r\n    [InlineData(543, \"ħames mija u tlieta u erbgħin\")]\r\n    [InlineData(678, \"sitt mija u tmienja u sebgħin\")]\r\n    [InlineData(799, \"sebgħa mija u disgħa u disgħin\")]\r\n    [InlineData(1000, \"elf\")]\r\n    [InlineData(1001, \"elf u wieħed\")]\r\n    [InlineData(1111, \"elf u mija u ħdax\")]\r\n    [InlineData(1234, \"elf u mitejn u erbgħa u tletin\")]\r\n    [InlineData(1999, \"elf u disgħa mija u disgħa u disgħin\")]\r\n    [InlineData(2000, \"elfejn\")]\r\n    [InlineData(2014, \"elfejn u erbatax\")]\r\n    [InlineData(2048, \"elfejn u tmienja u erbgħin\")]\r\n    [InlineData(3000, \"tlett elef\")]\r\n    [InlineData(3501, \"tlett elef u ħames mija u wieħed\")]\r\n    [InlineData(8100, \"tmint elef u mija\")]\r\n    [InlineData(10000, \"għaxart elef\")]\r\n    [InlineData(10001, \"għaxart elef u wieħed\")]\r\n    [InlineData(12345, \"tnax-il elf u tlett mija u ħamsa u erbgħin\")]\r\n    [InlineData(18000, \"tmintax-il elf\")]\r\n    [InlineData(100000, \"mitt elf\")]\r\n    [InlineData(100001, \"mitt elf u wieħed\")]\r\n    [InlineData(111111, \"mija u ħdax-il elf u mija u ħdax\")]\r\n    [InlineData(123456, \"mija u tlieta u għoxrin elf u erbgħa mija u sitta u ħamsin\")]\r\n    [InlineData(1000000, \"miljun\")]\r\n    [InlineData(1000001, \"miljun u wieħed\")]\r\n    [InlineData(1111101, \"miljun u mija u ħdax-il elf u mija u wieħed\")]\r\n    [InlineData(1111111, \"miljun u mija u ħdax-il elf u mija u ħdax\")]\r\n    [InlineData(1234567, \"miljun u mitejn u erbgħa u tletin elf u ħames mija u sebgħa u sittin\")]\r\n    [InlineData(5000000, \"ħames miljuni\")]\r\n    [InlineData(10000000, \"għaxar miljuni\")]\r\n    [InlineData(10000001, \"għaxar miljuni u wieħed\")]\r\n    [InlineData(11111111, \"ħdax-il miljun u mija u ħdax-il elf u mija u ħdax\")]\r\n    [InlineData(12345678, \"tnax-il miljun u tlett mija u ħamsa u erbgħin elf u sitt mija u tmienja u sebgħin\")]\r\n    [InlineData(100000000, \"mitt miljun\")]\r\n    [InlineData(100000001, \"mitt miljun u wieħed\")]\r\n    [InlineData(111111111, \"mija u ħdax-il miljun u mija u ħdax-il elf u mija u ħdax\")]\r\n    [InlineData(123456789, \"mija u tlieta u għoxrin miljun u erbgħa mija u sitta u ħamsin elf u sebgħa mija u disgħa u tmenin\")]\r\n    [InlineData(1000000000, \"biljun\")]\r\n    [InlineData(1000000001, \"biljun u wieħed\")]\r\n    [InlineData(1101111101, \"biljun u mija u miljun u mija u ħdax-il elf u mija u wieħed\")]\r\n    [InlineData(2000000000, \"żewġ biljuni\")]\r\n    [InlineData(2147483647, \"żewġ biljuni u mija u sebgħa u erbgħin miljun u erbgħa mija u tlieta u tmenin elf u sitt mija u sebgħa u erbgħin\")]\r\n    [InlineData(-2147483647, \"żewġ biljuni u mija u sebgħa u erbgħin miljun u erbgħa mija u tlieta u tmenin elf u sitt mija u sebgħa u erbgħin inqas minn żero\")]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"waħda\")]\r\n    [InlineData(1001, \"elf u waħda\")]\r\n    [InlineData(100001, \"mitt elf u waħda\")]\r\n    [InlineData(1000000001, \"biljun u waħda\")]\r\n    public void ToFeminineWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"żero\")]\r\n    [InlineData(1, \"wieħed\")]\r\n    [InlineData(3, \"tlieta\")]\r\n    [InlineData(10, \"għaxra\")]\r\n    [InlineData(11, \"ħdax\")]\r\n    [InlineData(20, \"għoxrin\")]\r\n    [InlineData(21, \"wieħed u għoxrin\")]\r\n    [InlineData(38, \"tmienja u tletin\")]\r\n    [InlineData(43, \"tlieta u erbgħin\")]\r\n    [InlineData(78, \"tmienja u sebgħin\")]\r\n    [InlineData(99, \"disgħa u disgħin\")]\r\n    [InlineData(100, \"mija\")]\r\n    [InlineData(101, \"mija u wieħed\")]\r\n    [InlineData(103, \"mija u tlieta\")]\r\n    [InlineData(110, \"mija u għaxra\")]\r\n    [InlineData(111, \"mija u ħdax\")]\r\n    [InlineData(121, \"mija u wieħed u għoxrin\")]\r\n    [InlineData(122, \"mija u tnejn u għoxrin\")]\r\n    [InlineData(123, \"mija u tlieta u għoxrin\")]\r\n    [InlineData(138, \"mija u tmienja u tletin\")]\r\n    [InlineData(143, \"mija u tlieta u erbgħin\")]\r\n    [InlineData(178, \"mija u tmienja u sebgħin\")]\r\n    [InlineData(199, \"mija u disgħa u disgħin\")]\r\n    [InlineData(200, \"mitejn\")]\r\n    [InlineData(201, \"mitejn u wieħed\")]\r\n    [InlineData(203, \"mitejn u tlieta\")]\r\n    [InlineData(210, \"mitejn u għaxra\")]\r\n    [InlineData(211, \"mitejn u ħdax\")]\r\n    [InlineData(221, \"mitejn u wieħed u għoxrin\")]\r\n    [InlineData(222, \"mitejn u tnejn u għoxrin\")]\r\n    [InlineData(223, \"mitejn u tlieta u għoxrin\")]\r\n    [InlineData(238, \"mitejn u tmienja u tletin\")]\r\n    [InlineData(243, \"mitejn u tlieta u erbgħin\")]\r\n    [InlineData(278, \"mitejn u tmienja u sebgħin\")]\r\n    [InlineData(299, \"mitejn u disgħa u disgħin\")]\r\n    [InlineData(300, \"tlett mija\")]\r\n    [InlineData(401, \"erbgħa mija u wieħed\")]\r\n    [InlineData(503, \"ħames mija u tlieta\")]\r\n    [InlineData(610, \"sitt mija u għaxra\")]\r\n    [InlineData(711, \"sebgħa mija u ħdax\")]\r\n    [InlineData(821, \"tminn mija u wieħed u għoxrin\")]\r\n    [InlineData(922, \"disgħa mija u tnejn u għoxrin\")]\r\n    [InlineData(323, \"tlett mija u tlieta u għoxrin\")]\r\n    [InlineData(438, \"erbgħa mija u tmienja u tletin\")]\r\n    [InlineData(543, \"ħames mija u tlieta u erbgħin\")]\r\n    [InlineData(678, \"sitt mija u tmienja u sebgħin\")]\r\n    [InlineData(799, \"sebgħa mija u disgħa u disgħin\")]\r\n    [InlineData(1000, \"elf\")]\r\n    [InlineData(1001, \"elf u wieħed\")]\r\n    [InlineData(1111, \"elf u mija u ħdax\")]\r\n    [InlineData(1234, \"elf u mitejn u erbgħa u tletin\")]\r\n    [InlineData(1999, \"elf u disgħa mija u disgħa u disgħin\")]\r\n    [InlineData(2000, \"elfejn\")]\r\n    [InlineData(2014, \"elfejn u erbatax\")]\r\n    [InlineData(2048, \"elfejn u tmienja u erbgħin\")]\r\n    [InlineData(3000, \"tlett elef\")]\r\n    [InlineData(3501, \"tlett elef u ħames mija u wieħed\")]\r\n    [InlineData(8100, \"tmint elef u mija\")]\r\n    [InlineData(10000, \"għaxart elef\")]\r\n    [InlineData(10001, \"għaxart elef u wieħed\")]\r\n    [InlineData(12345, \"tnax-il elf u tlett mija u ħamsa u erbgħin\")]\r\n    [InlineData(18000, \"tmintax-il elf\")]\r\n    [InlineData(100000, \"mitt elf\")]\r\n    [InlineData(100001, \"mitt elf u wieħed\")]\r\n    [InlineData(111111, \"mija u ħdax-il elf u mija u ħdax\")]\r\n    [InlineData(123456, \"mija u tlieta u għoxrin elf u erbgħa mija u sitta u ħamsin\")]\r\n    [InlineData(1000000, \"miljun\")]\r\n    [InlineData(1000001, \"miljun u wieħed\")]\r\n    [InlineData(1111101, \"miljun u mija u ħdax-il elf u mija u wieħed\")]\r\n    [InlineData(1111111, \"miljun u mija u ħdax-il elf u mija u ħdax\")]\r\n    [InlineData(1234567, \"miljun u mitejn u erbgħa u tletin elf u ħames mija u sebgħa u sittin\")]\r\n    [InlineData(5000000, \"ħames miljuni\")]\r\n    [InlineData(10000000, \"għaxar miljuni\")]\r\n    [InlineData(10000001, \"għaxar miljuni u wieħed\")]\r\n    [InlineData(11111111, \"ħdax-il miljun u mija u ħdax-il elf u mija u ħdax\")]\r\n    [InlineData(12345678, \"tnax-il miljun u tlett mija u ħamsa u erbgħin elf u sitt mija u tmienja u sebgħin\")]\r\n    [InlineData(100000000, \"mitt miljun\")]\r\n    [InlineData(100000001, \"mitt miljun u wieħed\")]\r\n    [InlineData(111111111, \"mija u ħdax-il miljun u mija u ħdax-il elf u mija u ħdax\")]\r\n    [InlineData(123456789, \"mija u tlieta u għoxrin miljun u erbgħa mija u sitta u ħamsin elf u sebgħa mija u disgħa u tmenin\")]\r\n    [InlineData(1000000000, \"biljun\")]\r\n    [InlineData(1000000001, \"biljun u wieħed\")]\r\n    [InlineData(1101111101, \"biljun u mija u miljun u mija u ħdax-il elf u mija u wieħed\")]\r\n    [InlineData(2000000000, \"żewġ biljuni\")]\r\n    [InlineData(2147483647, \"żewġ biljuni u mija u sebgħa u erbgħin miljun u erbgħa mija u tlieta u tmenin elf u sitt mija u sebgħa u erbgħin\")]\r\n    public void ToMasculineWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Masculine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]\r\n    [InlineData(1, \"l-ewwel\")]\r\n    [InlineData(2, \"it-tieni\")]\r\n    [InlineData(9, \"id-disa'\")]\r\n    [InlineData(10, \"l-għaxar\")]\r\n    [InlineData(11, \"il-ħdax\")]\r\n    [InlineData(15, \"il-ħmistax\")]\r\n    [InlineData(18, \"it-tmintax\")]\r\n    [InlineData(20, \"l-għoxrin\")]\r\n    [InlineData(21, \"il-wieħed u għoxrin\")]\r\n    [InlineData(22, \"it-tnejn u għoxrin\")]\r\n    [InlineData(28, \"it-tmienja u għoxrin\")]\r\n    [InlineData(44, \"l-erbgħa u erbgħin\")]\r\n    [InlineData(55, \"il-ħamsa u ħamsin\")]\r\n    [InlineData(60, \"is-sittin\")]\r\n    [InlineData(99, \"id-disgħa u disgħin\")]\r\n    [InlineData(100, \"il-mija\")]\r\n    [InlineData(101, \"il-mija u wieħed\")]\r\n    [InlineData(1000, \"l-elf\")]\r\n    [InlineData(1001, \"l-elf u wieħed\")]\r\n    [InlineData(2000, \"l-elfejn\")]\r\n    [InlineData(3000, \"it-tlett elef\")]\r\n    public void ToOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]\r\n    [InlineData(1, \"l-ewwel\")]\r\n    [InlineData(2, \"it-tieni\")]\r\n    [InlineData(9, \"id-disa'\")]\r\n    [InlineData(10, \"l-għaxar\")]\r\n    [InlineData(11, \"il-ħdax\")]\r\n    [InlineData(15, \"il-ħmistax\")]\r\n    [InlineData(18, \"it-tmintax\")]\r\n    [InlineData(20, \"l-għoxrin\")]\r\n    [InlineData(21, \"il-wieħed u għoxrin\")]\r\n    [InlineData(22, \"it-tnejn u għoxrin\")]\r\n    [InlineData(28, \"it-tmienja u għoxrin\")]\r\n    [InlineData(44, \"l-erbgħa u erbgħin\")]\r\n    [InlineData(55, \"il-ħamsa u ħamsin\")]\r\n    [InlineData(60, \"is-sittin\")]\r\n    [InlineData(99, \"id-disgħa u disgħin\")]\r\n    [InlineData(100, \"il-mija\")]\r\n    [InlineData(101, \"il-mija u waħda\")]\r\n    [InlineData(1000, \"l-elf\")]\r\n    [InlineData(1001, \"l-elf u waħda\")]\r\n    [InlineData(2000, \"l-elfejn\")]\r\n    [InlineData(3000, \"it-tlett elef\")]\r\n    public void ToFeminineOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]\r\n    [InlineData(1, \"l-ewwel\")]\r\n    [InlineData(2, \"it-tieni\")]\r\n    [InlineData(9, \"id-disa'\")]\r\n    [InlineData(10, \"l-għaxar\")]\r\n    [InlineData(11, \"il-ħdax\")]\r\n    [InlineData(15, \"il-ħmistax\")]\r\n    [InlineData(18, \"it-tmintax\")]\r\n    [InlineData(20, \"l-għoxrin\")]\r\n    [InlineData(21, \"il-wieħed u għoxrin\")]\r\n    [InlineData(22, \"it-tnejn u għoxrin\")]\r\n    [InlineData(28, \"it-tmienja u għoxrin\")]\r\n    [InlineData(44, \"l-erbgħa u erbgħin\")]\r\n    [InlineData(55, \"il-ħamsa u ħamsin\")]\r\n    [InlineData(60, \"is-sittin\")]\r\n    [InlineData(99, \"id-disgħa u disgħin\")]\r\n    [InlineData(100, \"il-mija\")]\r\n    [InlineData(101, \"il-mija u wieħed\")]\r\n    [InlineData(1000, \"l-elf\")]\r\n    [InlineData(1001, \"l-elf u wieħed\")]\r\n    [InlineData(2000, \"l-elfejn\")]\r\n    [InlineData(3000, \"it-tlett elef\")]\r\n    public void ToMasculineOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Masculine));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/mt/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace mt;\r\n\r\n[UseCulture(\"mt\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"sena\")]\r\n    [InlineData(731, \"sentejn\")]\r\n    [InlineData(1096, \"3 snin\")]\r\n    [InlineData(4018, \"11 snin\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"xahar\")]\r\n    [InlineData(61, \"xahrejn\")]\r\n    [InlineData(92, \"3 xhur\")]\r\n    [InlineData(335, \"11 xhur\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"ġimgħa\")]\r\n    [InlineData(14, \"ġimgħatejn\")]\r\n    [InlineData(21, \"3 ġimgħat\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ġurnata\")]\r\n    [InlineData(2, \"jumejn\")]\r\n    [InlineData(3, \"3 jiem\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"siegħa\")]\r\n    [InlineData(2, \"sagħtejn\")]\r\n    [InlineData(3, \"3 siegħat\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"minuta\")]\r\n    [InlineData(2, \"2 minuti\")]\r\n    [InlineData(3, \"3 minuti\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"sekonda\")]\r\n    [InlineData(2, \"2 sekondi\")]\r\n    [InlineData(3, \"3 sekondi\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"millisekonda\")]\r\n    [InlineData(2, \"2 millisekondi\")]\r\n    [InlineData(3, \"3 millisekondi\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 millisekondi\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"xejn\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/nb/DateHumanizeTests.cs",
    "content": "﻿namespace nb;\r\n\r\n[UseCulture(\"nb\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(-2, \"2 dager siden\")]\r\n    [InlineData(-1, \"i går\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"i morgen\")]\r\n    [InlineData(10, \"10 dager fra nå\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ett sekund fra nå\")]\r\n    [InlineData(10, \"10 sekunder fra nå\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 timer siden\")]\r\n    [InlineData(-1, \"en time siden\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en time fra nå\")]\r\n    [InlineData(10, \"10 timer fra nå\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 minutter siden\")]\r\n    [InlineData(-1, \"ett minutt siden\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ett minutt fra nå\")]\r\n    [InlineData(10, \"10 minutter fra nå\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 måneder siden\")]\r\n    [InlineData(-1, \"en måned siden\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en måned fra nå\")]\r\n    [InlineData(10, \"10 måneder fra nå\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 sekunder siden\")]\r\n    [InlineData(-1, \"ett sekund siden\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 år siden\")]\r\n    [InlineData(-1, \"ett år siden\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ett år fra nå\")]\r\n    [InlineData(2, \"2 år fra nå\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nå\")]\r\n    public void Now(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/nb/NumberToWordsTests.cs",
    "content": "﻿namespace nb;\r\n\r\n[UseCulture(\"nb-NO\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"null\")]\r\n    [InlineData(1, \"en\")]\r\n    [InlineData(2, \"to\")]\r\n    [InlineData(3, \"tre\")]\r\n    [InlineData(4, \"fire\")]\r\n    [InlineData(5, \"fem\")]\r\n    [InlineData(6, \"seks\")]\r\n    [InlineData(7, \"sju\")]\r\n    [InlineData(8, \"åtte\")]\r\n    [InlineData(9, \"ni\")]\r\n    [InlineData(10, \"ti\")]\r\n    [InlineData(20, \"tjue\")]\r\n    [InlineData(30, \"tretti\")]\r\n    [InlineData(40, \"førti\")]\r\n    [InlineData(50, \"femti\")]\r\n    [InlineData(60, \"seksti\")]\r\n    [InlineData(70, \"sytti\")]\r\n    [InlineData(80, \"åtti\")]\r\n    [InlineData(90, \"nitti\")]\r\n    [InlineData(98, \"nittiåtte\")]\r\n    [InlineData(99, \"nittini\")]\r\n    [InlineData(100, \"hundre\")]\r\n    [InlineData(200, \"tohundre\")]\r\n    [InlineData(1000, \"tusen\")]\r\n    [InlineData(100000, \"hundretusen\")]\r\n    [InlineData(1000000, \"en million\")]\r\n    [InlineData(10000000, \"ti millioner\")]\r\n    [InlineData(100000000, \"hundre millioner\")]\r\n    [InlineData(1000000000, \"en milliard\")]\r\n    [InlineData(2000000000, \"to milliarder\")]\r\n    [InlineData(122, \"hundreogtjueto\")]\r\n    [InlineData(3501, \"tretusenfemhundreogen\")]\r\n    [InlineData(111, \"hundreogelleve\")]\r\n    [InlineData(1001, \"tusenogen\")]\r\n    [InlineData(1099, \"tusenognittini\")]\r\n    [InlineData(1100, \"ettusenethundre\")]\r\n    [InlineData(1112, \"ettusenethundreogtolv\")]\r\n    [InlineData(11213, \"ellevetusentohundreogtretten\")]\r\n    [InlineData(121314, \"hundreogtjueentusentrehundreogfjorten\")]\r\n    [InlineData(2132415, \"to millioner hundreogtrettitotusenfirehundreogfemten\")]\r\n    [InlineData(12345516, \"tolv millioner trehundreogførtifemtusenfemhundreogseksten\")]\r\n    [InlineData(751633617, \"sjuhundreogfemtien millioner sekshundreogtrettitretusensekshundreogsytten\")]\r\n    [InlineData(1111111118, \"en milliard hundreogelleve millioner hundreogellevetusenethundreogatten\")]\r\n    [InlineData(-751633619, \"minus sjuhundreogfemtien millioner sekshundreogtrettitretusensekshundreognitten\")]\r\n    [InlineData(1000010, \"en million og ti\")]\r\n    [InlineData(1001009, \"en million tusenogni\")]\r\n    [InlineData(1000099, \"en million og nittini\")]\r\n    [InlineData(1000000010, \"en milliard og ti\")]\r\n    [InlineData(1000110, \"en million ethundreogti\")]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nullte\")]\r\n    [InlineData(1, \"første\")]\r\n    [InlineData(2, \"andre\")]\r\n    [InlineData(3, \"tredje\")]\r\n    [InlineData(4, \"fjerde\")]\r\n    [InlineData(5, \"femte\")]\r\n    [InlineData(6, \"sjette\")]\r\n    [InlineData(7, \"sjuende\")]\r\n    [InlineData(8, \"åttende\")]\r\n    [InlineData(9, \"niende\")]\r\n    [InlineData(10, \"tiende\")]\r\n    [InlineData(20, \"tjuende\")]\r\n    [InlineData(30, \"trettiende\")]\r\n    [InlineData(40, \"førtiende\")]\r\n    [InlineData(50, \"femtiende\")]\r\n    [InlineData(60, \"sekstiende\")]\r\n    [InlineData(70, \"syttiende\")]\r\n    [InlineData(80, \"åttiende\")]\r\n    [InlineData(90, \"nittiende\")]\r\n    [InlineData(98, \"nittiåttende\")]\r\n    [InlineData(99, \"nittiniende\")]\r\n    [InlineData(100, \"hundrede\")]\r\n    [InlineData(200, \"tohundrede\")]\r\n    [InlineData(1000, \"tusende\")]\r\n    [InlineData(10000, \"titusende\")]\r\n    [InlineData(100000, \"hundretusende\")]\r\n    [InlineData(1000000, \"millionte\")]\r\n    [InlineData(10000000, \"ti millionte\")]\r\n    [InlineData(100000000, \"hundre millionte\")]\r\n    [InlineData(1000000000, \"milliardte\")]\r\n    [InlineData(2000000000, \"to milliardte\")]\r\n    [InlineData(122, \"hundreogtjueandre\")]\r\n    [InlineData(3501, \"tretusenfemhundreogførste\")]\r\n    [InlineData(111, \"hundreogellevte\")]\r\n    [InlineData(1112, \"ettusenethundreogtolvte\")]\r\n    [InlineData(11213, \"ellevetusentohundreogtrettende\")]\r\n    [InlineData(121314, \"hundreogtjueentusentrehundreogfjortende\")]\r\n    [InlineData(2132415, \"to millioner hundreogtrettitotusenfirehundreogfemtende\")]\r\n    [InlineData(12345516, \"tolv millioner trehundreogførtifemtusenfemhundreogsekstende\")]\r\n    [InlineData(751633617, \"sjuhundreogfemtien millioner sekshundreogtrettitretusensekshundreogsyttende\")]\r\n    [InlineData(1111111118, \"en milliard hundreogelleve millioner hundreogellevetusenethundreogattende\")]\r\n    [InlineData(-751633619, \"minus sjuhundreogfemtien millioner sekshundreogtrettitretusensekshundreognittende\")]\r\n    [InlineData(1000010, \"en million og tiende\")]\r\n    [InlineData(1001009, \"en million tusenogniende\")]\r\n    [InlineData(1000099, \"en million og nittiniende\")]\r\n    [InlineData(1000000010, \"en milliard og tiende\")]\r\n    [InlineData(1000110, \"en million ethundreogtiende\")]\r\n    public void ToOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(2, \"to\")]\r\n    [InlineData(1, \"ei\")]\r\n    [InlineData(0, \"null\")]\r\n    [InlineData(-1, \"minus ei\")]\r\n    [InlineData(-2, \"minus to\")]\r\n    public void ToWordsFeminine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(2, \"to\")]\r\n    [InlineData(1, \"et\")]\r\n    [InlineData(0, \"null\")]\r\n    [InlineData(-1, \"minus et\")]\r\n    [InlineData(-2, \"minus to\")]\r\n    public void ToWordsNeuter(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Neuter));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/nb/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace nb;\r\n\r\n[UseCulture(\"nb\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"1 år\")]\r\n    [InlineData(731, \"2 år\")]\r\n    [InlineData(1096, \"3 år\")]\r\n    [InlineData(4018, \"11 år\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"1 måned\")]\r\n    [InlineData(61, \"2 måneder\")]\r\n    [InlineData(92, \"3 måneder\")]\r\n    [InlineData(335, \"11 måneder\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 uke\")]\r\n    [InlineData(14, \"2 uker\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 dag\")]\r\n    [InlineData(2, \"2 dager\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 time\")]\r\n    [InlineData(2, \"2 timer\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 minutt\")]\r\n    [InlineData(2, \"2 minutter\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 sekund\")]\r\n    [InlineData(2, \"2 sekunder\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 millisekund\")]\r\n    [InlineData(2, \"2 millisekunder\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 millisekunder\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"ingen tid\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/nb-NO/DateHumanizeTests.cs",
    "content": "﻿namespace nbNO;\r\n\r\n[UseCulture(\"nb-NO\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(-2, \"2 dager siden\")]\r\n    [InlineData(-1, \"i går\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"i morgen\")]\r\n    [InlineData(10, \"10 dager fra nå\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ett sekund fra nå\")]\r\n    [InlineData(10, \"10 sekunder fra nå\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 timer siden\")]\r\n    [InlineData(-1, \"en time siden\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en time fra nå\")]\r\n    [InlineData(10, \"10 timer fra nå\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 minutter siden\")]\r\n    [InlineData(-1, \"ett minutt siden\")]\r\n    [InlineData(60, \"en time siden\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ett minutt fra nå\")]\r\n    [InlineData(59, \"59 minutter fra nå\")]\r\n    [InlineData(60, \"en time fra nå\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 måneder siden\")]\r\n    [InlineData(-1, \"en måned siden\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en måned fra nå\")]\r\n    [InlineData(10, \"10 måneder fra nå\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 sekunder siden\")]\r\n    [InlineData(-1, \"ett sekund siden\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 år siden\")]\r\n    [InlineData(-1, \"ett år siden\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ett år fra nå\")]\r\n    [InlineData(2, \"2 år fra nå\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nå\")]\r\n    public void Now(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/nb-NO/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace nbNO;\r\n\r\n[UseCulture(\"nb-NO\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"1 år\")]\r\n    [InlineData(731, \"2 år\")]\r\n    [InlineData(1096, \"3 år\")]\r\n    [InlineData(4018, \"11 år\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"1 måned\")]\r\n    [InlineData(61, \"2 måneder\")]\r\n    [InlineData(92, \"3 måneder\")]\r\n    [InlineData(335, \"11 måneder\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 uke\")]\r\n    [InlineData(14, \"2 uker\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 dag\")]\r\n    [InlineData(2, \"2 dager\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 time\")]\r\n    [InlineData(2, \"2 timer\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 minutt\")]\r\n    [InlineData(2, \"2 minutter\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 sekund\")]\r\n    [InlineData(2, \"2 sekunder\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 millisekund\")]\r\n    [InlineData(2, \"2 millisekunder\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 millisekunder\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"ingen tid\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/nl/DateHumanizeTests.cs",
    "content": "﻿namespace nl;\r\n\r\n[UseCulture(\"nl-NL\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, \"2 dagen geleden\")]\r\n    [InlineData(1, \"gisteren\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 uur geleden\")]\r\n    [InlineData(1, \"1 uur geleden\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 minuten geleden\")]\r\n    [InlineData(1, \"1 minuut geleden\")]\r\n    [InlineData(60, \"1 uur geleden\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 maanden geleden\")]\r\n    [InlineData(1, \"1 maand geleden\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 seconden geleden\")]\r\n    [InlineData(1, \"1 seconde geleden\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 jaar geleden\")]\r\n    [InlineData(1, \"1 jaar geleden\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"over 2 dagen\")]\r\n    [InlineData(1, \"morgen\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"over 2 uur\")]\r\n    [InlineData(1, \"over 1 uur\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"over 2 minuten\")]\r\n    [InlineData(1, \"over 1 minuut\")]\r\n    [InlineData(60, \"over 1 uur\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"over 2 maanden\")]\r\n    [InlineData(1, \"over 1 maand\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"over 2 seconden\")]\r\n    [InlineData(1, \"over 1 seconde\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"over 2 jaar\")]\r\n    [InlineData(1, \"over 1 jaar\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nu\")]\r\n    public void RightNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/nl/NumberToWordsTests.cs",
    "content": "﻿namespace nl;\r\n\r\n[UseCulture(\"nl-NL\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"nul\")]\r\n    [InlineData(1, \"een\")]\r\n    [InlineData(-10, \"min tien\")]\r\n    [InlineData(10, \"tien\")]\r\n    [InlineData(11, \"elf\")]\r\n    [InlineData(122, \"honderdtweeëntwintig\")]\r\n    [InlineData(3501, \"drieduizend vijfhonderdeen\")]\r\n    [InlineData(100, \"honderd\")]\r\n    [InlineData(1000, \"duizend\")]\r\n    [InlineData(100000, \"honderdduizend\")]\r\n    [InlineData(1000000, \"een miljoen\")]\r\n    [InlineData(10000000, \"tien miljoen\")]\r\n    [InlineData(100000000, \"honderd miljoen\")]\r\n    [InlineData(1000000000, \"een miljard\")]\r\n    [InlineData(111, \"honderdelf\")]\r\n    [InlineData(1111, \"duizend honderdelf\")]\r\n    [InlineData(111111, \"honderdelfduizend honderdelf\")]\r\n    [InlineData(1111111, \"een miljoen honderdelfduizend honderdelf\")]\r\n    [InlineData(11111111, \"elf miljoen honderdelfduizend honderdelf\")]\r\n    [InlineData(111111111, \"honderdelf miljoen honderdelfduizend honderdelf\")]\r\n    [InlineData(1111111111, \"een miljard honderdelf miljoen honderdelfduizend honderdelf\")]\r\n    [InlineData(123, \"honderddrieëntwintig\")]\r\n    [InlineData(124, \"honderdvierentwintig\")]\r\n    [InlineData(1234, \"duizend tweehonderdvierendertig\")]\r\n    [InlineData(12345, \"twaalfduizend driehonderdvijfenveertig\")]\r\n    [InlineData(123456, \"honderddrieëntwintigduizend vierhonderdzesenvijftig\")]\r\n    [InlineData(1234567, \"een miljoen tweehonderdvierendertigduizend vijfhonderdzevenenzestig\")]\r\n    [InlineData(12345678, \"twaalf miljoen driehonderdvijfenveertigduizend zeshonderdachtenzeventig\")]\r\n    [InlineData(123456789, \"honderddrieëntwintig miljoen vierhonderdzesenvijftigduizend zevenhonderdnegenentachtig\")]\r\n    [InlineData(1234567890, \"een miljard tweehonderdvierendertig miljoen vijfhonderdzevenenzestigduizend achthonderdnegentig\")]\r\n    [InlineData(1234567899, \"een miljard tweehonderdvierendertig miljoen vijfhonderdzevenenzestigduizend achthonderdnegenennegentig\")]\r\n    [InlineData(108, \"honderdacht\")]\r\n    [InlineData(678, \"zeshonderdachtenzeventig\")]\r\n    [InlineData(2013, \"tweeduizend dertien\")]\r\n    [InlineData(2577, \"tweeduizend vijfhonderdzevenenzeventig\")]\r\n    [InlineData(17053980, \"zeventien miljoen drieënvijftigduizend negenhonderdtachtig\")]\r\n    [InlineData(415618, \"vierhonderdvijftienduizend zeshonderdachttien\")]\r\n    [InlineData(16415618, \"zestien miljoen vierhonderdvijftienduizend zeshonderdachttien\")]\r\n    [InlineData(322, \"driehonderdtweeëntwintig\")]\r\n    public void IntToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(100_000_000_000L, \"honderd miljard\")]\r\n    [InlineData(1_000_000_000_000L, \"een biljoen\")]\r\n    [InlineData(100_000_000_000_000L, \"honderd biljoen\")]\r\n    [InlineData(1_000_000_000_000_000L, \"een biljard\")]\r\n    [InlineData(100_000_000_000_000_000L, \"honderd biljard\")]\r\n    [InlineData(1_000_000_000_000_000_000L, \"een triljoen\")]\r\n    [InlineData(9_223_372_036_854_775_807L, \"negen triljoen tweehonderddrieëntwintig biljard driehonderdtweeënzeventig biljoen zesendertig miljard achthonderdvierenvijftig miljoen zevenhonderdvijfenzeventigduizend achthonderdzeven\")]\r\n    public void LongToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nulde\")]\r\n    [InlineData(1, \"eerste\")]\r\n    [InlineData(2, \"tweede\")]\r\n    [InlineData(3, \"derde\")]\r\n    [InlineData(4, \"vierde\")]\r\n    [InlineData(5, \"vijfde\")]\r\n    [InlineData(6, \"zesde\")]\r\n    [InlineData(7, \"zevende\")]\r\n    [InlineData(8, \"achtste\")]\r\n    [InlineData(9, \"negende\")]\r\n    [InlineData(10, \"tiende\")]\r\n    [InlineData(11, \"elfde\")]\r\n    [InlineData(12, \"twaalfde\")]\r\n    [InlineData(13, \"dertiende\")]\r\n    [InlineData(14, \"veertiende\")]\r\n    [InlineData(15, \"vijftiende\")]\r\n    [InlineData(16, \"zestiende\")]\r\n    [InlineData(17, \"zeventiende\")]\r\n    [InlineData(18, \"achttiende\")]\r\n    [InlineData(19, \"negentiende\")]\r\n    [InlineData(20, \"twintigste\")]\r\n    [InlineData(21, \"eenentwintigste\")]\r\n    [InlineData(22, \"tweeëntwintigste\")]\r\n    [InlineData(30, \"dertigste\")]\r\n    [InlineData(40, \"veertigste\")]\r\n    [InlineData(50, \"vijftigste\")]\r\n    [InlineData(60, \"zestigste\")]\r\n    [InlineData(70, \"zeventigste\")]\r\n    [InlineData(80, \"tachtigste\")]\r\n    [InlineData(90, \"negentigste\")]\r\n    [InlineData(95, \"vijfennegentigste\")]\r\n    [InlineData(96, \"zesennegentigste\")]\r\n    [InlineData(100, \"honderdste\")]\r\n    [InlineData(101, \"honderdeerste\")]\r\n    [InlineData(106, \"honderdzesde\")]\r\n    [InlineData(108, \"honderdachtste\")]\r\n    [InlineData(112, \"honderdtwaalfde\")]\r\n    [InlineData(120, \"honderdtwintigste\")]\r\n    [InlineData(121, \"honderdeenentwintigste\")]\r\n    [InlineData(1000, \"duizendste\")]\r\n    [InlineData(1001, \"duizend eerste\")]\r\n    [InlineData(1005, \"duizend vijfde\")]\r\n    [InlineData(1008, \"duizend achtste\")]\r\n    [InlineData(1012, \"duizend twaalfde\")]\r\n    [InlineData(1021, \"duizend eenentwintigste\")]\r\n    [InlineData(10000, \"tienduizendste\")]\r\n    [InlineData(10121, \"tienduizend honderdeenentwintigste\")]\r\n    [InlineData(100000, \"honderdduizendste\")]\r\n    [InlineData(100001, \"honderdduizend eerste\")]\r\n    [InlineData(1000000, \"een miljoenste\")]\r\n    [InlineData(1000001, \"een miljoen eerste\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/nl/OrdinalizeTests.cs",
    "content": "﻿namespace nl;\r\n\r\n[UseCulture(\"nl\")]\r\npublic class OrdinalizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"0\", \"0\")]\r\n    [InlineData(\"1\", \"1e\")]\r\n    [InlineData(\"2\", \"2e\")]\r\n    [InlineData(\"3\", \"3e\")]\r\n    [InlineData(\"4\", \"4e\")]\r\n    [InlineData(\"5\", \"5e\")]\r\n    [InlineData(\"6\", \"6e\")]\r\n    [InlineData(\"23\", \"23e\")]\r\n    [InlineData(\"100\", \"100e\")]\r\n    [InlineData(\"101\", \"101e\")]\r\n    [InlineData(\"102\", \"102e\")]\r\n    [InlineData(\"103\", \"103e\")]\r\n    [InlineData(\"1001\", \"1001e\")]\r\n    public void OrdinalizeString(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(), ordinalized);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/nl/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace nl;\r\n\r\n[UseCulture(\"nl-NL\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"1 jaar\")]\r\n    [InlineData(731, \"2 jaar\")]\r\n    [InlineData(1096, \"3 jaar\")]\r\n    [InlineData(4018, \"11 jaar\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"1 maand\")]\r\n    [InlineData(61, \"2 maanden\")]\r\n    [InlineData(92, \"3 maanden\")]\r\n    [InlineData(335, \"11 maanden\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Fact]\r\n    public void TwoWeeks() =>\r\n        Assert.Equal(\"2 weken\", TimeSpan.FromDays(14).Humanize());\r\n\r\n    [Fact]\r\n    public void OneWeek() =>\r\n        Assert.Equal(\"1 week\", TimeSpan.FromDays(7).Humanize());\r\n\r\n    [Fact]\r\n    public void SixDays() =>\r\n        Assert.Equal(\"6 dagen\", TimeSpan.FromDays(6).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoDays() =>\r\n        Assert.Equal(\"2 dagen\", TimeSpan.FromDays(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneDay() =>\r\n        Assert.Equal(\"1 dag\", TimeSpan.FromDays(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoHours() =>\r\n        Assert.Equal(\"2 uur\", TimeSpan.FromHours(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneHour() =>\r\n        Assert.Equal(\"1 uur\", TimeSpan.FromHours(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoMinutes() =>\r\n        Assert.Equal(\"2 minuten\", TimeSpan.FromMinutes(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneMinute() =>\r\n        Assert.Equal(\"1 minuut\", TimeSpan.FromMinutes(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoSeconds() =>\r\n        Assert.Equal(\"2 seconden\", TimeSpan.FromSeconds(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneSecond() =>\r\n        Assert.Equal(\"1 seconde\", TimeSpan.FromSeconds(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoMilliseconds() =>\r\n        Assert.Equal(\"2 milliseconden\", TimeSpan.FromMilliseconds(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneMillisecond() =>\r\n        Assert.Equal(\"1 milliseconde\", TimeSpan.FromMilliseconds(1).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 milliseconden\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"geen tijd\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pl/DateHumanizeTests.cs",
    "content": "﻿namespace pl;\r\n\r\n[UseCulture(\"pl\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"za sekundę\")]\r\n    [InlineData(2, \"za 2 sekundy\")]\r\n    [InlineData(3, \"za 3 sekundy\")]\r\n    [InlineData(4, \"za 4 sekundy\")]\r\n    [InlineData(5, \"za 5 sekund\")]\r\n    [InlineData(6, \"za 6 sekund\")]\r\n    [InlineData(10, \"za 10 sekund\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"za minutę\")]\r\n    [InlineData(2, \"za 2 minuty\")]\r\n    [InlineData(3, \"za 3 minuty\")]\r\n    [InlineData(4, \"za 4 minuty\")]\r\n    [InlineData(5, \"za 5 minut\")]\r\n    [InlineData(6, \"za 6 minut\")]\r\n    [InlineData(10, \"za 10 minut\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"za godzinę\")]\r\n    [InlineData(2, \"za 2 godziny\")]\r\n    [InlineData(3, \"za 3 godziny\")]\r\n    [InlineData(4, \"za 4 godziny\")]\r\n    [InlineData(5, \"za 5 godzin\")]\r\n    [InlineData(6, \"za 6 godzin\")]\r\n    [InlineData(10, \"za 10 godzin\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"jutro\")]\r\n    [InlineData(2, \"za 2 dni\")]\r\n    [InlineData(3, \"za 3 dni\")]\r\n    [InlineData(4, \"za 4 dni\")]\r\n    [InlineData(5, \"za 5 dni\")]\r\n    [InlineData(6, \"za 6 dni\")]\r\n    [InlineData(10, \"za 10 dni\")]\r\n    public void DayFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"za miesiąc\")]\r\n    [InlineData(2, \"za 2 miesiące\")]\r\n    [InlineData(3, \"za 3 miesiące\")]\r\n    [InlineData(4, \"za 4 miesiące\")]\r\n    [InlineData(5, \"za 5 miesięcy\")]\r\n    [InlineData(6, \"za 6 miesięcy\")]\r\n    [InlineData(10, \"za 10 miesięcy\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"za rok\")]\r\n    [InlineData(2, \"za 2 lata\")]\r\n    [InlineData(3, \"za 3 lata\")]\r\n    [InlineData(4, \"za 4 lata\")]\r\n    [InlineData(5, \"za 5 lat\")]\r\n    [InlineData(6, \"za 6 lat\")]\r\n    [InlineData(10, \"za 10 lat\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"przed sekundą\")]\r\n    [InlineData(2, \"przed 2 sekundami\")]\r\n    [InlineData(3, \"przed 3 sekundami\")]\r\n    [InlineData(4, \"przed 4 sekundami\")]\r\n    [InlineData(5, \"przed 5 sekundami\")]\r\n    [InlineData(6, \"przed 6 sekundami\")]\r\n    [InlineData(10, \"przed 10 sekundami\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"przed minutą\")]\r\n    [InlineData(2, \"przed 2 minutami\")]\r\n    [InlineData(3, \"przed 3 minutami\")]\r\n    [InlineData(4, \"przed 4 minutami\")]\r\n    [InlineData(5, \"przed 5 minutami\")]\r\n    [InlineData(6, \"przed 6 minutami\")]\r\n    [InlineData(10, \"przed 10 minutami\")]\r\n    [InlineData(60, \"przed godziną\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"przed godziną\")]\r\n    [InlineData(2, \"przed 2 godzinami\")]\r\n    [InlineData(3, \"przed 3 godzinami\")]\r\n    [InlineData(4, \"przed 4 godzinami\")]\r\n    [InlineData(5, \"przed 5 godzinami\")]\r\n    [InlineData(6, \"przed 6 godzinami\")]\r\n    [InlineData(10, \"przed 10 godzinami\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"wczoraj\")]\r\n    [InlineData(2, \"przed 2 dniami\")]\r\n    [InlineData(3, \"przed 3 dniami\")]\r\n    [InlineData(4, \"przed 4 dniami\")]\r\n    [InlineData(9, \"przed 9 dniami\")]\r\n    [InlineData(10, \"przed 10 dniami\")]\r\n    public void DayAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"przed miesiącem\")]\r\n    [InlineData(2, \"przed 2 miesiącami\")]\r\n    [InlineData(3, \"przed 3 miesiącami\")]\r\n    [InlineData(4, \"przed 4 miesiącami\")]\r\n    [InlineData(5, \"przed 5 miesiącami\")]\r\n    [InlineData(6, \"przed 6 miesiącami\")]\r\n    [InlineData(10, \"przed 10 miesiącami\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"przed rokiem\")]\r\n    [InlineData(2, \"przed 2 laty\")]\r\n    [InlineData(3, \"przed 3 laty\")]\r\n    [InlineData(4, \"przed 4 laty\")]\r\n    [InlineData(5, \"przed 5 laty\")]\r\n    [InlineData(6, \"przed 6 laty\")]\r\n    [InlineData(10, \"przed 10 laty\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"teraz\", 0, TimeUnit.Day, Tense.Past);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pl/NumberToWordsTests.cs",
    "content": "﻿namespace pl;\r\n\r\n[UseCulture(\"pl\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"jeden\")]\r\n    [InlineData(2, \"dwa\")]\r\n    [InlineData(3, \"trzy\")]\r\n    [InlineData(4, \"cztery\")]\r\n    [InlineData(5, \"pięć\")]\r\n    [InlineData(6, \"sześć\")]\r\n    [InlineData(7, \"siedem\")]\r\n    [InlineData(8, \"osiem\")]\r\n    [InlineData(9, \"dziewięć\")]\r\n    [InlineData(10, \"dziesięć\")]\r\n    [InlineData(11, \"jedenaście\")]\r\n    [InlineData(12, \"dwanaście\")]\r\n    [InlineData(13, \"trzynaście\")]\r\n    [InlineData(14, \"czternaście\")]\r\n    [InlineData(15, \"piętnaście\")]\r\n    [InlineData(16, \"szesnaście\")]\r\n    [InlineData(17, \"siedemnaście\")]\r\n    [InlineData(18, \"osiemnaście\")]\r\n    [InlineData(19, \"dziewiętnaście\")]\r\n    [InlineData(20, \"dwadzieścia\")]\r\n    [InlineData(30, \"trzydzieści\")]\r\n    [InlineData(40, \"czterdzieści\")]\r\n    [InlineData(50, \"pięćdziesiąt\")]\r\n    [InlineData(60, \"sześćdziesiąt\")]\r\n    [InlineData(70, \"siedemdziesiąt\")]\r\n    [InlineData(80, \"osiemdziesiąt\")]\r\n    [InlineData(90, \"dziewięćdziesiąt\")]\r\n    [InlineData(100, \"sto\")]\r\n    [InlineData(112, \"sto dwanaście\")]\r\n    [InlineData(128, \"sto dwadzieścia osiem\")]\r\n    [InlineData(1000, \"tysiąc\")]\r\n    [InlineData(2000, \"dwa tysiące\")]\r\n    [InlineData(5000, \"pięć tysięcy\")]\r\n    [InlineData(10000, \"dziesięć tysięcy\")]\r\n    [InlineData(12000, \"dwanaście tysięcy\")]\r\n    [InlineData(20000, \"dwadzieścia tysięcy\")]\r\n    [InlineData(22000, \"dwadzieścia dwa tysiące\")]\r\n    [InlineData(25000, \"dwadzieścia pięć tysięcy\")]\r\n    [InlineData(31000, \"trzydzieści jeden tysięcy\")]\r\n    [InlineData(34000, \"trzydzieści cztery tysiące\")]\r\n    [InlineData(100000, \"sto tysięcy\")]\r\n    [InlineData(500000, \"pięćset tysięcy\")]\r\n    [InlineData(1000000, \"milion\")]\r\n    [InlineData(2000000, \"dwa miliony\")]\r\n    [InlineData(5000000, \"pięć milionów\")]\r\n    [InlineData(1000000000, \"miliard\")]\r\n    [InlineData(2000000000, \"dwa miliardy\")]\r\n    [InlineData(1501001892, \"miliard pięćset jeden milionów tysiąc osiemset dziewięćdziesiąt dwa\")]\r\n    [InlineData(2147483647, \"dwa miliardy sto czterdzieści siedem milionów czterysta osiemdziesiąt trzy tysiące sześćset czterdzieści siedem\")]\r\n    [InlineData(-1501001892, \"minus miliard pięćset jeden milionów tysiąc osiemset dziewięćdziesiąt dwa\")]\r\n    [InlineData(long.MaxValue,\r\n        \"dziewięć trylionów \" +\r\n        \"dwieście dwadzieścia trzy biliardy \" +\r\n        \"trzysta siedemdziesiąt dwa biliony \" +\r\n        \"trzydzieści sześć miliardów \" +\r\n        \"osiemset pięćdziesiąt cztery miliony \" +\r\n        \"siedemset siedemdziesiąt pięć tysięcy \" +\r\n        \"osiemset siedem\")]\r\n    [InlineData(long.MinValue,\r\n        \"minus dziewięć trylionów \" +\r\n        \"dwieście dwadzieścia trzy biliardy \" +\r\n        \"trzysta siedemdziesiąt dwa biliony \" +\r\n        \"trzydzieści sześć miliardów \" +\r\n        \"osiemset pięćdziesiąt cztery miliony \" +\r\n        \"siedemset siedemdziesiąt pięć tysięcy \" +\r\n        \"osiemset osiem\")]\r\n    public void ToWordsPolish(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"minus jeden\", GrammaticalGender.Masculine)]\r\n    [InlineData(-1, \"minus jedna\", GrammaticalGender.Feminine)]\r\n    [InlineData(-1, \"minus jedno\", GrammaticalGender.Neuter)]\r\n    [InlineData(-2, \"minus dwa\", GrammaticalGender.Masculine)]\r\n    [InlineData(-2, \"minus dwie\", GrammaticalGender.Feminine)]\r\n    [InlineData(-2, \"minus dwa\", GrammaticalGender.Neuter)]\r\n    [InlineData(1, \"jeden\", GrammaticalGender.Masculine)]\r\n    [InlineData(1, \"jedna\", GrammaticalGender.Feminine)]\r\n    [InlineData(1, \"jedno\", GrammaticalGender.Neuter)]\r\n    [InlineData(2, \"dwa\", GrammaticalGender.Masculine)]\r\n    [InlineData(2, \"dwie\", GrammaticalGender.Feminine)]\r\n    [InlineData(2, \"dwa\", GrammaticalGender.Neuter)]\r\n    [InlineData(121, \"sto dwadzieścia jeden\", GrammaticalGender.Masculine)]\r\n    [InlineData(121, \"sto dwadzieścia jeden\", GrammaticalGender.Feminine)]\r\n    [InlineData(121, \"sto dwadzieścia jeden\", GrammaticalGender.Neuter)]\r\n    [InlineData(122, \"sto dwadzieścia dwa\", GrammaticalGender.Masculine)]\r\n    [InlineData(122, \"sto dwadzieścia dwie\", GrammaticalGender.Feminine)]\r\n    [InlineData(122, \"sto dwadzieścia dwa\", GrammaticalGender.Neuter)]\r\n    [InlineData(-2542, \"minus dwa tysiące pięćset czterdzieści dwa\", GrammaticalGender.Masculine)]\r\n    [InlineData(-2542, \"minus dwa tysiące pięćset czterdzieści dwie\", GrammaticalGender.Feminine)]\r\n    [InlineData(-2542, \"minus dwa tysiące pięćset czterdzieści dwa\", GrammaticalGender.Neuter)]\r\n    [InlineData(1000001, \"milion jeden\", GrammaticalGender.Feminine)]\r\n    [InlineData(-1000001, \"minus milion jeden\", GrammaticalGender.Feminine)]\r\n    [InlineData(1000002, \"milion dwa\", GrammaticalGender.Masculine)]\r\n    [InlineData(1000002, \"milion dwie\", GrammaticalGender.Feminine)]\r\n    [InlineData(1000002, \"milion dwa\", GrammaticalGender.Neuter)]\r\n    public void ToWordsPolishWithGender(int number, string expected, GrammaticalGender gender) =>\r\n        Assert.Equal(expected, number.ToWords(gender));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pl/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace pl;\r\n\r\n[UseCulture(\"pl\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"1 milisekunda\")]\r\n    [InlineData(2, \"2 milisekundy\")]\r\n    [InlineData(3, \"3 milisekundy\")]\r\n    [InlineData(4, \"4 milisekundy\")]\r\n    [InlineData(5, \"5 milisekund\")]\r\n    [InlineData(6, \"6 milisekund\")]\r\n    [InlineData(10, \"10 milisekund\")]\r\n    public void Milliseconds(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 sekunda\")]\r\n    [InlineData(2, \"2 sekundy\")]\r\n    [InlineData(3, \"3 sekundy\")]\r\n    [InlineData(4, \"4 sekundy\")]\r\n    [InlineData(5, \"5 sekund\")]\r\n    [InlineData(6, \"6 sekund\")]\r\n    [InlineData(10, \"10 sekund\")]\r\n    public void Seconds(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 minuta\")]\r\n    [InlineData(2, \"2 minuty\")]\r\n    [InlineData(3, \"3 minuty\")]\r\n    [InlineData(4, \"4 minuty\")]\r\n    [InlineData(5, \"5 minut\")]\r\n    [InlineData(6, \"6 minut\")]\r\n    [InlineData(10, \"10 minut\")]\r\n    public void Minutes(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 godzina\")]\r\n    [InlineData(2, \"2 godziny\")]\r\n    [InlineData(3, \"3 godziny\")]\r\n    [InlineData(4, \"4 godziny\")]\r\n    [InlineData(5, \"5 godzin\")]\r\n    [InlineData(6, \"6 godzin\")]\r\n    [InlineData(10, \"10 godzin\")]\r\n    public void Hours(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 dzień\")]\r\n    [InlineData(2, \"2 dni\")]\r\n    [InlineData(3, \"3 dni\")]\r\n    [InlineData(4, \"4 dni\")]\r\n    [InlineData(5, \"5 dni\")]\r\n    [InlineData(6, \"6 dni\")]\r\n    public void Days(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 tydzień\")]\r\n    [InlineData(2, \"2 tygodnie\")]\r\n    [InlineData(3, \"3 tygodnie\")]\r\n    [InlineData(4, \"4 tygodnie\")]\r\n    [InlineData(5, \"5 tygodni\")]\r\n    [InlineData(6, \"6 tygodni\")]\r\n    public void Weeks(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(number * 7).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 miesiąc\")]\r\n    [InlineData(61, \"2 miesiące\")]\r\n    [InlineData(92, \"3 miesiące\")]\r\n    [InlineData(335, \"11 miesięcy\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 rok\")]\r\n    [InlineData(731, \"2 lata\")]\r\n    [InlineData(1096, \"3 lata\")]\r\n    [InlineData(4018, \"11 lat\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 milisekund\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"brak czasu\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pt/Bytes/ByteSizeExtensionsTests.cs",
    "content": "namespace pt.Bytes;\r\n\r\n[UseCulture(\"pt\")]\r\npublic class ByteSizeExtensionsTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, null, \"2 TB\")]\r\n    [InlineData(2, \"GB\", \"2048 GB\")]\r\n    [InlineData(2.123, \"#.#\", \"2,1 TB\")]\r\n    public void HumanizesTerabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Terabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"GB\", \"0 GB\")]\r\n    [InlineData(2, null, \"2 GB\")]\r\n    [InlineData(2, \"MB\", \"2048 MB\")]\r\n    [InlineData(2.123, \"#.##\", \"2,12 GB\")]\r\n    public void HumanizesGigabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Gigabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"MB\", \"0 MB\")]\r\n    [InlineData(2, null, \"2 MB\")]\r\n    [InlineData(2, \"KB\", \"2048 KB\")]\r\n    [InlineData(2.123, \"#\", \"2 MB\")]\r\n    public void HumanizesMegabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Megabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"KB\", \"0 KB\")]\r\n    [InlineData(2, null, \"2 KB\")]\r\n    [InlineData(2, \"B\", \"2048 B\")]\r\n    [InlineData(2.123, \"#.####\", \"2,123 KB\")]\r\n    public void HumanizesKilobytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Kilobytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"#.##\", \"0 bit\")]\r\n    [InlineData(0, \"#.## B\", \"0 B\")]\r\n    [InlineData(0, \"B\", \"0 B\")]\r\n    [InlineData(2, null, \"2 B\")]\r\n    [InlineData(2000, \"KB\", \"1,95 KB\")]\r\n    [InlineData(2123, \"#.##\", \"2,07 KB\")]\r\n    [InlineData(10000000, \"KB\", \"9765,63 KB\")]\r\n    [InlineData(10000000, \"#,##0 KB\", \"9.766 KB\")]\r\n    [InlineData(10000000, \"#,##0.# KB\", \"9.765,6 KB\")]\r\n    public void HumanizesBytes(double input, string? format, string expectedValue)\r\n    {\r\n        expectedValue = expectedValue.Replace(\".\", NumberFormatInfo.CurrentInfo.NumberGroupSeparator);\r\n        Assert.Equal(\r\n            expectedValue,\r\n            input\r\n                .Bytes()\r\n                .Humanize(format));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"b\", \"0 bit\")]\r\n    [InlineData(2, null, \"2 bit\")]\r\n    [InlineData(12, \"B\", \"1,5 B\")]\r\n    [InlineData(10000, \"#.# KB\", \"1,2 KB\")]\r\n    public void HumanizesBits(long input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Bits().Humanize(format));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pt/DateHumanizeTests.cs",
    "content": "﻿namespace pt;\r\n\r\n[UseCulture(\"pt\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(-2, \"há 2 segundos\")]\r\n    [InlineData(-1, \"há um segundo\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"daqui a um segundo\")]\r\n    [InlineData(2, \"daqui a 2 segundos\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"há 2 minutos\")]\r\n    [InlineData(-1, \"há um minuto\")]\r\n    [InlineData(60, \"há uma hora\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"daqui a um minuto\")]\r\n    [InlineData(2, \"daqui a 2 minutos\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"há 2 horas\")]\r\n    [InlineData(-1, \"há uma hora\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"daqui a uma hora\")]\r\n    [InlineData(2, \"daqui a 2 horas\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"há 2 dias\")]\r\n    [InlineData(-1, \"ontem\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"amanhã\")]\r\n    [InlineData(2, \"daqui a 2 dias\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"há 2 meses\")]\r\n    [InlineData(-1, \"há um mês\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"daqui a um mês\")]\r\n    [InlineData(2, \"daqui a 2 meses\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"há 2 anos\")]\r\n    [InlineData(-1, \"há um ano\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"daqui a um ano\")]\r\n    [InlineData(2, \"daqui a 2 anos\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"agora\", 0, TimeUnit.Day, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pt/NumberToWordsTests.cs",
    "content": "namespace pt;\r\n\r\n[UseCulture(\"pt\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"um\")]\r\n    [InlineData(2, \"dois\")]\r\n    [InlineData(3, \"três\")]\r\n    [InlineData(4, \"quatro\")]\r\n    [InlineData(5, \"cinco\")]\r\n    [InlineData(6, \"seis\")]\r\n    [InlineData(7, \"sete\")]\r\n    [InlineData(8, \"oito\")]\r\n    [InlineData(9, \"nove\")]\r\n    [InlineData(10, \"dez\")]\r\n    [InlineData(11, \"onze\")]\r\n    [InlineData(12, \"doze\")]\r\n    [InlineData(13, \"treze\")]\r\n    [InlineData(14, \"quatorze\")]\r\n    [InlineData(15, \"quinze\")]\r\n    [InlineData(16, \"dezasseis\")]\r\n    [InlineData(17, \"dezassete\")]\r\n    [InlineData(18, \"dezoito\")]\r\n    [InlineData(19, \"dezanove\")]\r\n    [InlineData(20, \"vinte\")]\r\n    [InlineData(30, \"trinta\")]\r\n    [InlineData(40, \"quarenta\")]\r\n    [InlineData(50, \"cinquenta\")]\r\n    [InlineData(51, \"cinquenta e um\")]\r\n    [InlineData(60, \"sessenta\")]\r\n    [InlineData(66, \"sessenta e seis\")]\r\n    [InlineData(70, \"setenta\")]\r\n    [InlineData(80, \"oitenta\")]\r\n    [InlineData(90, \"noventa\")]\r\n    [InlineData(100, \"cem\")]\r\n    [InlineData(200, \"duzentos\")]\r\n    [InlineData(300, \"trezentos\")]\r\n    [InlineData(400, \"quatrocentos\")]\r\n    [InlineData(500, \"quinhentos\")]\r\n    [InlineData(600, \"seiscentos\")]\r\n    [InlineData(700, \"setecentos\")]\r\n    [InlineData(800, \"oitocentos\")]\r\n    [InlineData(900, \"novecentos\")]\r\n    [InlineData(1000, \"mil\")]\r\n    [InlineData(2000, \"dois mil\")]\r\n    [InlineData(3000, \"três mil\")]\r\n    [InlineData(4000, \"quatro mil\")]\r\n    [InlineData(5000, \"cinco mil\")]\r\n    [InlineData(6000, \"seis mil\")]\r\n    [InlineData(7000, \"sete mil\")]\r\n    [InlineData(8000, \"oito mil\")]\r\n    [InlineData(9000, \"nove mil\")]\r\n    [InlineData(10000, \"dez mil\")]\r\n    [InlineData(100000, \"cem mil\")]\r\n    [InlineData(1000000, \"um milhão\")]\r\n    [InlineData(1000000000, \"mil milhões\")]\r\n    [InlineData(37, \"trinta e sete\")]\r\n    [InlineData(637, \"seiscentos e trinta e sete\")]\r\n    [InlineData(1637, \"mil seiscentos e trinta e sete\")]\r\n    [InlineData(61637, \"sessenta e um mil seiscentos e trinta e sete\")]\r\n    [InlineData(961637, \"novecentos e sessenta e um mil seiscentos e trinta e sete\")]\r\n    [InlineData(5961637, \"cinco milhões novecentos e sessenta e um mil seiscentos e trinta e sete\")]\r\n    [InlineData(25961637, \"vinte e cinco milhões novecentos e sessenta e um mil seiscentos e trinta e sete\")]\r\n    [InlineData(425961637, \"quatrocentos e vinte e cinco milhões novecentos e sessenta e um mil seiscentos e trinta e sete\")]\r\n    [InlineData(10000000, \"dez milhões\")]\r\n    [InlineData(100000000, \"cem milhões\")]\r\n    [InlineData(1101111101, \"mil milhões cento e um milhões cento e onze mil cento e um\")]\r\n    [InlineData(111, \"cento e onze\")]\r\n    [InlineData(1111, \"mil cento e onze\")]\r\n    [InlineData(1111101, \"um milhão cento e onze mil cento e um\")]\r\n    [InlineData(111111, \"cento e onze mil cento e onze\")]\r\n    [InlineData(1111111, \"um milhão cento e onze mil cento e onze\")]\r\n    [InlineData(11111111, \"onze milhões cento e onze mil cento e onze\")]\r\n    [InlineData(111111111, \"cento e onze milhões cento e onze mil cento e onze\")]\r\n    [InlineData(1111111111, \"mil milhões cento e onze milhões cento e onze mil cento e onze\")]\r\n    [InlineData(122, \"cento e vinte e dois\")]\r\n    [InlineData(123, \"cento e vinte e três\")]\r\n    [InlineData(1234, \"mil duzentos e trinta e quatro\")]\r\n    [InlineData(12345, \"doze mil trezentos e quarenta e cinco\")]\r\n    [InlineData(123456, \"cento e vinte e três mil quatrocentos e cinquenta e seis\")]\r\n    [InlineData(1234567, \"um milhão duzentos e trinta e quatro mil quinhentos e sessenta e sete\")]\r\n    [InlineData(12345678, \"doze milhões trezentos e quarenta e cinco mil seiscentos e setenta e oito\")]\r\n    [InlineData(123456789, \"cento e vinte e três milhões quatrocentos e cinquenta e seis mil setecentos e oitenta e nove\")]\r\n    [InlineData(1234567890, \"mil milhões duzentos e trinta e quatro milhões quinhentos e sessenta e sete mil oitocentos e noventa\")]\r\n    [InlineData(1999, \"mil novecentos e noventa e nove\")]\r\n    [InlineData(2000000, \"dois milhões\")]\r\n    [InlineData(2000000000, \"dois mil milhões\")]\r\n    [InlineData(2001000000, \"dois mil milhões um milhão\")]\r\n    [InlineData(2014, \"dois mil e quatorze\")]\r\n    [InlineData(2048, \"dois mil e quarenta e oito\")]\r\n    [InlineData(21, \"vinte e um\")]\r\n    [InlineData(211, \"duzentos e onze\")]\r\n    [InlineData(2111101, \"dois milhões cento e onze mil cento e um\")]\r\n    [InlineData(221, \"duzentos e vinte e um\")]\r\n    [InlineData(3501, \"três mil quinhentos e um\")]\r\n    [InlineData(8100, \"oito mil e cem\")]\r\n    [InlineData(999999999999, \"novecentos e noventa e nove mil milhões novecentos e noventa e nove milhões novecentos e noventa e nove mil novecentos e noventa e nove\")]\r\n    [InlineData(-999999999999, \"menos novecentos e noventa e nove mil milhões novecentos e noventa e nove milhões novecentos e noventa e nove mil novecentos e noventa e nove\")]\r\n    public void ToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"uma\")]\r\n    [InlineData(2, \"duas\")]\r\n    [InlineData(3, \"três\")]\r\n    [InlineData(11, \"onze\")]\r\n    [InlineData(21, \"vinte e uma\")]\r\n    [InlineData(122, \"cento e vinte e duas\")]\r\n    [InlineData(232, \"duzentas e trinta e duas\")]\r\n    [InlineData(343, \"trezentas e quarenta e três\")]\r\n    [InlineData(3501, \"três mil quinhentas e uma\")]\r\n    [InlineData(100, \"cem\")]\r\n    [InlineData(1000, \"mil\")]\r\n    [InlineData(111, \"cento e onze\")]\r\n    [InlineData(1111, \"mil cento e onze\")]\r\n    [InlineData(111111, \"cento e onze mil cento e onze\")]\r\n    [InlineData(1111101, \"um milhão cento e onze mil cento e uma\")]\r\n    [InlineData(1111111, \"um milhão cento e onze mil cento e onze\")]\r\n    [InlineData(2111102, \"dois milhões cento e onze mil cento e duas\")]\r\n    [InlineData(3111101, \"três milhões cento e onze mil cento e uma\")]\r\n    [InlineData(1101111101, \"mil milhões cento e um milhões cento e onze mil cento e uma\")]\r\n    [InlineData(2101111101, \"dois mil milhões cento e um milhões cento e onze mil cento e uma\")]\r\n    [InlineData(1234, \"mil duzentas e trinta e quatro\")]\r\n    [InlineData(8100, \"oito mil e cem\")]\r\n    [InlineData(12345, \"doze mil trezentas e quarenta e cinco\")]\r\n    public void ToFeminineWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"primeiro\")]\r\n    [InlineData(2, \"segundo\")]\r\n    [InlineData(3, \"terceiro\")]\r\n    [InlineData(4, \"quarto\")]\r\n    [InlineData(5, \"quinto\")]\r\n    [InlineData(6, \"sexto\")]\r\n    [InlineData(7, \"sétimo\")]\r\n    [InlineData(8, \"oitavo\")]\r\n    [InlineData(9, \"nono\")]\r\n    [InlineData(10, \"décimo\")]\r\n    [InlineData(11, \"décimo primeiro\")]\r\n    [InlineData(12, \"décimo segundo\")]\r\n    [InlineData(13, \"décimo terceiro\")]\r\n    [InlineData(14, \"décimo quarto\")]\r\n    [InlineData(15, \"décimo quinto\")]\r\n    [InlineData(16, \"décimo sexto\")]\r\n    [InlineData(17, \"décimo sétimo\")]\r\n    [InlineData(18, \"décimo oitavo\")]\r\n    [InlineData(19, \"décimo nono\")]\r\n    [InlineData(20, \"vigésimo\")]\r\n    [InlineData(21, \"vigésimo primeiro\")]\r\n    [InlineData(22, \"vigésimo segundo\")]\r\n    [InlineData(30, \"trigésimo\")]\r\n    [InlineData(40, \"quadragésimo\")]\r\n    [InlineData(50, \"quinquagésimo\")]\r\n    [InlineData(60, \"sexagésimo\")]\r\n    [InlineData(70, \"septuagésimo\")]\r\n    [InlineData(80, \"octogésimo\")]\r\n    [InlineData(90, \"nonagésimo\")]\r\n    [InlineData(95, \"nonagésimo quinto\")]\r\n    [InlineData(96, \"nonagésimo sexto\")]\r\n    [InlineData(100, \"centésimo\")]\r\n    [InlineData(120, \"centésimo vigésimo\")]\r\n    [InlineData(121, \"centésimo vigésimo primeiro\")]\r\n    [InlineData(200, \"ducentésimo\")]\r\n    [InlineData(300, \"trecentésimo\")]\r\n    [InlineData(400, \"quadringentésimo\")]\r\n    [InlineData(500, \"quingentésimo\")]\r\n    [InlineData(600, \"sexcentésimo\")]\r\n    [InlineData(700, \"septingentésimo\")]\r\n    [InlineData(800, \"octingentésimo\")]\r\n    [InlineData(900, \"noningentésimo\")]\r\n    [InlineData(1000, \"milésimo\")]\r\n    [InlineData(1001, \"milésimo primeiro\")]\r\n    [InlineData(1021, \"milésimo vigésimo primeiro\")]\r\n    [InlineData(2021, \"segundo milésimo vigésimo primeiro\")]\r\n    [InlineData(10000, \"décimo milésimo\")]\r\n    [InlineData(10121, \"décimo milésimo centésimo vigésimo primeiro\")]\r\n    [InlineData(100000, \"centésimo milésimo\")]\r\n    [InlineData(1000000, \"milionésimo\")]\r\n    [InlineData(1000000000, \"milésimo milionésimo\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"primeira\")]\r\n    [InlineData(2, \"segunda\")]\r\n    [InlineData(3, \"terceira\")]\r\n    [InlineData(4, \"quarta\")]\r\n    [InlineData(5, \"quinta\")]\r\n    [InlineData(6, \"sexta\")]\r\n    [InlineData(7, \"sétima\")]\r\n    [InlineData(8, \"oitava\")]\r\n    [InlineData(9, \"nona\")]\r\n    [InlineData(10, \"décima\")]\r\n    [InlineData(11, \"décima primeira\")]\r\n    [InlineData(12, \"décima segunda\")]\r\n    [InlineData(13, \"décima terceira\")]\r\n    [InlineData(14, \"décima quarta\")]\r\n    [InlineData(15, \"décima quinta\")]\r\n    [InlineData(16, \"décima sexta\")]\r\n    [InlineData(17, \"décima sétima\")]\r\n    [InlineData(18, \"décima oitava\")]\r\n    [InlineData(19, \"décima nona\")]\r\n    [InlineData(20, \"vigésima\")]\r\n    [InlineData(21, \"vigésima primeira\")]\r\n    [InlineData(22, \"vigésima segunda\")]\r\n    [InlineData(30, \"trigésima\")]\r\n    [InlineData(40, \"quadragésima\")]\r\n    [InlineData(50, \"quinquagésima\")]\r\n    [InlineData(60, \"sexagésima\")]\r\n    [InlineData(70, \"septuagésima\")]\r\n    [InlineData(80, \"octogésima\")]\r\n    [InlineData(90, \"nonagésima\")]\r\n    [InlineData(95, \"nonagésima quinta\")]\r\n    [InlineData(96, \"nonagésima sexta\")]\r\n    [InlineData(100, \"centésima\")]\r\n    [InlineData(120, \"centésima vigésima\")]\r\n    [InlineData(121, \"centésima vigésima primeira\")]\r\n    [InlineData(200, \"ducentésima\")]\r\n    [InlineData(300, \"trecentésima\")]\r\n    [InlineData(400, \"quadringentésima\")]\r\n    [InlineData(500, \"quingentésima\")]\r\n    [InlineData(600, \"sexcentésima\")]\r\n    [InlineData(700, \"septingentésima\")]\r\n    [InlineData(800, \"octingentésima\")]\r\n    [InlineData(900, \"noningentésima\")]\r\n    [InlineData(1000, \"milésima\")]\r\n    [InlineData(1001, \"milésima primeira\")]\r\n    [InlineData(1021, \"milésima vigésima primeira\")]\r\n    [InlineData(2021, \"segunda milésima vigésima primeira\")]\r\n    [InlineData(10000, \"décima milésima\")]\r\n    [InlineData(10121, \"décima milésima centésima vigésima primeira\")]\r\n    [InlineData(100000, \"centésima milésima\")]\r\n    [InlineData(1000000, \"milionésima\")]\r\n    [InlineData(1000000000, \"milésima milionésima\")]\r\n    public void ToFeminineOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pt/OrdinalizeTests.cs",
    "content": "﻿namespace pt;\r\n\r\n[UseCulture(\"pt\")]\r\npublic class OrdinalizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"0\", \"0\")]\r\n    [InlineData(\"1\", \"1º\")]\r\n    [InlineData(\"2\", \"2º\")]\r\n    [InlineData(\"3\", \"3º\")]\r\n    [InlineData(\"4\", \"4º\")]\r\n    [InlineData(\"5\", \"5º\")]\r\n    [InlineData(\"6\", \"6º\")]\r\n    [InlineData(\"23\", \"23º\")]\r\n    [InlineData(\"100\", \"100º\")]\r\n    [InlineData(\"101\", \"101º\")]\r\n    [InlineData(\"102\", \"102º\")]\r\n    [InlineData(\"103\", \"103º\")]\r\n    [InlineData(\"1001\", \"1001º\")]\r\n    public void OrdinalizeString(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0\")]\r\n    [InlineData(\"1\", \"1ª\")]\r\n    [InlineData(\"2\", \"2ª\")]\r\n    [InlineData(\"3\", \"3ª\")]\r\n    [InlineData(\"4\", \"4ª\")]\r\n    [InlineData(\"5\", \"5ª\")]\r\n    [InlineData(\"6\", \"6ª\")]\r\n    [InlineData(\"23\", \"23ª\")]\r\n    [InlineData(\"100\", \"100ª\")]\r\n    [InlineData(\"101\", \"101ª\")]\r\n    [InlineData(\"102\", \"102ª\")]\r\n    [InlineData(\"103\", \"103ª\")]\r\n    [InlineData(\"1001\", \"1001ª\")]\r\n    public void OrdinalizeStringFeminine(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]\r\n    [InlineData(1, \"1º\")]\r\n    [InlineData(2, \"2º\")]\r\n    [InlineData(3, \"3º\")]\r\n    [InlineData(4, \"4º\")]\r\n    [InlineData(5, \"5º\")]\r\n    [InlineData(6, \"6º\")]\r\n    [InlineData(10, \"10º\")]\r\n    [InlineData(23, \"23º\")]\r\n    [InlineData(100, \"100º\")]\r\n    [InlineData(101, \"101º\")]\r\n    [InlineData(102, \"102º\")]\r\n    [InlineData(103, \"103º\")]\r\n    [InlineData(1001, \"1001º\")]\r\n    public void OrdinalizeNumber(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]\r\n    [InlineData(1, \"1ª\")]\r\n    [InlineData(2, \"2ª\")]\r\n    [InlineData(3, \"3ª\")]\r\n    [InlineData(4, \"4ª\")]\r\n    [InlineData(5, \"5ª\")]\r\n    [InlineData(6, \"6ª\")]\r\n    [InlineData(10, \"10ª\")]\r\n    [InlineData(23, \"23ª\")]\r\n    [InlineData(100, \"100ª\")]\r\n    [InlineData(101, \"101ª\")]\r\n    [InlineData(102, \"102ª\")]\r\n    [InlineData(103, \"103ª\")]\r\n    [InlineData(1001, \"1001ª\")]\r\n    public void OrdinalizeNumberFeminine(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pt/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace pt;\r\n\r\n[UseCulture(\"pt\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 ano\")]\r\n    [InlineData(731, \"2 anos\")]\r\n    [InlineData(1096, \"3 anos\")]\r\n    [InlineData(4018, \"11 anos\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 mês\")]\r\n    [InlineData(61, \"2 meses\")]\r\n    [InlineData(92, \"3 meses\")]\r\n    [InlineData(335, \"11 meses\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Fact]\r\n    public void TwoWeeks() =>\r\n        Assert.Equal(\"2 semanas\", TimeSpan.FromDays(14).Humanize());\r\n\r\n    [Fact]\r\n    public void OneWeek() =>\r\n        Assert.Equal(\"1 semana\", TimeSpan.FromDays(7).Humanize());\r\n\r\n    [Fact]\r\n    public void SixDays() =>\r\n        Assert.Equal(\"6 dias\", TimeSpan.FromDays(6).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoDays() =>\r\n        Assert.Equal(\"2 dias\", TimeSpan.FromDays(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneDay() =>\r\n        Assert.Equal(\"1 dia\", TimeSpan.FromDays(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoHours() =>\r\n        Assert.Equal(\"2 horas\", TimeSpan.FromHours(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneHour() =>\r\n        Assert.Equal(\"1 hora\", TimeSpan.FromHours(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoMinutes() =>\r\n        Assert.Equal(\"2 minutos\", TimeSpan.FromMinutes(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneMinute() =>\r\n        Assert.Equal(\"1 minuto\", TimeSpan.FromMinutes(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoSeconds() =>\r\n        Assert.Equal(\"2 segundos\", TimeSpan.FromSeconds(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneSecond() =>\r\n        Assert.Equal(\"1 segundo\", TimeSpan.FromSeconds(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoMilliseconds() =>\r\n        Assert.Equal(\"2 milisegundos\", TimeSpan.FromMilliseconds(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneMillisecond() =>\r\n        Assert.Equal(\"1 milisegundo\", TimeSpan.FromMilliseconds(1).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 milisegundos\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"sem horário\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pt/TimeToClockNotationTests.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace pt;\r\n\r\n[UseCulture(\"pt\")]\r\npublic class TimeToClockNotationTests\r\n{\r\n    [Theory]\r\n    [InlineData(00, 00, \"meia-noite\")]\r\n    [InlineData(04, 00, \"quatro horas\")]\r\n    [InlineData(05, 01, \"cinco e um\")]\r\n    [InlineData(06, 05, \"seis e cinco\")]\r\n    [InlineData(07, 10, \"sete e dez\")]\r\n    [InlineData(08, 15, \"oito e um quarto\")]\r\n    [InlineData(09, 20, \"nove e vinte\")]\r\n    [InlineData(10, 25, \"dez e vinte e cinco\")]\r\n    [InlineData(11, 30, \"onze e meia\")]\r\n    [InlineData(12, 00, \"meio-dia\")]\r\n    [InlineData(15, 35, \"três e trinta e cinco\")]\r\n    [InlineData(16, 40, \"cinco menos vinte\")]\r\n    [InlineData(17, 45, \"seis menos um quarto\")]\r\n    [InlineData(18, 50, \"sete menos dez\")]\r\n    [InlineData(19, 55, \"oito menos cinco\")]\r\n    [InlineData(20, 59, \"oito e cinquenta e nove\")]\r\n    public void ConvertToClockNotationTimeOnlyStringPtBr(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation();\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(00, 00, \"meia-noite\")]\r\n    [InlineData(04, 00, \"quatro horas\")]\r\n    [InlineData(05, 01, \"cinco horas\")]\r\n    [InlineData(06, 05, \"seis e cinco\")]\r\n    [InlineData(07, 10, \"sete e dez\")]\r\n    [InlineData(08, 15, \"oito e um quarto\")]\r\n    [InlineData(09, 20, \"nove e vinte\")]\r\n    [InlineData(10, 25, \"dez e vinte e cinco\")]\r\n    [InlineData(11, 30, \"onze e meia\")]\r\n    [InlineData(12, 00, \"meio-dia\")]\r\n    [InlineData(13, 23, \"uma e vinte e cinco\")]\r\n    [InlineData(14, 32, \"duas e meia\")]\r\n    [InlineData(15, 35, \"três e trinta e cinco\")]\r\n    [InlineData(16, 40, \"cinco menos vinte\")]\r\n    [InlineData(17, 45, \"seis menos um quarto\")]\r\n    [InlineData(18, 50, \"sete menos dez\")]\r\n    [InlineData(19, 55, \"oito menos cinco\")]\r\n    [InlineData(20, 59, \"nove horas\")]\r\n    public void ConvertToRoundedClockNotationTimeOnlyStringPtBr(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes);\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pt/TimeUnitToSymbolTests.cs",
    "content": "namespace pt;\r\n\r\n[UseCulture(\"pt\")]\r\npublic class TimeUnitToSymbolTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(TimeUnit.Millisecond, \"ms\")]\r\n    [InlineData(TimeUnit.Second, \"s\")]\r\n    [InlineData(TimeUnit.Minute, \"min\")]\r\n    [InlineData(TimeUnit.Hour, \"h\")]\r\n    [InlineData(TimeUnit.Day, \"d\")]\r\n    [InlineData(TimeUnit.Week, \"semana\")]\r\n    [InlineData(TimeUnit.Month, \"m\")]\r\n    [InlineData(TimeUnit.Year, \"a\")]\r\n    public void ToSymbol(TimeUnit unit, string expected) =>\r\n        Assert.Equal(expected, unit.ToSymbol());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pt-BR/Bytes/ByteSizeExtensionsTests.cs",
    "content": "namespace pt_BR.Bytes;\r\n\r\n[UseCulture(\"pt-BR\")]\r\npublic class ByteSizeExtensionsTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, null, \"2 TB\")]\r\n    [InlineData(2, \"GB\", \"2048 GB\")]\r\n    [InlineData(2.123, \"#.#\", \"2,1 TB\")]\r\n    public void HumanizesTerabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Terabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"GB\", \"0 GB\")]\r\n    [InlineData(2, null, \"2 GB\")]\r\n    [InlineData(2, \"MB\", \"2048 MB\")]\r\n    [InlineData(2.123, \"#.##\", \"2,12 GB\")]\r\n    public void HumanizesGigabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Gigabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"MB\", \"0 MB\")]\r\n    [InlineData(2, null, \"2 MB\")]\r\n    [InlineData(2, \"KB\", \"2048 KB\")]\r\n    [InlineData(2.123, \"#\", \"2 MB\")]\r\n    public void HumanizesMegabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Megabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"KB\", \"0 KB\")]\r\n    [InlineData(2, null, \"2 KB\")]\r\n    [InlineData(2, \"B\", \"2048 B\")]\r\n    [InlineData(2.123, \"#.####\", \"2,123 KB\")]\r\n    public void HumanizesKilobytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Kilobytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"#.##\", \"0 bit\")]\r\n    [InlineData(0, \"#.## B\", \"0 B\")]\r\n    [InlineData(0, \"B\", \"0 B\")]\r\n    [InlineData(2, null, \"2 B\")]\r\n    [InlineData(2000, \"KB\", \"1,95 KB\")]\r\n    [InlineData(2123, \"#.##\", \"2,07 KB\")]\r\n    [InlineData(10000000, \"KB\", \"9765,63 KB\")]\r\n    [InlineData(10000000, \"#,##0 KB\", \"9.766 KB\")]\r\n    [InlineData(10000000, \"#,##0.# KB\", \"9.765,6 KB\")]\r\n    public void HumanizesBytes(double input, string? format, string expectedValue)\r\n    {\r\n        expectedValue = expectedValue.Replace(\".\", NumberFormatInfo.CurrentInfo.NumberGroupSeparator);\r\n        Assert.Equal(\r\n            expectedValue,\r\n            input\r\n                .Bytes()\r\n                .Humanize(format));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 bit\")]\r\n    [InlineData(0, \"b\", \"0 bit\")]\r\n    [InlineData(2, null, \"2 bit\")]\r\n    [InlineData(12, \"B\", \"1,5 B\")]\r\n    [InlineData(10000, \"#.# KB\", \"1,2 KB\")]\r\n    public void HumanizesBits(long input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Bits().Humanize(format));\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pt-BR/DateHumanizeTests.cs",
    "content": "﻿namespace ptBR;\r\n\r\n[UseCulture(\"pt-BR\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(-2, \"2 segundos atrás\")]\r\n    [InlineData(-1, \"um segundo atrás\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"em um segundo\")]\r\n    [InlineData(2, \"em 2 segundos\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 minutos atrás\")]\r\n    [InlineData(-1, \"um minuto atrás\")]\r\n    [InlineData(60, \"uma hora atrás\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"em um minuto\")]\r\n    [InlineData(2, \"em 2 minutos\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 horas atrás\")]\r\n    [InlineData(-1, \"uma hora atrás\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"em uma hora\")]\r\n    [InlineData(2, \"em 2 horas\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 dias atrás\")]\r\n    [InlineData(-1, \"ontem\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"amanhã\")]\r\n    [InlineData(2, \"em 2 dias\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 meses atrás\")]\r\n    [InlineData(-1, \"um mês atrás\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"em um mês\")]\r\n    [InlineData(2, \"em 2 meses\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 anos atrás\")]\r\n    [InlineData(-1, \"um ano atrás\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"em um ano\")]\r\n    [InlineData(2, \"em 2 anos\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"agora\", 0, TimeUnit.Day, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pt-BR/NumberToWordsTests.cs",
    "content": "﻿namespace ptBR;\r\n\r\n[UseCulture(\"pt-BR\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"um\")]\r\n    [InlineData(2, \"dois\")]\r\n    [InlineData(3, \"três\")]\r\n    [InlineData(4, \"quatro\")]\r\n    [InlineData(5, \"cinco\")]\r\n    [InlineData(6, \"seis\")]\r\n    [InlineData(7, \"sete\")]\r\n    [InlineData(8, \"oito\")]\r\n    [InlineData(9, \"nove\")]\r\n    [InlineData(10, \"dez\")]\r\n    [InlineData(11, \"onze\")]\r\n    [InlineData(12, \"doze\")]\r\n    [InlineData(13, \"treze\")]\r\n    [InlineData(14, \"quatorze\")]\r\n    [InlineData(15, \"quinze\")]\r\n    [InlineData(16, \"dezesseis\")]\r\n    [InlineData(17, \"dezessete\")]\r\n    [InlineData(18, \"dezoito\")]\r\n    [InlineData(19, \"dezenove\")]\r\n    [InlineData(20, \"vinte\")]\r\n    [InlineData(30, \"trinta\")]\r\n    [InlineData(40, \"quarenta\")]\r\n    [InlineData(50, \"cinquenta\")]\r\n    [InlineData(51, \"cinquenta e um\")]\r\n    [InlineData(60, \"sessenta\")]\r\n    [InlineData(66, \"sessenta e seis\")]\r\n    [InlineData(70, \"setenta\")]\r\n    [InlineData(80, \"oitenta\")]\r\n    [InlineData(90, \"noventa\")]\r\n    [InlineData(100, \"cem\")]\r\n    [InlineData(200, \"duzentos\")]\r\n    [InlineData(300, \"trezentos\")]\r\n    [InlineData(400, \"quatrocentos\")]\r\n    [InlineData(500, \"quinhentos\")]\r\n    [InlineData(600, \"seiscentos\")]\r\n    [InlineData(700, \"setecentos\")]\r\n    [InlineData(800, \"oitocentos\")]\r\n    [InlineData(900, \"novecentos\")]\r\n    [InlineData(1000, \"mil\")]\r\n    [InlineData(2000, \"dois mil\")]\r\n    [InlineData(3000, \"três mil\")]\r\n    [InlineData(4000, \"quatro mil\")]\r\n    [InlineData(5000, \"cinco mil\")]\r\n    [InlineData(6000, \"seis mil\")]\r\n    [InlineData(7000, \"sete mil\")]\r\n    [InlineData(8000, \"oito mil\")]\r\n    [InlineData(9000, \"nove mil\")]\r\n    [InlineData(10000, \"dez mil\")]\r\n    [InlineData(100000, \"cem mil\")]\r\n    [InlineData(1000000, \"um milhão\")]\r\n    [InlineData(1000000000, \"um bilhão\")]\r\n    [InlineData(37, \"trinta e sete\")]\r\n    [InlineData(637, \"seiscentos e trinta e sete\")]\r\n    [InlineData(1637, \"mil seiscentos e trinta e sete\")]\r\n    [InlineData(61637, \"sessenta e um mil seiscentos e trinta e sete\")]\r\n    [InlineData(961637, \"novecentos e sessenta e um mil seiscentos e trinta e sete\")]\r\n    [InlineData(5961637, \"cinco milhões novecentos e sessenta e um mil seiscentos e trinta e sete\")]\r\n    [InlineData(25961637, \"vinte e cinco milhões novecentos e sessenta e um mil seiscentos e trinta e sete\")]\r\n    [InlineData(425961637, \"quatrocentos e vinte e cinco milhões novecentos e sessenta e um mil seiscentos e trinta e sete\")]\r\n    [InlineData(10000000, \"dez milhões\")]\r\n    [InlineData(100000000, \"cem milhões\")]\r\n    [InlineData(1101111101, \"um bilhão cento e um milhões cento e onze mil cento e um\")]\r\n    [InlineData(111, \"cento e onze\")]\r\n    [InlineData(1111, \"mil cento e onze\")]\r\n    [InlineData(1111101, \"um milhão cento e onze mil cento e um\")]\r\n    [InlineData(111111, \"cento e onze mil cento e onze\")]\r\n    [InlineData(1111111, \"um milhão cento e onze mil cento e onze\")]\r\n    [InlineData(11111111, \"onze milhões cento e onze mil cento e onze\")]\r\n    [InlineData(111111111, \"cento e onze milhões cento e onze mil cento e onze\")]\r\n    [InlineData(1111111111, \"um bilhão cento e onze milhões cento e onze mil cento e onze\")]\r\n    [InlineData(122, \"cento e vinte e dois\")]\r\n    [InlineData(123, \"cento e vinte e três\")]\r\n    [InlineData(1234, \"mil duzentos e trinta e quatro\")]\r\n    [InlineData(12345, \"doze mil trezentos e quarenta e cinco\")]\r\n    [InlineData(123456, \"cento e vinte e três mil quatrocentos e cinquenta e seis\")]\r\n    [InlineData(1234567, \"um milhão duzentos e trinta e quatro mil quinhentos e sessenta e sete\")]\r\n    [InlineData(12345678, \"doze milhões trezentos e quarenta e cinco mil seiscentos e setenta e oito\")]\r\n    [InlineData(123456789, \"cento e vinte e três milhões quatrocentos e cinquenta e seis mil setecentos e oitenta e nove\")]\r\n    [InlineData(1234567890, \"um bilhão duzentos e trinta e quatro milhões quinhentos e sessenta e sete mil oitocentos e noventa\")]\r\n    [InlineData(1999, \"mil novecentos e noventa e nove\")]\r\n    [InlineData(2000000, \"dois milhões\")]\r\n    [InlineData(2000000000, \"dois bilhões\")]\r\n    [InlineData(2001000000, \"dois bilhões um milhão\")]\r\n    [InlineData(2014, \"dois mil e quatorze\")]\r\n    [InlineData(2048, \"dois mil e quarenta e oito\")]\r\n    [InlineData(21, \"vinte e um\")]\r\n    [InlineData(211, \"duzentos e onze\")]\r\n    [InlineData(2111101, \"dois milhões cento e onze mil cento e um\")]\r\n    [InlineData(221, \"duzentos e vinte e um\")]\r\n    [InlineData(3501, \"três mil quinhentos e um\")]\r\n    [InlineData(8100, \"oito mil e cem\")]\r\n    [InlineData(999999999999, \"novecentos e noventa e nove bilhões novecentos e noventa e nove milhões novecentos e noventa e nove mil novecentos e noventa e nove\")]\r\n    [InlineData(-999999999999, \"menos novecentos e noventa e nove bilhões novecentos e noventa e nove milhões novecentos e noventa e nove mil novecentos e noventa e nove\")]\r\n    public void ToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"uma\")]\r\n    [InlineData(2, \"duas\")]\r\n    [InlineData(3, \"três\")]\r\n    [InlineData(11, \"onze\")]\r\n    [InlineData(21, \"vinte e uma\")]\r\n    [InlineData(122, \"cento e vinte e duas\")]\r\n    [InlineData(232, \"duzentas e trinta e duas\")]\r\n    [InlineData(343, \"trezentas e quarenta e três\")]\r\n    [InlineData(3501, \"três mil quinhentas e uma\")]\r\n    [InlineData(100, \"cem\")]\r\n    [InlineData(1000, \"mil\")]\r\n    [InlineData(111, \"cento e onze\")]\r\n    [InlineData(1111, \"mil cento e onze\")]\r\n    [InlineData(111111, \"cento e onze mil cento e onze\")]\r\n    [InlineData(1111101, \"um milhão cento e onze mil cento e uma\")]\r\n    [InlineData(1111111, \"um milhão cento e onze mil cento e onze\")]\r\n    [InlineData(2111102, \"dois milhões cento e onze mil cento e duas\")]\r\n    [InlineData(3111101, \"três milhões cento e onze mil cento e uma\")]\r\n    [InlineData(1101111101, \"um bilhão cento e um milhões cento e onze mil cento e uma\")]\r\n    [InlineData(2101111101, \"dois bilhões cento e um milhões cento e onze mil cento e uma\")]\r\n    [InlineData(1234, \"mil duzentas e trinta e quatro\")]\r\n    [InlineData(8100, \"oito mil e cem\")]\r\n    [InlineData(12345, \"doze mil trezentas e quarenta e cinco\")]\r\n    public void ToFeminineWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"primeiro\")]\r\n    [InlineData(2, \"segundo\")]\r\n    [InlineData(3, \"terceiro\")]\r\n    [InlineData(4, \"quarto\")]\r\n    [InlineData(5, \"quinto\")]\r\n    [InlineData(6, \"sexto\")]\r\n    [InlineData(7, \"sétimo\")]\r\n    [InlineData(8, \"oitavo\")]\r\n    [InlineData(9, \"nono\")]\r\n    [InlineData(10, \"décimo\")]\r\n    [InlineData(11, \"décimo primeiro\")]\r\n    [InlineData(12, \"décimo segundo\")]\r\n    [InlineData(13, \"décimo terceiro\")]\r\n    [InlineData(14, \"décimo quarto\")]\r\n    [InlineData(15, \"décimo quinto\")]\r\n    [InlineData(16, \"décimo sexto\")]\r\n    [InlineData(17, \"décimo sétimo\")]\r\n    [InlineData(18, \"décimo oitavo\")]\r\n    [InlineData(19, \"décimo nono\")]\r\n    [InlineData(20, \"vigésimo\")]\r\n    [InlineData(21, \"vigésimo primeiro\")]\r\n    [InlineData(22, \"vigésimo segundo\")]\r\n    [InlineData(30, \"trigésimo\")]\r\n    [InlineData(40, \"quadragésimo\")]\r\n    [InlineData(50, \"quinquagésimo\")]\r\n    [InlineData(60, \"sexagésimo\")]\r\n    [InlineData(70, \"septuagésimo\")]\r\n    [InlineData(80, \"octogésimo\")]\r\n    [InlineData(90, \"nonagésimo\")]\r\n    [InlineData(95, \"nonagésimo quinto\")]\r\n    [InlineData(96, \"nonagésimo sexto\")]\r\n    [InlineData(100, \"centésimo\")]\r\n    [InlineData(120, \"centésimo vigésimo\")]\r\n    [InlineData(121, \"centésimo vigésimo primeiro\")]\r\n    [InlineData(200, \"ducentésimo\")]\r\n    [InlineData(300, \"trecentésimo\")]\r\n    [InlineData(400, \"quadringentésimo\")]\r\n    [InlineData(500, \"quingentésimo\")]\r\n    [InlineData(600, \"sexcentésimo\")]\r\n    [InlineData(700, \"septingentésimo\")]\r\n    [InlineData(800, \"octingentésimo\")]\r\n    [InlineData(900, \"noningentésimo\")]\r\n    [InlineData(1000, \"milésimo\")]\r\n    [InlineData(1001, \"milésimo primeiro\")]\r\n    [InlineData(1021, \"milésimo vigésimo primeiro\")]\r\n    [InlineData(2021, \"segundo milésimo vigésimo primeiro\")]\r\n    [InlineData(10000, \"décimo milésimo\")]\r\n    [InlineData(10121, \"décimo milésimo centésimo vigésimo primeiro\")]\r\n    [InlineData(100000, \"centésimo milésimo\")]\r\n    [InlineData(1000000, \"milionésimo\")]\r\n    [InlineData(1000000000, \"bilionésimo\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"primeira\")]\r\n    [InlineData(2, \"segunda\")]\r\n    [InlineData(3, \"terceira\")]\r\n    [InlineData(4, \"quarta\")]\r\n    [InlineData(5, \"quinta\")]\r\n    [InlineData(6, \"sexta\")]\r\n    [InlineData(7, \"sétima\")]\r\n    [InlineData(8, \"oitava\")]\r\n    [InlineData(9, \"nona\")]\r\n    [InlineData(10, \"décima\")]\r\n    [InlineData(11, \"décima primeira\")]\r\n    [InlineData(12, \"décima segunda\")]\r\n    [InlineData(13, \"décima terceira\")]\r\n    [InlineData(14, \"décima quarta\")]\r\n    [InlineData(15, \"décima quinta\")]\r\n    [InlineData(16, \"décima sexta\")]\r\n    [InlineData(17, \"décima sétima\")]\r\n    [InlineData(18, \"décima oitava\")]\r\n    [InlineData(19, \"décima nona\")]\r\n    [InlineData(20, \"vigésima\")]\r\n    [InlineData(21, \"vigésima primeira\")]\r\n    [InlineData(22, \"vigésima segunda\")]\r\n    [InlineData(30, \"trigésima\")]\r\n    [InlineData(40, \"quadragésima\")]\r\n    [InlineData(50, \"quinquagésima\")]\r\n    [InlineData(60, \"sexagésima\")]\r\n    [InlineData(70, \"septuagésima\")]\r\n    [InlineData(80, \"octogésima\")]\r\n    [InlineData(90, \"nonagésima\")]\r\n    [InlineData(95, \"nonagésima quinta\")]\r\n    [InlineData(96, \"nonagésima sexta\")]\r\n    [InlineData(100, \"centésima\")]\r\n    [InlineData(120, \"centésima vigésima\")]\r\n    [InlineData(121, \"centésima vigésima primeira\")]\r\n    [InlineData(200, \"ducentésima\")]\r\n    [InlineData(300, \"trecentésima\")]\r\n    [InlineData(400, \"quadringentésima\")]\r\n    [InlineData(500, \"quingentésima\")]\r\n    [InlineData(600, \"sexcentésima\")]\r\n    [InlineData(700, \"septingentésima\")]\r\n    [InlineData(800, \"octingentésima\")]\r\n    [InlineData(900, \"noningentésima\")]\r\n    [InlineData(1000, \"milésima\")]\r\n    [InlineData(1001, \"milésima primeira\")]\r\n    [InlineData(1021, \"milésima vigésima primeira\")]\r\n    [InlineData(2021, \"segunda milésima vigésima primeira\")]\r\n    [InlineData(10000, \"décima milésima\")]\r\n    [InlineData(10121, \"décima milésima centésima vigésima primeira\")]\r\n    [InlineData(100000, \"centésima milésima\")]\r\n    [InlineData(1000000, \"milionésima\")]\r\n    [InlineData(1000000000, \"bilionésima\")]\r\n    public void ToFeminineOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pt-BR/OrdinalizeTests.cs",
    "content": "﻿namespace ptBR;\r\n\r\n[UseCulture(\"pt-BR\")]\r\npublic class OrdinalizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"0\", \"0\")]\r\n    [InlineData(\"1\", \"1º\")]\r\n    [InlineData(\"2\", \"2º\")]\r\n    [InlineData(\"3\", \"3º\")]\r\n    [InlineData(\"4\", \"4º\")]\r\n    [InlineData(\"5\", \"5º\")]\r\n    [InlineData(\"6\", \"6º\")]\r\n    [InlineData(\"23\", \"23º\")]\r\n    [InlineData(\"100\", \"100º\")]\r\n    [InlineData(\"101\", \"101º\")]\r\n    [InlineData(\"102\", \"102º\")]\r\n    [InlineData(\"103\", \"103º\")]\r\n    [InlineData(\"1001\", \"1001º\")]\r\n    public void OrdinalizeString(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0\")]\r\n    [InlineData(\"1\", \"1ª\")]\r\n    [InlineData(\"2\", \"2ª\")]\r\n    [InlineData(\"3\", \"3ª\")]\r\n    [InlineData(\"4\", \"4ª\")]\r\n    [InlineData(\"5\", \"5ª\")]\r\n    [InlineData(\"6\", \"6ª\")]\r\n    [InlineData(\"23\", \"23ª\")]\r\n    [InlineData(\"100\", \"100ª\")]\r\n    [InlineData(\"101\", \"101ª\")]\r\n    [InlineData(\"102\", \"102ª\")]\r\n    [InlineData(\"103\", \"103ª\")]\r\n    [InlineData(\"1001\", \"1001ª\")]\r\n    public void OrdinalizeStringFeminine(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]\r\n    [InlineData(1, \"1º\")]\r\n    [InlineData(2, \"2º\")]\r\n    [InlineData(3, \"3º\")]\r\n    [InlineData(4, \"4º\")]\r\n    [InlineData(5, \"5º\")]\r\n    [InlineData(6, \"6º\")]\r\n    [InlineData(10, \"10º\")]\r\n    [InlineData(23, \"23º\")]\r\n    [InlineData(100, \"100º\")]\r\n    [InlineData(101, \"101º\")]\r\n    [InlineData(102, \"102º\")]\r\n    [InlineData(103, \"103º\")]\r\n    [InlineData(1001, \"1001º\")]\r\n    public void OrdinalizeNumber(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]\r\n    [InlineData(1, \"1ª\")]\r\n    [InlineData(2, \"2ª\")]\r\n    [InlineData(3, \"3ª\")]\r\n    [InlineData(4, \"4ª\")]\r\n    [InlineData(5, \"5ª\")]\r\n    [InlineData(6, \"6ª\")]\r\n    [InlineData(10, \"10ª\")]\r\n    [InlineData(23, \"23ª\")]\r\n    [InlineData(100, \"100ª\")]\r\n    [InlineData(101, \"101ª\")]\r\n    [InlineData(102, \"102ª\")]\r\n    [InlineData(103, \"103ª\")]\r\n    [InlineData(1001, \"1001ª\")]\r\n    public void OrdinalizeNumberFeminine(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pt-BR/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace ptBR;\r\n\r\n[UseCulture(\"pt-BR\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 ano\")]\r\n    [InlineData(731, \"2 anos\")]\r\n    [InlineData(1096, \"3 anos\")]\r\n    [InlineData(4018, \"11 anos\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 mês\")]\r\n    [InlineData(61, \"2 meses\")]\r\n    [InlineData(92, \"3 meses\")]\r\n    [InlineData(335, \"11 meses\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Fact]\r\n    public void TwoWeeks() =>\r\n        Assert.Equal(\"2 semanas\", TimeSpan.FromDays(14).Humanize());\r\n\r\n    [Fact]\r\n    public void OneWeek() =>\r\n        Assert.Equal(\"1 semana\", TimeSpan.FromDays(7).Humanize());\r\n\r\n    [Fact]\r\n    public void SixDays() =>\r\n        Assert.Equal(\"6 dias\", TimeSpan.FromDays(6).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoDays() =>\r\n        Assert.Equal(\"2 dias\", TimeSpan.FromDays(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneDay() =>\r\n        Assert.Equal(\"1 dia\", TimeSpan.FromDays(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoHours() =>\r\n        Assert.Equal(\"2 horas\", TimeSpan.FromHours(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneHour() =>\r\n        Assert.Equal(\"1 hora\", TimeSpan.FromHours(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoMinutes() =>\r\n        Assert.Equal(\"2 minutos\", TimeSpan.FromMinutes(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneMinute() =>\r\n        Assert.Equal(\"1 minuto\", TimeSpan.FromMinutes(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoSeconds() =>\r\n        Assert.Equal(\"2 segundos\", TimeSpan.FromSeconds(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneSecond() =>\r\n        Assert.Equal(\"1 segundo\", TimeSpan.FromSeconds(1).Humanize());\r\n\r\n    [Fact]\r\n    public void TwoMilliseconds() =>\r\n        Assert.Equal(\"2 milisegundos\", TimeSpan.FromMilliseconds(2).Humanize());\r\n\r\n    [Fact]\r\n    public void OneMillisecond() =>\r\n        Assert.Equal(\"1 milisegundo\", TimeSpan.FromMilliseconds(1).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 milisegundos\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"sem horário\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pt-BR/TimeToClockNotationTests.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\nnamespace ptBR;\r\n\r\n[UseCulture(\"pt-BR\")]\r\npublic class TimeToClockNotationTests\r\n{\r\n    [Theory]\r\n    [InlineData(00, 00, \"meia-noite\")]\r\n    [InlineData(04, 00, \"quatro em ponto\")]\r\n    [InlineData(05, 01, \"cinco e um\")]\r\n    [InlineData(06, 05, \"seis e cinco\")]\r\n    [InlineData(07, 10, \"sete e dez\")]\r\n    [InlineData(08, 15, \"oito e quinze\")]\r\n    [InlineData(09, 20, \"nove e vinte\")]\r\n    [InlineData(10, 25, \"dez e vinte e cinco\")]\r\n    [InlineData(11, 30, \"onze e meia\")]\r\n    [InlineData(12, 00, \"meio-dia\")]\r\n    [InlineData(15, 35, \"três e trinta e cinco\")]\r\n    [InlineData(16, 40, \"vinte para as cinco\")]\r\n    [InlineData(17, 45, \"quinze para as seis\")]\r\n    [InlineData(18, 50, \"dez para as sete\")]\r\n    [InlineData(19, 55, \"cinco para as oito\")]\r\n    [InlineData(20, 59, \"oito e cinquenta e nove\")]\r\n    public void ConvertToClockNotationTimeOnlyStringPtBr(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation();\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(00, 00, \"meia-noite\")]\r\n    [InlineData(04, 00, \"quatro em ponto\")]\r\n    [InlineData(05, 01, \"cinco em ponto\")]\r\n    [InlineData(06, 05, \"seis e cinco\")]\r\n    [InlineData(07, 10, \"sete e dez\")]\r\n    [InlineData(08, 15, \"oito e quinze\")]\r\n    [InlineData(09, 20, \"nove e vinte\")]\r\n    [InlineData(10, 25, \"dez e vinte e cinco\")]\r\n    [InlineData(11, 30, \"onze e meia\")]\r\n    [InlineData(12, 00, \"meio-dia\")]\r\n    [InlineData(13, 23, \"uma e vinte e cinco\")]\r\n    [InlineData(14, 32, \"duas e meia\")]\r\n    [InlineData(15, 35, \"três e trinta e cinco\")]\r\n    [InlineData(16, 40, \"vinte para as cinco\")]\r\n    [InlineData(17, 45, \"quinze para as seis\")]\r\n    [InlineData(18, 50, \"dez para as sete\")]\r\n    [InlineData(19, 55, \"cinco para as oito\")]\r\n    [InlineData(20, 59, \"nove em ponto\")]\r\n    public void ConvertToRoundedClockNotationTimeOnlyStringPtBr(int hours, int minutes, string expectedResult)\r\n    {\r\n        var actualResult = new TimeOnly(hours, minutes).ToClockNotation(ClockNotationRounding.NearestFiveMinutes);\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/pt-BR/TimeUnitToSymbolTests.cs",
    "content": "namespace pt_BR;\r\n\r\n[UseCulture(\"pt-BR\")]\r\npublic class TimeUnitToSymbolTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(TimeUnit.Millisecond, \"ms\")]\r\n    [InlineData(TimeUnit.Second, \"s\")]\r\n    [InlineData(TimeUnit.Minute, \"min\")]\r\n    [InlineData(TimeUnit.Hour, \"h\")]\r\n    [InlineData(TimeUnit.Day, \"d\")]\r\n    [InlineData(TimeUnit.Week, \"semana\")]\r\n    [InlineData(TimeUnit.Month, \"m\")]\r\n    [InlineData(TimeUnit.Year, \"a\")]\r\n    public void ToSymbol(TimeUnit unit, string expected) =>\r\n        Assert.Equal(expected, unit.ToSymbol());\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ro-Ro/CollectionFormatterTests.cs",
    "content": "﻿namespace roRO;\r\n\r\n[UseCulture(\"ro-RO\")]\r\npublic class CollectionFormatterTests\r\n{\r\n    [Fact]\r\n    public void OneItem()\r\n    {\r\n        var collection = new List<int>([1]);\r\n        var humanized = \"1\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void TwoItems()\r\n    {\r\n        var collection = new List<int>([1, 2]);\r\n        var humanized = \"1 și 2\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void MoreThanTwoItems()\r\n    {\r\n        var collection = new List<int>([1, 2, 3]);\r\n        var humanized = \"1, 2 și 3\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ro-Ro/DateHumanizeTests.cs",
    "content": "﻿namespace roRO;\r\n\r\n/// <summary>\r\n/// Test that for values bigger than 19 \"de\" is added between the numeral\r\n/// and the time unit: http://ebooks.unibuc.ro/filologie/NForascu-DGLR/numerale.htm.\r\n/// There is no test for months since there are only 12 of them in a year.\r\n/// </summary>\r\n[UseCulture(\"ro-RO\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(3, \"acum 3 ore\")]\r\n    [InlineData(20, \"acum 20 de ore\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(19, \"acum 19 minute\")]\r\n    [InlineData(60, \"acum o oră\")]\r\n    [InlineData(44, \"acum 44 de minute\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"acum 2 secunde\")]\r\n    [InlineData(59, \"acum 59 de secunde\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(10, \"acum 10 zile\")]\r\n    [InlineData(23, \"acum 23 de zile\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(119, \"acum 119 ani\")]\r\n    [InlineData(100, \"acum 100 de ani\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"acum\")]\r\n    [InlineData(22, \"acum\")]\r\n    public void MillisecondsAgo(int milliseconds, string expected) =>\r\n        DateHumanize.Verify(expected, milliseconds, TimeUnit.Millisecond, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(19, \"peste 19 secunde\")]\r\n    [InlineData(21, \"peste 21 de secunde\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(19, \"peste 19 minute\")]\r\n    [InlineData(22, \"peste 22 de minute\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(3, \"peste 3 ore\")]\r\n    [InlineData(23, \"peste 23 de ore\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(5, \"peste 5 zile\")]\r\n    [InlineData(23, \"peste 23 de zile\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(5, \"peste 5 ani\")]\r\n    [InlineData(21, \"peste 21 de ani\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ro-Ro/NumberToWordsTests.cs",
    "content": "﻿namespace roRO;\r\n\r\n[UseCulture(\"ro-RO\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(-1, \"minus unu\")]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"unu\")]\r\n    [InlineData(2, \"doi\")]\r\n    [InlineData(3, \"trei\")]\r\n    [InlineData(4, \"patru\")]\r\n    [InlineData(5, \"cinci\")]\r\n    [InlineData(6, \"șase\")]\r\n    [InlineData(7, \"șapte\")]\r\n    [InlineData(8, \"opt\")]\r\n    [InlineData(9, \"nouă\")]\r\n    [InlineData(10, \"zece\")]\r\n    [InlineData(11, \"unsprezece\")]\r\n    [InlineData(12, \"doisprezece\")]\r\n    [InlineData(13, \"treisprezece\")]\r\n    [InlineData(14, \"paisprezece\")]\r\n    [InlineData(15, \"cincisprezece\")]\r\n    [InlineData(16, \"șaisprezece\")]\r\n    [InlineData(17, \"șaptesprezece\")]\r\n    [InlineData(18, \"optsprezece\")]\r\n    [InlineData(19, \"nouăsprezece\")]\r\n    [InlineData(20, \"douăzeci\")]\r\n    [InlineData(21, \"douăzeci și unu\")]\r\n    [InlineData(22, \"douăzeci și doi\")]\r\n    [InlineData(30, \"treizeci\")]\r\n    [InlineData(40, \"patruzeci\")]\r\n    [InlineData(50, \"cincizeci\")]\r\n    [InlineData(60, \"șaizeci\")]\r\n    [InlineData(70, \"șaptezeci\")]\r\n    [InlineData(80, \"optzeci\")]\r\n    [InlineData(90, \"nouăzeci\")]\r\n    [InlineData(100, \"o sută\")]\r\n    [InlineData(101, \"o sută unu\")]\r\n    [InlineData(102, \"o sută doi\")]\r\n    [InlineData(111, \"o sută unsprezece\")]\r\n    [InlineData(120, \"o sută douăzeci\")]\r\n    [InlineData(121, \"o sută douăzeci și unu\")]\r\n    [InlineData(122, \"o sută douăzeci și doi\")]\r\n    [InlineData(200, \"două sute\")]\r\n    [InlineData(1000, \"o mie\")]\r\n    [InlineData(1001, \"o mie unu\")]\r\n    [InlineData(1002, \"o mie doi\")]\r\n    [InlineData(1100, \"o mie o sută\")]\r\n    [InlineData(1200, \"o mie două sute\")]\r\n    [InlineData(2000, \"două mii\")]\r\n    [InlineData(10000, \"zece mii\")]\r\n    [InlineData(12000, \"douăsprezece mii\")]\r\n    [InlineData(20000, \"douăzeci de mii\")]\r\n    [InlineData(21000, \"douăzeci și una de mii\")]\r\n    [InlineData(22371, \"douăzeci și două de mii trei sute șaptezeci și unu\")]\r\n    [InlineData(100000, \"o sută de mii\")]\r\n    [InlineData(1000000, \"un milion\")]\r\n    [InlineData(2000000, \"două milioane\")]\r\n    [InlineData(1000000000, \"un miliard\")]\r\n    [InlineData(2000000000, \"două miliarde\")]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"minus unu\")]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"unu\")]\r\n    [InlineData(2, \"doi\")]\r\n    [InlineData(3, \"trei\")]\r\n    [InlineData(4, \"patru\")]\r\n    [InlineData(5, \"cinci\")]\r\n    [InlineData(6, \"șase\")]\r\n    [InlineData(7, \"șapte\")]\r\n    [InlineData(8, \"opt\")]\r\n    [InlineData(9, \"nouă\")]\r\n    [InlineData(10, \"zece\")]\r\n    [InlineData(11, \"unsprezece\")]\r\n    [InlineData(12, \"doisprezece\")]\r\n    [InlineData(13, \"treisprezece\")]\r\n    [InlineData(14, \"paisprezece\")]\r\n    [InlineData(15, \"cincisprezece\")]\r\n    [InlineData(16, \"șaisprezece\")]\r\n    [InlineData(17, \"șaptesprezece\")]\r\n    [InlineData(18, \"optsprezece\")]\r\n    [InlineData(19, \"nouăsprezece\")]\r\n    [InlineData(20, \"douăzeci\")]\r\n    [InlineData(21, \"douăzeci și unu\")]\r\n    [InlineData(22, \"douăzeci și doi\")]\r\n    [InlineData(30, \"treizeci\")]\r\n    [InlineData(40, \"patruzeci\")]\r\n    [InlineData(50, \"cincizeci\")]\r\n    [InlineData(60, \"șaizeci\")]\r\n    [InlineData(70, \"șaptezeci\")]\r\n    [InlineData(80, \"optzeci\")]\r\n    [InlineData(90, \"nouăzeci\")]\r\n    [InlineData(100, \"o sută\")]\r\n    [InlineData(101, \"o sută unu\")]\r\n    [InlineData(102, \"o sută doi\")]\r\n    [InlineData(111, \"o sută unsprezece\")]\r\n    [InlineData(120, \"o sută douăzeci\")]\r\n    [InlineData(121, \"o sută douăzeci și unu\")]\r\n    [InlineData(122, \"o sută douăzeci și doi\")]\r\n    [InlineData(200, \"două sute\")]\r\n    [InlineData(1000, \"o mie\")]\r\n    [InlineData(1001, \"o mie unu\")]\r\n    [InlineData(1002, \"o mie doi\")]\r\n    [InlineData(1100, \"o mie o sută\")]\r\n    [InlineData(1200, \"o mie două sute\")]\r\n    [InlineData(2000, \"două mii\")]\r\n    [InlineData(10000, \"zece mii\")]\r\n    [InlineData(12000, \"douăsprezece mii\")]\r\n    [InlineData(20000, \"douăzeci de mii\")]\r\n    [InlineData(21000, \"douăzeci și una de mii\")]\r\n    [InlineData(22371, \"douăzeci și două de mii trei sute șaptezeci și unu\")]\r\n    [InlineData(100000, \"o sută de mii\")]\r\n    [InlineData(1000000, \"un milion\")]\r\n    [InlineData(2000000, \"două milioane\")]\r\n    [InlineData(1000000000, \"un miliard\")]\r\n    [InlineData(2000000000, \"două miliarde\")]\r\n    public void ToMasculineWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Masculine));\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"minus una\")]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"una\")]\r\n    [InlineData(2, \"două\")]\r\n    [InlineData(3, \"trei\")]\r\n    [InlineData(4, \"patru\")]\r\n    [InlineData(5, \"cinci\")]\r\n    [InlineData(6, \"șase\")]\r\n    [InlineData(7, \"șapte\")]\r\n    [InlineData(8, \"opt\")]\r\n    [InlineData(9, \"nouă\")]\r\n    [InlineData(10, \"zece\")]\r\n    [InlineData(11, \"unsprezece\")]\r\n    [InlineData(12, \"douăsprezece\")] // DOOM 2 (dicționarul ortografic, ortoepic și morfologic al limbii române)\r\n    [InlineData(13, \"treisprezece\")]\r\n    [InlineData(14, \"paisprezece\")]\r\n    [InlineData(15, \"cincisprezece\")]\r\n    [InlineData(16, \"șaisprezece\")]\r\n    [InlineData(17, \"șaptesprezece\")]\r\n    [InlineData(18, \"optsprezece\")]\r\n    [InlineData(19, \"nouăsprezece\")]\r\n    [InlineData(20, \"douăzeci\")]\r\n    [InlineData(21, \"douăzeci și una\")]\r\n    [InlineData(22, \"douăzeci și două\")]\r\n    [InlineData(30, \"treizeci\")]\r\n    [InlineData(40, \"patruzeci\")]\r\n    [InlineData(50, \"cincizeci\")]\r\n    [InlineData(60, \"șaizeci\")]\r\n    [InlineData(70, \"șaptezeci\")]\r\n    [InlineData(80, \"optzeci\")]\r\n    [InlineData(90, \"nouăzeci\")]\r\n    [InlineData(100, \"o sută\")]\r\n    [InlineData(101, \"o sută una\")]\r\n    [InlineData(102, \"o sută două\")]\r\n    [InlineData(111, \"o sută unsprezece\")]\r\n    [InlineData(120, \"o sută douăzeci\")]\r\n    [InlineData(121, \"o sută douăzeci și una\")]\r\n    [InlineData(122, \"o sută douăzeci și două\")]\r\n    [InlineData(200, \"două sute\")]\r\n    [InlineData(1000, \"o mie\")]\r\n    [InlineData(1001, \"o mie una\")]\r\n    [InlineData(1002, \"o mie două\")]\r\n    [InlineData(1100, \"o mie o sută\")]\r\n    [InlineData(1200, \"o mie două sute\")]\r\n    [InlineData(2000, \"două mii\")]\r\n    [InlineData(10000, \"zece mii\")]\r\n    [InlineData(12000, \"douăsprezece mii\")]\r\n    [InlineData(20000, \"douăzeci de mii\")]\r\n    [InlineData(21000, \"douăzeci și una de mii\")]\r\n    [InlineData(22371, \"douăzeci și două de mii trei sute șaptezeci și una\")]\r\n    [InlineData(100000, \"o sută de mii\")]\r\n    [InlineData(1000000, \"un milion\")]\r\n    [InlineData(2000000, \"două milioane\")]\r\n    [InlineData(1000000000, \"un miliard\")]\r\n    [InlineData(2000000000, \"două miliarde\")]\r\n    public void ToFeminineWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"minus unu\")]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"unu\")]\r\n    [InlineData(2, \"două\")]\r\n    [InlineData(3, \"trei\")]\r\n    [InlineData(4, \"patru\")]\r\n    [InlineData(5, \"cinci\")]\r\n    public void ToNeuterWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Neuter));\r\n\r\n    // Test cases taken from Romanian Grammar, Mika Sarlin.\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"primul\")]\r\n    [InlineData(2, \"al doilea\")]\r\n    [InlineData(3, \"al treilea\")]\r\n    [InlineData(4, \"al patrulea\")]\r\n    [InlineData(5, \"al cincilea\")]\r\n    [InlineData(6, \"al șaselea\")]\r\n    [InlineData(7, \"al șaptelea\")]\r\n    [InlineData(8, \"al optulea\")]\r\n    [InlineData(9, \"al nouălea\")]\r\n    [InlineData(10, \"al zecelea\")]\r\n    [InlineData(11, \"al unsprezecelea\")]\r\n    [InlineData(12, \"al doisprezecelea\")]\r\n    [InlineData(13, \"al treisprezecelea\")]\r\n    [InlineData(14, \"al paisprezecelea\")]\r\n    [InlineData(15, \"al cincisprezecelea\")]\r\n    [InlineData(16, \"al șaisprezecelea\")]\r\n    [InlineData(17, \"al șaptesprezecelea\")]\r\n    [InlineData(18, \"al optsprezecelea\")]\r\n    [InlineData(19, \"al nouăsprezecelea\")]\r\n    [InlineData(20, \"al douăzecilea\")]\r\n    [InlineData(21, \"al douăzeci și unulea\")]\r\n    [InlineData(22, \"al douăzeci și doilea\")]\r\n    [InlineData(30, \"al treizecilea\")]\r\n    [InlineData(40, \"al patruzecilea\")]\r\n    [InlineData(50, \"al cincizecilea\")]\r\n    [InlineData(60, \"al șaizecilea\")]\r\n    [InlineData(70, \"al șaptezecilea\")]\r\n    [InlineData(80, \"al optzecilea\")]\r\n    [InlineData(90, \"al nouăzecilea\")]\r\n    [InlineData(100, \"al o sutălea\")]\r\n    [InlineData(101, \"al o sută unulea\")]\r\n    [InlineData(102, \"al o sută doilea\")]\r\n    [InlineData(199, \"al o sută nouăzeci și nouălea\")]\r\n    [InlineData(200, \"al două sutelea\")]\r\n    [InlineData(300, \"al trei sutelea\")]\r\n    [InlineData(1000, \"al o mielea\")]\r\n    [InlineData(1001, \"al o mie unulea\")]\r\n    [InlineData(2000, \"al două miilea\")]\r\n    [InlineData(10000, \"al zece miilea\")]\r\n    [InlineData(20000, \"al douăzeci miilea\")]\r\n    [InlineData(50000, \"al cincizeci miilea\")]\r\n    [InlineData(1000000, \"al un milionulea\")]\r\n    [InlineData(2000000, \"al două milioanelea\")]\r\n    [InlineData(20000000, \"al douăzeci milioanelea\")]\r\n    [InlineData(1000000000, \"al un miliardulea\")]\r\n    [InlineData(2000000000, \"al două miliardelea\")]\r\n    public void ToOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"primul\")]\r\n    [InlineData(2, \"al doilea\")]\r\n    [InlineData(3, \"al treilea\")]\r\n    [InlineData(4, \"al patrulea\")]\r\n    [InlineData(5, \"al cincilea\")]\r\n    [InlineData(6, \"al șaselea\")]\r\n    [InlineData(7, \"al șaptelea\")]\r\n    [InlineData(8, \"al optulea\")]\r\n    [InlineData(9, \"al nouălea\")]\r\n    [InlineData(10, \"al zecelea\")]\r\n    [InlineData(11, \"al unsprezecelea\")]\r\n    [InlineData(12, \"al doisprezecelea\")]\r\n    [InlineData(13, \"al treisprezecelea\")]\r\n    [InlineData(14, \"al paisprezecelea\")]\r\n    [InlineData(15, \"al cincisprezecelea\")]\r\n    [InlineData(16, \"al șaisprezecelea\")]\r\n    [InlineData(17, \"al șaptesprezecelea\")]\r\n    [InlineData(18, \"al optsprezecelea\")]\r\n    [InlineData(19, \"al nouăsprezecelea\")]\r\n    [InlineData(20, \"al douăzecilea\")]\r\n    [InlineData(21, \"al douăzeci și unulea\")]\r\n    [InlineData(22, \"al douăzeci și doilea\")]\r\n    [InlineData(30, \"al treizecilea\")]\r\n    [InlineData(40, \"al patruzecilea\")]\r\n    [InlineData(50, \"al cincizecilea\")]\r\n    [InlineData(60, \"al șaizecilea\")]\r\n    [InlineData(70, \"al șaptezecilea\")]\r\n    [InlineData(80, \"al optzecilea\")]\r\n    [InlineData(90, \"al nouăzecilea\")]\r\n    [InlineData(100, \"al o sutălea\")]\r\n    [InlineData(101, \"al o sută unulea\")]\r\n    [InlineData(102, \"al o sută doilea\")]\r\n    [InlineData(199, \"al o sută nouăzeci și nouălea\")]\r\n    [InlineData(200, \"al două sutelea\")]\r\n    [InlineData(300, \"al trei sutelea\")]\r\n    [InlineData(1000, \"al o mielea\")]\r\n    [InlineData(1001, \"al o mie unulea\")]\r\n    [InlineData(2000, \"al două miilea\")]\r\n    [InlineData(10000, \"al zece miilea\")]\r\n    [InlineData(20000, \"al douăzeci miilea\")]\r\n    [InlineData(50000, \"al cincizeci miilea\")]\r\n    [InlineData(1000000, \"al un milionulea\")]\r\n    [InlineData(2000000, \"al două milioanelea\")]\r\n    [InlineData(20000000, \"al douăzeci milioanelea\")]\r\n    [InlineData(1000000000, \"al un miliardulea\")]\r\n    [InlineData(2000000000, \"al două miliardelea\")]\r\n    public void ToMasculineOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Masculine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"prima\")]\r\n    [InlineData(2, \"a doua\")]\r\n    [InlineData(3, \"a treia\")]\r\n    [InlineData(4, \"a patra\")]\r\n    [InlineData(5, \"a cincea\")]\r\n    [InlineData(6, \"a șasea\")]\r\n    [InlineData(7, \"a șaptea\")]\r\n    [InlineData(8, \"a opta\")]\r\n    [InlineData(9, \"a noua\")]\r\n    [InlineData(10, \"a zecea\")]\r\n    [InlineData(11, \"a unsprezecea\")]\r\n    [InlineData(12, \"a douăsprezecea\")]\r\n    [InlineData(13, \"a treisprezecea\")]\r\n    [InlineData(14, \"a paisprezecea\")]\r\n    [InlineData(15, \"a cincisprezecea\")]\r\n    [InlineData(16, \"a șaisprezecea\")]\r\n    [InlineData(17, \"a șaptesprezecea\")]\r\n    [InlineData(18, \"a optsprezecea\")]\r\n    [InlineData(19, \"a nouăsprezecea\")]\r\n    [InlineData(20, \"a douăzecea\")]\r\n    [InlineData(21, \"a douăzeci și una\")]\r\n    [InlineData(22, \"a douăzeci și doua\")]\r\n    [InlineData(30, \"a treizecea\")]\r\n    [InlineData(40, \"a patruzecea\")]\r\n    [InlineData(50, \"a cincizecea\")]\r\n    [InlineData(60, \"a șaizecea\")]\r\n    [InlineData(70, \"a șaptezecea\")]\r\n    [InlineData(80, \"a optzecea\")]\r\n    [InlineData(90, \"a nouăzecea\")]\r\n    [InlineData(100, \"a o suta\")]\r\n    [InlineData(101, \"a o sută una\")]\r\n    [InlineData(102, \"a o sută doua\")]\r\n    [InlineData(199, \"a o sută nouăzeci și noua\")]\r\n    [InlineData(200, \"a două suta\")]\r\n    [InlineData(300, \"a trei suta\")]\r\n    [InlineData(1000, \"a o mia\")]\r\n    [InlineData(1001, \"a o mie una\")]\r\n    [InlineData(2000, \"a două mia\")]\r\n    [InlineData(10000, \"a zece mia\")]\r\n    [InlineData(20000, \"a douăzeci mia\")]\r\n    [InlineData(50000, \"a cincizeci mia\")]\r\n    [InlineData(1000000, \"a milioana\")]\r\n    [InlineData(2000000, \"a două milioana\")]\r\n    [InlineData(20000000, \"a douăzecea milioana\")]\r\n    [InlineData(1000000000, \"a miliarda\")]\r\n    [InlineData(2000000000, \"a două miliarda\")]\r\n    public void ToFeminineOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"zero\")]\r\n    [InlineData(1, \"primul\")]\r\n    [InlineData(2, \"al doilea\")]\r\n    [InlineData(3, \"al treilea\")]\r\n    [InlineData(4, \"al patrulea\")]\r\n    [InlineData(5, \"al cincilea\")]\r\n    public void ToNeuterOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Neuter));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ro-Ro/OrdinalizerTests.cs",
    "content": "﻿namespace roRO;\r\n\r\n[UseCulture(\"ro-RO\")]\r\npublic class OrdinalizerTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"0\")]  // No ordinal for 0 (zero) in Romanian.\r\n    [InlineData(1, \"primul\")]\r\n    [InlineData(2, \"al 2-lea\")]\r\n    [InlineData(3, \"al 3-lea\")]\r\n    [InlineData(10, \"al 10-lea\")]\r\n    public void GenderlessNumber(int number, string expected) =>\r\n        Assert.Equal(expected, number.Ordinalize());\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0\")]  // No ordinal for 0 (zero) in Romanian.\r\n    [InlineData(\"1\", \"primul\")]\r\n    [InlineData(\"2\", \"al 2-lea\")]\r\n    [InlineData(\"3\", \"al 3-lea\")]\r\n    [InlineData(\"10\", \"al 10-lea\")]\r\n    public void GenderlessText(string number, string expected) =>\r\n        Assert.Equal(expected, number.Ordinalize());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]  // No ordinal for 0 (zero) in Romanian.\r\n    [InlineData(1, \"primul\")]\r\n    [InlineData(2, \"al 2-lea\")]\r\n    [InlineData(3, \"al 3-lea\")]\r\n    [InlineData(10, \"al 10-lea\")]\r\n    public void MasculineNumber(int number, string expected) =>\r\n        Assert.Equal(expected, number.Ordinalize(GrammaticalGender.Masculine));\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0\")]  // No ordinal for 0 (zero) in Romanian.\r\n    [InlineData(\"1\", \"primul\")]\r\n    [InlineData(\"2\", \"al 2-lea\")]\r\n    [InlineData(\"3\", \"al 3-lea\")]\r\n    [InlineData(\"10\", \"al 10-lea\")]\r\n    public void MasculineText(string number, string expected) =>\r\n        Assert.Equal(expected, number.Ordinalize(GrammaticalGender.Masculine));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]  // No ordinal for 0 (zero) in Romanian.\r\n    [InlineData(1, \"prima\")]\r\n    [InlineData(2, \"a 2-a\")]\r\n    [InlineData(10, \"a 10-a\")]\r\n    public void FeminineNumber(int number, string expected) =>\r\n        Assert.Equal(expected, number.Ordinalize(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0\")]  // No ordinal for 0 (zero) in Romanian.\r\n    [InlineData(\"1\", \"prima\")]\r\n    [InlineData(\"2\", \"a 2-a\")]\r\n    [InlineData(\"10\", \"a 10-a\")]\r\n    public void FeminineText(string number, string expected) =>\r\n        Assert.Equal(expected, number.Ordinalize(GrammaticalGender.Feminine));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ro-Ro/TimeSpanHumanizerTests.cs",
    "content": "﻿namespace roRO;\r\n\r\n/// <summary>\r\n/// Test that for values bigger than 19 \"de\" is added between the numeral\r\n/// and the time unit: http://ebooks.unibuc.ro/filologie/NForascu-DGLR/numerale.htm.\r\n/// There is no test for months since there are only 12 of them in a year.\r\n/// </summary>\r\n[UseCulture(\"ro-RO\")]\r\npublic class TimeSpanHumanizerTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"1 milisecundă\")]\r\n    [InlineData(14, \"14 milisecunde\")]\r\n    [InlineData(21, \"21 de milisecunde\")]\r\n    [InlineData(3000, \"3 secunde\")]\r\n    public void Milliseconds(int milliseconds, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0 secunde\", true)]\r\n    [InlineData(0, \"0 de secunde\")]\r\n    [InlineData(1, \"1 secundă\")]\r\n    [InlineData(14, \"14 secunde\")]\r\n    [InlineData(21, \"21 de secunde\")]\r\n    [InlineData(156, \"2 minute\")]\r\n    public void Seconds(int seconds, string expected, bool toWords = false)\r\n    {\r\n        var actual = TimeSpan.FromSeconds(seconds).Humanize(minUnit: TimeUnit.Second,\r\n            toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 minut\")]\r\n    [InlineData(14, \"14 minute\")]\r\n    [InlineData(21, \"21 de minute\")]\r\n    [InlineData(156, \"2 ore\")]\r\n    public void Minutes(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMinutes(minutes).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 oră\")]\r\n    [InlineData(14, \"14 ore\")]\r\n    [InlineData(21, \"21 de ore\")]\r\n    [InlineData(48, \"2 zile\")]\r\n    public void Hours(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan.FromHours(hours).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 zi\")]\r\n    [InlineData(6, \"6 zile\")]\r\n    [InlineData(7, \"1 săptămână\")]\r\n    [InlineData(14, \"2 săptămâni\")]\r\n    [InlineData(21, \"3 săptămâni\")]\r\n    public void Days(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 săptămână\")]\r\n    [InlineData(14, \"14 săptămâni\")]\r\n    [InlineData(21, \"21 de săptămâni\")]\r\n    public void Weeks(int weeks, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(7 * weeks).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"1 lună\")]\r\n    [InlineData(61, \"2 luni\")]\r\n    [InlineData(92, \"3 luni\")]\r\n    [InlineData(335, \"11 luni\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"1 an\")]\r\n    [InlineData(731, \"2 ani\")]\r\n    [InlineData(1096, \"3 ani\")]\r\n    [InlineData(4018, \"11 ani\")]\r\n    [InlineData(7500, \"20 de ani\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 de milisecunde\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact, CustomDescription(\"The name of this test is confusing because has no sense. Instead should be read as an interval with duration zero and not the absence of time.\")]\r\n    public void NoTimeToWords() =>\r\n        // Usage in Romanian: \"Timp execuție: 0 secunde.\"\r\n        // Should be equivalent with TimeSpan.FromSeconds(0).Humanize()\r\n        Assert.Equal(\"0 secunde\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ru-RU/Bytes/ByteRateTests.cs",
    "content": "﻿namespace ruRU.Bytes;\r\n\r\n[UseCulture(\"ru-RU\")]\r\npublic class ByteRateTests\r\n{\r\n    [Theory]\r\n    [InlineData(400, 1, \"400 Б/сек.\")]\r\n    [InlineData(4 * 1024, 1, \"4 КБ/сек.\")]\r\n    [InlineData(4 * 1024 * 1024, 1, \"4 МБ/сек.\")]\r\n    [InlineData(4 * 2 * 1024 * 1024, 2, \"4 МБ/сек.\")]\r\n    [InlineData(4 * 1024, 0.1, \"40 КБ/сек.\")]\r\n    [InlineData(15 * 60 * 1024 * 1024, 60, \"15 МБ/сек.\")]\r\n    public void HumanizesRates(long inputBytes, double perSeconds, string expectedValue)\r\n    {\r\n        var size = new ByteSize(inputBytes);\r\n        var interval = TimeSpan.FromSeconds(perSeconds);\r\n\r\n        var rate = size.Per(interval).Humanize();\r\n\r\n        Assert.Equal(expectedValue, rate);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, 1, TimeUnit.Second, \"1 МБ/сек.\")]\r\n    [InlineData(1, 60, TimeUnit.Minute, \"1 МБ/мин.\")]\r\n    [InlineData(1, 60 * 60, TimeUnit.Hour, \"1 МБ/ч.\")]\r\n    [InlineData(10, 1, TimeUnit.Second, \"10 МБ/сек.\")]\r\n    [InlineData(10, 60, TimeUnit.Minute, \"10 МБ/мин.\")]\r\n    [InlineData(10, 60 * 60, TimeUnit.Hour, \"10 МБ/ч.\")]\r\n    [InlineData(1, 10 * 1, TimeUnit.Second, \"102,4 КБ/сек.\")]\r\n    [InlineData(1, 10 * 60, TimeUnit.Minute, \"102,4 КБ/мин.\")]\r\n    [InlineData(1, 10 * 60 * 60, TimeUnit.Hour, \"102,4 КБ/ч.\")]\r\n    public void TimeUnitTests(long megabytes, double measurementIntervalSeconds, TimeUnit displayInterval, string expectedValue)\r\n    {\r\n        var size = ByteSize.FromMegabytes(megabytes);\r\n        var measurementInterval = TimeSpan.FromSeconds(measurementIntervalSeconds);\r\n\r\n        var rate = size.Per(measurementInterval);\r\n        var text = rate.Humanize(displayInterval);\r\n\r\n        Assert.Equal(expectedValue, text);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(19854651984, 1, TimeUnit.Second, null, \"18,49 ГБ/сек.\")]\r\n    [InlineData(19854651984, 1, TimeUnit.Second, \"#.##\", \"18,49 ГБ/сек.\")]\r\n    public void FormattedTimeUnitTests(long bytes, int measurementIntervalSeconds, TimeUnit displayInterval, string? format, string expectedValue)\r\n    {\r\n        var size = ByteSize.FromBytes(bytes);\r\n        var measurementInterval = TimeSpan.FromSeconds(measurementIntervalSeconds);\r\n        var rate = size.Per(measurementInterval);\r\n        var text = rate.Humanize(format, displayInterval);\r\n\r\n        Assert.Equal(expectedValue, text);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(TimeUnit.Millisecond)]\r\n    [InlineData(TimeUnit.Day)]\r\n    [InlineData(TimeUnit.Month)]\r\n    [InlineData(TimeUnit.Week)]\r\n    [InlineData(TimeUnit.Year)]\r\n    public void ThrowsOnUnsupportedData(TimeUnit units)\r\n    {\r\n        var dummyRate = ByteSize.FromBits(1).Per(TimeSpan.FromSeconds(1));\r\n\r\n        Assert.Throws<NotSupportedException>(() => dummyRate.Humanize(units));\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ru-RU/Bytes/ByteSizeExtensionsTests.cs",
    "content": "﻿namespace ruRU.Bytes;\r\n\r\n[UseCulture(\"ru-RU\")]\r\npublic class ByteSizeExtensionsTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, null, \"2 ТБ\")]\r\n    [InlineData(2, \"GB\", \"2048 ГБ\")]\r\n    [InlineData(2.1, null, \"2,1 ТБ\")]\r\n    [InlineData(2.123, \"#.#\", \"2,1 ТБ\")]\r\n    public void HumanizesTerabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Terabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 бит\")]\r\n    [InlineData(0, \"GB\", \"0 ГБ\")]\r\n    [InlineData(2, null, \"2 ГБ\")]\r\n    [InlineData(2, \"MB\", \"2048 МБ\")]\r\n    [InlineData(2.123, \"#.##\", \"2,12 ГБ\")]\r\n    public void HumanizesGigabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Gigabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 бит\")]\r\n    [InlineData(0, \"MB\", \"0 МБ\")]\r\n    [InlineData(2, null, \"2 МБ\")]\r\n    [InlineData(2, \"KB\", \"2048 КБ\")]\r\n    [InlineData(2.123, \"#\", \"2 МБ\")]\r\n    public void HumanizesMegabytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Megabytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 бит\")]\r\n    [InlineData(0, \"KB\", \"0 КБ\")]\r\n    [InlineData(2, null, \"2 КБ\")]\r\n    [InlineData(2, \"B\", \"2048 Б\")]\r\n    [InlineData(2.123, \"#.####\", \"2,123 КБ\")]\r\n    public void HumanizesKilobytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Kilobytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 бит\")]\r\n    [InlineData(0, \"#.##\", \"0 бит\")]\r\n    [InlineData(0, \"#.## B\", \"0 Б\")]\r\n    [InlineData(0, \"B\", \"0 Б\")]\r\n    [InlineData(2, null, \"2 Б\")]\r\n    [InlineData(2000, \"KB\", \"1,95 КБ\")]\r\n    [InlineData(2123, \"#.##\", \"2,07 КБ\")]\r\n    [InlineData(10000000, \"KB\", \"9765,63 КБ\")]\r\n    [InlineData(10000000, \"#,##0 KB\", \"9 766 КБ\")]\r\n    [InlineData(10000000, \"#,##0.# KB\", \"9 765,6 КБ\")]\r\n    public void HumanizesBytes(double input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Bytes().Humanize(format));\r\n\r\n    [Theory]\r\n    [InlineData(0, null, \"0 бит\")]\r\n    [InlineData(0, \"b\", \"0 бит\")]\r\n    [InlineData(2, null, \"2 бит\")]\r\n    [InlineData(12, \"B\", \"1,5 Б\")]\r\n    [InlineData(10000, \"#.# KB\", \"1,2 КБ\")]\r\n    public void HumanizesBits(long input, string? format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Bits().Humanize(format));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ru-RU/Bytes/ToFullWordsTests.cs",
    "content": "﻿namespace ruRU.Bytes;\r\n\r\n[UseCulture(\"ru-RU\")]\r\npublic class ToFullWordsTests\r\n{\r\n    [Fact]\r\n    public void ReturnsSingularBit() =>\r\n        Assert.Equal(\"1 бит\", ByteSize.FromBits(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralBits() =>\r\n        Assert.Equal(\"2 бит\", ByteSize.FromBits(2).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularByte() =>\r\n        Assert.Equal(\"1 байт\", ByteSize.FromBytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralBytes() =>\r\n        Assert.Equal(\"10 байт\", ByteSize.FromBytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularKiloByte() =>\r\n        Assert.Equal(\"1 килобайт\", ByteSize.FromKilobytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralKilobytes() =>\r\n        Assert.Equal(\"10 килобайт\", ByteSize.FromKilobytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularMegabyte() =>\r\n        Assert.Equal(\"1 мегабайт\", ByteSize.FromMegabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralMegabytes() =>\r\n        Assert.Equal(\"10 мегабайт\", ByteSize.FromMegabytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularGigabyte() =>\r\n        Assert.Equal(\"1 гигабайт\", ByteSize.FromGigabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralGigabytes() =>\r\n        Assert.Equal(\"10 гигабайт\", ByteSize.FromGigabytes(10).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsSingularTerabyte() =>\r\n        Assert.Equal(\"1 терабайт\", ByteSize.FromTerabytes(1).ToFullWords());\r\n\r\n    [Fact]\r\n    public void ReturnsPluralTerabytes() =>\r\n        Assert.Equal(\"10 терабайт\", ByteSize.FromTerabytes(10).ToFullWords());\r\n\r\n    [Theory]\r\n    [InlineData(229376, \"B\", \"229376 байт\")]\r\n    [InlineData(229376, \"# KB\", \"224 килобайт\")]\r\n    public void ToFullWordsFormatted(double input, string format, string expectedValue) =>\r\n        Assert.Equal(expectedValue, ByteSize.FromBytes(input).ToFullWords(format));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ru-RU/Bytes/ToStringTests.cs",
    "content": "﻿namespace ruRU.Bytes;\r\n\r\n[UseCulture(\"ru-RU\")]\r\npublic class ToStringTests\r\n{\r\n    [Fact]\r\n    public void ReturnsLargestMetricSuffix() =>\r\n        Assert.Equal(\"10,5 КБ\", ByteSize.FromKilobytes(10.5).ToString());\r\n\r\n    [Fact]\r\n    public void ReturnsDefaultNumberFormat() =>\r\n        Assert.Equal(\"10,5 КБ\", ByteSize.FromKilobytes(10.5).ToString(\"KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsProvidedNumberFormat() =>\r\n        Assert.Equal(\"10,1234 КБ\", ByteSize.FromKilobytes(10.1234).ToString(\"#.#### KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBits() =>\r\n        Assert.Equal(\"10 бит\", ByteSize.FromBits(10).ToString(\"##.#### b\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBytes() =>\r\n        Assert.Equal(\"10 Б\", ByteSize.FromBytes(10).ToString(\"##.#### B\"));\r\n\r\n    [Fact]\r\n    public void ReturnsKilobytes() =>\r\n        Assert.Equal(\"10 КБ\", ByteSize.FromKilobytes(10).ToString(\"##.#### KB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsMegabytes() =>\r\n        Assert.Equal(\"10 МБ\", ByteSize.FromMegabytes(10).ToString(\"##.#### MB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsGigabytes() =>\r\n        Assert.Equal(\"10 ГБ\", ByteSize.FromGigabytes(10).ToString(\"##.#### GB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsTerabytes() =>\r\n        Assert.Equal(\"10 ТБ\", ByteSize.FromTerabytes(10).ToString(\"##.#### TB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsSelectedFormat() =>\r\n        Assert.Equal(\"10,0 ТБ\", ByteSize.FromTerabytes(10).ToString(\"0.0 TB\"));\r\n\r\n    [Fact]\r\n    public void ReturnsLargestMetricPrefixLargerThanZero() =>\r\n        Assert.Equal(\"512 КБ\", ByteSize.FromMegabytes(.5).ToString(\"#.#\"));\r\n\r\n    [Fact]\r\n    public void ReturnsLargestMetricPrefixLargerThanZeroForNegativeValues() =>\r\n        Assert.Equal(\"-512 КБ\", ByteSize.FromMegabytes(-.5).ToString(\"#.#\"));\r\n\r\n    [Fact]\r\n    public void ReturnsBytesViaGeneralFormat() =>\r\n        Assert.Equal(\"10 Б\", $\"{ByteSize.FromBytes(10)}\");\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ru-RU/DateHumanizeTests.cs",
    "content": "﻿namespace ruRU;\r\n\r\n[UseCulture(\"ru-RU\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"секунду назад\")]\r\n    [InlineData(2, \"2 секунды назад\")]\r\n    [InlineData(3, \"3 секунды назад\")]\r\n    [InlineData(4, \"4 секунды назад\")]\r\n    [InlineData(5, \"5 секунд назад\")]\r\n    [InlineData(6, \"6 секунд назад\")]\r\n    [InlineData(10, \"10 секунд назад\")]\r\n    [InlineData(11, \"11 секунд назад\")]\r\n    [InlineData(19, \"19 секунд назад\")]\r\n    [InlineData(20, \"20 секунд назад\")]\r\n    [InlineData(21, \"21 секунду назад\")]\r\n    [InlineData(22, \"22 секунды назад\")]\r\n    [InlineData(23, \"23 секунды назад\")]\r\n    [InlineData(24, \"24 секунды назад\")]\r\n    [InlineData(25, \"25 секунд назад\")]\r\n    [InlineData(40, \"40 секунд назад\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"через секунду\")]\r\n    [InlineData(2, \"через 2 секунды\")]\r\n    [InlineData(3, \"через 3 секунды\")]\r\n    [InlineData(4, \"через 4 секунды\")]\r\n    [InlineData(5, \"через 5 секунд\")]\r\n    [InlineData(6, \"через 6 секунд\")]\r\n    [InlineData(10, \"через 10 секунд\")]\r\n    [InlineData(11, \"через 11 секунд\")]\r\n    [InlineData(19, \"через 19 секунд\")]\r\n    [InlineData(20, \"через 20 секунд\")]\r\n    [InlineData(21, \"через 21 секунду\")]\r\n    [InlineData(22, \"через 22 секунды\")]\r\n    [InlineData(23, \"через 23 секунды\")]\r\n    [InlineData(24, \"через 24 секунды\")]\r\n    [InlineData(25, \"через 25 секунд\")]\r\n    [InlineData(40, \"через 40 секунд\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"минуту назад\")]\r\n    [InlineData(2, \"2 минуты назад\")]\r\n    [InlineData(3, \"3 минуты назад\")]\r\n    [InlineData(4, \"4 минуты назад\")]\r\n    [InlineData(5, \"5 минут назад\")]\r\n    [InlineData(6, \"6 минут назад\")]\r\n    [InlineData(10, \"10 минут назад\")]\r\n    [InlineData(11, \"11 минут назад\")]\r\n    [InlineData(19, \"19 минут назад\")]\r\n    [InlineData(20, \"20 минут назад\")]\r\n    [InlineData(21, \"21 минуту назад\")]\r\n    [InlineData(22, \"22 минуты назад\")]\r\n    [InlineData(23, \"23 минуты назад\")]\r\n    [InlineData(24, \"24 минуты назад\")]\r\n    [InlineData(25, \"25 минут назад\")]\r\n    [InlineData(40, \"40 минут назад\")]\r\n    [InlineData(60, \"час назад\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"через минуту\")]\r\n    [InlineData(2, \"через 2 минуты\")]\r\n    [InlineData(3, \"через 3 минуты\")]\r\n    [InlineData(4, \"через 4 минуты\")]\r\n    [InlineData(5, \"через 5 минут\")]\r\n    [InlineData(6, \"через 6 минут\")]\r\n    [InlineData(10, \"через 10 минут\")]\r\n    [InlineData(11, \"через 11 минут\")]\r\n    [InlineData(19, \"через 19 минут\")]\r\n    [InlineData(20, \"через 20 минут\")]\r\n    [InlineData(21, \"через 21 минуту\")]\r\n    [InlineData(22, \"через 22 минуты\")]\r\n    [InlineData(23, \"через 23 минуты\")]\r\n    [InlineData(24, \"через 24 минуты\")]\r\n    [InlineData(25, \"через 25 минут\")]\r\n    [InlineData(40, \"через 40 минут\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"час назад\")]\r\n    [InlineData(2, \"2 часа назад\")]\r\n    [InlineData(3, \"3 часа назад\")]\r\n    [InlineData(4, \"4 часа назад\")]\r\n    [InlineData(5, \"5 часов назад\")]\r\n    [InlineData(6, \"6 часов назад\")]\r\n    [InlineData(10, \"10 часов назад\")]\r\n    [InlineData(11, \"11 часов назад\")]\r\n    [InlineData(19, \"19 часов назад\")]\r\n    [InlineData(20, \"20 часов назад\")]\r\n    [InlineData(21, \"21 час назад\")]\r\n    [InlineData(22, \"22 часа назад\")]\r\n    [InlineData(23, \"23 часа назад\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"через час\")]\r\n    [InlineData(2, \"через 2 часа\")]\r\n    [InlineData(3, \"через 3 часа\")]\r\n    [InlineData(4, \"через 4 часа\")]\r\n    [InlineData(5, \"через 5 часов\")]\r\n    [InlineData(6, \"через 6 часов\")]\r\n    [InlineData(10, \"через 10 часов\")]\r\n    [InlineData(11, \"через 11 часов\")]\r\n    [InlineData(19, \"через 19 часов\")]\r\n    [InlineData(20, \"через 20 часов\")]\r\n    [InlineData(21, \"через 21 час\")]\r\n    [InlineData(22, \"через 22 часа\")]\r\n    [InlineData(23, \"через 23 часа\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"вчера\")]\r\n    [InlineData(2, \"2 дня назад\")]\r\n    [InlineData(3, \"3 дня назад\")]\r\n    [InlineData(4, \"4 дня назад\")]\r\n    [InlineData(5, \"5 дней назад\")]\r\n    [InlineData(6, \"6 дней назад\")]\r\n    [InlineData(10, \"10 дней назад\")]\r\n    [InlineData(11, \"11 дней назад\")]\r\n    [InlineData(19, \"19 дней назад\")]\r\n    [InlineData(20, \"20 дней назад\")]\r\n    [InlineData(21, \"21 день назад\")]\r\n    [InlineData(22, \"22 дня назад\")]\r\n    [InlineData(23, \"23 дня назад\")]\r\n    [InlineData(24, \"24 дня назад\")]\r\n    [InlineData(25, \"25 дней назад\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"завтра\")]\r\n    [InlineData(2, \"через 2 дня\")]\r\n    [InlineData(3, \"через 3 дня\")]\r\n    [InlineData(4, \"через 4 дня\")]\r\n    [InlineData(5, \"через 5 дней\")]\r\n    [InlineData(6, \"через 6 дней\")]\r\n    [InlineData(10, \"через 10 дней\")]\r\n    [InlineData(11, \"через 11 дней\")]\r\n    [InlineData(19, \"через 19 дней\")]\r\n    [InlineData(20, \"через 20 дней\")]\r\n    [InlineData(21, \"через 21 день\")]\r\n    [InlineData(22, \"через 22 дня\")]\r\n    [InlineData(23, \"через 23 дня\")]\r\n    [InlineData(24, \"через 24 дня\")]\r\n    [InlineData(25, \"через 25 дней\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"месяц назад\")]\r\n    [InlineData(2, \"2 месяца назад\")]\r\n    [InlineData(3, \"3 месяца назад\")]\r\n    [InlineData(4, \"4 месяца назад\")]\r\n    [InlineData(5, \"5 месяцев назад\")]\r\n    [InlineData(6, \"6 месяцев назад\")]\r\n    [InlineData(10, \"10 месяцев назад\")]\r\n    [InlineData(11, \"11 месяцев назад\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"через месяц\")]\r\n    [InlineData(2, \"через 2 месяца\")]\r\n    [InlineData(3, \"через 3 месяца\")]\r\n    [InlineData(4, \"через 4 месяца\")]\r\n    [InlineData(5, \"через 5 месяцев\")]\r\n    [InlineData(6, \"через 6 месяцев\")]\r\n    [InlineData(10, \"через 10 месяцев\")]\r\n    [InlineData(11, \"через 11 месяцев\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"год назад\")]\r\n    [InlineData(2, \"2 года назад\")]\r\n    [InlineData(3, \"3 года назад\")]\r\n    [InlineData(4, \"4 года назад\")]\r\n    [InlineData(5, \"5 лет назад\")]\r\n    [InlineData(6, \"6 лет назад\")]\r\n    [InlineData(10, \"10 лет назад\")]\r\n    [InlineData(11, \"11 лет назад\")]\r\n    [InlineData(19, \"19 лет назад\")]\r\n    [InlineData(21, \"21 год назад\")]\r\n    [InlineData(111, \"111 лет назад\")]\r\n    [InlineData(121, \"121 год назад\")]\r\n    [InlineData(222, \"222 года назад\")]\r\n    [InlineData(325, \"325 лет назад\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"через год\")]\r\n    [InlineData(2, \"через 2 года\")]\r\n    [InlineData(3, \"через 3 года\")]\r\n    [InlineData(4, \"через 4 года\")]\r\n    [InlineData(5, \"через 5 лет\")]\r\n    [InlineData(6, \"через 6 лет\")]\r\n    [InlineData(10, \"через 10 лет\")]\r\n    [InlineData(11, \"через 11 лет\")]\r\n    [InlineData(19, \"через 19 лет\")]\r\n    [InlineData(20, \"через 20 лет\")]\r\n    [InlineData(21, \"через 21 год\")]\r\n    [InlineData(111, \"через 111 лет\")]\r\n    [InlineData(121, \"через 121 год\")]\r\n    [InlineData(222, \"через 222 года\")]\r\n    [InlineData(325, \"через 325 лет\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"сейчас\", 0, TimeUnit.Day, Tense.Past);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ru-RU/HeadingTests.cs",
    "content": "﻿namespace ruRU;\r\n\r\n[UseCulture(\"ru-RU\")]\r\npublic class HeadingTests\r\n{\r\n    [InlineData(0, \"С\")]\r\n    [InlineData(11.2, \"С\")]\r\n    [InlineData(11.3, \"ССВ\")]\r\n    [InlineData(22.5, \"ССВ\")]\r\n    [InlineData(33.7, \"ССВ\")]\r\n    [InlineData(33.8, \"СВ\")]\r\n    [InlineData(45, \"СВ\")]\r\n    [InlineData(56.2, \"СВ\")]\r\n    [InlineData(56.3, \"ВСВ\")]\r\n    [InlineData(67.5, \"ВСВ\")]\r\n    [InlineData(78.7, \"ВСВ\")]\r\n    [InlineData(78.8, \"В\")]\r\n    [InlineData(90, \"В\")]\r\n    [InlineData(101.2, \"В\")]\r\n    [InlineData(101.3, \"ВЮВ\")]\r\n    [InlineData(112.5, \"ВЮВ\")]\r\n    [InlineData(123.7, \"ВЮВ\")]\r\n    [InlineData(123.8, \"ЮВ\")]\r\n    [InlineData(135, \"ЮВ\")]\r\n    [InlineData(146.2, \"ЮВ\")]\r\n    [InlineData(146.3, \"ЮЮВ\")]\r\n    [InlineData(157.5, \"ЮЮВ\")]\r\n    [InlineData(168.7, \"ЮЮВ\")]\r\n    [InlineData(168.8, \"Ю\")]\r\n    [InlineData(180, \"Ю\")]\r\n    [InlineData(191.2, \"Ю\")]\r\n    [InlineData(191.3, \"ЮЮЗ\")]\r\n    [InlineData(202.5, \"ЮЮЗ\")]\r\n    [InlineData(213.7, \"ЮЮЗ\")]\r\n    [InlineData(213.8, \"ЮЗ\")]\r\n    [InlineData(225, \"ЮЗ\")]\r\n    [InlineData(236.2, \"ЮЗ\")]\r\n    [InlineData(236.3, \"ЗЮЗ\")]\r\n    [InlineData(247.5, \"ЗЮЗ\")]\r\n    [InlineData(258.7, \"ЗЮЗ\")]\r\n    [InlineData(258.8, \"З\")]\r\n    [InlineData(270, \"З\")]\r\n    [InlineData(281.2, \"З\")]\r\n    [InlineData(281.3, \"ЗСЗ\")]\r\n    [InlineData(292.5, \"ЗСЗ\")]\r\n    [InlineData(303.7, \"ЗСЗ\")]\r\n    [InlineData(303.8, \"СЗ\")]\r\n    [InlineData(315, \"СЗ\")]\r\n    [InlineData(326.2, \"СЗ\")]\r\n    [InlineData(326.3, \"ССЗ\")]\r\n    [InlineData(337.5, \"ССЗ\")]\r\n    [InlineData(348.7, \"ССЗ\")]\r\n    [InlineData(348.8, \"С\")]\r\n    [InlineData(360, \"С\")]\r\n    [InlineData(720, \"С\")]\r\n    [Theory]\r\n    public void ToHeadingAbbreviated(double heading, string expected) =>\r\n        Assert.Equal(expected, heading.ToHeading());\r\n\r\n    [InlineData(0, \"север\")]\r\n    [InlineData(22.5, \"северо-северо-восток\")]\r\n    [InlineData(45, \"северо-восток\")]\r\n    [InlineData(67.5, \"востоко-северо-восток\")]\r\n    [InlineData(90, \"восток\")]\r\n    [InlineData(112.5, \"востоко-юго-восток\")]\r\n    [InlineData(135, \"юго-восток\")]\r\n    [InlineData(157.5, \"юго-юго-восток\")]\r\n    [InlineData(180, \"юг\")]\r\n    [InlineData(202.5, \"юго-юго-запад\")]\r\n    [InlineData(225, \"юго-запад\")]\r\n    [InlineData(247.5, \"западо-юго-запад\")]\r\n    [InlineData(270, \"запад\")]\r\n    [InlineData(292.5, \"западо-северо-запад\")]\r\n    [InlineData(315, \"северо-запад\")]\r\n    [InlineData(337.5, \"северо-северо-запад\")]\r\n    [InlineData(360, \"север\")]\r\n    [InlineData(720, \"север\")]\r\n    [Theory]\r\n    public void ToHeading(double heading, string expected) =>\r\n        Assert.Equal(expected, heading.ToHeading(HeadingStyle.Full));\r\n\r\n    [InlineData(\"С\", 0)]\r\n    [InlineData(\"ССВ\", 22.5)]\r\n    [InlineData(\"СВ\", 45)]\r\n    [InlineData(\"ВСВ\", 67.5)]\r\n    [InlineData(\"В\", 90)]\r\n    [InlineData(\"ВЮВ\", 112.5)]\r\n    [InlineData(\"ЮВ\", 135)]\r\n    [InlineData(\"ЮЮВ\", 157.5)]\r\n    [InlineData(\"Ю\", 180)]\r\n    [InlineData(\"ЮЮЗ\", 202.5)]\r\n    [InlineData(\"ЮЗ\", 225)]\r\n    [InlineData(\"ЗЮЗ\", 247.5)]\r\n    [InlineData(\"З\", 270)]\r\n    [InlineData(\"ЗСЗ\", 292.5)]\r\n    [InlineData(\"СЗ\", 315)]\r\n    [InlineData(\"ССЗ\", 337.5)]\r\n    [Theory]\r\n    public void FromShortHeading(string heading, double expected) =>\r\n        Assert.Equal(expected, heading.FromAbbreviatedHeading());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ru-RU/NumberToWordsTests.cs",
    "content": "﻿namespace ruRU;\r\n\r\n[UseCulture(\"ru-RU\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(-123, \"минус сто двадцать три\")]\r\n    [InlineData(0, \"ноль\")]\r\n    [InlineData(1, \"один\")]\r\n    [InlineData(10, \"десять\")]\r\n    [InlineData(11, \"одиннадцать\")]\r\n    [InlineData(12, \"двенадцать\")]\r\n    [InlineData(13, \"тринадцать\")]\r\n    [InlineData(14, \"четырнадцать\")]\r\n    [InlineData(15, \"пятнадцать\")]\r\n    [InlineData(16, \"шестнадцать\")]\r\n    [InlineData(17, \"семнадцать\")]\r\n    [InlineData(18, \"восемнадцать\")]\r\n    [InlineData(19, \"девятнадцать\")]\r\n    [InlineData(20, \"двадцать\")]\r\n    [InlineData(30, \"тридцать\")]\r\n    [InlineData(40, \"сорок\")]\r\n    [InlineData(50, \"пятьдесят\")]\r\n    [InlineData(60, \"шестьдесят\")]\r\n    [InlineData(70, \"семьдесят\")]\r\n    [InlineData(80, \"восемьдесят\")]\r\n    [InlineData(90, \"девяносто\")]\r\n    [InlineData(100, \"сто\")]\r\n    [InlineData(200, \"двести\")]\r\n    [InlineData(300, \"триста\")]\r\n    [InlineData(400, \"четыреста\")]\r\n    [InlineData(500, \"пятьсот\")]\r\n    [InlineData(600, \"шестьсот\")]\r\n    [InlineData(700, \"семьсот\")]\r\n    [InlineData(800, \"восемьсот\")]\r\n    [InlineData(900, \"девятьсот\")]\r\n    [InlineData(1000, \"одна тысяча\")]\r\n    [InlineData(2000, \"две тысячи\")]\r\n    [InlineData(3000, \"три тысячи\")]\r\n    [InlineData(4000, \"четыре тысячи\")]\r\n    [InlineData(5000, \"пять тысяч\")]\r\n    [InlineData(10000, \"десять тысяч\")]\r\n    [InlineData(100000, \"сто тысяч\")]\r\n    [InlineData(1000000, \"один миллион\")]\r\n    [InlineData(2000000, \"два миллиона\")]\r\n    [InlineData(10000000, \"десять миллионов\")]\r\n    [InlineData(100000000, \"сто миллионов\")]\r\n    [InlineData(1000000000, \"один миллиард\")]\r\n    [InlineData(2000000000, \"два миллиарда\")]\r\n    [InlineData(3000000000, \"три миллиарда\")]\r\n    [InlineData(4000000000, \"четыре миллиарда\")]\r\n    [InlineData(122, \"сто двадцать два\")]\r\n    [InlineData(3501, \"три тысячи пятьсот один\")]\r\n    [InlineData(111, \"сто одиннадцать\")]\r\n    [InlineData(1112, \"одна тысяча сто двенадцать\")]\r\n    [InlineData(11213, \"одиннадцать тысяч двести тринадцать\")]\r\n    [InlineData(121314, \"сто двадцать одна тысяча триста четырнадцать\")]\r\n    [InlineData(2132415, \"два миллиона сто тридцать две тысячи четыреста пятнадцать\")]\r\n    [InlineData(12345516, \"двенадцать миллионов триста сорок пять тысяч пятьсот шестнадцать\")]\r\n    [InlineData(751633617, \"семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцать\")]\r\n    [InlineData(1111111118, \"один миллиард сто одиннадцать миллионов сто одиннадцать тысяч сто восемнадцать\")]\r\n    [InlineData(4111111118, \"четыре миллиарда сто одиннадцать миллионов сто одиннадцать тысяч сто восемнадцать\")]\r\n    [InlineData(-751633617, \"минус семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцать\")]\r\n    [InlineData(999999999999, \"девятьсот девяносто девять миллиардов девятьсот девяносто девять миллионов девятьсот девяносто девять тысяч девятьсот девяносто девять\")]\r\n    [InlineData(1_000_000_000_000, \"один триллион\")]\r\n    [InlineData(3_000_000_000_000, \"три триллиона\")]\r\n    [InlineData(5_000_000_000_000, \"пять триллионов\")]\r\n    [InlineData(999_000_000_000_000, \"девятьсот девяносто девять триллионов\")]\r\n    [InlineData(\r\n        long.MaxValue,\r\n        \"девять квинтиллионов \" +\r\n        \"двести двадцать три квадриллиона \" +\r\n        \"триста семьдесят два триллиона \" +\r\n        \"тридцать шесть миллиардов \" +\r\n        \"восемьсот пятьдесят четыре миллиона \" +\r\n        \"семьсот семьдесят пять тысяч \" +\r\n        \"восемьсот семь\")]\r\n    [InlineData(\r\n        long.MinValue,\r\n        \"минус девять квинтиллионов \" +\r\n        \"двести двадцать три квадриллиона \" +\r\n        \"триста семьдесят два триллиона \" +\r\n        \"тридцать шесть миллиардов \" +\r\n        \"восемьсот пятьдесят четыре миллиона \" +\r\n        \"семьсот семьдесят пять тысяч \" +\r\n        \"восемьсот восемь\")]\r\n    public void ToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(122, \"сто двадцать две\", GrammaticalGender.Feminine)]\r\n    [InlineData(3501, \"три тысячи пятьсот одна\", GrammaticalGender.Feminine)]\r\n    [InlineData(3501, \"три тысячи пятьсот одно\", GrammaticalGender.Neuter)]\r\n    public void ToWordsWithGender(int number, string expected, GrammaticalGender gender) =>\r\n        Assert.Equal(expected, number.ToWords(gender));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"нулевой\")]\r\n    [InlineData(1, \"первый\")]\r\n    [InlineData(2, \"второй\")]\r\n    [InlineData(3, \"третий\")]\r\n    [InlineData(10, \"десятый\")]\r\n    [InlineData(11, \"одиннадцатый\")]\r\n    [InlineData(12, \"двенадцатый\")]\r\n    [InlineData(13, \"тринадцатый\")]\r\n    [InlineData(14, \"четырнадцатый\")]\r\n    [InlineData(15, \"пятнадцатый\")]\r\n    [InlineData(16, \"шестнадцатый\")]\r\n    [InlineData(17, \"семнадцатый\")]\r\n    [InlineData(18, \"восемнадцатый\")]\r\n    [InlineData(19, \"девятнадцатый\")]\r\n    [InlineData(20, \"двадцатый\")]\r\n    [InlineData(30, \"тридцатый\")]\r\n    [InlineData(40, \"сороковой\")]\r\n    [InlineData(50, \"пятидесятый\")]\r\n    [InlineData(60, \"шестидесятый\")]\r\n    [InlineData(70, \"семидесятый\")]\r\n    [InlineData(80, \"восьмидесятый\")]\r\n    [InlineData(90, \"девяностый\")]\r\n    [InlineData(100, \"сотый\")]\r\n    [InlineData(101, \"сто первый\")]\r\n    [InlineData(140, \"сто сороковой\")]\r\n    [InlineData(200, \"двухсотый\")]\r\n    [InlineData(300, \"трёхсотый\")]\r\n    [InlineData(400, \"четырёхсотый\")]\r\n    [InlineData(500, \"пятисотый\")]\r\n    [InlineData(600, \"шестисотый\")]\r\n    [InlineData(700, \"семисотый\")]\r\n    [InlineData(800, \"восьмисотый\")]\r\n    [InlineData(900, \"девятисотый\")]\r\n    [InlineData(1000, \"тысячный\")]\r\n    [InlineData(1001, \"одна тысяча первый\")]\r\n    [InlineData(1040, \"одна тысяча сороковой\")]\r\n    [InlineData(2000, \"двухтысячный\")]\r\n    [InlineData(3000, \"трёхтысячный\")]\r\n    [InlineData(4000, \"четырёхтысячный\")]\r\n    [InlineData(5000, \"пятитысячный\")]\r\n    [InlineData(10000, \"десятитысячный\")]\r\n    [InlineData(21000, \"двадцатиоднотысячный\")]\r\n    [InlineData(100000, \"стотысячный\")]\r\n    [InlineData(101000, \"стооднотысячный\")]\r\n    [InlineData(121000, \"стодвадцатиоднотысячный\")]\r\n    [InlineData(200000, \"двухсоттысячный\")]\r\n    [InlineData(1000000, \"миллионный\")]\r\n    [InlineData(2000000, \"двухмиллионный\")]\r\n    [InlineData(10000000, \"десятимиллионный\")]\r\n    [InlineData(21000000, \"двадцатиодномиллионный\")]\r\n    [InlineData(100000000, \"стомиллионный\")]\r\n    [InlineData(230000000, \"двухсоттридцатимиллионный\")]\r\n    [InlineData(1000000000, \"миллиардный\")]\r\n    [InlineData(2000000000, \"двухмиллиардный\")]\r\n    [InlineData(122, \"сто двадцать второй\")]\r\n    [InlineData(3501, \"три тысячи пятьсот первый\")]\r\n    [InlineData(111, \"сто одиннадцатый\")]\r\n    [InlineData(1112, \"одна тысяча сто двенадцатый\")]\r\n    [InlineData(11213, \"одиннадцать тысяч двести тринадцатый\")]\r\n    [InlineData(121314, \"сто двадцать одна тысяча триста четырнадцатый\")]\r\n    [InlineData(2132415, \"два миллиона сто тридцать две тысячи четыреста пятнадцатый\")]\r\n    [InlineData(12345516, \"двенадцать миллионов триста сорок пять тысяч пятьсот шестнадцатый\")]\r\n    [InlineData(751633617, \"семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатый\")]\r\n    [InlineData(1111111118, \"один миллиард сто одиннадцать миллионов сто одиннадцать тысяч сто восемнадцатый\")]\r\n    [InlineData(1111111000, \"один миллиард сто одиннадцать миллионов стоодиннадцатитысячный\")]\r\n    [InlineData(1234567000, \"один миллиард двести тридцать четыре миллиона пятисотшестидесятисемитысячный\")]\r\n    [InlineData(-751633617, \"минус семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатый\")]\r\n    public void ToOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"нулевая\")]\r\n    [InlineData(1, \"первая\")]\r\n    [InlineData(2, \"вторая\")]\r\n    [InlineData(3, \"третья\")]\r\n    [InlineData(10, \"десятая\")]\r\n    [InlineData(11, \"одиннадцатая\")]\r\n    [InlineData(12, \"двенадцатая\")]\r\n    [InlineData(13, \"тринадцатая\")]\r\n    [InlineData(14, \"четырнадцатая\")]\r\n    [InlineData(15, \"пятнадцатая\")]\r\n    [InlineData(16, \"шестнадцатая\")]\r\n    [InlineData(17, \"семнадцатая\")]\r\n    [InlineData(18, \"восемнадцатая\")]\r\n    [InlineData(19, \"девятнадцатая\")]\r\n    [InlineData(20, \"двадцатая\")]\r\n    [InlineData(30, \"тридцатая\")]\r\n    [InlineData(40, \"сороковая\")]\r\n    [InlineData(50, \"пятидесятая\")]\r\n    [InlineData(60, \"шестидесятая\")]\r\n    [InlineData(70, \"семидесятая\")]\r\n    [InlineData(80, \"восьмидесятая\")]\r\n    [InlineData(90, \"девяностая\")]\r\n    [InlineData(100, \"сотая\")]\r\n    [InlineData(200, \"двухсотая\")]\r\n    [InlineData(300, \"трёхсотая\")]\r\n    [InlineData(400, \"четырёхсотая\")]\r\n    [InlineData(500, \"пятисотая\")]\r\n    [InlineData(600, \"шестисотая\")]\r\n    [InlineData(700, \"семисотая\")]\r\n    [InlineData(800, \"восьмисотая\")]\r\n    [InlineData(900, \"девятисотая\")]\r\n    [InlineData(1000, \"тысячная\")]\r\n    [InlineData(2000, \"двухтысячная\")]\r\n    [InlineData(3000, \"трёхтысячная\")]\r\n    [InlineData(4000, \"четырёхтысячная\")]\r\n    [InlineData(5000, \"пятитысячная\")]\r\n    [InlineData(10000, \"десятитысячная\")]\r\n    [InlineData(90000, \"девяностотысячная\")]\r\n    [InlineData(100000, \"стотысячная\")]\r\n    [InlineData(990000, \"девятисотдевяностотысячная\")]\r\n    [InlineData(990001, \"девятьсот девяносто тысяч первая\")]\r\n    [InlineData(1000000, \"миллионная\")]\r\n    [InlineData(2000000, \"двухмиллионная\")]\r\n    [InlineData(10000000, \"десятимиллионная\")]\r\n    [InlineData(100000000, \"стомиллионная\")]\r\n    [InlineData(1000000000, \"миллиардная\")]\r\n    [InlineData(2000000000, \"двухмиллиардная\")]\r\n    [InlineData(122, \"сто двадцать вторая\")]\r\n    [InlineData(3501, \"три тысячи пятьсот первая\")]\r\n    [InlineData(111, \"сто одиннадцатая\")]\r\n    [InlineData(1112, \"одна тысяча сто двенадцатая\")]\r\n    [InlineData(11000, \"одиннадцатитысячная\")]\r\n    [InlineData(11001, \"одиннадцать тысяч первая\")]\r\n    [InlineData(11213, \"одиннадцать тысяч двести тринадцатая\")]\r\n    [InlineData(15000, \"пятнадцатитысячная\")]\r\n    [InlineData(20000, \"двадцатитысячная\")]\r\n    [InlineData(121314, \"сто двадцать одна тысяча триста четырнадцатая\")]\r\n    [InlineData(2132415, \"два миллиона сто тридцать две тысячи четыреста пятнадцатая\")]\r\n    [InlineData(12345516, \"двенадцать миллионов триста сорок пять тысяч пятьсот шестнадцатая\")]\r\n    [InlineData(751633617, \"семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатая\")]\r\n    [InlineData(1111111118, \"один миллиард сто одиннадцать миллионов сто одиннадцать тысяч сто восемнадцатая\")]\r\n    [InlineData(-751633617, \"минус семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатая\")]\r\n    public void ToOrdinalWordsFeminine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(3, \"третье\")]\r\n    [InlineData(111, \"сто одиннадцатое\")]\r\n    [InlineData(1112, \"одна тысяча сто двенадцатое\")]\r\n    [InlineData(11213, \"одиннадцать тысяч двести тринадцатое\")]\r\n    [InlineData(121314, \"сто двадцать одна тысяча триста четырнадцатое\")]\r\n    [InlineData(2132415, \"два миллиона сто тридцать две тысячи четыреста пятнадцатое\")]\r\n    [InlineData(12345516, \"двенадцать миллионов триста сорок пять тысяч пятьсот шестнадцатое\")]\r\n    [InlineData(751633617, \"семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатое\")]\r\n    [InlineData(1111111118, \"один миллиард сто одиннадцать миллионов сто одиннадцать тысяч сто восемнадцатое\")]\r\n    [InlineData(-751633617, \"минус семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатое\")]\r\n    public void ToOrdinalWordsNeuter(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Neuter));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ru-RU/OrdinalizeTests.cs",
    "content": "﻿namespace ruRU;\r\n\r\n[UseCulture(\"ru-RU\")]\r\npublic class OrdinalizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"0\", \"0-й\")]\r\n    [InlineData(\"1\", \"1-й\")]\r\n    [InlineData(\"2\", \"2-й\")]\r\n    [InlineData(\"3\", \"3-й\")]\r\n    [InlineData(\"4\", \"4-й\")]\r\n    [InlineData(\"5\", \"5-й\")]\r\n    [InlineData(\"6\", \"6-й\")]\r\n    [InlineData(\"23\", \"23-й\")]\r\n    [InlineData(\"100\", \"100-й\")]\r\n    [InlineData(\"101\", \"101-й\")]\r\n    [InlineData(\"102\", \"102-й\")]\r\n    [InlineData(\"103\", \"103-й\")]\r\n    [InlineData(\"1001\", \"1001-й\")]\r\n    public void OrdinalizeString(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0-я\")]\r\n    [InlineData(\"1\", \"1-я\")]\r\n    [InlineData(\"2\", \"2-я\")]\r\n    [InlineData(\"3\", \"3-я\")]\r\n    [InlineData(\"4\", \"4-я\")]\r\n    [InlineData(\"5\", \"5-я\")]\r\n    [InlineData(\"6\", \"6-я\")]\r\n    [InlineData(\"23\", \"23-я\")]\r\n    [InlineData(\"100\", \"100-я\")]\r\n    [InlineData(\"101\", \"101-я\")]\r\n    [InlineData(\"102\", \"102-я\")]\r\n    [InlineData(\"103\", \"103-я\")]\r\n    [InlineData(\"1001\", \"1001-я\")]\r\n    public void OrdinalizeStringFeminine(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0-е\")]\r\n    [InlineData(\"1\", \"1-е\")]\r\n    [InlineData(\"2\", \"2-е\")]\r\n    [InlineData(\"3\", \"3-е\")]\r\n    [InlineData(\"4\", \"4-е\")]\r\n    [InlineData(\"5\", \"5-е\")]\r\n    [InlineData(\"6\", \"6-е\")]\r\n    [InlineData(\"23\", \"23-е\")]\r\n    [InlineData(\"100\", \"100-е\")]\r\n    [InlineData(\"101\", \"101-е\")]\r\n    [InlineData(\"102\", \"102-е\")]\r\n    [InlineData(\"103\", \"103-е\")]\r\n    [InlineData(\"1001\", \"1001-е\")]\r\n    public void OrdinalizeStringNeuter(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Neuter), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0-й\")]\r\n    [InlineData(1, \"1-й\")]\r\n    [InlineData(2, \"2-й\")]\r\n    [InlineData(3, \"3-й\")]\r\n    [InlineData(4, \"4-й\")]\r\n    [InlineData(5, \"5-й\")]\r\n    [InlineData(6, \"6-й\")]\r\n    [InlineData(10, \"10-й\")]\r\n    [InlineData(23, \"23-й\")]\r\n    [InlineData(100, \"100-й\")]\r\n    [InlineData(101, \"101-й\")]\r\n    [InlineData(102, \"102-й\")]\r\n    [InlineData(103, \"103-й\")]\r\n    [InlineData(1001, \"1001-й\")]\r\n    public void OrdinalizeNumber(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0-я\")]\r\n    [InlineData(1, \"1-я\")]\r\n    [InlineData(2, \"2-я\")]\r\n    [InlineData(3, \"3-я\")]\r\n    [InlineData(4, \"4-я\")]\r\n    [InlineData(5, \"5-я\")]\r\n    [InlineData(6, \"6-я\")]\r\n    [InlineData(10, \"10-я\")]\r\n    [InlineData(23, \"23-я\")]\r\n    [InlineData(100, \"100-я\")]\r\n    [InlineData(101, \"101-я\")]\r\n    [InlineData(102, \"102-я\")]\r\n    [InlineData(103, \"103-я\")]\r\n    [InlineData(1001, \"1001-я\")]\r\n    public void OrdinalizeNumberFeminine(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0-е\")]\r\n    [InlineData(1, \"1-е\")]\r\n    [InlineData(2, \"2-е\")]\r\n    [InlineData(3, \"3-е\")]\r\n    [InlineData(4, \"4-е\")]\r\n    [InlineData(5, \"5-е\")]\r\n    [InlineData(6, \"6-е\")]\r\n    [InlineData(23, \"23-е\")]\r\n    [InlineData(100, \"100-е\")]\r\n    [InlineData(101, \"101-е\")]\r\n    [InlineData(102, \"102-е\")]\r\n    [InlineData(103, \"103-е\")]\r\n    [InlineData(1001, \"1001-е\")]\r\n    public void OrdinalizeNumberNeuter(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Neuter), ordinalized);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ru-RU/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace ruRU;\r\n\r\n[UseCulture(\"ru-RU\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(4, false, \"4 дня\")]\r\n    [InlineData(23, false, \"3 недели\")]\r\n    [InlineData(64, false, \"2 месяца\")]\r\n    [InlineData(367, true, \"один год\")]\r\n    [InlineData(750, true, \"два года\")]\r\n    public void Age(int days, bool toWords, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).ToAge(toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"один год\", true)]\r\n    [InlineData(366, \"1 год\")]\r\n    [InlineData(731, \"2 года\")]\r\n    [InlineData(1096, \"3 года\")]\r\n    [InlineData(4018, \"11 лет\")]\r\n    public void Years(int days, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: toWords));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"один месяц\", true)]\r\n    [InlineData(31, \"1 месяц\")]\r\n    [InlineData(61, \"2 месяца\")]\r\n    [InlineData(92, \"3 месяца\")]\r\n    [InlineData(335, \"11 месяцев\")]\r\n    public void Months(int days, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"одна неделя\", true)]\r\n    [InlineData(7, \"1 неделя\")]\r\n    [InlineData(14, \"2 недели\")]\r\n    [InlineData(21, \"3 недели\")]\r\n    [InlineData(28, \"4 недели\")]\r\n    [InlineData(35, \"5 недель\")]\r\n    [InlineData(77, \"11 недель\")]\r\n    public void Weeks(int days, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"один день\", true)]\r\n    [InlineData(1, \"1 день\")]\r\n    [InlineData(2, \"2 дня\")]\r\n    [InlineData(3, \"3 дня\")]\r\n    [InlineData(4, \"4 дня\")]\r\n    [InlineData(5, \"5 дней\")]\r\n    [InlineData(6, \"6 дней\")]\r\n    public void Days(int days, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"один час\", true)]\r\n    [InlineData(1, \"1 час\")]\r\n    [InlineData(2, \"2 часа\")]\r\n    [InlineData(3, \"3 часа\")]\r\n    [InlineData(4, \"4 часа\")]\r\n    [InlineData(5, \"5 часов\")]\r\n    [InlineData(6, \"6 часов\")]\r\n    [InlineData(10, \"10 часов\")]\r\n    [InlineData(11, \"11 часов\")]\r\n    [InlineData(19, \"19 часов\")]\r\n    [InlineData(20, \"20 часов\")]\r\n    [InlineData(21, \"21 час\")]\r\n    [InlineData(22, \"22 часа\")]\r\n    [InlineData(23, \"23 часа\")]\r\n    public void Hours(int hours, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize(toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"одна минута\", true)]\r\n    [InlineData(1, \"1 минута\")]\r\n    [InlineData(2, \"2 минуты\")]\r\n    [InlineData(3, \"3 минуты\")]\r\n    [InlineData(4, \"4 минуты\")]\r\n    [InlineData(5, \"5 минут\")]\r\n    [InlineData(6, \"6 минут\")]\r\n    [InlineData(10, \"10 минут\")]\r\n    [InlineData(11, \"11 минут\")]\r\n    [InlineData(19, \"19 минут\")]\r\n    [InlineData(20, \"20 минут\")]\r\n    [InlineData(21, \"21 минута\")]\r\n    [InlineData(21, \"двадцать одна минута\", true)]\r\n    [InlineData(22, \"22 минуты\")]\r\n    [InlineData(23, \"23 минуты\")]\r\n    [InlineData(24, \"24 минуты\")]\r\n    [InlineData(25, \"25 минут\")]\r\n    [InlineData(40, \"40 минут\")]\r\n    public void Minutes(int minutes, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize(toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"одна секунда\", true)]\r\n    [InlineData(1, \"1 секунда\")]\r\n    [InlineData(2, \"2 секунды\")]\r\n    [InlineData(3, \"3 секунды\")]\r\n    [InlineData(4, \"4 секунды\")]\r\n    [InlineData(5, \"5 секунд\")]\r\n    [InlineData(6, \"6 секунд\")]\r\n    [InlineData(10, \"10 секунд\")]\r\n    [InlineData(11, \"11 секунд\")]\r\n    [InlineData(19, \"19 секунд\")]\r\n    [InlineData(20, \"20 секунд\")]\r\n    [InlineData(21, \"21 секунда\")]\r\n    [InlineData(21, \"двадцать одна секунда\", true)]\r\n    [InlineData(22, \"22 секунды\")]\r\n    [InlineData(23, \"23 секунды\")]\r\n    [InlineData(24, \"24 секунды\")]\r\n    [InlineData(25, \"25 секунд\")]\r\n    [InlineData(40, \"40 секунд\")]\r\n    public void Seconds(int seconds, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize(toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"одна миллисекунда\", true)]\r\n    [InlineData(1, \"1 миллисекунда\")]\r\n    [InlineData(2, \"2 миллисекунды\")]\r\n    [InlineData(3, \"3 миллисекунды\")]\r\n    [InlineData(4, \"4 миллисекунды\")]\r\n    [InlineData(5, \"5 миллисекунд\")]\r\n    [InlineData(6, \"6 миллисекунд\")]\r\n    [InlineData(10, \"10 миллисекунд\")]\r\n    [InlineData(11, \"11 миллисекунд\")]\r\n    [InlineData(19, \"19 миллисекунд\")]\r\n    [InlineData(20, \"20 миллисекунд\")]\r\n    [InlineData(21, \"21 миллисекунда\")]\r\n    [InlineData(21, \"двадцать одна миллисекунда\", true)]\r\n    [InlineData(22, \"22 миллисекунды\")]\r\n    [InlineData(22, \"двадцать две миллисекунды\", true)]\r\n    [InlineData(23, \"23 миллисекунды\")]\r\n    [InlineData(24, \"24 миллисекунды\")]\r\n    [InlineData(25, \"25 миллисекунд\")]\r\n    [InlineData(40, \"40 миллисекунд\")]\r\n    public void Milliseconds(int milliseconds, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize(toWords: toWords));\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 миллисекунд\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"нет времени\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ru-RU/TimeUnitToSymbolTests.cs",
    "content": "﻿namespace ruRU;\r\n\r\n[UseCulture(\"ru-RU\")]\r\npublic class TimeUnitToSymbolTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(TimeUnit.Millisecond, \"мс.\")]\r\n    [InlineData(TimeUnit.Second, \"сек.\")]\r\n    [InlineData(TimeUnit.Minute, \"мин.\")]\r\n    [InlineData(TimeUnit.Hour, \"ч.\")]\r\n    [InlineData(TimeUnit.Day, \"д.\")]\r\n    [InlineData(TimeUnit.Week, \"нед.\")]\r\n    [InlineData(TimeUnit.Month, \"мес.\")]\r\n    [InlineData(TimeUnit.Year, \"г.\")]\r\n    public void ToSymbol(TimeUnit unit, string expected) =>\r\n        Assert.Equal(expected, unit.ToSymbol());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sk/DateHumanizeTests.cs",
    "content": "﻿namespace sk;\r\n\r\n[UseCulture(\"sk-SK\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"o sekundu\")]\r\n    [InlineData(2, \"o 2 sekundy\")]\r\n    [InlineData(3, \"o 3 sekundy\")]\r\n    [InlineData(4, \"o 4 sekundy\")]\r\n    [InlineData(5, \"o 5 sekúnd\")]\r\n    [InlineData(6, \"o 6 sekúnd\")]\r\n    [InlineData(10, \"o 10 sekúnd\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"o minútu\")]\r\n    [InlineData(2, \"o 2 minúty\")]\r\n    [InlineData(3, \"o 3 minúty\")]\r\n    [InlineData(4, \"o 4 minúty\")]\r\n    [InlineData(5, \"o 5 minút\")]\r\n    [InlineData(6, \"o 6 minút\")]\r\n    [InlineData(10, \"o 10 minút\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"o hodinu\")]\r\n    [InlineData(2, \"o 2 hodiny\")]\r\n    [InlineData(3, \"o 3 hodiny\")]\r\n    [InlineData(4, \"o 4 hodiny\")]\r\n    [InlineData(5, \"o 5 hodín\")]\r\n    [InlineData(6, \"o 6 hodín\")]\r\n    [InlineData(10, \"o 10 hodín\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"zajtra\")]\r\n    [InlineData(2, \"o 2 dni\")]\r\n    [InlineData(3, \"o 3 dni\")]\r\n    [InlineData(4, \"o 4 dni\")]\r\n    [InlineData(9, \"o 9 dní\")]\r\n    [InlineData(10, \"o 10 dní\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"o mesiac\")]\r\n    [InlineData(2, \"o 2 mesiace\")]\r\n    [InlineData(3, \"o 3 mesiace\")]\r\n    [InlineData(4, \"o 4 mesiace\")]\r\n    [InlineData(5, \"o 5 mesiacov\")]\r\n    [InlineData(6, \"o 6 mesiacov\")]\r\n    [InlineData(10, \"o 10 mesiacov\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"o rok\")]\r\n    [InlineData(2, \"o 2 roky\")]\r\n    [InlineData(3, \"o 3 roky\")]\r\n    [InlineData(4, \"o 4 roky\")]\r\n    [InlineData(5, \"o 5 rokov\")]\r\n    [InlineData(6, \"o 6 rokov\")]\r\n    [InlineData(10, \"o 10 rokov\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"pred sekundou\")]\r\n    [InlineData(2, \"pred 2 sekundami\")]\r\n    [InlineData(3, \"pred 3 sekundami\")]\r\n    [InlineData(4, \"pred 4 sekundami\")]\r\n    [InlineData(5, \"pred 5 sekundami\")]\r\n    [InlineData(6, \"pred 6 sekundami\")]\r\n    [InlineData(10, \"pred 10 sekundami\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"pred minútou\")]\r\n    [InlineData(2, \"pred 2 minútami\")]\r\n    [InlineData(3, \"pred 3 minútami\")]\r\n    [InlineData(4, \"pred 4 minútami\")]\r\n    [InlineData(5, \"pred 5 minútami\")]\r\n    [InlineData(6, \"pred 6 minútami\")]\r\n    [InlineData(10, \"pred 10 minútami\")]\r\n    [InlineData(60, \"pred hodinou\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"pred hodinou\")]\r\n    [InlineData(2, \"pred 2 hodinami\")]\r\n    [InlineData(3, \"pred 3 hodinami\")]\r\n    [InlineData(4, \"pred 4 hodinami\")]\r\n    [InlineData(5, \"pred 5 hodinami\")]\r\n    [InlineData(6, \"pred 6 hodinami\")]\r\n    [InlineData(10, \"pred 10 hodinami\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"včera\")]\r\n    [InlineData(2, \"pred 2 dňami\")]\r\n    [InlineData(3, \"pred 3 dňami\")]\r\n    [InlineData(4, \"pred 4 dňami\")]\r\n    [InlineData(9, \"pred 9 dňami\")]\r\n    [InlineData(10, \"pred 10 dňami\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"pred mesiacom\")]\r\n    [InlineData(2, \"pred 2 mesiacmi\")]\r\n    [InlineData(3, \"pred 3 mesiacmi\")]\r\n    [InlineData(4, \"pred 4 mesiacmi\")]\r\n    [InlineData(5, \"pred 5 mesiacmi\")]\r\n    [InlineData(6, \"pred 6 mesiacmi\")]\r\n    [InlineData(10, \"pred 10 mesiacmi\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"pred rokom\")]\r\n    [InlineData(2, \"pred 2 rokmi\")]\r\n    [InlineData(3, \"pred 3 rokmi\")]\r\n    [InlineData(4, \"pred 4 rokmi\")]\r\n    [InlineData(5, \"pred 5 rokmi\")]\r\n    [InlineData(6, \"pred 6 rokmi\")]\r\n    [InlineData(10, \"pred 10 rokmi\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sk/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace sk;\r\n\r\n[UseCulture(\"sk-SK\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 rok\")]\r\n    [InlineData(731, \"2 roky\")]\r\n    [InlineData(1096, \"3 roky\")]\r\n    [InlineData(4018, \"11 rokov\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 mesiac\")]\r\n    [InlineData(61, \"2 mesiace\")]\r\n    [InlineData(92, \"3 mesiace\")]\r\n    [InlineData(335, \"11 mesiacov\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 milisekunda\")]\r\n    [InlineData(2, \"2 milisekundy\")]\r\n    [InlineData(3, \"3 milisekundy\")]\r\n    [InlineData(4, \"4 milisekundy\")]\r\n    [InlineData(5, \"5 milisekúnd\")]\r\n    [InlineData(6, \"6 milisekúnd\")]\r\n    [InlineData(10, \"10 milisekúnd\")]\r\n    public void Milliseconds(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 sekunda\")]\r\n    [InlineData(2, \"2 sekundy\")]\r\n    [InlineData(3, \"3 sekundy\")]\r\n    [InlineData(4, \"4 sekundy\")]\r\n    [InlineData(5, \"5 sekúnd\")]\r\n    [InlineData(6, \"6 sekúnd\")]\r\n    [InlineData(10, \"10 sekúnd\")]\r\n    public void Seconds(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 minúta\")]\r\n    [InlineData(2, \"2 minúty\")]\r\n    [InlineData(3, \"3 minúty\")]\r\n    [InlineData(4, \"4 minúty\")]\r\n    [InlineData(5, \"5 minút\")]\r\n    [InlineData(6, \"6 minút\")]\r\n    [InlineData(10, \"10 minút\")]\r\n    public void Minutes(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 hodina\")]\r\n    [InlineData(2, \"2 hodiny\")]\r\n    [InlineData(3, \"3 hodiny\")]\r\n    [InlineData(4, \"4 hodiny\")]\r\n    [InlineData(5, \"5 hodín\")]\r\n    [InlineData(6, \"6 hodín\")]\r\n    [InlineData(10, \"10 hodín\")]\r\n    public void Hours(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 deň\")]\r\n    [InlineData(2, \"2 dni\")]\r\n    [InlineData(3, \"3 dni\")]\r\n    [InlineData(4, \"4 dni\")]\r\n    [InlineData(5, \"5 dní\")]\r\n    [InlineData(6, \"6 dní\")]\r\n    public void Days(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 týždeň\")]\r\n    [InlineData(2, \"2 týždne\")]\r\n    [InlineData(3, \"3 týždne\")]\r\n    [InlineData(4, \"4 týždne\")]\r\n    [InlineData(5, \"5 týždňov\")]\r\n    [InlineData(6, \"6 týždňov\")]\r\n    public void Weeks(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(number * 7).Humanize());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sl/DateHumanizeTests.cs",
    "content": "﻿namespace sl;\r\n\r\n[UseCulture(\"sl-SI\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(-10, \"pred 10 leti\")]\r\n    [InlineData(-5, \"pred 5 leti\")]\r\n    [InlineData(-4, \"pred 4 leti\")]\r\n    [InlineData(-3, \"pred 3 leti\")]\r\n    [InlineData(-2, \"pred 2 letoma\")]\r\n    [InlineData(-1, \"pred enim letom\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(5, \"čez 5 let\")]\r\n    [InlineData(4, \"čez 4 leta\")]\r\n    [InlineData(3, \"čez 3 leta\")]\r\n    [InlineData(2, \"čez 2 leti\")]\r\n    [InlineData(1, \"čez eno leto\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-10, \"pred 10 meseci\")]\r\n    [InlineData(-5, \"pred 5 meseci\")]\r\n    [InlineData(-4, \"pred 4 meseci\")]\r\n    [InlineData(-3, \"pred 3 meseci\")]\r\n    [InlineData(-2, \"pred 2 mesecema\")]\r\n    [InlineData(-1, \"pred enim mesecem\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(5, \"čez 5 mesecev\")]\r\n    [InlineData(4, \"čez 4 mesece\")]\r\n    [InlineData(3, \"čez 3 mesece\")]\r\n    [InlineData(2, \"čez 2 meseca\")]\r\n    [InlineData(1, \"čez en mesec\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-10, \"pred 10 dnevi\")]\r\n    [InlineData(-5, \"pred 5 dnevi\")]\r\n    [InlineData(-4, \"pred 4 dnevi\")]\r\n    [InlineData(-3, \"pred 3 dnevi\")]\r\n    [InlineData(-2, \"pred 2 dnevoma\")]\r\n    [InlineData(-1, \"včeraj\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(5, \"čez 5 dni\")]\r\n    [InlineData(4, \"čez 4 dni\")]\r\n    [InlineData(3, \"čez 3 dni\")]\r\n    [InlineData(2, \"čez 2 dni\")]\r\n    [InlineData(1, \"jutri\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-10, \"pred 10 urami\")]\r\n    [InlineData(-5, \"pred 5 urami\")]\r\n    [InlineData(-4, \"pred 4 urami\")]\r\n    [InlineData(-3, \"pred 3 urami\")]\r\n    [InlineData(-2, \"pred 2 urama\")]\r\n    [InlineData(-1, \"pred eno uro\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(5, \"čez 5 ur\")]\r\n    [InlineData(4, \"čez 4 ure\")]\r\n    [InlineData(3, \"čez 3 ure\")]\r\n    [InlineData(2, \"čez 2 uri\")]\r\n    [InlineData(1, \"čez eno uro\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-10, \"pred 10 minutami\")]\r\n    [InlineData(-5, \"pred 5 minutami\")]\r\n    [InlineData(-4, \"pred 4 minutami\")]\r\n    [InlineData(-3, \"pred 3 minutami\")]\r\n    [InlineData(-2, \"pred 2 minutama\")]\r\n    [InlineData(-1, \"pred eno minuto\")]\r\n    [InlineData(60, \"pred eno uro\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(5, \"čez 5 minut\")]\r\n    [InlineData(4, \"čez 4 minute\")]\r\n    [InlineData(3, \"čez 3 minute\")]\r\n    [InlineData(2, \"čez 2 minuti\")]\r\n    [InlineData(1, \"čez eno minuto\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-10, \"pred 10 sekundami\")]\r\n    [InlineData(-5, \"pred 5 sekundami\")]\r\n    [InlineData(-4, \"pred 4 sekundami\")]\r\n    [InlineData(-3, \"pred 3 sekundami\")]\r\n    [InlineData(-2, \"pred 2 sekundama\")]\r\n    [InlineData(-1, \"pred eno sekundo\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(10, \"čez 10 sekund\")]\r\n    [InlineData(5, \"čez 5 sekund\")]\r\n    [InlineData(4, \"čez 4 sekunde\")]\r\n    [InlineData(3, \"čez 3 sekunde\")]\r\n    [InlineData(2, \"čez 2 sekundi\")]\r\n    [InlineData(1, \"čez eno sekundo\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sl/NumberToWordsTests.cs",
    "content": "﻿namespace sl;\r\n\r\n[UseCulture(\"sl-SI\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"nič\")]\r\n    [InlineData(1, \"ena\")]\r\n    [InlineData(2, \"dva\")]\r\n    [InlineData(3, \"tri\")]\r\n    [InlineData(4, \"štiri\")]\r\n    [InlineData(5, \"pet\")]\r\n    [InlineData(6, \"šest\")]\r\n    [InlineData(7, \"sedem\")]\r\n    [InlineData(8, \"osem\")]\r\n    [InlineData(9, \"devet\")]\r\n    [InlineData(10, \"deset\")]\r\n    [InlineData(20, \"dvajset\")]\r\n    [InlineData(30, \"trideset\")]\r\n    [InlineData(40, \"štirideset\")]\r\n    [InlineData(50, \"petdeset\")]\r\n    [InlineData(60, \"šestdeset\")]\r\n    [InlineData(70, \"sedemdeset\")]\r\n    [InlineData(80, \"osemdeset\")]\r\n    [InlineData(90, \"devetdeset\")]\r\n    [InlineData(100, \"sto\")]\r\n    [InlineData(200, \"dvesto\")]\r\n    [InlineData(1000, \"tisoč\")]\r\n    [InlineData(10000, \"deset tisoč\")]\r\n    [InlineData(100000, \"sto tisoč\")]\r\n    [InlineData(1000000, \"milijon\")]\r\n    [InlineData(10000000, \"deset milijonov\")]\r\n    [InlineData(100000000, \"sto milijonov\")]\r\n    [InlineData(1000000000, \"milijarda\")]\r\n    [InlineData(2000000000, \"dve milijardi\")]\r\n    [InlineData(122, \"sto dvaindvajset\")]\r\n    [InlineData(3501, \"tri tisoč petsto ena\")]\r\n    [InlineData(111, \"sto enajst\")]\r\n    [InlineData(1112, \"tisoč sto dvanajst\")]\r\n    [InlineData(11213, \"enajst tisoč dvesto trinajst\")]\r\n    [InlineData(121314, \"sto enaindvajset tisoč tristo štirinajst\")]\r\n    [InlineData(2132415, \"dva milijona sto dvaintrideset tisoč štiristo petnajst\")]\r\n    [InlineData(12345516, \"dvanajst milijonov tristo petinštirideset tisoč petsto šestnajst\")]\r\n    [InlineData(751633617, \"sedemsto enainpetdeset milijonov šeststo triintrideset tisoč šeststo sedemnajst\")]\r\n    [InlineData(1111111118, \"milijarda sto enajst milijonov sto enajst tisoč sto osemnajst\")]\r\n    [InlineData(-751633619, \"minus sedemsto enainpetdeset milijonov šeststo triintrideset tisoč šeststo devetnajst\")]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sl/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace sl;\r\n\r\n[UseCulture(\"sl-SI\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 leto\")]\r\n    [InlineData(731, \"2 leti\")]\r\n    [InlineData(1096, \"3 leta\")]\r\n    [InlineData(4018, \"11 let\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 mesec\")]\r\n    [InlineData(61, \"2 meseca\")]\r\n    [InlineData(92, \"3 mesece\")]\r\n    [InlineData(335, \"11 mesecev\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 teden\")]\r\n    [InlineData(14, \"2 tedna\")]\r\n    [InlineData(21, \"3 tedne\")]\r\n    [InlineData(28, \"4 tedne\")]\r\n    [InlineData(35, \"5 tednov\")]\r\n    [InlineData(77, \"11 tednov\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 dan\")]\r\n    [InlineData(2, \"2 dneva\")]\r\n    [InlineData(3, \"3 dni\")]\r\n    [InlineData(4, \"4 dni\")]\r\n    [InlineData(5, \"5 dni\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 ura\")]\r\n    [InlineData(2, \"2 uri\")]\r\n    [InlineData(3, \"3 ure\")]\r\n    [InlineData(4, \"4 ure\")]\r\n    [InlineData(5, \"5 ur\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 minuta\")]\r\n    [InlineData(2, \"2 minuti\")]\r\n    [InlineData(3, \"3 minute\")]\r\n    [InlineData(4, \"4 minute\")]\r\n    [InlineData(5, \"5 minut\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 sekunda\")]\r\n    [InlineData(2, \"2 sekundi\")]\r\n    [InlineData(3, \"3 sekunde\")]\r\n    [InlineData(4, \"4 sekunde\")]\r\n    [InlineData(5, \"5 sekund\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 milisekunda\")]\r\n    [InlineData(2, \"2 milisekundi\")]\r\n    [InlineData(3, \"3 milisekunde\")]\r\n    [InlineData(4, \"4 milisekunde\")]\r\n    [InlineData(5, \"5 milisekund\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 milisekund\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"nič časa\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sr/DateHumanizeTests.cs",
    "content": "﻿namespace sr;\r\n\r\n[UseCulture(\"sr\")]\r\npublic class DateHumanizeDefaultStrategyTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"пре секунд\")]\r\n    [InlineData(10, \"пре 10 секунди\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"за секунд\")]\r\n    [InlineData(10, \"за 10 секунди\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"пре минут\")]\r\n    [InlineData(10, \"пре 10 минута\")]\r\n    [InlineData(60, \"пре сат времена\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"за минут\")]\r\n    [InlineData(10, \"за 10 минута\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"пре сат времена\")]\r\n    [InlineData(10, \"пре 10 сати\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"за сат времена\")]\r\n    [InlineData(10, \"за 10 сати\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"јуче\")]\r\n    [InlineData(10, \"пре 10 дана\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"сутра\")]\r\n    [InlineData(10, \"за 10 дана\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"пре месец дана\")]\r\n    [InlineData(10, \"пре 10 месеци\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"за месец дана\")]\r\n    [InlineData(10, \"за 10 месеци\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"пре годину дана\")]\r\n    [InlineData(2, \"пре 2 године\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"за годину дана\")]\r\n    [InlineData(2, \"за 2 године\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"сада\", 0, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sr/NumberToWordsTest.cs",
    "content": "﻿namespace sr;\r\n\r\n[UseCulture(\"sr\")]\r\npublic class NumberToWordsTest\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"нула\")]\r\n    [InlineData(1, \"један\")]\r\n    [InlineData(2, \"два\")]\r\n    [InlineData(3, \"три\")]\r\n    [InlineData(4, \"четири\")]\r\n    [InlineData(5, \"пет\")]\r\n    [InlineData(6, \"шест\")]\r\n    [InlineData(7, \"седам\")]\r\n    [InlineData(8, \"осам\")]\r\n    [InlineData(9, \"девет\")]\r\n    [InlineData(10, \"десет\")]\r\n    [InlineData(20, \"двадесет\")]\r\n    [InlineData(30, \"тридесет\")]\r\n    [InlineData(40, \"четрдесет\")]\r\n    [InlineData(50, \"петдесет\")]\r\n    [InlineData(60, \"шестдесет\")]\r\n    [InlineData(70, \"седамдесет\")]\r\n    [InlineData(80, \"осамдесет\")]\r\n    [InlineData(90, \"деветдесет\")]\r\n    [InlineData(100, \"сто\")]\r\n    [InlineData(200, \"двесто\")]\r\n    [InlineData(1000, \"хиљаду\")]\r\n    [InlineData(10000, \"десет хиљада\")]\r\n    [InlineData(100000, \"сто хиљада\")]\r\n    [InlineData(1000000, \"милион\")]\r\n    [InlineData(10000000, \"десет милиона\")]\r\n    [InlineData(100000000, \"сто милиона\")]\r\n    [InlineData(1000000000, \"милијарда\")]\r\n    [InlineData(2000000000, \"две милијарде\")]\r\n    [InlineData(15, \"петнаест\")]\r\n    [InlineData(43, \"четрдесет три\")]\r\n    [InlineData(81, \"осамдесет један\")]\r\n    [InlineData(213, \"двесто тринаест\")]\r\n    [InlineData(547, \"петсто четрдесет седам\")]\r\n    public void ToWordsSr(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sr/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace sr;\r\n\r\n[UseCulture(\"sr\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 година\")]\r\n    [InlineData(731, \"2 године\")]\r\n    [InlineData(1096, \"3 године\")]\r\n    [InlineData(4018, \"11 година\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan\r\n            .FromDays(days)\r\n            .Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 месец\")]\r\n    [InlineData(61, \"2 месеца\")]\r\n    [InlineData(92, \"3 месеца\")]\r\n    [InlineData(335, \"11 месеци\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan\r\n            .FromDays(days)\r\n            .Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(35, \"5 недеља\")]\r\n    [InlineData(14, \"2 недеље\")]\r\n    [InlineData(7, \"1 недеља\")]\r\n    public void Weeks(int days, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromDays(days)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(6, \"6 дана\")]\r\n    [InlineData(2, \"2 дана\")]\r\n    [InlineData(1, \"1 дан\")]\r\n    public void Days(int days, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromDays(days)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(5, \"5 сати\")]\r\n    [InlineData(2, \"2 сата\")]\r\n    [InlineData(1, \"1 сат\")]\r\n    public void Hours(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromHours(hours)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 минута\")]\r\n    [InlineData(1, \"1 минут\")]\r\n    public void Minutes(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromMinutes(minutes)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 секунде\")]\r\n    [InlineData(1, \"1 секунда\")]\r\n    public void Seconds(int seconds, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromSeconds(seconds)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 милисекунде\")]\r\n    [InlineData(1, \"1 милисекунда\")]\r\n    public void Milliseconds(int ms, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromMilliseconds(ms)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTime()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize();\r\n        Assert.Equal(\"0 милисекунди\", actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTimeToWords()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(toWords: true);\r\n        Assert.Equal(\"без протеклог времена\", actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sr-Latn/DateHumanizeTests.cs",
    "content": "﻿namespace srLatn;\r\n\r\n[UseCulture(\"sr-Latn\")]\r\npublic class DateHumanizeDefaultStrategyTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"pre sekund\")]\r\n    [InlineData(10, \"pre 10 sekundi\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"za sekund\")]\r\n    [InlineData(10, \"za 10 sekundi\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"pre minut\")]\r\n    [InlineData(10, \"pre 10 minuta\")]\r\n    [InlineData(60, \"pre sat vremena\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"za minut\")]\r\n    [InlineData(10, \"za 10 minuta\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"pre sat vremena\")]\r\n    [InlineData(10, \"pre 10 sati\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"za sat vremena\")]\r\n    [InlineData(10, \"za 10 sati\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"juče\")]\r\n    [InlineData(10, \"pre 10 dana\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"sutra\")]\r\n    [InlineData(10, \"za 10 dana\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"pre mesec dana\")]\r\n    [InlineData(10, \"pre 10 meseci\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"za mesec dana\")]\r\n    [InlineData(10, \"za 10 meseci\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"pre godinu dana\")]\r\n    [InlineData(2, \"pre 2 godine\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"za godinu dana\")]\r\n    [InlineData(2, \"za 2 godine\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"sada\", 0, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sr-Latn/NumberToWordsTest.cs",
    "content": "﻿namespace sr_Latn;\r\n\r\n[UseCulture(\"sr-Latn\")]\r\npublic class NumberToWordsTest\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"nula\")]\r\n    [InlineData(1, \"jedan\")]\r\n    [InlineData(2, \"dva\")]\r\n    [InlineData(3, \"tri\")]\r\n    [InlineData(4, \"četiri\")]\r\n    [InlineData(5, \"pet\")]\r\n    [InlineData(6, \"šest\")]\r\n    [InlineData(7, \"sedam\")]\r\n    [InlineData(8, \"osam\")]\r\n    [InlineData(9, \"devet\")]\r\n    [InlineData(10, \"deset\")]\r\n    [InlineData(20, \"dvadeset\")]\r\n    [InlineData(30, \"trideset\")]\r\n    [InlineData(40, \"četrdeset\")]\r\n    [InlineData(50, \"petdeset\")]\r\n    [InlineData(60, \"šestdeset\")]\r\n    [InlineData(70, \"sedamdeset\")]\r\n    [InlineData(80, \"osamdeset\")]\r\n    [InlineData(90, \"devetdeset\")]\r\n    [InlineData(100, \"sto\")]\r\n    [InlineData(200, \"dvesto\")]\r\n    [InlineData(1000, \"hiljadu\")]\r\n    [InlineData(10000, \"deset hiljada\")]\r\n    [InlineData(100000, \"sto hiljada\")]\r\n    [InlineData(1000000, \"milion\")]\r\n    [InlineData(10000000, \"deset miliona\")]\r\n    [InlineData(100000000, \"sto miliona\")]\r\n    [InlineData(1000000000, \"milijarda\")]\r\n    [InlineData(2000000000, \"dve milijarde\")]\r\n    [InlineData(15, \"petnaest\")]\r\n    [InlineData(43, \"četrdeset tri\")]\r\n    [InlineData(81, \"osamdeset jedan\")]\r\n    [InlineData(213, \"dvesto trinaest\")]\r\n    [InlineData(547, \"petsto četrdeset sedam\")]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sr-Latn/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace srLatn;\r\n\r\n[UseCulture(\"sr-Latn\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 godina\")]\r\n    [InlineData(731, \"2 godine\")]\r\n    [InlineData(1096, \"3 godine\")]\r\n    [InlineData(4018, \"11 godina\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan\r\n            .FromDays(days)\r\n            .Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 mesec\")]\r\n    [InlineData(61, \"2 meseca\")]\r\n    [InlineData(92, \"3 meseca\")]\r\n    [InlineData(335, \"11 meseci\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan\r\n            .FromDays(days)\r\n            .Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(35, \"5 nedelja\")]\r\n    [InlineData(14, \"2 nedelje\")]\r\n    [InlineData(7, \"1 nedelja\")]\r\n    public void Weeks(int days, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromDays(days)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 dana\")]\r\n    [InlineData(1, \"1 dan\")]\r\n    public void Days(int days, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromDays(days)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 sata\")]\r\n    [InlineData(1, \"1 sat\")]\r\n    public void Hours(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromHours(hours)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 minuta\")]\r\n    [InlineData(1, \"1 minut\")]\r\n    public void Minutes(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromMinutes(minutes)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 sekunde\")]\r\n    [InlineData(1, \"1 sekunda\")]\r\n    public void Seconds(int seconds, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromSeconds(seconds)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 milisekunde\")]\r\n    [InlineData(1, \"1 milisekunda\")]\r\n    public void Milliseconds(int ms, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromMilliseconds(ms)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTime()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize();\r\n        Assert.Equal(\"0 milisekundi\", actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTimeToWords()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(toWords: true);\r\n        Assert.Equal(\"bez proteklog vremena\", actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sv/CollectionFormatterTests.cs",
    "content": "﻿namespace sv;\r\n\r\n[UseCulture(\"sv-SE\")]\r\npublic class CollectionFormatterTests\r\n{\r\n    [Fact]\r\n    public void MoreThanTwoItems()\r\n    {\r\n        var collection = new List<int>([1, 2, 3]);\r\n        var humanized = \"1, 2 och 3\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void OneItem()\r\n    {\r\n        var collection = new List<int>([1]);\r\n        var humanized = \"1\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void TwoItems()\r\n    {\r\n        var collection = new List<int>([1, 2]);\r\n        var humanized = \"1 och 2\";\r\n        Assert.Equal(humanized, collection.Humanize());\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sv/DateHumanizeTests.cs",
    "content": "﻿namespace sv;\r\n\r\n[UseCulture(\"sv-SE\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"om en sekund\")]\r\n    [InlineData(2, \"om 2 sekunder\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"om en minut\")]\r\n    [InlineData(2, \"om 2 minuter\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"om en timme\")]\r\n    [InlineData(2, \"om 2 timmar\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"i morgon\")]\r\n    [InlineData(2, \"om 2 dagar\")]\r\n    public void DayFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"om en månad\")]\r\n    [InlineData(2, \"om 2 månader\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"om ett år\")]\r\n    [InlineData(2, \"om 2 år\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en sekund sedan\")]\r\n    [InlineData(2, \"för 2 sekunder sedan\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en minut sedan\")]\r\n    [InlineData(2, \"för 2 minuter sedan\")]\r\n    [InlineData(60, \"en timme sedan\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en timme sedan\")]\r\n    [InlineData(2, \"för 2 timmar sedan\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"igår\")]\r\n    [InlineData(2, \"för 2 dagar sedan\")]\r\n    public void DayAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en månad sedan\")]\r\n    [InlineData(2, \"för 2 månader sedan\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ett år sedan\")]\r\n    [InlineData(2, \"för 2 år sedan\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sv/NumberToWordsTests.cs",
    "content": "﻿namespace sv;\r\n\r\n[UseCulture(\"sv-SE\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"noll\")]\r\n    [InlineData(1, \"ett\")]\r\n    [InlineData(2, \"två\")]\r\n    [InlineData(3, \"tre\")]\r\n    [InlineData(4, \"fyra\")]\r\n    [InlineData(5, \"fem\")]\r\n    [InlineData(6, \"sex\")]\r\n    [InlineData(7, \"sju\")]\r\n    [InlineData(8, \"åtta\")]\r\n    [InlineData(9, \"nio\")]\r\n    [InlineData(10, \"tio\")]\r\n    [InlineData(20, \"tjugo\")]\r\n    [InlineData(30, \"trettio\")]\r\n    [InlineData(40, \"fyrtio\")]\r\n    [InlineData(50, \"femtio\")]\r\n    [InlineData(60, \"sextio\")]\r\n    [InlineData(70, \"sjuttio\")]\r\n    [InlineData(80, \"åttio\")]\r\n    [InlineData(90, \"nittio\")]\r\n    [InlineData(100, \"hundra\")]\r\n    [InlineData(200, \"tvåhundra\")]\r\n    [InlineData(201, \"tvåhundraett\")]\r\n    [InlineData(211, \"tvåhundraelva\")]\r\n    [InlineData(221, \"tvåhundratjugoett\")]\r\n    [InlineData(1000, \"ett tusen\")]\r\n    [InlineData(10000, \"tio tusen\")]\r\n    [InlineData(100000, \"hundra tusen\")]\r\n    [InlineData(1000000, \"en miljon\")]\r\n    [InlineData(10000000, \"tio miljoner\")]\r\n    [InlineData(100000000, \"hundra miljoner\")]\r\n    [InlineData(1000000000, \"en miljard\")]\r\n    [InlineData(2000000000, \"två miljarder\")]\r\n    [InlineData(122, \"hundratjugotvå\")]\r\n    [InlineData(3501, \"tre tusen femhundraett\")]\r\n    [InlineData(111, \"hundraelva\")]\r\n    [InlineData(1112, \"ett tusen hundratolv\")]\r\n    [InlineData(11213, \"elva tusen tvåhundratretton\")]\r\n    public void ToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nollte\")]\r\n    [InlineData(1, \"första\")]\r\n    [InlineData(2, \"andra\")]\r\n    [InlineData(3, \"tredje\")]\r\n    [InlineData(4, \"fjärde\")]\r\n    [InlineData(5, \"femte\")]\r\n    [InlineData(6, \"sjätte\")]\r\n    [InlineData(7, \"sjunde\")]\r\n    [InlineData(8, \"åttonde\")]\r\n    [InlineData(9, \"nionde\")]\r\n    [InlineData(10, \"tionde\")]\r\n    [InlineData(20, \"tjugonde\")]\r\n    [InlineData(30, \"trettionde\")]\r\n    [InlineData(40, \"fyrtionde\")]\r\n    [InlineData(50, \"femtionde\")]\r\n    [InlineData(60, \"sextionde\")]\r\n    [InlineData(70, \"sjuttionde\")]\r\n    [InlineData(80, \"åttionde\")]\r\n    [InlineData(90, \"nittionde\")]\r\n    [InlineData(100, \"hundrade\")]\r\n    [InlineData(200, \"tvåhundrade\")]\r\n    [InlineData(201, \"tvåhundraförsta\")]\r\n    [InlineData(211, \"tvåhundraelfte\")]\r\n    [InlineData(221, \"tvåhundratjugoförsta\")]\r\n    [InlineData(1000, \"ett tusende\")]\r\n    [InlineData(10000, \"tio tusende\")]\r\n    [InlineData(100000, \"hundra tusende\")]\r\n    [InlineData(1000000, \"en miljonte\")]\r\n    public void ToOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/sv/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace sv;\r\n\r\n[UseCulture(\"sv-SE\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"1 millisekund\")]\r\n    [InlineData(2, \"2 millisekunder\")]\r\n    public void Milliseconds(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 sekund\")]\r\n    [InlineData(2, \"2 sekunder\")]\r\n    public void Seconds(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 minut\")]\r\n    [InlineData(2, \"2 minuter\")]\r\n    public void Minutes(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 timma\")]\r\n    [InlineData(2, \"2 timmar\")]\r\n    public void Hours(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 dag\")]\r\n    [InlineData(2, \"2 dagar\")]\r\n    public void Days(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(number).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 vecka\")]\r\n    [InlineData(2, \"2 veckor\")]\r\n    public void Weeks(int number, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(number * 7).Humanize());\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"en månad\")]\r\n    [InlineData(61, \"2 månader\")]\r\n    [InlineData(92, \"3 månader\")]\r\n    [InlineData(335, \"11 månader\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"ett år\")]\r\n    [InlineData(731, \"2 år\")]\r\n    [InlineData(1096, \"3 år\")]\r\n    [InlineData(4018, \"11 år\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/ta/NumberToWordsTests.cs",
    "content": "﻿namespace ta;\r\n\r\n[UseCulture(\"ta\")]\r\npublic class NumberToWordsTests\r\n{\r\n    //http://tnschools.gov.in/media/textbooks/3rd_Maths_Science_and_Social_science_TM_Combine_pd_Full_Book.pdf page 12\r\n    [Theory]\r\n    [InlineData(0, \"சுழியம்\")]\r\n    [InlineData(1, \"ஒன்று\")]\r\n    [InlineData(2, \"இரண்டு\")]\r\n    [InlineData(3, \"மூன்று\")]\r\n    [InlineData(4, \"நான்கு\")]\r\n    [InlineData(5, \"ஐந்து\")]\r\n    [InlineData(6, \"ஆறு\")]\r\n    [InlineData(7, \"ஏழு\")]\r\n    [InlineData(8, \"எட்டு\")]\r\n    [InlineData(9, \"ஒன்பது\")]\r\n    [InlineData(10, \"பத்து\")]\r\n    [InlineData(11, \"பதினொன்று\")]\r\n    [InlineData(12, \"பனிரெண்டு\")]\r\n    [InlineData(13, \"பதிமூன்று\")]\r\n    [InlineData(14, \"பதினான்கு\")]\r\n    [InlineData(15, \"பதினைந்து\")]\r\n    [InlineData(16, \"பதினாறு\")]\r\n    [InlineData(17, \"பதினேழு\")]\r\n    [InlineData(18, \"பதினெட்டு\")]\r\n    [InlineData(19, \"பத்தொன்பது\")]\r\n    [InlineData(20, \"இருபது\")]\r\n    [InlineData(21, \"இருபத்து ஒன்று\")]\r\n    [InlineData(30, \"முப்பது\")]\r\n    [InlineData(31, \"முப்பத்து ஒன்று\")]\r\n    [InlineData(40, \"நாற்பது\")]\r\n    [InlineData(41, \"நாற்பத்தி ஒன்று\")]\r\n    [InlineData(50, \"ஐம்பது\")]\r\n    [InlineData(60, \"அறுபது\")]\r\n    [InlineData(64, \"அறுபத்து நான்கு\")]\r\n\r\n    [InlineData(70, \"எழுபது\")]\r\n    [InlineData(80, \"எண்பது\")]\r\n    [InlineData(89, \"எண்பத்தி ஒன்பது\")]\r\n    [InlineData(90, \"தொண்ணூறு\")]\r\n    [InlineData(95, \"தொண்ணூற்றி ஐந்து\")]\r\n    [InlineData(100, \"நூறு\")]\r\n    [InlineData(101, \"நூற்று ஒன்று\")]\r\n    [InlineData(121, \"நூற்று இருபத்து ஒன்று\")]\r\n    [InlineData(191, \"நூற்று தொண்ணூற்றி ஒன்று\")]\r\n    [InlineData(200, \"இருநூறு\")]\r\n    [InlineData(201, \"இருநூற்று ஒன்று\")]\r\n    [InlineData(411, \"நானூற்று பதினொன்று\")]\r\n    [InlineData(535, \"ஐந்நூற்று முப்பத்து ஐந்து\")]\r\n    [InlineData(985, \"தொள்ளாயிரத்து எண்பத்தி ஐந்து\")]\r\n    [InlineData(1000, \"ஆயிரம்\")]\r\n    [InlineData(1535, \"ஆயிரத்து ஐந்நூற்று முப்பத்து ஐந்து\")]\r\n    [InlineData(2000, \"இரண்டாயிரம்\")]\r\n    [InlineData(3000, \"மூன்றாயிரம்\")]\r\n    [InlineData(4000, \"நான்காயிரம்\")]\r\n    [InlineData(5000, \"ஐந்தாயிரம்\")]\r\n    [InlineData(6000, \"ஆறாயிரம்\")]\r\n    [InlineData(7000, \"ஏழாயிரம்\")]\r\n    [InlineData(8000, \"எட்டாயிரம்\")]\r\n    [InlineData(8888, \"எட்டாயிரத்து எண்ணூற்று எண்பத்தி எட்டு\")]\r\n    [InlineData(9000, \"ஒன்பதாயிரம்\")]\r\n    [InlineData(9999, \"ஒன்பதாயிரத்து தொள்ளாயிரத்து தொண்ணூற்றி ஒன்பது\")]\r\n    [InlineData(10000, \"பத்தாயிரம்\")]\r\n    [InlineData(20000, \"இருபதாயிரம்\")]\r\n    [InlineData(20005, \"இருபதாயிரத்து ஐந்து\")]\r\n    [InlineData(20205, \"இருபதாயிரத்து இருநூற்று ஐந்து\")]\r\n    [InlineData(25435, \"இருபத்து ஐந்தாயிரத்து நானூற்று முப்பத்து ஐந்து\")]\r\n    [InlineData(90995, \"தொண்ணூறாயிரத்து தொள்ளாயிரத்து தொண்ணூற்றி ஐந்து\")]\r\n    [InlineData(100000, \"ஒரு இலட்சம்\")]\r\n    [InlineData(1000000, \"பத்து இலட்சம்\")]\r\n    [InlineData(10000000, \"ஒரு கோடி\")]\r\n    [InlineData(100000000, \"பத்து கோடி\")]\r\n    [InlineData(1000000000, \"நூறு கோடி\")]\r\n    [InlineData(2000000000, \"இருநூறு கோடி\")]\r\n    [InlineData(122, \"நூற்று இருபத்து இரண்டு\")]\r\n    [InlineData(3501, \"மூன்றாயிரத்து ஐந்நூற்று ஒன்று\")]\r\n    [InlineData(111, \"நூற்று பதினொன்று\")]\r\n    [InlineData(1112, \"ஆயிரத்து நூற்று பனிரெண்டு\")]\r\n    [InlineData(11213, \"பதினொன்றாயிரத்து இருநூற்று பதிமூன்று\")]\r\n    [InlineData(121314, \"ஒரு இலட்சத்து இருபத்து ஓராயிரத்து முன்னூற்று பதினான்கு\")]\r\n    [InlineData(2132415, \"இருபத்து ஒன்று இலட்சத்து முப்பத்து இரண்டாயிரத்து நானூற்று பதினைந்து\")]\r\n    [InlineData(12345516, \"ஒரு கோடியே இருபத்து மூன்று இலட்சத்து நாற்பத்தி ஐந்தாயிரத்து ஐந்நூற்று பதினாறு\")]\r\n    [InlineData(751633617, \"எழுபத்தி ஐந்து கோடியே பதினாறு இலட்சத்து முப்பத்து மூன்றாயிரத்து அறுநூற்று பதினேழு\")]\r\n    [InlineData(1111111118, \"நூற்று பதினொன்று கோடியே பதினொன்று இலட்சத்து பதினொன்றாயிரத்து நூற்று பதினெட்டு\")]\r\n    [InlineData(35484694489515, \"முப்பத்து ஐந்து இலட்சத்து நாற்பத்தி எட்டாயிரத்து நானூற்று அறுபத்து ஒன்பது கோடியே நாற்பத்தி நான்கு இலட்சத்து எண்பத்தி ஒன்பதாயிரத்து ஐந்நூற்று பதினைந்து\")]\r\n    //[InlineData(8183162164626926, \"எட்டு quadrillion கோடியே நாற்பத்தி ஆறு இலட்சத்து இருபத்து ஆறாயிரத்து தொள்ளாயிரத்து இருபத்து ஆறு\")]\r\n    //[InlineData(4564121926659524672, \"நான்கு quintillion ஐந்நூற்று அறுபத்து நான்கு quadrillion கோடியே தொண்ணூற்றி ஐந்து இலட்சத்து இருபத்து நான்காயிரத்து அறுநூற்று எழுபத்தி இரண்டு\")]\r\n    [InlineData(-751633619, \"கழித்தல் எழுபத்தி ஐந்து கோடியே பதினாறு இலட்சத்து முப்பத்து மூன்றாயிரத்து அறுநூற்று பத்தொன்பது\")]\r\n    public void ToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ஒன்று\")]\r\n    [InlineData(3501, \"மூன்றாயிரத்து ஐந்நூற்று ஒன்று\")]\r\n    public void ToWordsFeminine(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(GrammaticalGender.Feminine));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/th-TH/DateHumanizeTests.cs",
    "content": "﻿namespace thTH;\r\n\r\n[UseCulture(\"th-TH\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"หนึ่งวินาทีที่แล้ว\")]\r\n    [InlineData(10, \"10 วินาทีที่แล้ว\")]\r\n    [InlineData(59, \"59 วินาทีที่แล้ว\")]\r\n    [InlineData(60, \"หนึ่งนาทีที่แล้ว\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/th-TH/NumberToWordsTests.cs",
    "content": "﻿namespace thTH;\r\n\r\n[UseCulture(\"th-TH\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [InlineData(1, \"หนึ่ง\")]\r\n    [InlineData(10, \"สิบ\")]\r\n    [InlineData(11, \"สิบเอ็ด\")]\r\n    [InlineData(20, \"ยี่สิบ\")]\r\n    [InlineData(-122, \"ลบหนึ่งร้อยยี่สิบสอง\")]\r\n    [InlineData(3501, \"สามพันห้าร้อยหนึ่ง\")]\r\n    [InlineData(100, \"หนึ่งร้อย\")]\r\n    [InlineData(1000, \"หนึ่งพัน\")]\r\n    [InlineData(10000, \"หนึ่งหมื่น\")]\r\n    [InlineData(-100000, \"ลบหนึ่งแสน\")]\r\n    [InlineData(1000000, \"หนึ่งล้าน\")]\r\n    [InlineData(10000000, \"สิบล้าน\")]\r\n    [InlineData(100000000, \"หนึ่งร้อยล้าน\")]\r\n    [InlineData(1000000000, \"หนึ่งพันล้าน\")]\r\n    [InlineData(111, \"หนึ่งร้อยสิบเอ็ด\")]\r\n    [InlineData(1111, \"หนึ่งพันหนึ่งร้อยสิบเอ็ด\")]\r\n    [InlineData(-111111, \"ลบหนึ่งแสนหนึ่งหมื่นหนึ่งพันหนึ่งร้อยสิบเอ็ด\")]\r\n    [InlineData(1111111, \"หนึ่งล้านหนึ่งแสนหนึ่งหมื่นหนึ่งพันหนึ่งร้อยสิบเอ็ด\")]\r\n    [InlineData(11111111, \"สิบเอ็ดล้านหนึ่งแสนหนึ่งหมื่นหนึ่งพันหนึ่งร้อยสิบเอ็ด\")]\r\n    [InlineData(111111111, \"หนึ่งร้อยสิบเอ็ดล้านหนึ่งแสนหนึ่งหมื่นหนึ่งพันหนึ่งร้อยสิบเอ็ด\")]\r\n    [InlineData(1111111111, \"หนึ่งพันหนึ่งร้อยสิบเอ็ดล้านหนึ่งแสนหนึ่งหมื่นหนึ่งพันหนึ่งร้อยสิบเอ็ด\")]\r\n    [Theory]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/tr/DateHumanizeTests.cs",
    "content": "﻿namespace tr;\r\n\r\n[UseCulture(\"tr\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"bir saniye önce\")]\r\n    [InlineData(10, \"10 saniye önce\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir saniye sonra\")]\r\n    [InlineData(10, \"10 saniye sonra\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir dakika önce\")]\r\n    [InlineData(10, \"10 dakika önce\")]\r\n    [InlineData(60, \"bir saat önce\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir dakika sonra\")]\r\n    [InlineData(10, \"10 dakika sonra\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir saat önce\")]\r\n    [InlineData(10, \"10 saat önce\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir saat sonra\")]\r\n    [InlineData(10, \"10 saat sonra\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"dün\")]\r\n    [InlineData(10, \"10 gün önce\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"yarın\")]\r\n    [InlineData(10, \"10 gün sonra\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir ay önce\")]\r\n    [InlineData(10, \"10 ay önce\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir ay sonra\")]\r\n    [InlineData(10, \"10 ay sonra\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir yıl önce\")]\r\n    [InlineData(2, \"2 yıl önce\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir yıl sonra\")]\r\n    [InlineData(2, \"2 yıl sonra\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"şimdi\", 0, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/tr/NumberToWordsTests.cs",
    "content": "﻿namespace tr;\r\n\r\n[UseCulture(\"tr\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"sıfır\", 0)]\r\n    [InlineData(\"bir\", 1)]\r\n    [InlineData(\"iki\", 2)]\r\n    [InlineData(\"on\", 10)]\r\n    [InlineData(\"yüz on iki\", 112)]\r\n    [InlineData(\"bin dört yüz kırk\", 1440)]\r\n    [InlineData(\"yirmi iki\", 22)]\r\n    [InlineData(\"on bir\", 11)]\r\n    [InlineData(\"üç bin beş yüz bir\", 3501)]\r\n    [InlineData(\"bir milyon bir\", 1000001)]\r\n    [InlineData(\"eksi bir milyon üç yüz kırk altı bin yedi yüz on bir\", -1346711)]\r\n    [InlineData(\"dokuz kentilyon iki yüz yirmi üç katrilyon üç yüz yetmiş iki trilyon otuz altı milyar sekiz yüz elli dört milyon yedi yüz yetmiş beş bin sekiz yüz yedi\", 9223372036854775807)]\r\n    public void ToWords(string expected, long number) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"sıfırıncı\")]\r\n    [InlineData(1, \"birinci\")]\r\n    [InlineData(2, \"ikinci\")]\r\n    [InlineData(3, \"üçüncü\")]\r\n    [InlineData(4, \"dördüncü\")]\r\n    [InlineData(5, \"beşinci\")]\r\n    [InlineData(6, \"altıncı\")]\r\n    [InlineData(7, \"yedinci\")]\r\n    [InlineData(8, \"sekizinci\")]\r\n    [InlineData(9, \"dokuzuncu\")]\r\n    [InlineData(10, \"onuncu\")]\r\n    [InlineData(11, \"on birinci\")]\r\n    [InlineData(12, \"on ikinci\")]\r\n    [InlineData(13, \"on üçüncü\")]\r\n    [InlineData(14, \"on dördüncü\")]\r\n    [InlineData(15, \"on beşinci\")]\r\n    [InlineData(16, \"on altıncı\")]\r\n    [InlineData(17, \"on yedinci\")]\r\n    [InlineData(18, \"on sekizinci\")]\r\n    [InlineData(19, \"on dokuzuncu\")]\r\n    [InlineData(20, \"yirminci\")]\r\n    [InlineData(21, \"yirmi birinci\")]\r\n    [InlineData(30, \"otuzuncu\")]\r\n    [InlineData(40, \"kırkıncı\")]\r\n    [InlineData(50, \"ellinci\")]\r\n    [InlineData(60, \"altmışıncı\")]\r\n    [InlineData(70, \"yetmişinci\")]\r\n    [InlineData(80, \"sekseninci\")]\r\n    [InlineData(90, \"doksanıncı\")]\r\n    [InlineData(100, \"yüzüncü\")]\r\n    [InlineData(120, \"yüz yirminci\")]\r\n    [InlineData(121, \"yüz yirmi birinci\")]\r\n    [InlineData(200, \"iki yüzüncü\")]\r\n    [InlineData(221, \"iki yüz yirmi birinci\")]\r\n    [InlineData(300, \"üç yüzüncü\")]\r\n    [InlineData(321, \"üç yüz yirmi birinci\")]\r\n    [InlineData(1000, \"bininci\")]\r\n    [InlineData(1001, \"bin birinci\")]\r\n    [InlineData(10000, \"on bininci\")]\r\n    [InlineData(100000, \"yüz bininci\")]\r\n    [InlineData(1000000, \"bir milyonuncu\")]\r\n    [InlineData(1022135, \"bir milyon yirmi iki bin yüz otuz beşinci\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/tr/OrdinalizeTests.cs",
    "content": "﻿namespace tr;\r\n\r\n[UseCulture(\"tr\")]\r\npublic class OrdinalizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"0\", \"0.\")]\r\n    [InlineData(\"1\", \"1.\")]\r\n    [InlineData(\"2\", \"2.\")]\r\n    [InlineData(\"3\", \"3.\")]\r\n    [InlineData(\"4\", \"4.\")]\r\n    [InlineData(\"5\", \"5.\")]\r\n    [InlineData(\"6\", \"6.\")]\r\n    [InlineData(\"23\", \"23.\")]\r\n    [InlineData(\"100\", \"100.\")]\r\n    [InlineData(\"101\", \"101.\")]\r\n    [InlineData(\"102\", \"102.\")]\r\n    [InlineData(\"103\", \"103.\")]\r\n    [InlineData(\"1001\", \"1001.\")]\r\n    public void OrdinalizeString(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0.\")]\r\n    [InlineData(1, \"1.\")]\r\n    [InlineData(2, \"2.\")]\r\n    [InlineData(3, \"3.\")]\r\n    [InlineData(4, \"4.\")]\r\n    [InlineData(5, \"5.\")]\r\n    [InlineData(6, \"6.\")]\r\n    [InlineData(10, \"10.\")]\r\n    [InlineData(23, \"23.\")]\r\n    [InlineData(100, \"100.\")]\r\n    [InlineData(101, \"101.\")]\r\n    [InlineData(102, \"102.\")]\r\n    [InlineData(103, \"103.\")]\r\n    [InlineData(1001, \"1001.\")]\r\n    public void OrdinalizeNumber(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(), ordinalized);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/tr/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace tr;\r\n\r\n[UseCulture(\"tr\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 yıl\")]\r\n    [InlineData(731, \"2 yıl\")]\r\n    [InlineData(1096, \"3 yıl\")]\r\n    [InlineData(4018, \"11 yıl\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 ay\")]\r\n    [InlineData(61, \"2 ay\")]\r\n    [InlineData(92, \"3 ay\")]\r\n    [InlineData(335, \"11 ay\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(14, \"2 hafta\")]\r\n    [InlineData(7, \"1 hafta\")]\r\n    public void Weeks(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(6, \"6 gün\")]\r\n    [InlineData(2, \"2 gün\")]\r\n    public void Days(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 saat\")]\r\n    [InlineData(1, \"1 saat\")]\r\n    public void Hours(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan.FromHours(hours).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 dakika\")]\r\n    [InlineData(1, \"1 dakika\")]\r\n    public void Minutes(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMinutes(minutes).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 saniye\")]\r\n    [InlineData(1, \"1 saniye\")]\r\n    public void Seconds(int seconds, string expected)\r\n    {\r\n        var actual = TimeSpan.FromSeconds(seconds).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 milisaniye\")]\r\n    [InlineData(1, \"1 milisaniye\")]\r\n    public void Milliseconds(int ms, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTime()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize();\r\n        Assert.Equal(\"0 milisaniye\", actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTimeToWords()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(toWords: true);\r\n        Assert.Equal(\"zaman farkı yok\", actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/uk-UA/DateHumanizeTests.cs",
    "content": "﻿namespace ukUA;\r\n\r\n[UseCulture(\"uk-UA\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"секунду тому\")]\r\n    [InlineData(2, \"2 секунди тому\")]\r\n    [InlineData(3, \"3 секунди тому\")]\r\n    [InlineData(4, \"4 секунди тому\")]\r\n    [InlineData(5, \"5 секунд тому\")]\r\n    [InlineData(6, \"6 секунд тому\")]\r\n    [InlineData(10, \"10 секунд тому\")]\r\n    [InlineData(11, \"11 секунд тому\")]\r\n    [InlineData(19, \"19 секунд тому\")]\r\n    [InlineData(20, \"20 секунд тому\")]\r\n    [InlineData(21, \"21 секунду тому\")]\r\n    [InlineData(22, \"22 секунди тому\")]\r\n    [InlineData(23, \"23 секунди тому\")]\r\n    [InlineData(24, \"24 секунди тому\")]\r\n    [InlineData(25, \"25 секунд тому\")]\r\n    [InlineData(40, \"40 секунд тому\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"через секунду\")]\r\n    [InlineData(2, \"через 2 секунди\")]\r\n    [InlineData(3, \"через 3 секунди\")]\r\n    [InlineData(4, \"через 4 секунди\")]\r\n    [InlineData(5, \"через 5 секунд\")]\r\n    [InlineData(6, \"через 6 секунд\")]\r\n    [InlineData(10, \"через 10 секунд\")]\r\n    [InlineData(11, \"через 11 секунд\")]\r\n    [InlineData(19, \"через 19 секунд\")]\r\n    [InlineData(20, \"через 20 секунд\")]\r\n    [InlineData(21, \"через 21 секунду\")]\r\n    [InlineData(22, \"через 22 секунди\")]\r\n    [InlineData(23, \"через 23 секунди\")]\r\n    [InlineData(24, \"через 24 секунди\")]\r\n    [InlineData(25, \"через 25 секунд\")]\r\n    [InlineData(40, \"через 40 секунд\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"хвилину тому\")]\r\n    [InlineData(2, \"2 хвилини тому\")]\r\n    [InlineData(3, \"3 хвилини тому\")]\r\n    [InlineData(4, \"4 хвилини тому\")]\r\n    [InlineData(5, \"5 хвилин тому\")]\r\n    [InlineData(6, \"6 хвилин тому\")]\r\n    [InlineData(10, \"10 хвилин тому\")]\r\n    [InlineData(11, \"11 хвилин тому\")]\r\n    [InlineData(19, \"19 хвилин тому\")]\r\n    [InlineData(20, \"20 хвилин тому\")]\r\n    [InlineData(21, \"21 хвилину тому\")]\r\n    [InlineData(22, \"22 хвилини тому\")]\r\n    [InlineData(23, \"23 хвилини тому\")]\r\n    [InlineData(24, \"24 хвилини тому\")]\r\n    [InlineData(25, \"25 хвилин тому\")]\r\n    [InlineData(40, \"40 хвилин тому\")]\r\n    [InlineData(60, \"годину тому\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"через хвилину\")]\r\n    [InlineData(2, \"через 2 хвилини\")]\r\n    [InlineData(3, \"через 3 хвилини\")]\r\n    [InlineData(4, \"через 4 хвилини\")]\r\n    [InlineData(5, \"через 5 хвилин\")]\r\n    [InlineData(6, \"через 6 хвилин\")]\r\n    [InlineData(10, \"через 10 хвилин\")]\r\n    [InlineData(11, \"через 11 хвилин\")]\r\n    [InlineData(19, \"через 19 хвилин\")]\r\n    [InlineData(20, \"через 20 хвилин\")]\r\n    [InlineData(21, \"через 21 хвилину\")]\r\n    [InlineData(22, \"через 22 хвилини\")]\r\n    [InlineData(23, \"через 23 хвилини\")]\r\n    [InlineData(24, \"через 24 хвилини\")]\r\n    [InlineData(25, \"через 25 хвилин\")]\r\n    [InlineData(40, \"через 40 хвилин\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"годину тому\")]\r\n    [InlineData(2, \"2 години тому\")]\r\n    [InlineData(3, \"3 години тому\")]\r\n    [InlineData(4, \"4 години тому\")]\r\n    [InlineData(5, \"5 годин тому\")]\r\n    [InlineData(6, \"6 годин тому\")]\r\n    [InlineData(10, \"10 годин тому\")]\r\n    [InlineData(11, \"11 годин тому\")]\r\n    [InlineData(19, \"19 годин тому\")]\r\n    [InlineData(20, \"20 годин тому\")]\r\n    [InlineData(21, \"21 годину тому\")]\r\n    [InlineData(22, \"22 години тому\")]\r\n    [InlineData(23, \"23 години тому\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"через годину\")]\r\n    [InlineData(2, \"через 2 години\")]\r\n    [InlineData(3, \"через 3 години\")]\r\n    [InlineData(4, \"через 4 години\")]\r\n    [InlineData(5, \"через 5 годин\")]\r\n    [InlineData(6, \"через 6 годин\")]\r\n    [InlineData(10, \"через 10 годин\")]\r\n    [InlineData(11, \"через 11 годин\")]\r\n    [InlineData(19, \"через 19 годин\")]\r\n    [InlineData(20, \"через 20 годин\")]\r\n    [InlineData(21, \"через 21 годину\")]\r\n    [InlineData(22, \"через 22 години\")]\r\n    [InlineData(23, \"через 23 години\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"вчора\")]\r\n    [InlineData(2, \"2 дні тому\")]\r\n    [InlineData(3, \"3 дні тому\")]\r\n    [InlineData(4, \"4 дні тому\")]\r\n    [InlineData(5, \"5 днів тому\")]\r\n    [InlineData(6, \"6 днів тому\")]\r\n    [InlineData(10, \"10 днів тому\")]\r\n    [InlineData(11, \"11 днів тому\")]\r\n    [InlineData(19, \"19 днів тому\")]\r\n    [InlineData(20, \"20 днів тому\")]\r\n    [InlineData(21, \"21 день тому\")]\r\n    [InlineData(22, \"22 дні тому\")]\r\n    [InlineData(23, \"23 дні тому\")]\r\n    [InlineData(24, \"24 дні тому\")]\r\n    [InlineData(25, \"25 днів тому\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"завтра\")]\r\n    [InlineData(2, \"через 2 дні\")]\r\n    [InlineData(3, \"через 3 дні\")]\r\n    [InlineData(4, \"через 4 дні\")]\r\n    [InlineData(5, \"через 5 днів\")]\r\n    [InlineData(6, \"через 6 днів\")]\r\n    [InlineData(10, \"через 10 днів\")]\r\n    [InlineData(11, \"через 11 днів\")]\r\n    [InlineData(19, \"через 19 днів\")]\r\n    [InlineData(20, \"через 20 днів\")]\r\n    [InlineData(21, \"через 21 день\")]\r\n    [InlineData(22, \"через 22 дні\")]\r\n    [InlineData(23, \"через 23 дні\")]\r\n    [InlineData(24, \"через 24 дні\")]\r\n    [InlineData(25, \"через 25 днів\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"місяць тому\")]\r\n    [InlineData(2, \"2 місяці тому\")]\r\n    [InlineData(3, \"3 місяці тому\")]\r\n    [InlineData(4, \"4 місяці тому\")]\r\n    [InlineData(5, \"5 місяців тому\")]\r\n    [InlineData(6, \"6 місяців тому\")]\r\n    [InlineData(10, \"10 місяців тому\")]\r\n    [InlineData(11, \"11 місяців тому\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"через місяць\")]\r\n    [InlineData(2, \"через 2 місяці\")]\r\n    [InlineData(3, \"через 3 місяці\")]\r\n    [InlineData(4, \"через 4 місяці\")]\r\n    [InlineData(5, \"через 5 місяців\")]\r\n    [InlineData(6, \"через 6 місяців\")]\r\n    [InlineData(10, \"через 10 місяців\")]\r\n    [InlineData(11, \"через 11 місяців\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"рік тому\")]\r\n    [InlineData(2, \"2 роки тому\")]\r\n    [InlineData(3, \"3 роки тому\")]\r\n    [InlineData(4, \"4 роки тому\")]\r\n    [InlineData(5, \"5 років тому\")]\r\n    [InlineData(6, \"6 років тому\")]\r\n    [InlineData(10, \"10 років тому\")]\r\n    [InlineData(11, \"11 років тому\")]\r\n    [InlineData(19, \"19 років тому\")]\r\n    [InlineData(21, \"21 рік тому\")]\r\n    [InlineData(111, \"111 років тому\")]\r\n    [InlineData(121, \"121 рік тому\")]\r\n    [InlineData(222, \"222 роки тому\")]\r\n    [InlineData(325, \"325 років тому\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"через рік\")]\r\n    [InlineData(2, \"через 2 роки\")]\r\n    [InlineData(3, \"через 3 роки\")]\r\n    [InlineData(4, \"через 4 роки\")]\r\n    [InlineData(5, \"через 5 років\")]\r\n    [InlineData(6, \"через 6 років\")]\r\n    [InlineData(10, \"через 10 років\")]\r\n    [InlineData(11, \"через 11 років\")]\r\n    [InlineData(19, \"через 19 років\")]\r\n    [InlineData(20, \"через 20 років\")]\r\n    [InlineData(21, \"через 21 рік\")]\r\n    [InlineData(111, \"через 111 років\")]\r\n    [InlineData(121, \"через 121 рік\")]\r\n    [InlineData(222, \"через 222 роки\")]\r\n    [InlineData(325, \"через 325 років\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"зараз\", 0, TimeUnit.Day, Tense.Past);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/uk-UA/NumberToWordsTests.cs",
    "content": "﻿namespace ukUA;\r\n\r\n[UseCulture(\"uk-UA\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(-123, \"мінус сто двадцять три\")]\r\n    [InlineData(0, \"нуль\")]\r\n    [InlineData(1, \"один\")]\r\n    [InlineData(10, \"десять\")]\r\n    [InlineData(11, \"одинадцять\")]\r\n    [InlineData(12, \"дванадцять\")]\r\n    [InlineData(13, \"тринадцять\")]\r\n    [InlineData(14, \"чотирнадцять\")]\r\n    [InlineData(15, \"п'ятнадцять\")]\r\n    [InlineData(16, \"шістнадцять\")]\r\n    [InlineData(17, \"сімнадцять\")]\r\n    [InlineData(18, \"вісімнадцять\")]\r\n    [InlineData(19, \"дев'ятнадцять\")]\r\n    [InlineData(20, \"двадцять\")]\r\n    [InlineData(30, \"тридцять\")]\r\n    [InlineData(40, \"сорок\")]\r\n    [InlineData(50, \"п'ятдесят\")]\r\n    [InlineData(60, \"шістдесят\")]\r\n    [InlineData(70, \"сімдесят\")]\r\n    [InlineData(80, \"вісімдесят\")]\r\n    [InlineData(90, \"дев'яносто\")]\r\n    [InlineData(100, \"сто\")]\r\n    [InlineData(200, \"двісті\")]\r\n    [InlineData(300, \"триста\")]\r\n    [InlineData(400, \"чотириста\")]\r\n    [InlineData(500, \"п'ятсот\")]\r\n    [InlineData(600, \"шістсот\")]\r\n    [InlineData(700, \"сімсот\")]\r\n    [InlineData(800, \"вісімсот\")]\r\n    [InlineData(900, \"дев'ятсот\")]\r\n    [InlineData(1000, \"одна тисяча\")]\r\n    [InlineData(2000, \"дві тисячі\")]\r\n    [InlineData(3000, \"три тисячі\")]\r\n    [InlineData(4000, \"чотири тисячі\")]\r\n    [InlineData(5000, \"п'ять тисяч\")]\r\n    [InlineData(10000, \"десять тисяч\")]\r\n    [InlineData(100000, \"сто тисяч\")]\r\n    [InlineData(1000000, \"один мільйон\")]\r\n    [InlineData(2000000, \"два мільйона\")]\r\n    [InlineData(10000000, \"десять мільйонів\")]\r\n    [InlineData(100000000, \"сто мільйонів\")]\r\n    [InlineData(1000000000, \"один мільярд\")]\r\n    [InlineData(2000000000, \"два мільярда\")]\r\n    [InlineData(122, \"сто двадцять два\")]\r\n    [InlineData(3501, \"три тисячі п'ятсот один\")]\r\n    [InlineData(111, \"сто одинадцять\")]\r\n    [InlineData(1112, \"одна тисяча сто дванадцять\")]\r\n    [InlineData(11213, \"одинадцять тисяч двісті тринадцять\")]\r\n    [InlineData(121314, \"сто двадцять одна тисяча триста чотирнадцять\")]\r\n    [InlineData(2132415, \"два мільйона сто тридцять дві тисячі чотириста п'ятнадцять\")]\r\n    [InlineData(12345516, \"дванадцять мільйонів триста сорок п'ять тисяч п'ятсот шістнадцять\")]\r\n    [InlineData(751633617, \"сімсот п'ятдесят один мільйон шістсот тридцять три тисячі шістсот сімнадцять\")]\r\n    [InlineData(1111111118, \"один мільярд сто одинадцять мільйонів сто одинадцять тисяч сто вісімнадцять\")]\r\n    [InlineData(-751633617, \"мінус сімсот п'ятдесят один мільйон шістсот тридцять три тисячі шістсот сімнадцять\")]\r\n    [InlineData(1_000_000_000_000, \"один трильйон\")]\r\n    [InlineData(3_000_000_000_000, \"три трильйона\")]\r\n    [InlineData(5_000_000_000_000, \"п'ять трильйонів\")]\r\n    [InlineData(999_000_000_000_000, \"дев'ятсот дев'яносто дев'ять трильйонів\")]\r\n    [InlineData(\r\n        long.MaxValue,\r\n        \"дев'ять квінтильйонів \" +\r\n        \"двісті двадцять три квадрильйона \" +\r\n        \"триста сімдесят два трильйона \" +\r\n        \"тридцять шість мільярдів \" +\r\n        \"вісімсот п'ятдесят чотири мільйона \" +\r\n        \"сімсот сімдесят п'ять тисяч \" +\r\n        \"вісімсот сім\")]\r\n    [InlineData(\r\n        long.MinValue,\r\n        \"мінус дев'ять квінтильйонів \" +\r\n        \"двісті двадцять три квадрильйона \" +\r\n        \"триста сімдесят два трильйона \" +\r\n        \"тридцять шість мільярдів \" +\r\n        \"вісімсот п'ятдесят чотири мільйона \" +\r\n        \"сімсот сімдесят п'ять тисяч \" +\r\n        \"вісімсот вісім\")]\r\n    public void ToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(122, \"сто двадцять дві\", GrammaticalGender.Feminine)]\r\n    [InlineData(3501, \"три тисячі п'ятсот одна\", GrammaticalGender.Feminine)]\r\n    [InlineData(3501, \"три тисячі п'ятсот одне\", GrammaticalGender.Neuter)]\r\n    public void ToWordsWithGender(int number, string expected, GrammaticalGender gender) =>\r\n        Assert.Equal(expected, number.ToWords(gender));\r\n\r\n    [Theory]\r\n    [InlineData(0, \"нульовий\")]\r\n    [InlineData(1, \"перший\")]\r\n    [InlineData(2, \"другий\")]\r\n    [InlineData(3, \"третій\")]\r\n    [InlineData(4, \"четвертий\")]\r\n    [InlineData(10, \"десятий\")]\r\n    [InlineData(11, \"одинадцятий\")]\r\n    [InlineData(12, \"дванадцятий\")]\r\n    [InlineData(13, \"тринадцятий\")]\r\n    [InlineData(14, \"чотирнадцятий\")]\r\n    [InlineData(15, \"п'ятнадцятий\")]\r\n    [InlineData(16, \"шістнадцятий\")]\r\n    [InlineData(17, \"сімнадцятий\")]\r\n    [InlineData(18, \"вісімнадцятий\")]\r\n    [InlineData(19, \"дев'ятнадцятий\")]\r\n    [InlineData(20, \"двадцятий\")]\r\n    [InlineData(30, \"тридцятий\")]\r\n    [InlineData(40, \"сороковий\")]\r\n    [InlineData(50, \"п'ятдесятий\")]\r\n    [InlineData(60, \"шістдесятий\")]\r\n    [InlineData(70, \"сімдесятий\")]\r\n    [InlineData(80, \"вісімдесятий\")]\r\n    [InlineData(90, \"дев'яностий\")]\r\n    [InlineData(100, \"сотий\")]\r\n    [InlineData(101, \"сто перший\")]\r\n    [InlineData(140, \"сто сороковий\")]\r\n    [InlineData(200, \"двохсотий\")]\r\n    [InlineData(300, \"трьохсотий\")]\r\n    [InlineData(400, \"чотирьохсотий\")]\r\n    [InlineData(500, \"п'ятисотий\")]\r\n    [InlineData(600, \"шестисотий\")]\r\n    [InlineData(700, \"семисотий\")]\r\n    [InlineData(800, \"восьмисотий\")]\r\n    [InlineData(900, \"дев'ятисотий\")]\r\n    [InlineData(1000, \"тисячний\")]\r\n    [InlineData(1001, \"одна тисяча перший\")]\r\n    [InlineData(1040, \"одна тисяча сороковий\")]\r\n    [InlineData(2000, \"двохтисячний\")]\r\n    [InlineData(3000, \"трьохтисячний\")]\r\n    [InlineData(4000, \"чотирьохтисячний\")]\r\n    [InlineData(5000, \"п'ятитисячний\")]\r\n    [InlineData(10000, \"десятитисячний\")]\r\n    [InlineData(21000, \"двадцятиоднотисячний\")]\r\n    [InlineData(100000, \"стотисячний\")]\r\n    [InlineData(101000, \"стооднотисячний\")]\r\n    [InlineData(121000, \"стодвадцятиоднотисячний\")]\r\n    [InlineData(200000, \"двохсоттисячний\")]\r\n    [InlineData(1000000, \"мільйонний\")]\r\n    [InlineData(2000000, \"двохмільйонний\")]\r\n    [InlineData(10000000, \"десятимільйонний\")]\r\n    [InlineData(21000000, \"двадцятиодномільйонний\")]\r\n    [InlineData(100000000, \"стомільйонний\")]\r\n    [InlineData(230000000, \"двохсоттридцятимільйонний\")]\r\n    [InlineData(1000000000, \"мільярдний\")]\r\n    [InlineData(2000000000, \"двохмільярдний\")]\r\n    [InlineData(122, \"сто двадцять другий\")]\r\n    [InlineData(3501, \"три тисячі п'ятсот перший\")]\r\n    [InlineData(111, \"сто одинадцятий\")]\r\n    [InlineData(1112, \"одна тисяча сто дванадцятий\")]\r\n    [InlineData(11213, \"одинадцять тисяч двісті тринадцятий\")]\r\n    [InlineData(121314, \"сто двадцять одна тисяча триста чотирнадцятий\")]\r\n    [InlineData(2132415, \"два мільйона сто тридцять дві тисячі чотириста п'ятнадцятий\")]\r\n    [InlineData(12345516, \"дванадцять мільйонів триста сорок п'ять тисяч п'ятсот шістнадцятий\")]\r\n    [InlineData(751633617, \"сімсот п'ятдесят один мільйон шістсот тридцять три тисячі шістсот сімнадцятий\")]\r\n    [InlineData(1111111118, \"один мільярд сто одинадцять мільйонів сто одинадцять тисяч сто вісімнадцятий\")]\r\n    [InlineData(1111111000, \"один мільярд сто одинадцять мільйонів стоодинадцятитисячний\")]\r\n    [InlineData(1234567000, \"один мільярд двісті тридцять чотири мільйона п'ятисотшістдесятисемитисячний\")]\r\n    [InlineData(-751633617, \"мінус сімсот п'ятдесят один мільйон шістсот тридцять три тисячі шістсот сімнадцятий\")]\r\n    public void ToOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"нульова\")]\r\n    [InlineData(1, \"перша\")]\r\n    [InlineData(2, \"друга\")]\r\n    [InlineData(3, \"третя\")]\r\n    [InlineData(4, \"четверта\")]\r\n    [InlineData(10, \"десята\")]\r\n    [InlineData(11, \"одинадцята\")]\r\n    [InlineData(12, \"дванадцята\")]\r\n    [InlineData(13, \"тринадцята\")]\r\n    [InlineData(14, \"чотирнадцята\")]\r\n    [InlineData(15, \"п'ятнадцята\")]\r\n    [InlineData(16, \"шістнадцята\")]\r\n    [InlineData(17, \"сімнадцята\")]\r\n    [InlineData(18, \"вісімнадцята\")]\r\n    [InlineData(19, \"дев'ятнадцята\")]\r\n    [InlineData(20, \"двадцята\")]\r\n    [InlineData(30, \"тридцята\")]\r\n    [InlineData(40, \"сорокова\")]\r\n    [InlineData(50, \"п'ятдесята\")]\r\n    [InlineData(60, \"шістдесята\")]\r\n    [InlineData(70, \"сімдесята\")]\r\n    [InlineData(80, \"вісімдесята\")]\r\n    [InlineData(90, \"дев'яноста\")]\r\n    [InlineData(100, \"сота\")]\r\n    [InlineData(200, \"двохсота\")]\r\n    [InlineData(300, \"трьохсота\")]\r\n    [InlineData(400, \"чотирьохсота\")]\r\n    [InlineData(500, \"п'ятисота\")]\r\n    [InlineData(600, \"шестисота\")]\r\n    [InlineData(700, \"семисота\")]\r\n    [InlineData(800, \"восьмисота\")]\r\n    [InlineData(900, \"дев'ятисота\")]\r\n    [InlineData(1000, \"тисячна\")]\r\n    [InlineData(2000, \"двохтисячна\")]\r\n    [InlineData(3000, \"трьохтисячна\")]\r\n    [InlineData(4000, \"чотирьохтисячна\")]\r\n    [InlineData(5000, \"п'ятитисячна\")]\r\n    [InlineData(10000, \"десятитисячна\")]\r\n    [InlineData(90000, \"дев'яностотисячна\")]\r\n    [InlineData(100000, \"стотисячна\")]\r\n    [InlineData(990000, \"дев'ятисотдев'яностотисячна\")]\r\n    [InlineData(990001, \"дев'ятсот дев'яносто тисяч перша\")]\r\n    [InlineData(1000000, \"мільйонна\")]\r\n    [InlineData(2000000, \"двохмільйонна\")]\r\n    [InlineData(10000000, \"десятимільйонна\")]\r\n    [InlineData(100000000, \"стомільйонна\")]\r\n    [InlineData(1000000000, \"мільярдна\")]\r\n    [InlineData(2000000000, \"двохмільярдна\")]\r\n    [InlineData(122, \"сто двадцять друга\")]\r\n    [InlineData(3501, \"три тисячі п'ятсот перша\")]\r\n    [InlineData(111, \"сто одинадцята\")]\r\n    [InlineData(1112, \"одна тисяча сто дванадцята\")]\r\n    [InlineData(11000, \"одинадцятитисячна\")]\r\n    [InlineData(11001, \"одинадцять тисяч перша\")]\r\n    [InlineData(11213, \"одинадцять тисяч двісті тринадцята\")]\r\n    [InlineData(15000, \"п'ятнадцятитисячна\")]\r\n    [InlineData(20000, \"двадцятитисячна\")]\r\n    [InlineData(121314, \"сто двадцять одна тисяча триста чотирнадцята\")]\r\n    [InlineData(2132415, \"два мільйона сто тридцять дві тисячі чотириста п'ятнадцята\")]\r\n    [InlineData(12345516, \"дванадцять мільйонів триста сорок п'ять тисяч п'ятсот шістнадцята\")]\r\n    [InlineData(751633617, \"сімсот п'ятдесят один мільйон шістсот тридцять три тисячі шістсот сімнадцята\")]\r\n    [InlineData(1111111118, \"один мільярд сто одинадцять мільйонів сто одинадцять тисяч сто вісімнадцята\")]\r\n    [InlineData(-751633617, \"мінус сімсот п'ятдесят один мільйон шістсот тридцять три тисячі шістсот сімнадцята\")]\r\n    public void ToOrdinalWordsFeminine(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Feminine));\r\n\r\n    [Theory]\r\n    [InlineData(3, \"третє\")]\r\n    [InlineData(111, \"сто одинадцяте\")]\r\n    [InlineData(1112, \"одна тисяча сто дванадцяте\")]\r\n    [InlineData(11213, \"одинадцять тисяч двісті тринадцяте\")]\r\n    [InlineData(121314, \"сто двадцять одна тисяча триста чотирнадцяте\")]\r\n    [InlineData(2132415, \"два мільйона сто тридцять дві тисячі чотириста п'ятнадцяте\")]\r\n    [InlineData(12345516, \"дванадцять мільйонів триста сорок п'ять тисяч п'ятсот шістнадцяте\")]\r\n    [InlineData(751633617, \"сімсот п'ятдесят один мільйон шістсот тридцять три тисячі шістсот сімнадцяте\")]\r\n    [InlineData(1111111118, \"один мільярд сто одинадцять мільйонів сто одинадцять тисяч сто вісімнадцяте\")]\r\n    [InlineData(-751633617, \"мінус сімсот п'ятдесят один мільйон шістсот тридцять три тисячі шістсот сімнадцяте\")]\r\n    public void ToOrdinalWordsNeuter(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(GrammaticalGender.Neuter));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/uk-UA/OrdinalizeTests.cs",
    "content": "﻿namespace ukUA;\r\n\r\n[UseCulture(\"uk-UA\")]\r\npublic class OrdinalizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"0\", \"0-й\")]\r\n    [InlineData(\"1\", \"1-й\")]\r\n    [InlineData(\"2\", \"2-й\")]\r\n    [InlineData(\"3\", \"3-й\")]\r\n    [InlineData(\"4\", \"4-й\")]\r\n    [InlineData(\"5\", \"5-й\")]\r\n    [InlineData(\"6\", \"6-й\")]\r\n    [InlineData(\"23\", \"23-й\")]\r\n    [InlineData(\"100\", \"100-й\")]\r\n    [InlineData(\"101\", \"101-й\")]\r\n    [InlineData(\"102\", \"102-й\")]\r\n    [InlineData(\"103\", \"103-й\")]\r\n    [InlineData(\"1001\", \"1001-й\")]\r\n    public void OrdinalizeString(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0-а\")]\r\n    [InlineData(\"1\", \"1-а\")]\r\n    [InlineData(\"2\", \"2-а\")]\r\n    [InlineData(\"3\", \"3-я\")]\r\n    [InlineData(\"4\", \"4-а\")]\r\n    [InlineData(\"5\", \"5-а\")]\r\n    [InlineData(\"6\", \"6-а\")]\r\n    [InlineData(\"23\", \"23-я\")]\r\n    [InlineData(\"100\", \"100-а\")]\r\n    [InlineData(\"101\", \"101-а\")]\r\n    [InlineData(\"102\", \"102-а\")]\r\n    [InlineData(\"103\", \"103-я\")]\r\n    [InlineData(\"1001\", \"1001-а\")]\r\n    public void OrdinalizeStringFeminine(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(\"0\", \"0-е\")]\r\n    [InlineData(\"1\", \"1-е\")]\r\n    [InlineData(\"2\", \"2-е\")]\r\n    [InlineData(\"3\", \"3-є\")]\r\n    [InlineData(\"4\", \"4-е\")]\r\n    [InlineData(\"5\", \"5-е\")]\r\n    [InlineData(\"6\", \"6-е\")]\r\n    [InlineData(\"23\", \"23-є\")]\r\n    [InlineData(\"100\", \"100-е\")]\r\n    [InlineData(\"101\", \"101-е\")]\r\n    [InlineData(\"102\", \"102-е\")]\r\n    [InlineData(\"103\", \"103-є\")]\r\n    [InlineData(\"1001\", \"1001-е\")]\r\n    public void OrdinalizeStringNeuter(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Neuter), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0-й\")]\r\n    [InlineData(1, \"1-й\")]\r\n    [InlineData(2, \"2-й\")]\r\n    [InlineData(3, \"3-й\")]\r\n    [InlineData(4, \"4-й\")]\r\n    [InlineData(5, \"5-й\")]\r\n    [InlineData(6, \"6-й\")]\r\n    [InlineData(10, \"10-й\")]\r\n    [InlineData(23, \"23-й\")]\r\n    [InlineData(100, \"100-й\")]\r\n    [InlineData(101, \"101-й\")]\r\n    [InlineData(102, \"102-й\")]\r\n    [InlineData(103, \"103-й\")]\r\n    [InlineData(1001, \"1001-й\")]\r\n    public void OrdinalizeNumber(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Masculine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0-а\")]\r\n    [InlineData(1, \"1-а\")]\r\n    [InlineData(2, \"2-а\")]\r\n    [InlineData(3, \"3-я\")]\r\n    [InlineData(4, \"4-а\")]\r\n    [InlineData(5, \"5-а\")]\r\n    [InlineData(6, \"6-а\")]\r\n    [InlineData(10, \"10-а\")]\r\n    [InlineData(23, \"23-я\")]\r\n    [InlineData(100, \"100-а\")]\r\n    [InlineData(101, \"101-а\")]\r\n    [InlineData(102, \"102-а\")]\r\n    [InlineData(103, \"103-я\")]\r\n    [InlineData(1001, \"1001-а\")]\r\n    public void OrdinalizeNumberFeminine(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Feminine), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0-е\")]\r\n    [InlineData(1, \"1-е\")]\r\n    [InlineData(2, \"2-е\")]\r\n    [InlineData(3, \"3-є\")]\r\n    [InlineData(4, \"4-е\")]\r\n    [InlineData(5, \"5-е\")]\r\n    [InlineData(6, \"6-е\")]\r\n    [InlineData(23, \"23-є\")]\r\n    [InlineData(100, \"100-е\")]\r\n    [InlineData(101, \"101-е\")]\r\n    [InlineData(102, \"102-е\")]\r\n    [InlineData(103, \"103-є\")]\r\n    [InlineData(1001, \"1001-е\")]\r\n    public void OrdinalizeNumberNeuter(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(GrammaticalGender.Neuter), ordinalized);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/uk-UA/TimeSpanHumanizeTests.cs",
    "content": "namespace ukUA;\r\n\r\n[UseCulture(\"uk-UA\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"один рік\", true)]\r\n    [InlineData(366, \"1 рік\")]\r\n    [InlineData(731, \"2 роки\")]\r\n    [InlineData(1096, \"3 роки\")]\r\n    [InlineData(4018, \"11 років\")]\r\n    public void Years(int days, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: toWords));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"один місяць\", true)]\r\n    [InlineData(31, \"1 місяць\")]\r\n    [InlineData(61, \"2 місяці\")]\r\n    [InlineData(92, \"3 місяці\")]\r\n    [InlineData(335, \"11 місяців\")]\r\n    public void Months(int days, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year, toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"один тиждень\", true)]\r\n    [InlineData(7, \"1 тиждень\")]\r\n    [InlineData(14, \"2 тижні\")]\r\n    [InlineData(21, \"3 тижні\")]\r\n    [InlineData(28, \"4 тижні\")]\r\n    [InlineData(35, \"5 тижнів\")]\r\n    [InlineData(77, \"11 тижнів\")]\r\n    [InlineData(147, \"двадцять один тиждень\", true)]\r\n    public void Weeks(int days, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"один день\", true)]\r\n    [InlineData(1, \"1 день\")]\r\n    [InlineData(2, \"2 дні\")]\r\n    [InlineData(3, \"3 дні\")]\r\n    [InlineData(4, \"4 дні\")]\r\n    [InlineData(5, \"5 днів\")]\r\n    [InlineData(6, \"6 днів\")]\r\n    [InlineData(21, \"двадцять один день\", true)]\r\n    public void Days(int days, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(toWords: toWords, maxUnit: TimeUnit.Day));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"одна година\", true)]\r\n    [InlineData(1, \"1 година\")]\r\n    [InlineData(2, \"2 години\")]\r\n    [InlineData(3, \"3 години\")]\r\n    [InlineData(4, \"4 години\")]\r\n    [InlineData(5, \"5 годин\")]\r\n    [InlineData(6, \"6 годин\")]\r\n    [InlineData(10, \"10 годин\")]\r\n    [InlineData(11, \"11 годин\")]\r\n    [InlineData(19, \"19 годин\")]\r\n    [InlineData(20, \"20 годин\")]\r\n    [InlineData(21, \"21 година\")]\r\n    [InlineData(21, \"двадцять одна година\", true)]\r\n    [InlineData(22, \"22 години\")]\r\n    [InlineData(23, \"23 години\")]\r\n    public void Hours(int hours, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize(toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"одна хвилина\", true)]\r\n    [InlineData(1, \"1 хвилина\")]\r\n    [InlineData(2, \"2 хвилини\")]\r\n    [InlineData(3, \"3 хвилини\")]\r\n    [InlineData(4, \"4 хвилини\")]\r\n    [InlineData(5, \"5 хвилин\")]\r\n    [InlineData(6, \"6 хвилин\")]\r\n    [InlineData(10, \"10 хвилин\")]\r\n    [InlineData(11, \"11 хвилин\")]\r\n    [InlineData(19, \"19 хвилин\")]\r\n    [InlineData(20, \"20 хвилин\")]\r\n    [InlineData(21, \"21 хвилина\")]\r\n    [InlineData(21, \"двадцять одна хвилина\", true)]\r\n    [InlineData(22, \"22 хвилини\")]\r\n    [InlineData(23, \"23 хвилини\")]\r\n    [InlineData(24, \"24 хвилини\")]\r\n    [InlineData(25, \"25 хвилин\")]\r\n    [InlineData(40, \"40 хвилин\")]\r\n    public void Minutes(int minutes, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize(toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"одна секунда\", true)]\r\n    [InlineData(1, \"1 секунда\")]\r\n    [InlineData(2, \"2 секунди\")]\r\n    [InlineData(3, \"3 секунди\")]\r\n    [InlineData(4, \"4 секунди\")]\r\n    [InlineData(5, \"5 секунд\")]\r\n    [InlineData(6, \"6 секунд\")]\r\n    [InlineData(10, \"10 секунд\")]\r\n    [InlineData(11, \"11 секунд\")]\r\n    [InlineData(19, \"19 секунд\")]\r\n    [InlineData(20, \"20 секунд\")]\r\n    [InlineData(21, \"21 секунда\")]\r\n    [InlineData(21, \"двадцять одна секунда\", true)]\r\n    [InlineData(22, \"22 секунди\")]\r\n    [InlineData(23, \"23 секунди\")]\r\n    [InlineData(24, \"24 секунди\")]\r\n    [InlineData(25, \"25 секунд\")]\r\n    [InlineData(40, \"40 секунд\")]\r\n    public void Seconds(int seconds, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize(toWords: toWords));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"одна мілісекунда\", true)]\r\n    [InlineData(1, \"1 мілісекунда\")]\r\n    [InlineData(2, \"2 мілісекунди\")]\r\n    [InlineData(3, \"3 мілісекунди\")]\r\n    [InlineData(4, \"4 мілісекунди\")]\r\n    [InlineData(5, \"5 мілісекунд\")]\r\n    [InlineData(6, \"6 мілісекунд\")]\r\n    [InlineData(10, \"10 мілісекунд\")]\r\n    [InlineData(11, \"11 мілісекунд\")]\r\n    [InlineData(19, \"19 мілісекунд\")]\r\n    [InlineData(20, \"20 мілісекунд\")]\r\n    [InlineData(21, \"21 мілісекунда\")]\r\n    [InlineData(21, \"двадцять одна мілісекунда\", true)]\r\n    [InlineData(22, \"22 мілісекунди\")]\r\n    [InlineData(23, \"23 мілісекунди\")]\r\n    [InlineData(24, \"24 мілісекунди\")]\r\n    [InlineData(25, \"25 мілісекунд\")]\r\n    [InlineData(40, \"40 мілісекунд\")]\r\n    public void Milliseconds(int milliseconds, string expected, bool toWords = false) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize(toWords: toWords));\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 мілісекунд\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        Assert.Equal(\"без часу\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/uz-Cyrl-UZ/DateHumanizeTests.cs",
    "content": "﻿namespace uzCyrl;\r\n\r\n[UseCulture(\"uz-Cyrl-UZ\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"бир сония аввал\")]\r\n    [InlineData(10, \"10 секунд аввал\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"бир сониядан сўнг\")]\r\n    [InlineData(10, \"10 секунддан сўнг\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"бир дақиқа аввал\")]\r\n    [InlineData(10, \"10 минут аввал\")]\r\n    [InlineData(60, \"бир соат аввал\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"бир дақиқадан сўнг\")]\r\n    [InlineData(10, \"10 минутдан сўнг\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"бир соат аввал\")]\r\n    [InlineData(10, \"10 соат аввал\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"бир соатдан сўнг\")]\r\n    [InlineData(10, \"10 соатдан сўнг\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"кеча\")]\r\n    [InlineData(10, \"10 кун аввал\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"эртага\")]\r\n    [InlineData(10, \"10 кундан сўнг\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"бир ой аввал\")]\r\n    [InlineData(10, \"10 ой аввал\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"бир ойдан сўнг\")]\r\n    [InlineData(10, \"10 ойдан сўнг\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"бир йил аввал\")]\r\n    [InlineData(2, \"2 йил аввал\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"бир йилдан сўнг\")]\r\n    [InlineData(2, \"2 йилдан сўнг\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"ҳозир\", 0, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/uz-Cyrl-UZ/NumberToWordsTests.cs",
    "content": "﻿namespace uzCyrl;\r\n\r\n[UseCulture(\"uz-Cyrl-UZ\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"нол\")]\r\n    [InlineData(1, \"бир\")]\r\n    [InlineData(10, \"ўн\")]\r\n    [InlineData(11, \"ўн бир\")]\r\n    [InlineData(12, \"ўн икки\")]\r\n    [InlineData(13, \"ўн уч\")]\r\n    [InlineData(14, \"ўн тўрт\")]\r\n    [InlineData(15, \"ўн беш\")]\r\n    [InlineData(16, \"ўн олти\")]\r\n    [InlineData(17, \"ўн етти\")]\r\n    [InlineData(18, \"ўн саккиз\")]\r\n    [InlineData(19, \"ўн тўққиз\")]\r\n    [InlineData(20, \"йигирма\")]\r\n    [InlineData(30, \"ўттиз\")]\r\n    [InlineData(40, \"қирқ\")]\r\n    [InlineData(50, \"эллик\")]\r\n    [InlineData(60, \"олтмиш\")]\r\n    [InlineData(70, \"етмиш\")]\r\n    [InlineData(80, \"саксон\")]\r\n    [InlineData(90, \"тўқсон\")]\r\n    [InlineData(100, \"юз\")]\r\n    [InlineData(200, \"икки юз\")]\r\n    [InlineData(300, \"уч юз\")]\r\n    [InlineData(400, \"тўрт юз\")]\r\n    [InlineData(500, \"беш юз\")]\r\n    [InlineData(600, \"олти юз\")]\r\n    [InlineData(700, \"етти юз\")]\r\n    [InlineData(800, \"саккиз юз\")]\r\n    [InlineData(900, \"тўққиз юз\")]\r\n    [InlineData(1000, \"бир минг\")]\r\n    [InlineData(2000, \"икки минг\")]\r\n    [InlineData(3000, \"уч минг\")]\r\n    [InlineData(10000, \"ўн минг\")]\r\n    [InlineData(100000, \"юз минг\")]\r\n    [InlineData(100100, \"юз минг бир юз\")]\r\n    [InlineData(200100, \"икки юз минг бир юз\")]\r\n    [InlineData(1000000, \"бир миллион\")]\r\n    [InlineData(1001000, \"бир миллион бир минг\")]\r\n    [InlineData(1000100, \"бир миллион бир юз\")]\r\n    [InlineData(2000000, \"икки миллион\")]\r\n    [InlineData(10000000, \"ўн миллион\")]\r\n    [InlineData(100000000, \"юз миллион\")]\r\n    [InlineData(100001000, \"юз миллион бир минг\")]\r\n    [InlineData(1000000000, \"бир миллиард\")]\r\n    [InlineData(2000000000, \"икки миллиард\")]\r\n    [InlineData(122, \"бир юз йигирма икки\")]\r\n    [InlineData(3501, \"уч минг беш юз бир\")]\r\n    [InlineData(111, \"бир юз ўн бир\")]\r\n    [InlineData(1112, \"бир минг бир юз ўн икки\")]\r\n    [InlineData(11213, \"ўн бир минг икки юз ўн уч\")]\r\n    [InlineData(121314, \"бир юз йигирма бир минг уч юз ўн тўрт\")]\r\n    [InlineData(2132415, \"икки миллион бир юз ўттиз икки минг тўрт юз ўн беш\")]\r\n    [InlineData(12345516, \"ўн икки миллион уч юз қирқ беш минг беш юз ўн олти\")]\r\n    [InlineData(751633617, \"етти юз эллик бир миллион олти юз ўттиз уч минг олти юз ўн етти\")]\r\n    [InlineData(1111111118, \"бир миллиард бир юз ўн бир миллион бир юз ўн бир минг бир юз ўн саккиз\")]\r\n    [InlineData(-751633617, \"минус етти юз эллик бир миллион олти юз ўттиз уч минг олти юз ўн етти\")]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"нолинчи\")]\r\n    [InlineData(1, \"биринчи\")]\r\n    [InlineData(10, \"ўнинчи\")]\r\n    [InlineData(11, \"ўн биринчи\")]\r\n    [InlineData(12, \"ўн иккинчи\")]\r\n    [InlineData(13, \"ўн учинчи\")]\r\n    [InlineData(14, \"ўн тўртинчи\")]\r\n    [InlineData(15, \"ўн бешинчи\")]\r\n    [InlineData(16, \"ўн олтинчи\")]\r\n    [InlineData(17, \"ўн еттинчи\")]\r\n    [InlineData(18, \"ўн саккизинчи\")]\r\n    [InlineData(19, \"ўн тўққизинчи\")]\r\n    [InlineData(20, \"йигирманчи\")]\r\n    [InlineData(30, \"ўттизинчи\")]\r\n    [InlineData(40, \"қирқинчи\")]\r\n    [InlineData(50, \"элликинчи\")]\r\n    [InlineData(60, \"олтмишинчи\")]\r\n    [InlineData(70, \"етмишинчи\")]\r\n    [InlineData(80, \"саксонинчи\")]\r\n    [InlineData(90, \"тўқсонинчи\")]\r\n    [InlineData(100, \"юзинчи\")]\r\n    [InlineData(200, \"икки юзинчи\")]\r\n    [InlineData(1000, \"бир мингинчи\")]\r\n    [InlineData(2000000, \"икки миллионинчи\")]\r\n    [InlineData(1000000000, \"бир миллиардинчи\")]\r\n    [InlineData(122, \"бир юз йигирма иккинчи\")]\r\n    [InlineData(3501, \"уч минг беш юз биринчи\")]\r\n    [InlineData(111, \"бир юз ўн биринчи\")]\r\n    [InlineData(751633617, \"етти юз эллик бир миллион олти юз ўттиз уч минг олти юз ўн еттинчи\")]\r\n    [InlineData(1111111118, \"бир миллиард бир юз ўн бир миллион бир юз ўн бир минг бир юз ўн саккизинчи\")]\r\n    [InlineData(-751633617, \"минус етти юз эллик бир миллион олти юз ўттиз уч минг олти юз ўн еттинчи\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/uz-Cyrl-UZ/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace uzCyrl;\r\n\r\n[UseCulture(\"uz-Cyrl-UZ\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 йил\")]\r\n    [InlineData(731, \"2 йил\")]\r\n    [InlineData(1096, \"3 йил\")]\r\n    [InlineData(4018, \"11 йил\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 ой\")]\r\n    [InlineData(61, \"2 ой\")]\r\n    [InlineData(92, \"3 ой\")]\r\n    [InlineData(335, \"11 ой\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(14, \"2 ҳафта\")]\r\n    [InlineData(7, \"1 ҳафта\")]\r\n    public void Weeks(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(6, \"6 кун\")]\r\n    [InlineData(2, \"2 кун\")]\r\n    public void Days(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 соат\")]\r\n    [InlineData(1, \"1 соат\")]\r\n    public void Hours(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan.FromHours(hours).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 минут\")]\r\n    [InlineData(1, \"1 минут\")]\r\n    public void Minutes(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMinutes(minutes).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 секунд\")]\r\n    [InlineData(1, \"1 секунд\")]\r\n    public void Seconds(int seconds, string expected)\r\n    {\r\n        var actual = TimeSpan.FromSeconds(seconds).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 миллисекунд\")]\r\n    [InlineData(1, \"1 миллисекунд\")]\r\n    public void Milliseconds(int ms, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTime()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize();\r\n        Assert.Equal(\"0 миллисекунд\", actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTimeToWords()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(toWords: true);\r\n        Assert.Equal(\"вақт йўқ\", actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/uz-Latn-UZ/DateHumanizeTests.cs",
    "content": "﻿namespace uzLatn;\r\n\r\n[UseCulture(\"uz-Latn-UZ\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"bir soniya avval\")]\r\n    [InlineData(10, \"10 sekund avval\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir soniyadan so`ng\")]\r\n    [InlineData(10, \"10 sekunddan so`ng\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir daqiqa avval\")]\r\n    [InlineData(10, \"10 minut avval\")]\r\n    [InlineData(60, \"bir soat avval\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir daqiqadan so`ng\")]\r\n    [InlineData(10, \"10 minutdan so`ng\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir soat avval\")]\r\n    [InlineData(10, \"10 soat avval\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir soatdan so`ng\")]\r\n    [InlineData(10, \"10 soatdan so`ng\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"kecha\")]\r\n    [InlineData(10, \"10 kun avval\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ertaga\")]\r\n    [InlineData(10, \"10 kundan so`ng\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir oy avval\")]\r\n    [InlineData(10, \"10 oy avval\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir oydan so`ng\")]\r\n    [InlineData(10, \"10 oydan so`ng\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir yil avval\")]\r\n    [InlineData(2, \"2 yil avval\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"bir yildan so`ng\")]\r\n    [InlineData(2, \"2 yildan so`ng\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n\r\n    [Fact]\r\n    public void Now() =>\r\n        DateHumanize.Verify(\"hozir\", 0, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/uz-Latn-UZ/NumberToWordsTests.cs",
    "content": "﻿namespace uzLatn;\r\n\r\n[UseCulture(\"uz-Latn-UZ\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"nol\")]\r\n    [InlineData(1, \"bir\")]\r\n    [InlineData(10, \"o`n\")]\r\n    [InlineData(11, \"o`n bir\")]\r\n    [InlineData(12, \"o`n ikki\")]\r\n    [InlineData(13, \"o`n uch\")]\r\n    [InlineData(14, \"o`n to`rt\")]\r\n    [InlineData(15, \"o`n besh\")]\r\n    [InlineData(16, \"o`n olti\")]\r\n    [InlineData(17, \"o`n yetti\")]\r\n    [InlineData(18, \"o`n sakkiz\")]\r\n    [InlineData(19, \"o`n to`qqiz\")]\r\n    [InlineData(20, \"yigirma\")]\r\n    [InlineData(30, \"o`ttiz\")]\r\n    [InlineData(40, \"qirq\")]\r\n    [InlineData(50, \"ellik\")]\r\n    [InlineData(60, \"oltmish\")]\r\n    [InlineData(70, \"yetmish\")]\r\n    [InlineData(80, \"sakson\")]\r\n    [InlineData(90, \"to`qson\")]\r\n    [InlineData(100, \"yuz\")]\r\n    [InlineData(200, \"ikki yuz\")]\r\n    [InlineData(300, \"uch yuz\")]\r\n    [InlineData(400, \"to`rt yuz\")]\r\n    [InlineData(500, \"besh yuz\")]\r\n    [InlineData(600, \"olti yuz\")]\r\n    [InlineData(700, \"yetti yuz\")]\r\n    [InlineData(800, \"sakkiz yuz\")]\r\n    [InlineData(900, \"to`qqiz yuz\")]\r\n    [InlineData(1000, \"bir ming\")]\r\n    [InlineData(2000, \"ikki ming\")]\r\n    [InlineData(3000, \"uch ming\")]\r\n    [InlineData(10000, \"o`n ming\")]\r\n    [InlineData(100000, \"yuz ming\")]\r\n    [InlineData(100100, \"yuz ming bir yuz\")]\r\n    [InlineData(200100, \"ikki yuz ming bir yuz\")]\r\n    [InlineData(1000000, \"bir million\")]\r\n    [InlineData(1001000, \"bir million bir ming\")]\r\n    [InlineData(1000100, \"bir million bir yuz\")]\r\n    [InlineData(2000000, \"ikki million\")]\r\n    [InlineData(10000000, \"o`n million\")]\r\n    [InlineData(100000000, \"yuz million\")]\r\n    [InlineData(100001000, \"yuz million bir ming\")]\r\n    [InlineData(1000000000, \"bir milliard\")]\r\n    [InlineData(2000000000, \"ikki milliard\")]\r\n    [InlineData(122, \"bir yuz yigirma ikki\")]\r\n    [InlineData(3501, \"uch ming besh yuz bir\")]\r\n    [InlineData(111, \"bir yuz o`n bir\")]\r\n    [InlineData(1112, \"bir ming bir yuz o`n ikki\")]\r\n    [InlineData(11213, \"o`n bir ming ikki yuz o`n uch\")]\r\n    [InlineData(121314, \"bir yuz yigirma bir ming uch yuz o`n to`rt\")]\r\n    [InlineData(2132415, \"ikki million bir yuz o`ttiz ikki ming to`rt yuz o`n besh\")]\r\n    [InlineData(12345516, \"o`n ikki million uch yuz qirq besh ming besh yuz o`n olti\")]\r\n    [InlineData(751633617, \"yetti yuz ellik bir million olti yuz o`ttiz uch ming olti yuz o`n yetti\")]\r\n    [InlineData(1111111118, \"bir milliard bir yuz o`n bir million bir yuz o`n bir ming bir yuz o`n sakkiz\")]\r\n    [InlineData(-751633617, \"minus yetti yuz ellik bir million olti yuz o`ttiz uch ming olti yuz o`n yetti\")]\r\n    public void ToWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"nolinchi\")]\r\n    [InlineData(1, \"birinchi\")]\r\n    [InlineData(10, \"o`ninchi\")]\r\n    [InlineData(11, \"o`n birinchi\")]\r\n    [InlineData(12, \"o`n ikkinchi\")]\r\n    [InlineData(13, \"o`n uchinchi\")]\r\n    [InlineData(14, \"o`n to`rtinchi\")]\r\n    [InlineData(15, \"o`n beshinchi\")]\r\n    [InlineData(16, \"o`n oltinchi\")]\r\n    [InlineData(17, \"o`n yettinchi\")]\r\n    [InlineData(18, \"o`n sakkizinchi\")]\r\n    [InlineData(19, \"o`n to`qqizinchi\")]\r\n    [InlineData(20, \"yigirmanchi\")]\r\n    [InlineData(30, \"o`ttizinchi\")]\r\n    [InlineData(40, \"qirqinchi\")]\r\n    [InlineData(50, \"ellikinchi\")]\r\n    [InlineData(60, \"oltmishinchi\")]\r\n    [InlineData(70, \"yetmishinchi\")]\r\n    [InlineData(80, \"saksoninchi\")]\r\n    [InlineData(90, \"to`qsoninchi\")]\r\n    [InlineData(100, \"yuzinchi\")]\r\n    [InlineData(200, \"ikki yuzinchi\")]\r\n    [InlineData(1000, \"bir minginchi\")]\r\n    [InlineData(2000000, \"ikki millioninchi\")]\r\n    [InlineData(1000000000, \"bir milliardinchi\")]\r\n    [InlineData(122, \"bir yuz yigirma ikkinchi\")]\r\n    [InlineData(3501, \"uch ming besh yuz birinchi\")]\r\n    [InlineData(111, \"bir yuz o`n birinchi\")]\r\n    [InlineData(751633617, \"yetti yuz ellik bir million olti yuz o`ttiz uch ming olti yuz o`n yettinchi\")]\r\n    [InlineData(1111111118, \"bir milliard bir yuz o`n bir million bir yuz o`n bir ming bir yuz o`n sakkizinchi\")]\r\n    [InlineData(-751633617, \"minus yetti yuz ellik bir million olti yuz o`ttiz uch ming olti yuz o`n yettinchi\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/uz-Latn-UZ/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace uzLatn;\r\n\r\n[UseCulture(\"uz-Latn-UZ\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 yil\")]\r\n    [InlineData(731, \"2 yil\")]\r\n    [InlineData(1096, \"3 yil\")]\r\n    [InlineData(4018, \"11 yil\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 oy\")]\r\n    [InlineData(61, \"2 oy\")]\r\n    [InlineData(92, \"3 oy\")]\r\n    [InlineData(335, \"11 oy\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(14, \"2 hafta\")]\r\n    [InlineData(7, \"1 hafta\")]\r\n    public void Weeks(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(6, \"6 kun\")]\r\n    [InlineData(2, \"2 kun\")]\r\n    public void Days(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 soat\")]\r\n    [InlineData(1, \"1 soat\")]\r\n    public void Hours(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan.FromHours(hours).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 minut\")]\r\n    [InlineData(1, \"1 minut\")]\r\n    public void Minutes(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMinutes(minutes).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 sekund\")]\r\n    [InlineData(1, \"1 sekund\")]\r\n    public void Seconds(int seconds, string expected)\r\n    {\r\n        var actual = TimeSpan.FromSeconds(seconds).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 millisekund\")]\r\n    [InlineData(1, \"1 millisekund\")]\r\n    public void Milliseconds(int ms, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTime()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize();\r\n        Assert.Equal(\"0 millisekund\", actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTimeToWords()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(toWords: true);\r\n        Assert.Equal(\"vaqt yo`q\", actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/vi/DateHumanizeTests.cs",
    "content": "﻿namespace vi;\r\n\r\n[UseCulture(\"vi\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"cách đây một giây\")]\r\n    [InlineData(10, \"cách đây 10 giây\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"một giây nữa\")]\r\n    [InlineData(10, \"10 giây nữa\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"cách đây một phút\")]\r\n    [InlineData(10, \"cách đây 10 phút\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"một phút nữa\")]\r\n    [InlineData(10, \"10 phút nữa\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"cách đây một tiếng\")]\r\n    [InlineData(10, \"cách đây 10 tiếng\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"một tiếng nữa\")]\r\n    [InlineData(10, \"10 tiếng nữa\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"hôm qua\")]\r\n    [InlineData(10, \"cách đây 10 ngày\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"ngày mai\")]\r\n    [InlineData(10, \"10 ngày nữa\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"cách đây một tháng\")]\r\n    [InlineData(10, \"cách đây 10 tháng\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"một tháng nữa\")]\r\n    [InlineData(10, \"10 tháng nữa\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"cách đây một năm\")]\r\n    [InlineData(2, \"cách đây 2 năm\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(1, \"một năm nữa\")]\r\n    [InlineData(2, \"2 năm nữa\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/vi/NumberToWordsTests.cs",
    "content": "namespace Humanizer.Tests.Localisation.vi;\r\n\r\n[UseCulture(\"vi\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"không\")]\r\n    [InlineData(1, \"một\")]\r\n    [InlineData(2, \"hai\")]\r\n    [InlineData(3, \"ba\")]\r\n    [InlineData(4, \"bốn\")]\r\n    [InlineData(5, \"năm\")]\r\n    [InlineData(6, \"sáu\")]\r\n    [InlineData(7, \"bảy\")]\r\n    [InlineData(8, \"tám\")]\r\n    [InlineData(9, \"chín\")]\r\n    [InlineData(10, \"mười\")]\r\n    [InlineData(11, \"mười một\")]\r\n    [InlineData(14, \"mười bốn\")]\r\n    [InlineData(15, \"mười lăm\")]\r\n    [InlineData(21, \"hai mươi mốt\")]\r\n    [InlineData(24, \"hai mươi tư\")]\r\n    [InlineData(25, \"hai mươi lăm\")]\r\n    [InlineData(50, \"năm mươi\")]\r\n    [InlineData(55, \"năm mươi lăm\")]\r\n    [InlineData(100, \"một trăm\")]\r\n    [InlineData(105, \"một trăm linh năm\")]\r\n    [InlineData(110, \"một trăm mười\")]\r\n    [InlineData(114, \"một trăm mười bốn\")]\r\n    [InlineData(115, \"một trăm mười lăm\")]\r\n    [InlineData(134, \"một trăm ba mươi tư\")]\r\n    [InlineData(500, \"năm trăm\")]\r\n    [InlineData(505, \"năm trăm linh năm\")]\r\n    [InlineData(555, \"năm trăm năm mươi lăm\")]\r\n    [InlineData(1000, \"một nghìn\")]\r\n    [InlineData(1005, \"một nghìn linh năm\")]\r\n    [InlineData(1115, \"một nghìn một trăm mười lăm\")]\r\n    [InlineData(10005, \"mười nghìn linh năm\")]\r\n    [InlineData(10115, \"mười nghìn một trăm mười lăm\")]\r\n    [InlineData(11115, \"mười một nghìn một trăm mười lăm\")]\r\n    [InlineData(30005, \"ba mươi nghìn linh năm\")]\r\n    [InlineData(100005, \"một trăm nghìn linh năm\")]\r\n    [InlineData(1000000, \"một triệu\")]\r\n    [InlineData(100001005, \"một trăm triệu một nghìn linh năm\")]\r\n    [InlineData(1000000000, \"một tỉ\")]\r\n    [InlineData(1111111111111111, \"một triệu một trăm mười một nghìn một trăm mười một tỉ một trăm mười một triệu một trăm mười một nghìn một trăm mười một\")]\r\n    [InlineData(5101101101101151101, \"năm tỉ một trăm linh một triệu một trăm linh một nghìn một trăm linh một tỉ một trăm linh một triệu một trăm năm mươi mốt nghìn một trăm linh một\")]\r\n    [InlineData(-1, \"trừ một\")]\r\n    [InlineData(-30005, \"trừ ba mươi nghìn linh năm\")]\r\n    [InlineData(-1111111111111111, \"trừ một triệu một trăm mười một nghìn một trăm mười một tỉ một trăm mười một triệu một trăm mười một nghìn một trăm mười một\")]\r\n    public void ToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(0, \"thứ không\")]\r\n    [InlineData(1, \"thứ nhất\")]\r\n    [InlineData(2, \"thứ nhì\")]\r\n    [InlineData(3, \"thứ ba\")]\r\n    [InlineData(4, \"thứ tư\")]\r\n    [InlineData(5, \"thứ năm\")]\r\n    [InlineData(6, \"thứ sáu\")]\r\n    [InlineData(7, \"thứ bảy\")]\r\n    [InlineData(8, \"thứ tám\")]\r\n    [InlineData(9, \"thứ chín\")]\r\n    [InlineData(10, \"thứ mười\")]\r\n    [InlineData(11, \"thứ mười một\")]\r\n    [InlineData(14, \"thứ mười bốn\")]\r\n    [InlineData(15, \"thứ mười lăm\")]\r\n    [InlineData(21, \"thứ hai mươi mốt\")]\r\n    [InlineData(24, \"thứ hai mươi tư\")]\r\n    [InlineData(25, \"thứ hai mươi lăm\")]\r\n    public void ToOrdinalWords(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/vi/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace vi;\r\n\r\n[UseCulture(\"vi\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(366, \"1 năm\")]\r\n    [InlineData(731, \"2 năm\")]\r\n    [InlineData(1096, \"3 năm\")]\r\n    [InlineData(4018, \"11 năm\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan\r\n            .FromDays(days)\r\n            .Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Google\")]\r\n    [InlineData(31, \"1 tháng\")]\r\n    [InlineData(61, \"2 tháng\")]\r\n    [InlineData(92, \"3 tháng\")]\r\n    [InlineData(335, \"11 tháng\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan\r\n            .FromDays(days)\r\n            .Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(14, \"2 tuần\")]\r\n    [InlineData(7, \"1 tuần\")]\r\n    public void Weeks(int days, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromDays(days)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 ngày\")]\r\n    [InlineData(1, \"1 ngày\")]\r\n    public void Days(int days, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromDays(days)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 giờ\")]\r\n    [InlineData(1, \"1 giờ\")]\r\n    public void Hours(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromHours(hours)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 phút\")]\r\n    [InlineData(1, \"1 phút\")]\r\n    public void Minutes(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromMinutes(minutes)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 giây\")]\r\n    [InlineData(1, \"1 giây\")]\r\n    public void Seconds(int seconds, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromSeconds(seconds)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 phần ngàn giây\")]\r\n    [InlineData(1, \"1 phần ngàn giây\")]\r\n    public void Milliseconds(int ms, string expected)\r\n    {\r\n        var actual = TimeSpan\r\n            .FromMilliseconds(ms)\r\n            .Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTime()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize();\r\n        Assert.Equal(\"0 phần ngàn giây\", actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTimeToWords()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(toWords: true);\r\n        Assert.Equal(\"không giờ\", actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/zh-CN/DateHumanizeTests.cs",
    "content": "﻿namespace zhCN;\r\n\r\n[UseCulture(\"zh-CN\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, \"2 天前\")]\r\n    [InlineData(1, \"昨天\")]\r\n    [InlineData(0, \"现在\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 天后\")]\r\n    [InlineData(1, \"明天\")]\r\n    [InlineData(0, \"现在\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 小时前\")]\r\n    [InlineData(1, \"1 小时前\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 小时后\")]\r\n    [InlineData(1, \"1 小时后\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 分钟前\")]\r\n    [InlineData(-1, \"1 分钟前\")]\r\n    [InlineData(60, \"1 小时前\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 分钟后\")]\r\n    [InlineData(1, \"1 分钟后\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 个月前\")]\r\n    [InlineData(-1, \"1 个月前\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 个月后\")]\r\n    [InlineData(1, \"1 个月后\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 秒钟前\")]\r\n    [InlineData(-1, \"1 秒钟前\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 秒钟后\")]\r\n    [InlineData(1, \"1 秒钟后\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 年前\")]\r\n    [InlineData(-1, \"去年\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 年后\")]\r\n    [InlineData(1, \"明年\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/zh-CN/NumberToWordsTests.cs",
    "content": "﻿namespace zhCN;\r\n\r\n[UseCulture(\"zh-CN\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [InlineData(1, \"一\")]\r\n    [InlineData(2, \"二\")]\r\n    [InlineData(3, \"三\")]\r\n    [InlineData(4, \"四\")]\r\n    [InlineData(-5, \"负 五\")]\r\n    [InlineData(6, \"六\")]\r\n    [InlineData(7, \"七\")]\r\n    [InlineData(8, \"八\")]\r\n    [InlineData(9, \"九\")]\r\n    [InlineData(10, \"十\")]\r\n    [InlineData(13, \"十三\")]\r\n    [InlineData(15, \"十五\")]\r\n    [InlineData(19, \"十九\")]\r\n    [InlineData(28, \"二十八\")]\r\n    [InlineData(37, \"三十七\")]\r\n    [InlineData(46, \"四十六\")]\r\n    [InlineData(55, \"五十五\")]\r\n    [InlineData(64, \"六十四\")]\r\n    [InlineData(73, \"七十三\")]\r\n    [InlineData(82, \"八十二\")]\r\n    [InlineData(-91, \"负 九十一\")]\r\n    [InlineData(100, \"一百\")]\r\n    [InlineData(507, \"五百零七\")]\r\n    [InlineData(719, \"七百一十九\")]\r\n    [InlineData(1356, \"一千三百五十六\")]\r\n    [InlineData(20089, \"二万零八十九\")]\r\n    [InlineData(335478, \"三十三万五千四百七十八\")]\r\n    [InlineData(4214599, \"四百二十一万四千五百九十九\")]\r\n    [InlineData(-54367865, \"负 五千四百三十六万七千八百六十五\")]\r\n    [InlineData(650004076, \"六亿五千万四千零七十六\")]\r\n    [InlineData(7156404367L, \"七十一亿五千六百四十万四千三百六十七\")]\r\n    [InlineData(89043267890L, \"八百九十亿四千三百二十六万七千八百九十\")]\r\n    [InlineData(500007893401L, \"五千亿零七百八十九万三千四百零一\")]\r\n    [InlineData(500000003401L, \"五千亿零三千四百零一\")]\r\n    [InlineData(500000000001L, \"五千亿零一\")]\r\n    [InlineData(500000000000L, \"五千亿\")]\r\n    [InlineData(6067823149088L, \"六兆零六百七十八亿二千三百一十四万九千零八十八\")]\r\n    [Theory]\r\n    public void ToWords(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"第 一\")]\r\n    [InlineData(15, \"第 十五\")]\r\n    [InlineData(10000, \"第 一万\")]\r\n    [InlineData(31234, \"第 三万一千二百三十四\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/zh-CN/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace zhCN;\r\n\r\n[UseCulture(\"zh-CN\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"1 年\")]\r\n    [InlineData(731, \"2 年\")]\r\n    [InlineData(1096, \"3 年\")]\r\n    [InlineData(4018, \"11 年\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"1 个月\")]\r\n    [InlineData(61, \"2 个月\")]\r\n    [InlineData(92, \"3 个月\")]\r\n    [InlineData(335, \"11 个月\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 周\")]\r\n    [InlineData(14, \"2 周\")]\r\n    [InlineData(21, \"3 周\")]\r\n    [InlineData(77, \"11 周\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 天\")]\r\n    [InlineData(2, \"2 天\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 小时\")]\r\n    [InlineData(2, \"2 小时\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 分\")]\r\n    [InlineData(2, \"2 分\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 秒\")]\r\n    [InlineData(2, \"2 秒\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 毫秒\")]\r\n    [InlineData(2, \"2 毫秒\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 毫秒\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"没有时间\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/zh-HK/DateHumanizeTests.cs",
    "content": "﻿namespace zhHK;\r\n\r\n[UseCulture(\"zh-HK\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, \"2 天前\")]\r\n    [InlineData(1, \"昨天\")]\r\n    [InlineData(0, \"現在\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 天後\")]\r\n    [InlineData(1, \"明天\")]\r\n    [InlineData(0, \"現在\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 小時前\")]\r\n    [InlineData(1, \"1 小時前\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 小時後\")]\r\n    [InlineData(1, \"1 小時後\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 分鐘前\")]\r\n    [InlineData(-1, \"1 分鐘前\")]\r\n    [InlineData(60, \"1 小時前\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 分鐘後\")]\r\n    [InlineData(1, \"1 分鐘後\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 個月前\")]\r\n    [InlineData(-1, \"1 個月前\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 個月後\")]\r\n    [InlineData(1, \"1 個月後\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 秒鐘前\")]\r\n    [InlineData(-1, \"1 秒鐘前\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 秒鐘後\")]\r\n    [InlineData(1, \"1 秒鐘後\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 年前\")]\r\n    [InlineData(-1, \"去年\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 年後\")]\r\n    [InlineData(1, \"明年\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/zh-HK/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace zhHK;\r\n\r\n[UseCulture(\"zh-HK\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(366, \"1 年\")]\r\n    [InlineData(731, \"2 年\")]\r\n    [InlineData(1096, \"3 年\")]\r\n    [InlineData(4018, \"11 年\")]\r\n    public void Years(int days, string expected)\r\n    {\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(31, \"1 個月\")]\r\n    [InlineData(61, \"2 個月\")]\r\n    [InlineData(92, \"3 個月\")]\r\n    [InlineData(335, \"11 個月\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 周\")]\r\n    [InlineData(14, \"2 周\")]\r\n    [InlineData(21, \"3 周\")]\r\n    [InlineData(77, \"11 周\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 天\")]\r\n    [InlineData(2, \"2 天\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 小時\")]\r\n    [InlineData(2, \"2 小時\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 分\")]\r\n    [InlineData(2, \"2 分\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 秒\")]\r\n    [InlineData(2, \"2 秒\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 毫秒\")]\r\n    [InlineData(2, \"2 毫秒\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 毫秒\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"沒有時間\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/zh-Hans/DateHumanizeTests.cs",
    "content": "﻿namespace zhHans;\r\n\r\n[UseCulture(\"zh-Hans\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, \"2 天前\")]\r\n    [InlineData(1, \"昨天\")]\r\n    [InlineData(0, \"现在\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 天后\")]\r\n    [InlineData(1, \"明天\")]\r\n    [InlineData(0, \"现在\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 小时前\")]\r\n    [InlineData(1, \"1 小时前\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 小时后\")]\r\n    [InlineData(1, \"1 小时后\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 分钟前\")]\r\n    [InlineData(-1, \"1 分钟前\")]\r\n    [InlineData(60, \"1 小时前\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 分钟后\")]\r\n    [InlineData(1, \"1 分钟后\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 个月前\")]\r\n    [InlineData(-1, \"1 个月前\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 个月后\")]\r\n    [InlineData(1, \"1 个月后\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 秒钟前\")]\r\n    [InlineData(-1, \"1 秒钟前\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 秒钟后\")]\r\n    [InlineData(1, \"1 秒钟后\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 年前\")]\r\n    [InlineData(-1, \"去年\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 年后\")]\r\n    [InlineData(1, \"明年\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/zh-Hans/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace zhHans;\r\n\r\n[UseCulture(\"zh-Hans\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"1 年\")]\r\n    [InlineData(731, \"2 年\")]\r\n    [InlineData(1096, \"3 年\")]\r\n    [InlineData(4018, \"11 年\")]\r\n    public void Years(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"1 个月\")]\r\n    [InlineData(61, \"2 个月\")]\r\n    [InlineData(92, \"3 个月\")]\r\n    [InlineData(335, \"11 个月\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 周\")]\r\n    [InlineData(14, \"2 周\")]\r\n    [InlineData(21, \"3 周\")]\r\n    [InlineData(77, \"11 周\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 天\")]\r\n    [InlineData(2, \"2 天\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 小时\")]\r\n    [InlineData(2, \"2 小时\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 分\")]\r\n    [InlineData(2, \"2 分\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 秒\")]\r\n    [InlineData(2, \"2 秒\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 毫秒\")]\r\n    [InlineData(2, \"2 毫秒\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 毫秒\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"没有时间\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/zh-Hant/DateHumanizeTests.cs",
    "content": "﻿namespace zhHant;\r\n\r\n[UseCulture(\"zh-Hant\")]\r\npublic class DateHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(2, \"2 天前\")]\r\n    [InlineData(1, \"昨天\")]\r\n    [InlineData(0, \"現在\")]\r\n    public void DaysAgo(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 天後\")]\r\n    [InlineData(1, \"明天\")]\r\n    [InlineData(0, \"現在\")]\r\n    public void DaysFromNow(int days, string expected) =>\r\n        DateHumanize.Verify(expected, days, TimeUnit.Day, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 小時前\")]\r\n    [InlineData(1, \"1 小時前\")]\r\n    public void HoursAgo(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 小時後\")]\r\n    [InlineData(1, \"1 小時後\")]\r\n    public void HoursFromNow(int hours, string expected) =>\r\n        DateHumanize.Verify(expected, hours, TimeUnit.Hour, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 分鐘前\")]\r\n    [InlineData(-1, \"1 分鐘前\")]\r\n    [InlineData(60, \"1 小時前\")]\r\n    public void MinutesAgo(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 分鐘後\")]\r\n    [InlineData(1, \"1 分鐘後\")]\r\n    public void MinutesFromNow(int minutes, string expected) =>\r\n        DateHumanize.Verify(expected, minutes, TimeUnit.Minute, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 個月前\")]\r\n    [InlineData(-1, \"1 個月前\")]\r\n    public void MonthsAgo(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 個月後\")]\r\n    [InlineData(1, \"1 個月後\")]\r\n    public void MonthsFromNow(int months, string expected) =>\r\n        DateHumanize.Verify(expected, months, TimeUnit.Month, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 秒鐘前\")]\r\n    [InlineData(-1, \"1 秒鐘前\")]\r\n    public void SecondsAgo(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 秒鐘後\")]\r\n    [InlineData(1, \"1 秒鐘後\")]\r\n    public void SecondsFromNow(int seconds, string expected) =>\r\n        DateHumanize.Verify(expected, seconds, TimeUnit.Second, Tense.Future);\r\n\r\n    [Theory]\r\n    [InlineData(-2, \"2 年前\")]\r\n    [InlineData(-1, \"去年\")]\r\n    public void YearsAgo(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Past);\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 年後\")]\r\n    [InlineData(1, \"明年\")]\r\n    public void YearsFromNow(int years, string expected) =>\r\n        DateHumanize.Verify(expected, years, TimeUnit.Year, Tense.Future);\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/Localisation/zh-Hant/TimeSpanHumanizeTests.cs",
    "content": "﻿namespace zhHant;\r\n\r\n[UseCulture(\"zh-Hant\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(366, \"1 年\")]\r\n    [InlineData(731, \"2 年\")]\r\n    [InlineData(1096, \"3 年\")]\r\n    [InlineData(4018, \"11 年\")]\r\n    public void Years(int days, string expected)\r\n    {\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n    }\r\n\r\n    [Theory]\r\n    [Trait(\"Translation\", \"Native speaker\")]\r\n    [InlineData(31, \"1 個月\")]\r\n    [InlineData(61, \"2 個月\")]\r\n    [InlineData(92, \"3 個月\")]\r\n    [InlineData(335, \"11 個月\")]\r\n    public void Months(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize(maxUnit: TimeUnit.Year));\r\n\r\n    [Theory]\r\n    [InlineData(7, \"1 周\")]\r\n    [InlineData(14, \"2 周\")]\r\n    [InlineData(21, \"3 周\")]\r\n    [InlineData(77, \"11 周\")]\r\n    public void Weeks(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 天\")]\r\n    [InlineData(2, \"2 天\")]\r\n    public void Days(int days, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromDays(days).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 小時\")]\r\n    [InlineData(2, \"2 小時\")]\r\n    public void Hours(int hours, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromHours(hours).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 分\")]\r\n    [InlineData(2, \"2 分\")]\r\n    public void Minutes(int minutes, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMinutes(minutes).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 秒\")]\r\n    [InlineData(2, \"2 秒\")]\r\n    public void Seconds(int seconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromSeconds(seconds).Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"1 毫秒\")]\r\n    [InlineData(2, \"2 毫秒\")]\r\n    public void Milliseconds(int milliseconds, string expected) =>\r\n        Assert.Equal(expected, TimeSpan.FromMilliseconds(milliseconds).Humanize());\r\n\r\n    [Fact]\r\n    public void NoTime() =>\r\n        Assert.Equal(\"0 毫秒\", TimeSpan.Zero.Humanize());\r\n\r\n    [Fact]\r\n    public void NoTimeToWords() =>\r\n        // This one doesn't make a lot of sense but ... w/e\r\n        Assert.Equal(\"沒有時間\", TimeSpan.Zero.Humanize(toWords: true));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/MetricNumeralTests.cs",
    "content": "[UseCulture(\"en-US\")]\r\npublic class MetricNumeralTests\r\n{\r\n    // Return a sequence of -24 -> 26\r\n    public static IEnumerable<object[]> SymbolRange => Enumerable\r\n        .Range(-24, 51)\r\n        .Select(e => new object[]\r\n        {\r\n            e\r\n        });\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0\")]\r\n    [InlineData(123d, \"123\")]\r\n    [InlineData(-123d, \"-123\")]\r\n    [InlineData(1230d, \"1.23k\")]\r\n    [InlineData(1000d, \"1 k\")]\r\n    [InlineData(1000d, \"1 kilo\")]\r\n    [InlineData(1E-3, \"1milli\")]\r\n    public void FromMetric(double expected, string input) =>\r\n        Assert.Equal(expected, input.FromMetric());\r\n\r\n    [Theory]\r\n    [InlineData(\"\")]\r\n    [InlineData(\" \")]\r\n    [InlineData(\"\\t\")]\r\n    [InlineData(\"12yy\")]\r\n    [InlineData(\"-8e\")]\r\n    [InlineData(\"0.12c\")]\r\n    [InlineData(\"0.02l\")]\r\n    [InlineData(\"0.12kilkilo\")]\r\n    [InlineData(\"0.02alois\")]\r\n    public void FromMetricOnInvalid(string input) =>\r\n        Assert.Throws<ArgumentException>(() => input.FromMetric());\r\n\r\n    [Fact]\r\n    public void FromMetricOnNull() =>\r\n        Assert.Throws<ArgumentNullException>(() =>\r\n            MetricNumeralExtensions.FromMetric(null!));\r\n\r\n    [Theory]\r\n    [MemberData(nameof(SymbolRange))]\r\n    public void TestAllSymbols(int e)\r\n    {\r\n        var origin = Math.Pow(10, e);\r\n        var to = origin.ToMetric();\r\n        var from = to.FromMetric();\r\n\r\n        var c = Equals(\r\n            origin.ToString(\"0.##E+0\", CultureInfo.InvariantCulture),\r\n            from.ToString(\"0.##E+0\", CultureInfo.InvariantCulture));\r\n\r\n        Assert.True(c);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(-9)]\r\n    [InlineData(-3)]\r\n    [InlineData(-2)]\r\n    [InlineData(-1)]\r\n    [InlineData(0)]\r\n    [InlineData(1)]\r\n    [InlineData(2)]\r\n    [InlineData(3)]\r\n    [InlineData(9)]\r\n    public void TestAllSymbolsAsInt(int exponent)\r\n    {\r\n        var origin = Convert.ToInt32(Math.Pow(10, exponent));\r\n        var isEquals = Equals(\r\n            origin.ToString(\"0.##E+0\", CultureInfo.InvariantCulture),\r\n            origin\r\n                .ToMetric()\r\n                .FromMetric()\r\n                .ToString(\"0.##E+0\", CultureInfo.InvariantCulture));\r\n        Assert.True(isEquals);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 0, \"0\")]\r\n    [InlineData(0, 1, \"0.0\")]\r\n    [InlineData(0, 3, \"0.000\")]\r\n    [InlineData(0, 20, \"0.00000000000000000000\")]\r\n    [InlineData(123, 0, \"123\")]\r\n    [InlineData(123, 1, \"123.0\")]\r\n    [InlineData(123, 3, \"123.000\")]\r\n    [InlineData(123, 20, \"123.00000000000000000000\")]\r\n    [InlineData(123456, null, \"123.456k\")]\r\n    [InlineData(123456, 0, \"123k\")]\r\n    [InlineData(123456, 1, \"123.5k\")]\r\n    [InlineData(123456, 2, \"123.46k\")]\r\n    [InlineData(123456, 3, \"123.456k\")]\r\n    [InlineData(123456, 20, \"123.45600000000000000000k\")]\r\n    [InlineData(123456789, null, \"123.456789M\")]\r\n    [InlineData(123456789, 0, \"123M\")]\r\n    [InlineData(123456789, 1, \"123.5M\")]\r\n    [InlineData(123456789, 2, \"123.46M\")]\r\n    [InlineData(123456789, 3, \"123.457M\")]\r\n    [InlineData(123456789, 5, \"123.45679M\")]\r\n    [InlineData(123456789, 20, \"123.45678900000000000000M\")]\r\n    [InlineData(123456789987, 5, \"123.45679G\")]\r\n    [InlineData(123456789987, 20, \"123.45678998700000000000G\")]\r\n    [InlineData(123456789987654, 5, \"123.45679T\")]\r\n    [InlineData(123456789987654, 20, \"123.45678998765400000000T\")]\r\n    [InlineData(123456789987654321, 5, \"123.45679P\")]\r\n    [InlineData(123456789987654321, 20, \"123.45678998765432100000P\")]\r\n    [InlineData(9223372036854775807, null, \"9.223372036854775807E\")]\r\n    [InlineData(9223372036854775807, 0, \"9E\")]\r\n    [InlineData(9223372036854775807, 3, \"9.223E\")]\r\n    [InlineData(9223372036854775807, 20, \"9.22337203685477580700E\")]\r\n    [InlineData(-1, null, \"-1\")]\r\n    [InlineData(-123, null, \"-123\")]\r\n    [InlineData(-123456, null, \"-123.456k\")]\r\n    [InlineData(-123456789, null, \"-123.456789M\")]\r\n    [InlineData(-9223372036854775808, null, \"-9.223372036854775808E\")]\r\n    [InlineData(-9223372036854775808, 0, \"-9E\")]\r\n    [InlineData(-9223372036854775808, 3, \"-9.223E\")]\r\n    [InlineData(-9223372036854775808, 20, \"-9.22337203685477580800E\")]\r\n    public void TestAllSymbolsAsLong(long subject, int? decimals, string expected) =>\r\n        Assert.Equal(expected, subject.ToMetric(decimals: decimals));\r\n\r\n    [Theory]\r\n    [InlineData(\"1.3M\", 1300000, null, null)]\r\n    [InlineData(\"1.3million\", 1300000, MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1.3 million\", 1300000, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1.3 million\", 1300000, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"0\", 0d, null, null)]\r\n    [InlineData(\"123\", 123d, null, null)]\r\n    [InlineData(\"-123\", -123d, null, null)]\r\n    [InlineData(\"1.23k\", 1230d, null, null)]\r\n    [InlineData(\"1 k\", 1000d, MetricNumeralFormats.WithSpace, null)]\r\n    [InlineData(\"1milli\", 1E-3, MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1.23milli\", 1.234E-3, MetricNumeralFormats.UseName, 2)]\r\n    [InlineData(\"12.34k\", 12345, null, 2)]\r\n    [InlineData(\"12k\", 12345, null, 0)]\r\n    [InlineData(\"1M\", 999500d, null, 0)]\r\n    [InlineData(\"-3.9m\", -3.91e-3, null, 1)]\r\n    [InlineData(\"10 \", 10, MetricNumeralFormats.WithSpace, 0)]\r\n    [InlineData(\"1.2\", 1.23, null, 1)]\r\n    [InlineData(\"1thousand\", 1000d, MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1.23 thousand\", 1230d, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1Y\", 1E24, null, null)]\r\n    [InlineData(\"1 yotta\", 1E24, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 septillion\", 1E24, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 quadrillion\", 1E24, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1Z\", 1E21, null, null)]\r\n    [InlineData(\"1 zetta\", 1E21, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 sextillion\", 1E21, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 trilliard\", 1E21, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1E\", 1E18, null, null)]\r\n    [InlineData(\"1 exa\", 1E18, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 quintillion\", 1E18, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 trillion\", 1E18, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1P\", 1E15, null, null)]\r\n    [InlineData(\"1 peta\", 1E15, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 quadrillion\", 1E15, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 billiard\", 1E15, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1T\", 1E12, null, null)]\r\n    [InlineData(\"1 tera\", 1E12, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 trillion\", 1E12, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 billion\", 1E12, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1G\", 1E9, null, null)]\r\n    [InlineData(\"1 giga\", 1E9, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 billion\", 1E9, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 milliard\", 1E9, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1M\", 1E6, null, null)]\r\n    [InlineData(\"1 mega\", 1E6, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 million\", 1E6, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 million\", 1E6, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1k\", 1E3, null, null)]\r\n    [InlineData(\"1 kilo\", 1E3, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 thousand\", 1E3, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 thousand\", 1E3, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1y\", 1E-24, null, null)]\r\n    [InlineData(\"1 yocto\", 1E-24, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 septillionth\", 1E-24, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 quadrillionth\", 1E-24, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1z\", 1E-21, null, null)]\r\n    [InlineData(\"1 zepto\", 1E-21, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 sextillionth\", 1E-21, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 trilliardth\", 1E-21, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1a\", 1E-18, null, null)]\r\n    [InlineData(\"1 atto\", 1E-18, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 quintillionth\", 1E-18, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 trillionth\", 1E-18, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1f\", 1E-15, null, null)]\r\n    [InlineData(\"1 femto\", 1E-15, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 quadrillionth\", 1E-15, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 billiardth\", 1E-15, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1p\", 1E-12, null, null)]\r\n    [InlineData(\"1 pico\", 1E-12, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 trillionth\", 1E-12, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 billionth\", 1E-12, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1n\", 1E-9, null, null)]\r\n    [InlineData(\"1 nano\", 1E-9, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 billionth\", 1E-9, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 milliardth\", 1E-9, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1μ\", 1E-6, null, null)]\r\n    [InlineData(\"1 micro\", 1E-6, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 millionth\", 1E-6, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 millionth\", 1E-6, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    [InlineData(\"1m\", 1E-3, null, null)]\r\n    [InlineData(\"1 milli\", 1E-3, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseName, null)]\r\n    [InlineData(\"1 thousandth\", 1E-3, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseShortScaleWord, null)]\r\n    [InlineData(\"1 thousandth\", 1E-3, MetricNumeralFormats.WithSpace | MetricNumeralFormats.UseLongScaleWord, null)]\r\n    public void ToMetric(string expected, double input, MetricNumeralFormats? format, int? decimals) =>\r\n        Assert.Equal(expected, input.ToMetric(format, decimals));\r\n\r\n    [Theory]\r\n    [InlineData(1E+27)]\r\n    [InlineData(1E-27)]\r\n    [InlineData(-1E+27)]\r\n    [InlineData(-1E-27)]\r\n    public void ToMetricOnInvalid(double input) =>\r\n        Assert.Throws<ArgumentOutOfRangeException>(() => input.ToMetric());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/ModuleInitializer.cs",
    "content": "using VerifyTests.DiffPlex;\r\n\r\npublic static class ModuleInitializer\r\n{\r\n    [ModuleInitializer]\r\n    public static void Initialize()\r\n    {\r\n        VerifyDiffPlex.Initialize(OutputType.Compact);\r\n        VerifierSettings.InitializePlugins();\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/NumberToNumberTests.cs",
    "content": "﻿public class NumberToNumberTests\r\n{\r\n    [Fact]\r\n    public void IntToTens()\r\n    {\r\n        const int number = 1;\r\n        Assert.Equal(10, number.Tens());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintToTens()\r\n    {\r\n        const uint number = 1;\r\n        Assert.Equal(10U, number.Tens());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongToTens()\r\n    {\r\n        const long number = 1;\r\n        Assert.Equal(10L, number.Tens());\r\n    }\r\n\r\n    [Fact]\r\n    public void UlongToTens()\r\n    {\r\n        const ulong number = 1;\r\n        Assert.Equal(10UL, number.Tens());\r\n    }\r\n\r\n    [Fact]\r\n    public void DoubleToTens()\r\n    {\r\n        const double number = 1;\r\n        Assert.Equal(10d, number.Tens());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntToHundreds()\r\n    {\r\n        const int number = 2;\r\n        Assert.Equal(200, number.Hundreds());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintToHundreds()\r\n    {\r\n        const uint number = 2;\r\n        Assert.Equal(200U, number.Hundreds());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongToHundreds()\r\n    {\r\n        const long number = 2;\r\n        Assert.Equal(200L, number.Hundreds());\r\n    }\r\n\r\n    [Fact]\r\n    public void UlongToHundreds()\r\n    {\r\n        const ulong number = 2;\r\n        Assert.Equal(200UL, number.Hundreds());\r\n    }\r\n\r\n    [Fact]\r\n    public void DoubleToHundreds()\r\n    {\r\n        const double number = 2;\r\n        Assert.Equal(200d, number.Hundreds());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntToThousands()\r\n    {\r\n        const int number = 3;\r\n        Assert.Equal(3000, number.Thousands());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintToThousands()\r\n    {\r\n        const uint number = 3;\r\n        Assert.Equal(3000U, number.Thousands());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongToThousands()\r\n    {\r\n        const long number = 3;\r\n        Assert.Equal(3000L, number.Thousands());\r\n    }\r\n\r\n    [Fact]\r\n    public void UlongToThousands()\r\n    {\r\n        const ulong number = 3;\r\n        Assert.Equal(3000UL, number.Thousands());\r\n    }\r\n\r\n    [Fact]\r\n    public void DoubleToThousands()\r\n    {\r\n        const double number = 3;\r\n        Assert.Equal(3000d, number.Thousands());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntToMillions()\r\n    {\r\n        const int number = 4;\r\n        Assert.Equal(4000000, number.Millions());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintToMillions()\r\n    {\r\n        const uint number = 4;\r\n        Assert.Equal(4000000U, number.Millions());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongToMillions()\r\n    {\r\n        const long number = 4;\r\n        Assert.Equal(4000000L, number.Millions());\r\n    }\r\n\r\n    [Fact]\r\n    public void UlongToMillions()\r\n    {\r\n        const ulong number = 4;\r\n        Assert.Equal(4000000UL, number.Millions());\r\n    }\r\n\r\n    [Fact]\r\n    public void DoubleToMillions()\r\n    {\r\n        const double number = 4;\r\n        Assert.Equal(4000000d, number.Millions());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntToBillions()\r\n    {\r\n        const int number = 1;\r\n        Assert.Equal(1000000000, number.Billions());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintToBillions()\r\n    {\r\n        const uint number = 1;\r\n        Assert.Equal(1000000000U, number.Billions());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongToBillions()\r\n    {\r\n        const long number = 1;\r\n        Assert.Equal(1000000000L, number.Billions());\r\n    }\r\n\r\n    [Fact]\r\n    public void UlongToBillions()\r\n    {\r\n        const ulong number = 1;\r\n        Assert.Equal(1000000000UL, number.Billions());\r\n    }\r\n\r\n    [Fact]\r\n    public void DoubleToBillions()\r\n    {\r\n        const double number = 1;\r\n        Assert.Equal(1000000000d, number.Billions());\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/NumberToTimeSpanTests.cs",
    "content": "﻿public class NumberToTimeSpanTests\r\n{\r\n    [Fact]\r\n    public void ByteToMilliseconds()\r\n    {\r\n        const byte number = 1;\r\n        Assert.Equal(new(0, 0, 0, 0, 1), number.Milliseconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void SbyteToMilliseconds()\r\n    {\r\n        const sbyte number = 1;\r\n        Assert.Equal(new(0, 0, 0, 0, 1), number.Milliseconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void ShortToMilliseconds()\r\n    {\r\n        const short number = 1;\r\n        Assert.Equal(new(0, 0, 0, 0, 1), number.Milliseconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void UshortToMilliseconds()\r\n    {\r\n        const ushort number = 1;\r\n        Assert.Equal(new(0, 0, 0, 0, 1), number.Milliseconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntToMilliseconds()\r\n    {\r\n        const int number = 1;\r\n        Assert.Equal(new(0, 0, 0, 0, 1), number.Milliseconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintToMilliseconds()\r\n    {\r\n        const uint number = 1;\r\n        Assert.Equal(new(0, 0, 0, 0, 1), number.Milliseconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongToMilliseconds()\r\n    {\r\n        const long number = 1;\r\n        Assert.Equal(new(0, 0, 0, 0, 1), number.Milliseconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void UlongToMilliseconds()\r\n    {\r\n        const ulong number = 1;\r\n        Assert.Equal(new(0, 0, 0, 0, 1), number.Milliseconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void ByteToMinutes()\r\n    {\r\n        const byte number = 2;\r\n        Assert.Equal(new(0, 0, 2, 0), number.Minutes());\r\n    }\r\n\r\n    [Fact]\r\n    public void SbyteToMinutes()\r\n    {\r\n        const sbyte number = 2;\r\n        Assert.Equal(new(0, 0, 2, 0), number.Minutes());\r\n    }\r\n\r\n    [Fact]\r\n    public void ShortToMinutes()\r\n    {\r\n        const short number = 2;\r\n        Assert.Equal(new(0, 0, 2, 0), number.Minutes());\r\n    }\r\n\r\n    [Fact]\r\n    public void UshortToMinutes()\r\n    {\r\n        const ushort number = 2;\r\n        Assert.Equal(new(0, 0, 2, 0), number.Minutes());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntToMinutes()\r\n    {\r\n        const int number = 2;\r\n        Assert.Equal(new(0, 0, 2, 0), number.Minutes());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintToMinutes()\r\n    {\r\n        const uint number = 2;\r\n        Assert.Equal(new(0, 0, 2, 0), number.Minutes());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongToMinutes()\r\n    {\r\n        const long number = 2;\r\n        Assert.Equal(new(0, 0, 2, 0), number.Minutes());\r\n    }\r\n\r\n    [Fact]\r\n    public void UlongToMinutes()\r\n    {\r\n        const ulong number = 2;\r\n        Assert.Equal(new(0, 0, 2, 0), number.Minutes());\r\n    }\r\n\r\n    [Fact]\r\n    public void ByteToSeconds()\r\n    {\r\n        const byte number = 3;\r\n        Assert.Equal(new(0, 0, 0, 3), number.Seconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void SbyteToSeconds()\r\n    {\r\n        const sbyte number = 3;\r\n        Assert.Equal(new(0, 0, 0, 3), number.Seconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void ShortToSeconds()\r\n    {\r\n        const short number = 3;\r\n        Assert.Equal(new(0, 0, 0, 3), number.Seconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void UshortToSeconds()\r\n    {\r\n        const ushort number = 3;\r\n        Assert.Equal(new(0, 0, 0, 3), number.Seconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntToSeconds()\r\n    {\r\n        const int number = 3;\r\n        Assert.Equal(new(0, 0, 0, 3), number.Seconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintToSeconds()\r\n    {\r\n        const uint number = 3;\r\n        Assert.Equal(new(0, 0, 0, 3), number.Seconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongToSeconds()\r\n    {\r\n        const long number = 3;\r\n        Assert.Equal(new(0, 0, 0, 3), number.Seconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void UlongToSeconds()\r\n    {\r\n        const ulong number = 3;\r\n        Assert.Equal(new(0, 0, 0, 3), number.Seconds());\r\n    }\r\n\r\n    [Fact]\r\n    public void ByteToHours()\r\n    {\r\n        const byte number = 4;\r\n        Assert.Equal(new(0, 4, 0, 0), number.Hours());\r\n    }\r\n\r\n    [Fact]\r\n    public void SbyteToHours()\r\n    {\r\n        const sbyte number = 4;\r\n        Assert.Equal(new(0, 4, 0, 0), number.Hours());\r\n    }\r\n\r\n    [Fact]\r\n    public void ShortToHours()\r\n    {\r\n        const short number = 4;\r\n        Assert.Equal(new(0, 4, 0, 0), number.Hours());\r\n    }\r\n\r\n    [Fact]\r\n    public void UshortToHours()\r\n    {\r\n        const ushort number = 4;\r\n        Assert.Equal(new(0, 4, 0, 0), number.Hours());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntToHours()\r\n    {\r\n        const int number = 4;\r\n        Assert.Equal(new(0, 4, 0, 0), number.Hours());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintToHours()\r\n    {\r\n        const uint number = 4;\r\n        Assert.Equal(new(0, 4, 0, 0), number.Hours());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongToHours()\r\n    {\r\n        const long number = 4;\r\n        Assert.Equal(new(0, 4, 0, 0), number.Hours());\r\n    }\r\n\r\n    [Fact]\r\n    public void UlongToHours()\r\n    {\r\n        const ulong number = 4;\r\n        Assert.Equal(new(0, 4, 0, 0), number.Hours());\r\n    }\r\n\r\n    [Fact]\r\n    public void ByteToDays()\r\n    {\r\n        const byte number = 5;\r\n        Assert.Equal(new(5, 0, 0, 0), number.Days());\r\n    }\r\n\r\n    [Fact]\r\n    public void SbyteToDays()\r\n    {\r\n        const sbyte number = 5;\r\n        Assert.Equal(new(5, 0, 0, 0), number.Days());\r\n    }\r\n\r\n    [Fact]\r\n    public void ShortToDays()\r\n    {\r\n        const short number = 5;\r\n        Assert.Equal(new(5, 0, 0, 0), number.Days());\r\n    }\r\n\r\n    [Fact]\r\n    public void UshortToDays()\r\n    {\r\n        const ushort number = 5;\r\n        Assert.Equal(new(5, 0, 0, 0), number.Days());\r\n    }\r\n\r\n    [Fact]\r\n    public void IntToDays()\r\n    {\r\n        const int number = 5;\r\n        Assert.Equal(new(5, 0, 0, 0), number.Days());\r\n    }\r\n\r\n    [Fact]\r\n    public void UintToDays()\r\n    {\r\n        const uint number = 5;\r\n        Assert.Equal(new(5, 0, 0, 0), number.Days());\r\n    }\r\n\r\n    [Fact]\r\n    public void LongToDays()\r\n    {\r\n        const long number = 5;\r\n        Assert.Equal(new(5, 0, 0, 0), number.Days());\r\n    }\r\n\r\n    [Fact]\r\n    public void UlongToDays()\r\n    {\r\n        const ulong number = 5;\r\n        Assert.Equal(new(5, 0, 0, 0), number.Days());\r\n    }\r\n\r\n    [Fact]\r\n    public void ByteToWeeks()\r\n    {\r\n        const byte number = 6;\r\n        var now = DateTime.Now;\r\n        Assert.Equal(now.AddDays(42), now.Add(number.Weeks()));\r\n    }\r\n\r\n    [Fact]\r\n    public void SbyteToWeeks()\r\n    {\r\n        const sbyte number = 6;\r\n        var now = DateTime.Now;\r\n        Assert.Equal(now.AddDays(42), now.Add(number.Weeks()));\r\n    }\r\n\r\n    [Fact]\r\n    public void ShortToWeeks()\r\n    {\r\n        const short number = 6;\r\n        var now = DateTime.Now;\r\n        Assert.Equal(now.AddDays(42), now.Add(number.Weeks()));\r\n    }\r\n\r\n    [Fact]\r\n    public void UshortToWeeks()\r\n    {\r\n        const ushort number = 6;\r\n        var now = DateTime.Now;\r\n        Assert.Equal(now.AddDays(42), now.Add(number.Weeks()));\r\n    }\r\n\r\n    [Fact]\r\n    public void IntToWeeks()\r\n    {\r\n        const int number = 6;\r\n        var now = DateTime.Now;\r\n        Assert.Equal(now.AddDays(42), now.Add(number.Weeks()));\r\n    }\r\n\r\n    [Fact]\r\n    public void UintToWeeks()\r\n    {\r\n        const uint number = 6;\r\n        var now = DateTime.Now;\r\n        Assert.Equal(now.AddDays(42), now.Add(number.Weeks()));\r\n    }\r\n\r\n    [Fact]\r\n    public void LongToWeeks()\r\n    {\r\n        const long number = 6;\r\n        var now = DateTime.Now;\r\n        Assert.Equal(now.AddDays(42), now.Add(number.Weeks()));\r\n    }\r\n\r\n    [Fact]\r\n    public void UlongToWeeks()\r\n    {\r\n        const ulong number = 6;\r\n        var now = DateTime.Now;\r\n        Assert.Equal(now.AddDays(42), now.Add(number.Weeks()));\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/NumberToWordsTests.cs",
    "content": "[UseCulture(\"en-US\")]\r\npublic class NumberToWordsTests\r\n{\r\n    [Theory]\r\n    [InlineData(0, \"zeroth\")]\r\n    [InlineData(1, \"first\")]\r\n    [InlineData(2, \"second\")]\r\n    [InlineData(3, \"third\")]\r\n    [InlineData(4, \"fourth\")]\r\n    [InlineData(5, \"fifth\")]\r\n    [InlineData(6, \"sixth\")]\r\n    [InlineData(7, \"seventh\")]\r\n    [InlineData(8, \"eighth\")]\r\n    [InlineData(9, \"ninth\")]\r\n    [InlineData(10, \"tenth\")]\r\n    [InlineData(11, \"eleventh\")]\r\n    [InlineData(12, \"twelfth\")]\r\n    [InlineData(13, \"thirteenth\")]\r\n    [InlineData(14, \"fourteenth\")]\r\n    [InlineData(15, \"fifteenth\")]\r\n    [InlineData(16, \"sixteenth\")]\r\n    [InlineData(17, \"seventeenth\")]\r\n    [InlineData(18, \"eighteenth\")]\r\n    [InlineData(19, \"nineteenth\")]\r\n    [InlineData(20, \"twentieth\")]\r\n    [InlineData(21, \"twenty-first\")]\r\n    [InlineData(22, \"twenty-second\")]\r\n    [InlineData(30, \"thirtieth\")]\r\n    [InlineData(40, \"fortieth\")]\r\n    [InlineData(50, \"fiftieth\")]\r\n    [InlineData(60, \"sixtieth\")]\r\n    [InlineData(70, \"seventieth\")]\r\n    [InlineData(80, \"eightieth\")]\r\n    [InlineData(90, \"ninetieth\")]\r\n    [InlineData(95, \"ninety-fifth\")]\r\n    [InlineData(96, \"ninety-sixth\")]\r\n    [InlineData(100, \"hundredth\")]\r\n    [InlineData(112, \"hundred and twelfth\")]\r\n    [InlineData(120, \"hundred and twentieth\")]\r\n    [InlineData(121, \"hundred and twenty-first\")]\r\n    [InlineData(1000, \"thousandth\")]\r\n    [InlineData(1001, \"thousand and first\")]\r\n    [InlineData(1021, \"thousand and twenty-first\")]\r\n    [InlineData(10000, \"ten thousandth\")]\r\n    [InlineData(10121, \"ten thousand one hundred and twenty-first\")]\r\n    [InlineData(100000, \"hundred thousandth\")]\r\n    [InlineData(1000000, \"millionth\")]\r\n    public void ToOrdinalWords(int number, string words) =>\r\n        Assert.Equal(words, number.ToOrdinalWords());\r\n\r\n    [Theory]\r\n    [InlineData(1021, \"en-US\", \"thousand and twenty-first\")]\r\n    [InlineData(21, \"ar\", \"الحادي و العشرون\")]\r\n    [InlineData(1112, \"ru\", \"одна тысяча сто двенадцатый\")]\r\n    public void ToOrdinalWords_CanSpecifyCultureExplicitly(int number, string culture, string expected) =>\r\n        Assert.Equal(expected, number.ToOrdinalWords(new(culture)));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"first\")]\r\n    [InlineData(2, \"second\")]\r\n    [InlineData(3, \"third\")]\r\n    public void ToOrdinalWords_WordFormIsIgnored(int number, string expected)\r\n    {\r\n        var normalForm1 = number.ToOrdinalWords(WordForm.Normal);\r\n        var abbrForm1 = number.ToOrdinalWords(WordForm.Abbreviation);\r\n        var normalForm2 = number.ToOrdinalWords(default, WordForm.Normal);\r\n        var abbrForm2 = number.ToOrdinalWords(default, WordForm.Abbreviation);\r\n\r\n        Assert.All(\r\n            [\r\n                normalForm1,\r\n                abbrForm1,\r\n                normalForm2,\r\n                abbrForm2\r\n            ],\r\n            item => Assert.Equal(expected, item));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en-US\", \"first\")]\r\n    [InlineData(3, \"en-US\", \"third\")]\r\n    [InlineData(1, \"sv-SE\", \"första\")]\r\n    [InlineData(3, \"sv-SE\", \"tredje\")]\r\n    [InlineData(1, \"ko-KR\", \"첫번째\")]\r\n    [InlineData(3, \"ko-KR\", \"세번째\")]\r\n    public void ToOrdinalWords_WordFormIsIgnoredWithSpecificCulture(int number, string culture, string expected)\r\n    {\r\n        var cultureInfo = new CultureInfo(culture);\r\n\r\n        var cultureSpecificNumber = number.ToOrdinalWords(cultureInfo);\r\n        var normalForm1 = number.ToOrdinalWords(WordForm.Normal, cultureInfo);\r\n        var abbrForm1 = number.ToOrdinalWords(WordForm.Abbreviation, cultureInfo);\r\n        var normalForm2 = number.ToOrdinalWords(default, WordForm.Normal, cultureInfo);\r\n        var abbrForm2 = number.ToOrdinalWords(default, WordForm.Abbreviation, cultureInfo);\r\n\r\n        Assert.All(\r\n            [\r\n                cultureSpecificNumber,\r\n                normalForm1,\r\n                abbrForm1,\r\n                normalForm2,\r\n                abbrForm2\r\n            ],\r\n            item => Assert.Equal(expected, item));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0-tuple\")]\r\n    [InlineData(1, \"single\")]\r\n    [InlineData(2, \"double\")]\r\n    [InlineData(3, \"triple\")]\r\n    [InlineData(4, \"quadruple\")]\r\n    [InlineData(5, \"quintuple\")]\r\n    [InlineData(6, \"sextuple\")]\r\n    [InlineData(7, \"septuple\")]\r\n    [InlineData(8, \"octuple\")]\r\n    [InlineData(9, \"nonuple\")]\r\n    [InlineData(10, \"decuple\")]\r\n    [InlineData(100, \"centuple\")]\r\n    [InlineData(1000, \"milluple\")]\r\n    public void ToTuple(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToTuple());\r\n\r\n    [Theory]\r\n    [InlineData(11, \"en-US\", \"eleven\")]\r\n    [InlineData(22, \"ar\", \"اثنان و عشرون\")]\r\n    [InlineData(40, \"ru\", \"сорок\")]\r\n    [InlineData(1021, \"hr\", \"tisuću dvadeset jedan\")]\r\n    [InlineData(11, \"ta\", \"பதினொன்று\")]\r\n    [InlineData(12, \"ta\", \"பனிரெண்டு\")]\r\n    [InlineData(555, \"ta\", \"ஐந்நூற்று ஐம்பத்து ஐந்து\")]\r\n    public void ToWords_CanSpecifyCultureExplicitly(int number, string culture, string expected) =>\r\n        Assert.Equal(expected, number.ToWords(new(culture)));\r\n\r\n    [Theory]\r\n    [InlineData(1, \"one\")]\r\n    [InlineData(3, \"three\")]\r\n    public void ToWords_WordFormIsIgnored(int number, string expected)\r\n    {\r\n        var normalForm1 = number.ToWords(WordForm.Normal);\r\n        var abbrForm1 = number.ToWords(WordForm.Abbreviation);\r\n        var normalForm2 = number.ToWords(addAnd: true, WordForm.Normal);\r\n        var abbrForm2 = number.ToWords(addAnd: true, WordForm.Abbreviation);\r\n        var normalForm3 = ((long)number).ToWords(WordForm.Normal, default(GrammaticalGender));\r\n        var abbrFrom3 = ((long)number).ToWords(WordForm.Abbreviation, default(GrammaticalGender));\r\n\r\n        Assert.All(\r\n            [\r\n                normalForm1,\r\n                abbrForm1,\r\n                normalForm2,\r\n                abbrForm2,\r\n                normalForm3,\r\n                normalForm3,\r\n                abbrFrom3\r\n            ],\r\n            item => Assert.Equal(expected, item));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, \"en-US\", \"one\")]\r\n    [InlineData(3, \"en-US\", \"three\")]\r\n    [InlineData(1, \"sv-SE\", \"ett\")]\r\n    [InlineData(3, \"sv-SE\", \"tre\")]\r\n    [InlineData(1, \"ko-KR\", \"일\")]\r\n    [InlineData(3, \"ko-KR\", \"삼\")]\r\n    public void ToWords_WordFormIsIgnoredWithSpecificCulture(int number, string culture, string expected)\r\n    {\r\n        var cultureInfo = new CultureInfo(culture);\r\n\r\n        var cultureSpecificNumber = number.ToWords(cultureInfo);\r\n        var normalForm1 = number.ToWords(addAnd: true, WordForm.Normal, cultureInfo);\r\n        var abbrForm1 = number.ToWords(addAnd: true, WordForm.Abbreviation, cultureInfo);\r\n        var normalForm2 = ((long)number).ToWords(WordForm.Normal, default, cultureInfo);\r\n        var abbrForm2 = ((long)number).ToWords(WordForm.Abbreviation, default, cultureInfo);\r\n\r\n        Assert.All(\r\n            [\r\n                cultureSpecificNumber,\r\n                normalForm1,\r\n                abbrForm1,\r\n                normalForm2,\r\n                abbrForm2\r\n            ],\r\n            item => Assert.Equal(expected, item));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(-1, \"minus one\")]\r\n    [InlineData(1, \"one\")]\r\n    [InlineData(10, \"ten\")]\r\n    [InlineData(11, \"eleven\")]\r\n    [InlineData(20, \"twenty\")]\r\n    [InlineData(122, \"one hundred and twenty-two\")]\r\n    [InlineData(3501, \"three thousand five hundred and one\")]\r\n    [InlineData(100, \"one hundred\")]\r\n    [InlineData(1000, \"one thousand\")]\r\n    [InlineData(1001, \"one thousand and one\")]\r\n    [InlineData(1010, \"one thousand and ten\")]\r\n    [InlineData(100000, \"one hundred thousand\")]\r\n    [InlineData(1000000, \"one million\")]\r\n    [InlineData(10000000, \"ten million\")]\r\n    [InlineData(100000000, \"one hundred million\")]\r\n    [InlineData(1000000000, \"one billion\")]\r\n    [InlineData(111, \"one hundred and eleven\")]\r\n    [InlineData(1111, \"one thousand one hundred and eleven\")]\r\n    [InlineData(111111, \"one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(1111111, \"one million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(11111111, \"eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(111111111, \"one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(1111111111, \"one billion one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(123, \"one hundred and twenty-three\")]\r\n    [InlineData(1234, \"one thousand two hundred and thirty-four\")]\r\n    [InlineData(12345, \"twelve thousand three hundred and forty-five\")]\r\n    [InlineData(123456, \"one hundred and twenty-three thousand four hundred and fifty-six\")]\r\n    [InlineData(1234567, \"one million two hundred and thirty-four thousand five hundred and sixty-seven\")]\r\n    [InlineData(12345678, \"twelve million three hundred and forty-five thousand six hundred and seventy-eight\")]\r\n    [InlineData(123456789, \"one hundred and twenty-three million four hundred and fifty-six thousand seven hundred and eighty-nine\")]\r\n    [InlineData(1234567890, \"one billion two hundred and thirty-four million five hundred and sixty-seven thousand eight hundred and ninety\")]\r\n    public void ToWordsInt(int number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(-1L, \"minus one\")]\r\n    [InlineData(1L, \"one\")]\r\n    [InlineData(11L, \"eleven\")]\r\n    [InlineData(111L, \"one hundred and eleven\")]\r\n    [InlineData(1111L, \"one thousand one hundred and eleven\")]\r\n    [InlineData(11111L, \"eleven thousand one hundred and eleven\")]\r\n    [InlineData(111111L, \"one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(1111111L, \"one million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(11111111L, \"eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(111111111L, \"one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(1111111111L, \"one billion one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(11111111111L, \"eleven billion one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(111111111111L, \"one hundred and eleven billion one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(1111111111111L, \"one trillion one hundred and eleven billion one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(11111111111111L, \"eleven trillion one hundred and eleven billion one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(111111111111111L, \"one hundred and eleven trillion one hundred and eleven billion one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(1111111111111111L, \"one quadrillion one hundred and eleven trillion one hundred and eleven billion one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(11111111111111111L, \"eleven quadrillion one hundred and eleven trillion one hundred and eleven billion one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(111111111111111111L, \"one hundred and eleven quadrillion one hundred and eleven trillion one hundred and eleven billion one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    [InlineData(1111111111111111111L, \"one quintillion one hundred and eleven quadrillion one hundred and eleven trillion one hundred and eleven billion one hundred and eleven million one hundred and eleven thousand one hundred and eleven\")]\r\n    public void ToWordsLong(long number, string expected) =>\r\n        Assert.Equal(expected, number.ToWords());\r\n\r\n    [Theory]\r\n    [InlineData(3501L, \"three thousand five hundred one\", false)]\r\n    public void ToWordsWithoutAnd(int number, string expected, bool addAnd) =>\r\n        Assert.Equal(expected, number.ToWords(addAnd));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/OrdinalizeTests.cs",
    "content": "﻿[UseCulture(\"en-US\")]\r\npublic class OrdinalizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"0\", \"0th\")]\r\n    [InlineData(\"1\", \"1st\")]\r\n    [InlineData(\"2\", \"2nd\")]\r\n    [InlineData(\"3\", \"3rd\")]\r\n    [InlineData(\"4\", \"4th\")]\r\n    [InlineData(\"5\", \"5th\")]\r\n    [InlineData(\"6\", \"6th\")]\r\n    [InlineData(\"7\", \"7th\")]\r\n    [InlineData(\"8\", \"8th\")]\r\n    [InlineData(\"9\", \"9th\")]\r\n    [InlineData(\"10\", \"10th\")]\r\n    [InlineData(\"11\", \"11th\")]\r\n    [InlineData(\"12\", \"12th\")]\r\n    [InlineData(\"13\", \"13th\")]\r\n    [InlineData(\"14\", \"14th\")]\r\n    [InlineData(\"20\", \"20th\")]\r\n    [InlineData(\"21\", \"21st\")]\r\n    [InlineData(\"22\", \"22nd\")]\r\n    [InlineData(\"23\", \"23rd\")]\r\n    [InlineData(\"24\", \"24th\")]\r\n    [InlineData(\"100\", \"100th\")]\r\n    [InlineData(\"101\", \"101st\")]\r\n    [InlineData(\"102\", \"102nd\")]\r\n    [InlineData(\"103\", \"103rd\")]\r\n    [InlineData(\"104\", \"104th\")]\r\n    [InlineData(\"110\", \"110th\")]\r\n    [InlineData(\"1000\", \"1000th\")]\r\n    [InlineData(\"1001\", \"1001st\")]\r\n    public void OrdinalizeString(string number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0, \"0th\")]\r\n    [InlineData(1, \"1st\")]\r\n    [InlineData(2, \"2nd\")]\r\n    [InlineData(3, \"3rd\")]\r\n    [InlineData(4, \"4th\")]\r\n    [InlineData(5, \"5th\")]\r\n    [InlineData(6, \"6th\")]\r\n    [InlineData(7, \"7th\")]\r\n    [InlineData(8, \"8th\")]\r\n    [InlineData(9, \"9th\")]\r\n    [InlineData(10, \"10th\")]\r\n    [InlineData(11, \"11th\")]\r\n    [InlineData(12, \"12th\")]\r\n    [InlineData(13, \"13th\")]\r\n    [InlineData(14, \"14th\")]\r\n    [InlineData(20, \"20th\")]\r\n    [InlineData(21, \"21st\")]\r\n    [InlineData(22, \"22nd\")]\r\n    [InlineData(23, \"23rd\")]\r\n    [InlineData(24, \"24th\")]\r\n    [InlineData(100, \"100th\")]\r\n    [InlineData(101, \"101st\")]\r\n    [InlineData(102, \"102nd\")]\r\n    [InlineData(103, \"103rd\")]\r\n    [InlineData(104, \"104th\")]\r\n    [InlineData(110, \"110th\")]\r\n    [InlineData(1000, \"1000th\")]\r\n    [InlineData(1001, \"1001st\")]\r\n    public void OrdinalizeNumber(int number, string ordinalized) =>\r\n        Assert.Equal(number.Ordinalize(), ordinalized);\r\n\r\n    [Theory]\r\n    [InlineData(0)]\r\n    [InlineData(1)]\r\n    [InlineData(8)]\r\n    public void OrdinalizeNumberGenderIsImmaterial(int number)\r\n    {\r\n        var masculineOrdinalized = number.Ordinalize(GrammaticalGender.Masculine);\r\n        var feminineOrdinalized = number.Ordinalize(GrammaticalGender.Feminine);\r\n        Assert.Equal(masculineOrdinalized, feminineOrdinalized);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(\"0\")]\r\n    [InlineData(\"1\")]\r\n    [InlineData(\"8\")]\r\n    public void OrdinalizeStringGenderIsImmaterial(string number)\r\n    {\r\n        var masculineOrdinalized = number.Ordinalize(GrammaticalGender.Masculine);\r\n        var feminineOrdinalized = number.Ordinalize(GrammaticalGender.Feminine);\r\n        Assert.Equal(masculineOrdinalized, feminineOrdinalized);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(\"en-US\", \"1\", \"1st\")]\r\n    [InlineData(\"nl-NL\", \"1\", \"1e\")]\r\n    public void OrdinalizeStringWithCultureOverridesCurrentCulture(string cultureName, string number, string ordinalized)\r\n    {\r\n        var culture = new CultureInfo(cultureName);\r\n        Assert.Equal(number.Ordinalize(culture), ordinalized);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(\"en-US\", 1, \"1st\")]\r\n    [InlineData(\"nl-NL\", 1, \"1e\")]\r\n    public void OrdinalizeNumberWithCultureOverridesCurrentCulture(string cultureName, int number, string ordinalized)\r\n    {\r\n        var culture = new CultureInfo(cultureName);\r\n        Assert.Equal(number.Ordinalize(culture), ordinalized);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0)]\r\n    [InlineData(1)]\r\n    [InlineData(8)]\r\n    public void OrdinalizeNumberWithOverridenCultureGenderIsImmaterial(int number)\r\n    {\r\n        var culture = new CultureInfo(\"nl-NL\");\r\n        var masculineOrdinalized = number.Ordinalize(GrammaticalGender.Masculine, culture);\r\n        var feminineOrdinalized = number.Ordinalize(GrammaticalGender.Feminine, culture);\r\n        Assert.Equal(masculineOrdinalized, feminineOrdinalized);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(\"0\")]\r\n    [InlineData(\"1\")]\r\n    [InlineData(\"8\")]\r\n    public void OrdinalizeStringWithOverridenGenderIsImmaterial(string number)\r\n    {\r\n        var culture = new CultureInfo(\"nl-NL\");\r\n        var masculineOrdinalized = number.Ordinalize(GrammaticalGender.Masculine, culture);\r\n        var feminineOrdinalized = number.Ordinalize(GrammaticalGender.Feminine, culture);\r\n        Assert.Equal(masculineOrdinalized, feminineOrdinalized);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, WordForm.Normal, \"es-ES\", \"1.º\")]\r\n    [InlineData(1, WordForm.Abbreviation, \"es-ES\", \"1.er\")]\r\n    [InlineData(1, WordForm.Normal, \"en-US\", \"1st\")]\r\n    [InlineData(1, WordForm.Abbreviation, \"en-US\", \"1st\")]\r\n    public void OrdinalizeNumberWithOverridenCultureAndSpecificForm(int number, WordForm wordForm, string cultureName, string expected)\r\n    {\r\n        var culture = new CultureInfo(cultureName);\r\n        Assert.Equal(expected, number.Ordinalize(culture, wordForm));\r\n        Assert.Equal(expected, number\r\n            .ToString(culture)\r\n            .Ordinalize(culture, wordForm));\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, WordForm.Normal, GrammaticalGender.Masculine, \"es-ES\", \"1.º\")]\r\n    [InlineData(1, WordForm.Abbreviation, GrammaticalGender.Masculine, \"es-ES\", \"1.er\")]\r\n    [InlineData(1, WordForm.Normal, GrammaticalGender.Feminine, \"es-ES\", \"1.ª\")]\r\n    [InlineData(1, WordForm.Abbreviation, GrammaticalGender.Feminine, \"es-ES\", \"1.ª\")]\r\n    [InlineData(1, WordForm.Normal, GrammaticalGender.Masculine, \"en-US\", \"1st\")]\r\n    [InlineData(1, WordForm.Normal, GrammaticalGender.Feminine, \"en-US\", \"1st\")]\r\n    public void OrdinalizeNumberWithOverridenCultureAndGenderAndForm(\r\n        int number,\r\n        WordForm wordForm,\r\n        GrammaticalGender gender,\r\n        string cultureName,\r\n        string expected)\r\n    {\r\n        var culture = new CultureInfo(cultureName);\r\n        Assert.Equal(expected, number.Ordinalize(gender, culture, wordForm));\r\n        Assert.Equal(expected, number\r\n            .ToString(culture)\r\n            .Ordinalize(gender, culture, wordForm));\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/ResourceKeyTests.cs",
    "content": "﻿#pragma warning disable xUnit1026 // Theory methods should use all of their parameters\r\npublic class ResourceKeyTests\r\n{\r\n    [Theory]\r\n    [MemberData(nameof(DateHumanizeResourceKeys))]\r\n    public void DateHumanizeKeysGeneration(int instance, string expected, string actual) =>\r\n        Assert.Equal(expected, actual);\r\n\r\n    [Theory]\r\n    [MemberData(nameof(TimeSpanHumanizeResourceKeys))]\r\n    public void TimeSpanHumanizeKeysGeneration(int instance, string expected, string actual) =>\r\n        Assert.Equal(expected, actual);\r\n\r\n    [Theory]\r\n    [MemberData(nameof(DateHumanizeResourceKeys))]\r\n    public void DateHumanizeKeysExistence(int instance, string expectedResourceKey, string generatedResourceKey) =>\r\n        Assert.NotNull(Resources.GetResource(generatedResourceKey));\r\n\r\n    [Theory]\r\n    [MemberData(nameof(TimeSpanHumanizeResourceKeys))]\r\n    public void TimeSpanHumanizeKeysExistence(int instance, string expectedResourceKey, string generatedResourceKey) =>\r\n        Assert.NotNull(Resources.GetResource(generatedResourceKey));\r\n\r\n    public static IEnumerable<object[]> DateHumanizeResourceKeys =>\r\n    [\r\n        [0, \"DateHumanize_SingleSecondAgo\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Second, Tense.Past)],\r\n            [0, \"DateHumanize_SingleMinuteAgo\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Minute, Tense.Past)],\r\n            [0, \"DateHumanize_SingleHourAgo\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Hour, Tense.Past)],\r\n            [0, \"DateHumanize_SingleDayAgo\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Day, Tense.Past)],\r\n            [0, \"DateHumanize_SingleMonthAgo\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Month, Tense.Past)],\r\n            [0, \"DateHumanize_SingleYearAgo\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Year, Tense.Past)],\r\n            [0, \"DateHumanize_MultipleSecondsAgo\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Second, Tense.Past, count: 10)],\r\n            [0, \"DateHumanize_MultipleMinutesAgo\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Minute, Tense.Past, count: 10)],\r\n            [0, \"DateHumanize_MultipleHoursAgo\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Hour, Tense.Past, count: 10)],\r\n            [0, \"DateHumanize_MultipleDaysAgo\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Day, Tense.Past, count: 10)],\r\n            [0, \"DateHumanize_MultipleMonthsAgo\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Month, Tense.Past, count: 10)],\r\n            [0, \"DateHumanize_MultipleYearsAgo\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Year, Tense.Past, count: 10)],\r\n            [0, \"DateHumanize_SingleSecondFromNow\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Second, timeUnitTense: Tense.Future, count: 1)],\r\n            [0, \"DateHumanize_SingleMinuteFromNow\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Minute, timeUnitTense: Tense.Future, count: 1)],\r\n            [0, \"DateHumanize_SingleHourFromNow\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Hour, timeUnitTense: Tense.Future, count: 1)],\r\n            [0, \"DateHumanize_SingleDayFromNow\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Day, timeUnitTense: Tense.Future, count: 1)],\r\n            [0, \"DateHumanize_SingleMonthFromNow\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Month, timeUnitTense: Tense.Future, count: 1)],\r\n            [0, \"DateHumanize_SingleYearFromNow\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Year, timeUnitTense: Tense.Future, count: 1)],\r\n            [0, \"DateHumanize_MultipleSecondsFromNow\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Second, timeUnitTense: Tense.Future, count: 10)],\r\n            [0, \"DateHumanize_MultipleMinutesFromNow\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Minute, timeUnitTense: Tense.Future, count: 10)],\r\n            [0, \"DateHumanize_MultipleHoursFromNow\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Hour, timeUnitTense: Tense.Future, count: 10)],\r\n            [0, \"DateHumanize_MultipleDaysFromNow\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Day, timeUnitTense: Tense.Future, count: 10)],\r\n            [0, \"DateHumanize_MultipleMonthsFromNow\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Month, timeUnitTense: Tense.Future, count: 10)],\r\n            [0, \"DateHumanize_MultipleYearsFromNow\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Year, timeUnitTense: Tense.Future, count: 10)],\r\n            [0, \"DateHumanize_Now\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Millisecond, Tense.Past, count: 0)],\r\n            [1, \"DateHumanize_Now\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Second, Tense.Past, count: 0)],\r\n            [2, \"DateHumanize_Now\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Minute, Tense.Past, count: 0)],\r\n            [3, \"DateHumanize_Now\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Hour, Tense.Past, count: 0)],\r\n            [4, \"DateHumanize_Now\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Day, Tense.Past, count: 0)],\r\n            [5, \"DateHumanize_Now\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Week, Tense.Past, count: 0)],\r\n            [6, \"DateHumanize_Now\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Month, Tense.Past, count: 0)],\r\n            [7, \"DateHumanize_Now\", ResourceKeys.DateHumanize.GetResourceKey(TimeUnit.Year, Tense.Past, count: 0)],\r\n        [8, \"DateHumanize_Now\", ResourceKeys.DateHumanize.Now]\r\n    ];\r\n\r\n    public static IEnumerable<object[]> TimeSpanHumanizeResourceKeys =>\r\n    [\r\n        [0, \"TimeSpanHumanize_SingleMillisecond\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Millisecond)],\r\n            [0, \"TimeSpanHumanize_SingleSecond\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Second)],\r\n            [0, \"TimeSpanHumanize_SingleMinute\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Minute)],\r\n            [0, \"TimeSpanHumanize_SingleHour\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Hour)],\r\n            [0, \"TimeSpanHumanize_SingleDay\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Day)],\r\n            [0, \"TimeSpanHumanize_SingleWeek\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Week)],\r\n            [0, \"TimeSpanHumanize_SingleMonth\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Month)],\r\n            [0, \"TimeSpanHumanize_SingleYear\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Year)],\r\n            [0, \"TimeSpanHumanize_MultipleMilliseconds\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Millisecond, 10)],\r\n            [0, \"TimeSpanHumanize_MultipleSeconds\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Second, 10)],\r\n            [0, \"TimeSpanHumanize_MultipleMinutes\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Minute, 10)],\r\n            [0, \"TimeSpanHumanize_MultipleHours\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Hour, 10)],\r\n            [0, \"TimeSpanHumanize_MultipleDays\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Day, 10)],\r\n            [0, \"TimeSpanHumanize_MultipleWeeks\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Week, 10)],\r\n            [0, \"TimeSpanHumanize_MultipleMonths\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Month, 10)],\r\n            [0, \"TimeSpanHumanize_MultipleYears\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Year, 10)],\r\n            [0, \"TimeSpanHumanize_Zero\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Millisecond, 0, true)],\r\n            [1, \"TimeSpanHumanize_Zero\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Second, 0, true)],\r\n            [2, \"TimeSpanHumanize_Zero\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Minute, 0, true)],\r\n            [3, \"TimeSpanHumanize_Zero\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Hour, 0, true)],\r\n            [4, \"TimeSpanHumanize_Zero\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Day, 0, true)],\r\n            [5, \"TimeSpanHumanize_Zero\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Week, 0, true)],\r\n            [6, \"TimeSpanHumanize_Zero\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Month, 0, true)],\r\n            [7, \"TimeSpanHumanize_Zero\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Year, 0, true)],\r\n            [1, \"TimeSpanHumanize_MultipleMilliseconds\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Millisecond, 0)],\r\n            [2, \"TimeSpanHumanize_MultipleSeconds\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Second, 0)],\r\n            [3, \"TimeSpanHumanize_MultipleMinutes\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Minute, 0)],\r\n            [4, \"TimeSpanHumanize_MultipleHours\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Hour, 0)],\r\n            [5, \"TimeSpanHumanize_MultipleDays\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Day, 0)],\r\n            [6, \"TimeSpanHumanize_MultipleWeeks\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Week, 0)],\r\n            [7, \"TimeSpanHumanize_MultipleMonths\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Month, 0)],\r\n        [8, \"TimeSpanHumanize_MultipleYears\", ResourceKeys.TimeSpanHumanize.GetResourceKey(TimeUnit.Year, 0)]\r\n    ];\r\n}\r\n#pragma warning restore xUnit1026 // Theory methods should use all of their parameters"
  },
  {
    "path": "tests/Humanizer.Tests/RomanNumeralTests.cs",
    "content": "﻿public class RomanNumeralTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"I\")]\r\n    [InlineData(2, \"II\")]\r\n    [InlineData(3, \"III\")]\r\n    [InlineData(4, \"IV\")]\r\n    [InlineData(5, \"V\")]\r\n    [InlineData(6, \"VI\")]\r\n    [InlineData(7, \"VII\")]\r\n    [InlineData(8, \"VIII\")]\r\n    [InlineData(9, \"IX\")]\r\n    [InlineData(10, \"X\")]\r\n    [InlineData(11, \"XI\")]\r\n    [InlineData(12, \"XII\")]\r\n    [InlineData(40, \"XL\")]\r\n    [InlineData(50, \"L\")]\r\n    [InlineData(90, \"XC\")]\r\n    [InlineData(100, \"C\")]\r\n    [InlineData(400, \"CD\")]\r\n    [InlineData(500, \"D\")]\r\n    [InlineData(3999, \"MMMCMXCIX\")]\r\n    public void ToRoman(int input, string expected) =>\r\n        Assert.Equal(expected, input.ToRoman());\r\n\r\n    [Theory]\r\n    [InlineData(1, \"I\")]\r\n    [InlineData(2, \"II\")]\r\n    [InlineData(3, \"III\")]\r\n    [InlineData(4, \"IV\")]\r\n    [InlineData(5, \"V\")]\r\n    [InlineData(6, \"VI\")]\r\n    [InlineData(7, \"VII\")]\r\n    [InlineData(8, \"VIII\")]\r\n    [InlineData(9, \"IX\")]\r\n    [InlineData(10, \"X\")]\r\n    [InlineData(11, \"XI\")]\r\n    [InlineData(12, \"XII\")]\r\n    [InlineData(40, \"XL\")]\r\n    [InlineData(50, \"L\")]\r\n    [InlineData(90, \"XC\")]\r\n    [InlineData(100, \"C\")]\r\n    [InlineData(400, \"CD\")]\r\n    [InlineData(500, \"D\")]\r\n    [InlineData(3999, \"MMMCMXCIX\")]\r\n    public void FromRoman(int expected, string input) =>\r\n        Assert.Equal(expected, input.FromRoman());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/StringDehumanizeTests.cs",
    "content": "﻿public class StringDehumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"\", \"\")]\r\n    [InlineData(\"Pascal case sentence is pascalized\", \"PascalCaseSentenceIsPascalized\")]\r\n    [InlineData(\"Title Case Sentence Is Pascalized\", \"TitleCaseSentenceIsPascalized\")]\r\n    [InlineData(\"Mixed case sentence Is Pascalized\", \"MixedCaseSentenceIsPascalized\")]\r\n    [InlineData(\"lower case sentence is pascalized\", \"LowerCaseSentenceIsPascalized\")]\r\n    [InlineData(\"A special character is removed?\", \"ASpecialCharacterIsRemoved\")]\r\n    [InlineData(\"A special character is removed after a space ?\", \"ASpecialCharacterIsRemovedAfterASpace\")]\r\n    [InlineData(\"Internal special characters ?)@ are removed\", \"InternalSpecialCharactersAreRemoved\")]\r\n    [InlineData(\"AlreadyDehumanizedStringIsUntouched\", \"AlreadyDehumanizedStringIsUntouched\")]\r\n    [InlineData(\"CanDehumanizeIntoAPascalCaseWord\", \"CanDehumanizeIntoAPascalCaseWord\")]\r\n    [InlineData(\"CanDehumanizeIntoAPascalCaseWord AndAnother\", \"CanDehumanizeIntoAPascalCaseWordAndAnother\")]\r\n    [InlineData(\"OneAndTwo\", \"OneAndTwo\")]\r\n    [InlineData(\"OneOrTwo\", \"OneOrTwo\")]\r\n    [InlineData(\"OneOfTwo\", \"OneOfTwo\")]\r\n    [InlineData(\"OneButTwo\", \"OneButTwo\")]\r\n    [InlineData(\"OneATwo\", \"OneATwo\")]\r\n    [InlineData(\"OneAsTwo\", \"OneAsTwo\")]\r\n    [InlineData(\"OneYetTwo\", \"OneYetTwo\")]\r\n    [InlineData(\"OneNorTwo\", \"OneNorTwo\")]\r\n    [InlineData(\"WordSoTwo\", \"WordSoTwo\")]\r\n    public void CanDehumanizeIntoAPascalCaseWord(string input, string expectedResult) =>\r\n        Assert.Equal(expectedResult, input.Dehumanize());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/StringHumanizeTests.cs",
    "content": "﻿public class StringHumanizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"PascalCaseInputStringIsTurnedIntoSentence\", \"Pascal case input string is turned into sentence\")]\r\n    [InlineData(\"WhenIUseAnInputAHere\", \"When I use an input a here\")]\r\n    [InlineData(\"10IsInTheBegining\", \"10 is in the begining\")]\r\n    [InlineData(\"NumberIsFollowedByLowerCase5th\", \"Number is followed by lower case 5th\")]\r\n    [InlineData(\"NumberIsAtTheEnd100\", \"Number is at the end 100\")]\r\n    [InlineData(\"XIsFirstWordInTheSentence\", \"X is first word in the sentence\")]\r\n    [InlineData(\"XIsFirstWordInTheSentence ThenThereIsASpace\", \"X is first word in the sentence then there is a space\")]\r\n    [InlineData(\"ContainsSpecial?)@Characters\", \"Contains special characters\")]\r\n    [InlineData(\"a\", \"A\")]\r\n    [InlineData(\"A\", \"A\")]\r\n    [InlineData(\"?)@\", \"\")]\r\n    [InlineData(\"?\", \"\")]\r\n    [InlineData(\"\", \"\")]\r\n    [InlineData(\"JeNeParlePasFrançais\", \"Je ne parle pas français\")]\r\n    public void CanHumanizeStringInPascalCase(string input, string expectedResult) =>\r\n        Assert.Equal(expectedResult, input.Humanize());\r\n\r\n    [Theory, UseCulture(\"tr-TR\")]\r\n    [InlineData(\"istanbul\", \"İstanbul\")]\r\n    [InlineData(\"diyarbakır\", \"Diyarbakır\")]\r\n    public void CanHumanizeStringInPascalCaseInTurkish(string input, string expectedResult) =>\r\n        Assert.Equal(expectedResult, input.Humanize());\r\n\r\n    [Theory, UseCulture(\"ar\")]\r\n    [InlineData(\"جمهورية ألمانيا الاتحادية\", \"جمهورية ألمانيا الاتحادية\")]\r\n    public void CanHumanizeOtherUnicodeLetter(string input, string expectedResult) =>\r\n        Assert.Equal(expectedResult, input.Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(\"Underscored_input_string_is_turned_into_sentence\", \"Underscored input string is turned into sentence\")]\r\n    [InlineData(\"Underscored_input_String_is_turned_INTO_sentence\", \"Underscored input String is turned INTO sentence\")]\r\n    [InlineData(\"TEST 1 - THIS IS A TEST\", \"TEST 1 THIS IS A TEST\")]\r\n    [InlineData(\"TEST 1 -THIS IS A TEST\", \"TEST 1 THIS IS A TEST\")]\r\n    [InlineData(\"TEST 1- THIS IS A TEST\", \"TEST 1 THIS IS A TEST\")]\r\n    [InlineData(\"TEST 1_ THIS IS A TEST\", \"TEST 1 THIS IS A TEST\")]\r\n    [InlineData(\"TEST 1 _THIS IS A TEST\", \"TEST 1 THIS IS A TEST\")]\r\n    [InlineData(\"TEST 1 _ THIS IS A TEST\", \"TEST 1 THIS IS A TEST\")]\r\n    [InlineData(\"TEST 1 - THIS_IS_A_TEST\", \"TEST 1 THIS IS A TEST\")]\r\n    [InlineData(\"TEST 1 - THIS is A Test\", \"TEST 1 THIS is A test\")]\r\n    public void CanHumanizeStringWithUnderscoresAndDashes(string input, string expectedResult) =>\r\n        Assert.Equal(expectedResult, input.Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(\"HTML\", \"HTML\")]\r\n    [InlineData(\"TheHTMLLanguage\", \"The HTML language\")]\r\n    [InlineData(\"HTMLIsTheLanguage\", \"HTML is the language\")]\r\n    [InlineData(\"TheLanguage IsHTML\", \"The language is HTML\")]\r\n    [InlineData(\"TheLanguageIsHTML\", \"The language is HTML\")]\r\n    [InlineData(\"HTML5\", \"HTML 5\")]\r\n    [InlineData(\"1HTML\", \"1 HTML\")]\r\n    public void CanHumanizeStringWithAcronyms(string input, string expectedValue) =>\r\n        Assert.Equal(expectedValue, input.Humanize());\r\n\r\n    [Theory]\r\n    [InlineData(\"CanReturnTitleCase\", \"Can Return Title Case\")]\r\n    [InlineData(\"Can_return_title_Case\", \"Can Return Title Case\")]\r\n    [InlineData(\"In titles use lower case for prepositions an article or conjunctions\", \"In Titles Use Lower Case for Prepositions an Article or Conjunctions\")]\r\n    [InlineData(\"Title_humanization_Honors_ALLCAPS\", \"Title Humanization Honors ALLCAPS\")]\r\n    [InlineData(\"MühldorferStraße23\", \"Mühldorfer Straße 23\")]\r\n    [InlineData(\"mühldorfer_STRAẞE_23\", \"Mühldorfer STRAẞE 23\")]\r\n    [InlineData(\"CAN RETURN TITLE CASE\", \"Can Return Title Case\")]\r\n    public void CanHumanizeIntoTitleCase(string input, string expectedResult) =>\r\n        Assert.Equal(expectedResult, input.Humanize(LetterCasing.Title));\r\n\r\n    [Theory]\r\n    [InlineData(\"CanReturnLowerCase\", \"can return lower case\")]\r\n    [InlineData(\"LOWERCASE\", \"lowercase\")]\r\n    [InlineData(\"STRAẞE\", \"straße\")]\r\n    public void CanHumanizeIntoLowerCase(string input, string expectedResult) =>\r\n        Assert.Equal(expectedResult, input.Humanize(LetterCasing.LowerCase));\r\n\r\n    [Theory]\r\n    [InlineData(\"CanReturnSentenceCase\", \"Can return sentence case\")]\r\n    [InlineData(\"\", \"\")]\r\n    [InlineData(\"égoïste\", \"Égoïste\")]\r\n    [InlineData(\"Normal; Normal and PascalCase\", \"Normal; normal and pascal case\")]\r\n    [InlineData(\"I,and No One else\", \"I, and no one else\")]\r\n    public void CanHumanizeIntoSentenceCase(string input, string expectedResult) =>\r\n        Assert.Equal(expectedResult, input.Humanize(LetterCasing.Sentence));\r\n\r\n    [Theory]\r\n    [InlineData(\"CanHumanizeIntoUpperCase\", \"CAN HUMANIZE INTO UPPER CASE\")]\r\n    [InlineData(\"Can_Humanize_into_Upper_case\", \"CAN HUMANIZE INTO UPPER CASE\")]\r\n    [InlineData(\"coûts_privés\", \"COÛTS PRIVÉS\")]\r\n    public void CanHumanizeIntoUpperCase(string input, string expectedResult) =>\r\n        Assert.Equal(expectedResult, input.Humanize(LetterCasing.AllCaps));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/TimeOnlyHumanizeTests.cs",
    "content": "﻿#if NET6_0_OR_GREATER\r\n\r\n[UseCulture(\"en-US\")]\r\npublic class TimeOnlyHumanizeTests\r\n{\r\n    [Fact]\r\n    public void DefaultStrategy_SameTime()\r\n    {\r\n        Configurator.TimeOnlyHumanizeStrategy = new DefaultTimeOnlyHumanizeStrategy();\r\n\r\n        var inputTime = new TimeOnly(13, 07, 05);\r\n        var baseTime = new TimeOnly(13, 07, 05);\r\n\r\n        const string expectedResult = \"now\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void DefaultStrategy_HoursApart()\r\n    {\r\n        Configurator.TimeOnlyHumanizeStrategy = new DefaultTimeOnlyHumanizeStrategy();\r\n\r\n        var inputTime = new TimeOnly(13, 08, 05);\r\n        var baseTime = new TimeOnly(1, 08, 05);\r\n\r\n        const string expectedResult = \"12 hours from now\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void DefaultStrategy_HoursAgo()\r\n    {\r\n        Configurator.TimeOnlyHumanizeStrategy = new DefaultTimeOnlyHumanizeStrategy();\r\n\r\n        var inputTime = new TimeOnly(13, 07, 02);\r\n        var baseTime = new TimeOnly(17, 07, 05);\r\n\r\n        const string expectedResult = \"4 hours ago\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void PrecisionStrategy_NextDay()\r\n    {\r\n        Configurator.TimeOnlyHumanizeStrategy = new PrecisionTimeOnlyHumanizeStrategy(0.75);\r\n\r\n        var inputTime = new TimeOnly(18, 10, 49);\r\n        var baseTime = new TimeOnly(13, 07, 04);\r\n\r\n        const string expectedResult = \"5 hours from now\";\r\n        var actualResult = inputTime.Humanize(baseTime);\r\n\r\n        Assert.Equal(expectedResult, actualResult);\r\n    }\r\n\r\n    [Fact]\r\n    public void Never()\r\n    {\r\n        TimeOnly? never = null;\r\n        Assert.Equal(\"never\", never.Humanize());\r\n    }\r\n\r\n    [Fact]\r\n    public void Nullable_ExpectSame()\r\n    {\r\n        TimeOnly? never = new TimeOnly(23, 12, 7);\r\n\r\n        Assert.Equal(never.Value.Humanize(), never.Humanize());\r\n    }\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/TimeSpanHumanizeTests.cs",
    "content": "[UseCulture(\"en-US\")]\r\npublic class TimeSpanHumanizeTests\r\n{\r\n    [Fact]\r\n    public void AllTimeSpansMustBeUniqueForASequenceOfDays()\r\n    {\r\n        var culture = new CultureInfo(\"en-US\");\r\n        var qry = from i in Enumerable.Range(0, 100000)\r\n                  let ts = TimeSpan.FromDays(i)\r\n                  let text = ts.Humanize(precision: 3, culture: culture, maxUnit: TimeUnit.Year)\r\n                  select text;\r\n        var grouping = from t in qry\r\n                       group t by t into g\r\n                       select new { g.Key, Count = g.Count() };\r\n        var allUnique = grouping.All(g => g.Count == 1);\r\n        Assert.True(allUnique);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(365, \"11 months, 30 days\")]\r\n    [InlineData(365 + 1, \"1 year\")]\r\n    [InlineData(365 + 365, \"1 year, 11 months, 29 days\")]\r\n    [InlineData(365 + 365 + 1, \"2 years\")]\r\n    [InlineData(365 + 365 + 365, \"2 years, 11 months, 29 days\")]\r\n    [InlineData(365 + 365 + 365 + 1, \"3 years\")]\r\n    [InlineData(365 + 365 + 365 + 365, \"3 years, 11 months, 29 days\")]\r\n    [InlineData(365 + 365 + 365 + 365 + 1, \"4 years\")]\r\n    [InlineData(365 + 365 + 365 + 365 + 366, \"4 years, 11 months, 30 days\")]\r\n    [InlineData(365 + 365 + 365 + 365 + 366 + 1, \"5 years\")]\r\n    public void Years(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize(precision: 7, maxUnit: TimeUnit.Year);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(30, \"4 weeks, 2 days\")]\r\n    [InlineData(30 + 1, \"1 month\")]\r\n    [InlineData(30 + 30, \"1 month, 29 days\")]\r\n    [InlineData(30 + 30 + 1, \"2 months\")]\r\n    [InlineData(30 + 30 + 31, \"2 months, 30 days\")]\r\n    [InlineData(30 + 30 + 31 + 1, \"3 months\")]\r\n    [InlineData(30 + 30 + 31 + 30, \"3 months, 29 days\")]\r\n    [InlineData(30 + 30 + 31 + 30 + 1, \"4 months\")]\r\n    [InlineData(30 + 30 + 31 + 30 + 31, \"4 months, 30 days\")]\r\n    [InlineData(30 + 30 + 31 + 30 + 31 + 1, \"5 months\")]\r\n    [InlineData(365, \"11 months, 30 days\")]\r\n    [InlineData(366, \"1 year\")]\r\n    public void Months(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize(precision: 7, maxUnit: TimeUnit.Year);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(14, \"2 weeks\")]\r\n    [InlineData(7, \"1 week\")]\r\n    [InlineData(-14, \"2 weeks\")]\r\n    [InlineData(-7, \"1 week\")]\r\n    [InlineData(730, \"104 weeks\")]\r\n    public void Weeks(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(6, \"6 days\")]\r\n    [InlineData(2, \"2 days\")]\r\n    [InlineData(1, \"1 day\")]\r\n    [InlineData(-6, \"6 days\")]\r\n    [InlineData(-2, \"2 days\")]\r\n    [InlineData(-1, \"1 day\")]\r\n    public void Days(int days, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 hours\")]\r\n    [InlineData(1, \"1 hour\")]\r\n    [InlineData(-2, \"2 hours\")]\r\n    [InlineData(-1, \"1 hour\")]\r\n    public void Hours(int hours, string expected)\r\n    {\r\n        var actual = TimeSpan.FromHours(hours).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2, \"2 minutes\")]\r\n    [InlineData(1, \"1 minute\")]\r\n    [InlineData(-2, \"2 minutes\")]\r\n    [InlineData(-1, \"1 minute\")]\r\n    public void Minutes(int minutes, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMinutes(minutes).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(135, \"2 minutes\")]\r\n    [InlineData(60, \"1 minute\")]\r\n    [InlineData(2, \"2 seconds\")]\r\n    [InlineData(1, \"1 second\")]\r\n    [InlineData(-135, \"2 minutes\")]\r\n    [InlineData(-60, \"1 minute\")]\r\n    [InlineData(-2, \"2 seconds\")]\r\n    [InlineData(-1, \"1 second\")]\r\n    public void Seconds(int seconds, string expected)\r\n    {\r\n        var actual = TimeSpan.FromSeconds(seconds).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(2500, \"2 seconds\")]\r\n    [InlineData(1400, \"1 second\")]\r\n    [InlineData(2, \"2 milliseconds\")]\r\n    [InlineData(1, \"1 millisecond\")]\r\n    [InlineData(-2500, \"2 seconds\")]\r\n    [InlineData(-1400, \"1 second\")]\r\n    [InlineData(-2, \"2 milliseconds\")]\r\n    [InlineData(-1, \"1 millisecond\")]\r\n    public void Milliseconds(int ms, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize();\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(4, false, \"4 days old\")]\r\n    [InlineData(23, false, \"3 weeks old\")]\r\n    [InlineData(64, false, \"2 months old\")]\r\n    [InlineData(367, true, \"one year old\")]\r\n    [InlineData(750, true, \"two years old\")]\r\n    public void Age(int days, bool toWords, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).ToAge(toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData((long)366 * 24 * 60 * 60 * 1000, \"12 months\", TimeUnit.Month)]\r\n    [InlineData((long)6 * 7 * 24 * 60 * 60 * 1000, \"6 weeks\", TimeUnit.Week)]\r\n    [InlineData(7 * 24 * 60 * 60 * 1000, \"7 days\", TimeUnit.Day)]\r\n    [InlineData(24 * 60 * 60 * 1000, \"24 hours\", TimeUnit.Hour)]\r\n    [InlineData(60 * 60 * 1000, \"60 minutes\", TimeUnit.Minute)]\r\n    [InlineData(60 * 1000, \"60 seconds\", TimeUnit.Second)]\r\n    [InlineData(1000, \"1000 milliseconds\", TimeUnit.Millisecond)]\r\n    public void TimeSpanWithMaxTimeUnit(long ms, string expected, TimeUnit maxUnit)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize(maxUnit: maxUnit);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(10, \"10 milliseconds\", TimeUnit.Millisecond)]\r\n    [InlineData(10, \"no time\", TimeUnit.Second, true)]\r\n    [InlineData(10, \"no time\", TimeUnit.Minute, true)]\r\n    [InlineData(10, \"no time\", TimeUnit.Hour, true)]\r\n    [InlineData(10, \"no time\", TimeUnit.Day, true)]\r\n    [InlineData(10, \"no time\", TimeUnit.Week, true)]\r\n    [InlineData(10, \"0 seconds\", TimeUnit.Second)]\r\n    [InlineData(10, \"0 minutes\", TimeUnit.Minute)]\r\n    [InlineData(10, \"0 hours\", TimeUnit.Hour)]\r\n    [InlineData(10, \"0 days\", TimeUnit.Day)]\r\n    [InlineData(10, \"0 weeks\", TimeUnit.Week)]\r\n    [InlineData(2500, \"2 seconds, 500 milliseconds\", TimeUnit.Millisecond)]\r\n    [InlineData(2500, \"2 seconds\", TimeUnit.Second)]\r\n    [InlineData(2500, \"no time\", TimeUnit.Minute, true)]\r\n    [InlineData(2500, \"no time\", TimeUnit.Hour, true)]\r\n    [InlineData(2500, \"no time\", TimeUnit.Day, true)]\r\n    [InlineData(2500, \"no time\", TimeUnit.Week, true)]\r\n    [InlineData(2500, \"0 minutes\", TimeUnit.Minute)]\r\n    [InlineData(2500, \"0 hours\", TimeUnit.Hour)]\r\n    [InlineData(2500, \"0 days\", TimeUnit.Day)]\r\n    [InlineData(2500, \"0 weeks\", TimeUnit.Week)]\r\n    [InlineData(122500, \"2 minutes, 2 seconds, 500 milliseconds\", TimeUnit.Millisecond)]\r\n    [InlineData(122500, \"2 minutes, 2 seconds\", TimeUnit.Second)]\r\n    [InlineData(122500, \"2 minutes\", TimeUnit.Minute)]\r\n    [InlineData(122500, \"no time\", TimeUnit.Hour, true)]\r\n    [InlineData(122500, \"no time\", TimeUnit.Day, true)]\r\n    [InlineData(122500, \"no time\", TimeUnit.Week, true)]\r\n    [InlineData(122500, \"0 hours\", TimeUnit.Hour)]\r\n    [InlineData(122500, \"0 days\", TimeUnit.Day)]\r\n    [InlineData(122500, \"0 weeks\", TimeUnit.Week)]\r\n    [InlineData(3722500, \"1 hour, 2 minutes, 2 seconds, 500 milliseconds\", TimeUnit.Millisecond)]\r\n    [InlineData(3722500, \"1 hour, 2 minutes, 2 seconds\", TimeUnit.Second)]\r\n    [InlineData(3722500, \"1 hour, 2 minutes\", TimeUnit.Minute)]\r\n    [InlineData(3722500, \"1 hour\", TimeUnit.Hour)]\r\n    [InlineData(3722500, \"no time\", TimeUnit.Day, true)]\r\n    [InlineData(3722500, \"no time\", TimeUnit.Week, true)]\r\n    [InlineData(3722500, \"0 days\", TimeUnit.Day)]\r\n    [InlineData(3722500, \"0 weeks\", TimeUnit.Week)]\r\n    [InlineData(90122500, \"1 day, 1 hour, 2 minutes, 2 seconds, 500 milliseconds\", TimeUnit.Millisecond)]\r\n    [InlineData(90122500, \"1 day, 1 hour, 2 minutes, 2 seconds\", TimeUnit.Second)]\r\n    [InlineData(90122500, \"1 day, 1 hour, 2 minutes\", TimeUnit.Minute)]\r\n    [InlineData(90122500, \"1 day, 1 hour\", TimeUnit.Hour)]\r\n    [InlineData(90122500, \"1 day\", TimeUnit.Day)]\r\n    [InlineData(90122500, \"no time\", TimeUnit.Week, true)]\r\n    [InlineData(90122500, \"0 weeks\", TimeUnit.Week)]\r\n    [InlineData(694922500, \"1 week, 1 day, 1 hour, 2 minutes, 2 seconds, 500 milliseconds\", TimeUnit.Millisecond)]\r\n    [InlineData(694922500, \"1 week, 1 day, 1 hour, 2 minutes, 2 seconds\", TimeUnit.Second)]\r\n    [InlineData(694922500, \"1 week, 1 day, 1 hour, 2 minutes\", TimeUnit.Minute)]\r\n    [InlineData(694922500, \"1 week, 1 day, 1 hour\", TimeUnit.Hour)]\r\n    [InlineData(694922500, \"1 week, 1 day\", TimeUnit.Day)]\r\n    [InlineData(694922500, \"1 week\", TimeUnit.Week)]\r\n    [InlineData(2768462500, \"1 month, 1 day, 1 hour, 1 minute, 2 seconds, 500 milliseconds\", TimeUnit.Millisecond)]\r\n    [InlineData(2768462500, \"1 month, 1 day, 1 hour, 1 minute, 2 seconds\", TimeUnit.Second)]\r\n    [InlineData(2768462500, \"1 month, 1 day, 1 hour, 1 minute\", TimeUnit.Minute)]\r\n    [InlineData(2768462500, \"1 month, 1 day, 1 hour\", TimeUnit.Hour)]\r\n    [InlineData(2768462500, \"1 month, 1 day\", TimeUnit.Day)]\r\n    [InlineData(2768462500, \"1 month\", TimeUnit.Week)]\r\n    [InlineData(2768462500, \"1 month\", TimeUnit.Month)]\r\n    [InlineData(2768462500, \"no time\", TimeUnit.Year, true)]\r\n    [InlineData(2768462500, \"0 years\", TimeUnit.Year)]\r\n    [InlineData(34390862500, \"1 year, 1 month, 2 days, 1 hour, 1 minute, 2 seconds, 500 milliseconds\", TimeUnit.Millisecond)]\r\n    [InlineData(34390862500, \"1 year, 1 month, 2 days, 1 hour, 1 minute, 2 seconds\", TimeUnit.Second)]\r\n    [InlineData(34390862500, \"1 year, 1 month, 2 days, 1 hour, 1 minute\", TimeUnit.Minute)]\r\n    [InlineData(34390862500, \"1 year, 1 month, 2 days, 1 hour\", TimeUnit.Hour)]\r\n    [InlineData(34390862500, \"1 year, 1 month, 2 days\", TimeUnit.Day)]\r\n    [InlineData(34390862500, \"1 year, 1 month\", TimeUnit.Week)]\r\n    [InlineData(34390862500, \"1 year, 1 month\", TimeUnit.Month)]\r\n    [InlineData(34390862500, \"1 year\", TimeUnit.Year)]\r\n    public void TimeSpanWithMinTimeUnit(long ms, string expected, TimeUnit minUnit, bool toWords = false)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize(minUnit: minUnit, precision: 7, maxUnit: TimeUnit.Year, toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 3, \"no time\", true)]\r\n    [InlineData(0, 2, \"no time\", true)]\r\n    [InlineData(0, 3, \"0 milliseconds\")]\r\n    [InlineData(0, 2, \"0 milliseconds\")]\r\n    [InlineData(10, 2, \"10 milliseconds\")]\r\n    [InlineData(1400, 2, \"1 second, 400 milliseconds\")]\r\n    [InlineData(2500, 2, \"2 seconds, 500 milliseconds\")]\r\n    [InlineData(120000, 2, \"2 minutes\")]\r\n    [InlineData(62000, 2, \"1 minute, 2 seconds\")]\r\n    [InlineData(62020, 2, \"1 minute, 2 seconds\")]\r\n    [InlineData(62020, 3, \"1 minute, 2 seconds, 20 milliseconds\")]\r\n    [InlineData(3600020, 4, \"1 hour, 20 milliseconds\")]\r\n    [InlineData(3600020, 3, \"1 hour, 20 milliseconds\")]\r\n    [InlineData(3600020, 2, \"1 hour, 20 milliseconds\")]\r\n    [InlineData(3600020, 1, \"1 hour\")]\r\n    [InlineData(3603001, 2, \"1 hour, 3 seconds\")]\r\n    [InlineData(3603001, 3, \"1 hour, 3 seconds, 1 millisecond\")]\r\n    [InlineData(86400000, 3, \"1 day\")]\r\n    [InlineData(86400000, 2, \"1 day\")]\r\n    [InlineData(86400000, 1, \"1 day\")]\r\n    [InlineData(86401000, 1, \"1 day\")]\r\n    [InlineData(86401000, 2, \"1 day, 1 second\")]\r\n    [InlineData(86401200, 2, \"1 day, 1 second\")]\r\n    [InlineData(86401200, 3, \"1 day, 1 second, 200 milliseconds\")]\r\n    [InlineData(1296000000, 1, \"2 weeks\")]\r\n    [InlineData(1296000000, 2, \"2 weeks, 1 day\")]\r\n    [InlineData(1299600000, 2, \"2 weeks, 1 day\")]\r\n    [InlineData(1299600000, 3, \"2 weeks, 1 day, 1 hour\")]\r\n    [InlineData(1299630020, 3, \"2 weeks, 1 day, 1 hour\")]\r\n    [InlineData(1299630020, 4, \"2 weeks, 1 day, 1 hour, 30 seconds\")]\r\n    [InlineData(1299630020, 5, \"2 weeks, 1 day, 1 hour, 30 seconds, 20 milliseconds\")]\r\n    [InlineData(2768462500, 6, \"1 month, 1 day, 1 hour, 1 minute, 2 seconds, 500 milliseconds\")]\r\n    [InlineData(2768462500, 5, \"1 month, 1 day, 1 hour, 1 minute, 2 seconds\")]\r\n    [InlineData(2768462500, 4, \"1 month, 1 day, 1 hour, 1 minute\")]\r\n    [InlineData(2768462500, 3, \"1 month, 1 day, 1 hour\")]\r\n    [InlineData(2768462500, 2, \"1 month, 1 day\")]\r\n    [InlineData(2768462500, 1, \"1 month\")]\r\n    [InlineData(34390862500, 7, \"1 year, 1 month, 2 days, 1 hour, 1 minute, 2 seconds, 500 milliseconds\")]\r\n    [InlineData(34390862500, 6, \"1 year, 1 month, 2 days, 1 hour, 1 minute, 2 seconds\")]\r\n    [InlineData(34390862500, 5, \"1 year, 1 month, 2 days, 1 hour, 1 minute\")]\r\n    [InlineData(34390862500, 4, \"1 year, 1 month, 2 days, 1 hour\")]\r\n    [InlineData(34390862500, 3, \"1 year, 1 month, 2 days\")]\r\n    [InlineData(34390862500, 2, \"1 year, 1 month\")]\r\n    [InlineData(34390862500, 1, \"1 year\")]\r\n    public void TimeSpanWithPrecision(long milliseconds, int precision, string expected, bool toWords = false)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize(precision, maxUnit: TimeUnit.Year, toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(3 * 7 + 4, 2, \"3 weeks, 4 days\")]\r\n    [InlineData(6 * 7 + 3, 2, \"6 weeks, 3 days\")]\r\n    [InlineData(72 * 7 + 6, 2, \"72 weeks, 6 days\")]\r\n    public void DaysWithPrecision(int days, int precision, string expected)\r\n    {\r\n        var actual = TimeSpan.FromDays(days).Humanize(precision: precision);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(50)]\r\n    [InlineData(52)]\r\n    public void TimeSpanWithMinAndMaxUnits_DoesNotReportExcessiveTime(int minutes)\r\n    {\r\n        var actual = TimeSpan.FromMinutes(minutes).Humanize(2, null, TimeUnit.Hour, TimeUnit.Minute);\r\n        var expected = TimeSpan.FromMinutes(minutes).Humanize(2);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 3, \"no time\", true)]\r\n    [InlineData(0, 2, \"no time\", true)]\r\n    [InlineData(0, 3, \"0 milliseconds\")]\r\n    [InlineData(0, 2, \"0 milliseconds\")]\r\n    [InlineData(10, 2, \"10 milliseconds\")]\r\n    [InlineData(1400, 2, \"1 second, 400 milliseconds\")]\r\n    [InlineData(2500, 2, \"2 seconds, 500 milliseconds\")]\r\n    [InlineData(60001, 1, \"1 minute\")]\r\n    [InlineData(60001, 2, \"1 minute\")]\r\n    [InlineData(60001, 3, \"1 minute, 1 millisecond\")]\r\n    [InlineData(120000, 2, \"2 minutes\")]\r\n    [InlineData(62000, 2, \"1 minute, 2 seconds\")]\r\n    [InlineData(62020, 2, \"1 minute, 2 seconds\")]\r\n    [InlineData(62020, 3, \"1 minute, 2 seconds, 20 milliseconds\")]\r\n    [InlineData(3600020, 4, \"1 hour, 20 milliseconds\")]\r\n    [InlineData(3600020, 3, \"1 hour\")]\r\n    [InlineData(3600020, 2, \"1 hour\")]\r\n    [InlineData(3600020, 1, \"1 hour\")]\r\n    [InlineData(3603001, 2, \"1 hour\")]\r\n    [InlineData(3603001, 3, \"1 hour, 3 seconds\")]\r\n    [InlineData(86400000, 3, \"1 day\")]\r\n    [InlineData(86400000, 2, \"1 day\")]\r\n    [InlineData(86400000, 1, \"1 day\")]\r\n    [InlineData(86401000, 1, \"1 day\")]\r\n    [InlineData(86401000, 2, \"1 day\")]\r\n    [InlineData(86401000, 3, \"1 day\")]\r\n    [InlineData(86401000, 4, \"1 day, 1 second\")]\r\n    [InlineData(86401200, 4, \"1 day, 1 second\")]\r\n    [InlineData(86401200, 5, \"1 day, 1 second, 200 milliseconds\")]\r\n    [InlineData(1296000000, 1, \"2 weeks\")]\r\n    [InlineData(1296000000, 2, \"2 weeks, 1 day\")]\r\n    [InlineData(1299600000, 2, \"2 weeks, 1 day\")]\r\n    [InlineData(1299600000, 3, \"2 weeks, 1 day, 1 hour\")]\r\n    [InlineData(1299630020, 3, \"2 weeks, 1 day, 1 hour\")]\r\n    [InlineData(1299630020, 4, \"2 weeks, 1 day, 1 hour\")]\r\n    [InlineData(1299630020, 5, \"2 weeks, 1 day, 1 hour, 30 seconds\")]\r\n    [InlineData(1299630020, 6, \"2 weeks, 1 day, 1 hour, 30 seconds, 20 milliseconds\")]\r\n    public void TimeSpanWithPrecisionAndCountingEmptyUnits(int milliseconds, int precision, string expected, bool toWords = false)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize(precision: precision, countEmptyUnits: true, toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 3, \"no time\", true)]\r\n    [InlineData(0, 2, \"no time\", true)]\r\n    [InlineData(0, 3, \"0 milliseconds\")]\r\n    [InlineData(0, 2, \"0 milliseconds\")]\r\n    [InlineData(10, 2, \"10 milliseconds\")]\r\n    [InlineData(1400, 2, \"1 second and 400 milliseconds\")]\r\n    [InlineData(2500, 2, \"2 seconds and 500 milliseconds\")]\r\n    [InlineData(120000, 2, \"2 minutes\")]\r\n    [InlineData(62000, 2, \"1 minute and 2 seconds\")]\r\n    [InlineData(62020, 2, \"1 minute and 2 seconds\")]\r\n    [InlineData(62020, 3, \"1 minute, 2 seconds, and 20 milliseconds\")]\r\n    [InlineData(3600020, 4, \"1 hour and 20 milliseconds\")]\r\n    [InlineData(3600020, 3, \"1 hour and 20 milliseconds\")]\r\n    [InlineData(3600020, 2, \"1 hour and 20 milliseconds\")]\r\n    [InlineData(3600020, 1, \"1 hour\")]\r\n    [InlineData(3603001, 2, \"1 hour and 3 seconds\")]\r\n    [InlineData(3603001, 3, \"1 hour, 3 seconds, and 1 millisecond\")]\r\n    [InlineData(86400000, 3, \"1 day\")]\r\n    [InlineData(86400000, 2, \"1 day\")]\r\n    [InlineData(86400000, 1, \"1 day\")]\r\n    [InlineData(86401000, 1, \"1 day\")]\r\n    [InlineData(86401000, 2, \"1 day and 1 second\")]\r\n    [InlineData(86401200, 2, \"1 day and 1 second\")]\r\n    [InlineData(86401200, 3, \"1 day, 1 second, and 200 milliseconds\")]\r\n    [InlineData(1296000000, 1, \"2 weeks\")]\r\n    [InlineData(1296000000, 2, \"2 weeks and 1 day\")]\r\n    [InlineData(1299600000, 2, \"2 weeks and 1 day\")]\r\n    [InlineData(1299600000, 3, \"2 weeks, 1 day, and 1 hour\")]\r\n    [InlineData(1299630020, 3, \"2 weeks, 1 day, and 1 hour\")]\r\n    [InlineData(1299630020, 4, \"2 weeks, 1 day, 1 hour, and 30 seconds\")]\r\n    [InlineData(1299630020, 5, \"2 weeks, 1 day, 1 hour, 30 seconds, and 20 milliseconds\")]\r\n    public void TimeSpanWithPrecisionAndAlternativeCollectionFormatter(int milliseconds, int precision,\r\n        string expected, bool toWords = false)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize(precision, collectionSeparator: null, toWords: toWords);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(0, 3, \"no time\")]\r\n    [InlineData(0, 2, \"no time\")]\r\n    [InlineData(10, 2, \"ten milliseconds\")]\r\n    [InlineData(1400, 2, \"one second, four hundred milliseconds\")]\r\n    [InlineData(2500, 2, \"two seconds, five hundred milliseconds\")]\r\n    [InlineData(120000, 2, \"two minutes\")]\r\n    [InlineData(62000, 2, \"one minute, two seconds\")]\r\n    [InlineData(62020, 2, \"one minute, two seconds\")]\r\n    [InlineData(62020, 3, \"one minute, two seconds, twenty milliseconds\")]\r\n    [InlineData(3600020, 4, \"one hour, twenty milliseconds\")]\r\n    [InlineData(3600020, 3, \"one hour, twenty milliseconds\")]\r\n    [InlineData(3600020, 2, \"one hour, twenty milliseconds\")]\r\n    [InlineData(3600020, 1, \"one hour\")]\r\n    [InlineData(3603001, 2, \"one hour, three seconds\")]\r\n    [InlineData(3603001, 3, \"one hour, three seconds, one millisecond\")]\r\n    [InlineData(86400000, 3, \"one day\")]\r\n    [InlineData(86400000, 2, \"one day\")]\r\n    [InlineData(86400000, 1, \"one day\")]\r\n    [InlineData(86401000, 1, \"one day\")]\r\n    [InlineData(86401000, 2, \"one day, one second\")]\r\n    [InlineData(86401200, 2, \"one day, one second\")]\r\n    [InlineData(86401200, 3, \"one day, one second, two hundred milliseconds\")]\r\n    [InlineData(1296000000, 1, \"two weeks\")]\r\n    [InlineData(1296000000, 2, \"two weeks, one day\")]\r\n    [InlineData(1299600000, 2, \"two weeks, one day\")]\r\n    [InlineData(1299600000, 3, \"two weeks, one day, one hour\")]\r\n    [InlineData(1299630020, 3, \"two weeks, one day, one hour\")]\r\n    [InlineData(1299630020, 4, \"two weeks, one day, one hour, thirty seconds\")]\r\n    [InlineData(1299630020, 5, \"two weeks, one day, one hour, thirty seconds, twenty milliseconds\")]\r\n    public void TimeSpanWithNumbersConvertedToWords(int milliseconds, int precision, string expected)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(milliseconds).Humanize(precision, toWords: true);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTime()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize();\r\n        Assert.Equal(\"0 milliseconds\", actual);\r\n    }\r\n\r\n    [Fact]\r\n    public void NoTimeToWords()\r\n    {\r\n        var noTime = TimeSpan.Zero;\r\n        var actual = noTime.Humanize(toWords: true);\r\n        Assert.Equal(\"no time\", actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(1, 1, \"en-US\", \"1 millisecond\", \", \")]\r\n    [InlineData(6 * 24 * 60 * 60 * 1000, 1, \"ru-RU\", \"6 дней\", \", \")]\r\n    [InlineData(11 * 60 * 60 * 1000, 1, \"ar\", \"11 ساعة\", \", \")]\r\n    [InlineData(3603001, 2, \"it-IT\", \"1 ora e 3 secondi\", null)]\r\n    public void CanSpecifyCultureExplicitly(int ms, int precision, string culture, string expected, string? collectionSeparator)\r\n    {\r\n        var actual = TimeSpan.FromMilliseconds(ms).Humanize(precision: precision, culture: new(culture), collectionSeparator: collectionSeparator);\r\n        Assert.Equal(expected, actual);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(31 * 4, 1, \"en-US\", \"four months\")]\r\n    [InlineData(236, 2, \"ar\", \"سبعة أشهر, اثنان و عشرون يوم\")]\r\n    [InlineData(321, 2, \"es\", \"diez meses, dieciséis días\")]\r\n    public void CanSpecifyCultureExplicitlyToWords(int days, int precision, string culture, string expected)\r\n    {\r\n        var timeSpan = new TimeSpan(days, 0, 0, 0);\r\n        var actual = timeSpan.Humanize(precision: precision, culture: new(culture), maxUnit: TimeUnit.Year, toWords: true);\r\n        Assert.Equal(expected: expected, actual);\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/TimeUnitToSymbolTests.cs",
    "content": "﻿[UseCulture(\"en-US\")]\r\npublic class TimeUnitToSymbolTests\r\n{\r\n    [Theory]\r\n    [InlineData(TimeUnit.Millisecond, \"ms\")]\r\n    [InlineData(TimeUnit.Second, \"s\")]\r\n    [InlineData(TimeUnit.Minute, \"min\")]\r\n    [InlineData(TimeUnit.Hour, \"h\")]\r\n    [InlineData(TimeUnit.Day, \"d\")]\r\n    [InlineData(TimeUnit.Week, \"week\")]\r\n    [InlineData(TimeUnit.Month, \"mo\")]\r\n    [InlineData(TimeUnit.Year, \"y\")]\r\n    public void ToSymbol(TimeUnit unit, string expected) =>\r\n        Assert.Equal(expected, unit.ToSymbol());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/ToQuantityTests.cs",
    "content": "[UseCulture(\"en-US\")]\r\npublic class ToQuantityTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"case\", 0, \"0 cases\")]\r\n    [InlineData(\"case\", 1, \"1 case\")]\r\n    [InlineData(\"case\", -1, \"-1 case\")]\r\n    [InlineData(\"case\", 5, \"5 cases\")]\r\n    [InlineData(\"case\", -5, \"-5 cases\")]\r\n    [InlineData(\"man\", 0, \"0 men\")]\r\n    [InlineData(\"man\", 1, \"1 man\")]\r\n    [InlineData(\"man\", -1, \"-1 man\")]\r\n    [InlineData(\"man\", 2, \"2 men\")]\r\n    [InlineData(\"man\", -2, \"-2 men\")]\r\n    [InlineData(\"men\", 2, \"2 men\")]\r\n    [InlineData(\"men\", -2, \"-2 men\")]\r\n    [InlineData(\"process\", 2, \"2 processes\")]\r\n    [InlineData(\"process\", -2, \"-2 processes\")]\r\n    [InlineData(\"process\", 1, \"1 process\")]\r\n    [InlineData(\"process\", -1, \"-1 process\")]\r\n    [InlineData(\"processes\", 2, \"2 processes\")]\r\n    [InlineData(\"processes\", -2, \"-2 processes\")]\r\n    [InlineData(\"processes\", 1, \"1 process\")]\r\n    [InlineData(\"processes\", -1, \"-1 process\")]\r\n    [InlineData(\"slice\", 1, \"1 slice\")]\r\n    [InlineData(\"slice\", -1, \"-1 slice\")]\r\n    [InlineData(\"slice\", 2, \"2 slices\")]\r\n    [InlineData(\"slice\", -2, \"-2 slices\")]\r\n    [InlineData(\"slices\", 1, \"1 slice\")]\r\n    [InlineData(\"slices\", -1, \"-1 slice\")]\r\n    [InlineData(\"slices\", 2, \"2 slices\")]\r\n    [InlineData(\"slices\", -2, \"-2 slices\")]\r\n    public void ToQuantity(string word, int quantity, string expected) =>\r\n        Assert.Equal(expected, word.ToQuantity(quantity));\r\n\r\n    [Theory]\r\n    [InlineData(\"case\", 0, \"cases\")]\r\n    [InlineData(\"case\", 1, \"case\")]\r\n    [InlineData(\"case\", -1, \"case\")]\r\n    [InlineData(\"case\", 5, \"cases\")]\r\n    [InlineData(\"case\", -5, \"cases\")]\r\n    [InlineData(\"man\", 0, \"men\")]\r\n    [InlineData(\"man\", 1, \"man\")]\r\n    [InlineData(\"man\", -1, \"man\")]\r\n    [InlineData(\"man\", 2, \"men\")]\r\n    [InlineData(\"man\", -2, \"men\")]\r\n    [InlineData(\"men\", 2, \"men\")]\r\n    [InlineData(\"men\", -2, \"men\")]\r\n    [InlineData(\"process\", 2, \"processes\")]\r\n    [InlineData(\"process\", -2, \"processes\")]\r\n    [InlineData(\"process\", 1, \"process\")]\r\n    [InlineData(\"process\", -1, \"process\")]\r\n    [InlineData(\"processes\", 2, \"processes\")]\r\n    [InlineData(\"processes\", -2, \"processes\")]\r\n    [InlineData(\"processes\", 1, \"process\")]\r\n    [InlineData(\"processes\", -1, \"process\")]\r\n    public void ToQuantityWithNoQuantity(string word, int quantity, string expected) =>\r\n        Assert.Equal(expected, word.ToQuantity(quantity, ShowQuantityAs.None));\r\n\r\n    [Theory]\r\n    [InlineData(\"case\", 0, \"0 cases\")]\r\n    [InlineData(\"case\", 1, \"1 case\")]\r\n    [InlineData(\"case\", -1, \"-1 case\")]\r\n    [InlineData(\"case\", 5, \"5 cases\")]\r\n    [InlineData(\"case\", -5, \"-5 cases\")]\r\n    [InlineData(\"man\", 0, \"0 men\")]\r\n    [InlineData(\"man\", 1, \"1 man\")]\r\n    [InlineData(\"man\", -1, \"-1 man\")]\r\n    [InlineData(\"man\", 2, \"2 men\")]\r\n    [InlineData(\"man\", -2, \"-2 men\")]\r\n    [InlineData(\"men\", 2, \"2 men\")]\r\n    [InlineData(\"men\", -2, \"-2 men\")]\r\n    [InlineData(\"process\", 2, \"2 processes\")]\r\n    [InlineData(\"process\", -2, \"-2 processes\")]\r\n    [InlineData(\"process\", 1, \"1 process\")]\r\n    [InlineData(\"process\", -1, \"-1 process\")]\r\n    [InlineData(\"processes\", 2, \"2 processes\")]\r\n    [InlineData(\"processes\", -2, \"-2 processes\")]\r\n    [InlineData(\"processes\", 1, \"1 process\")]\r\n    [InlineData(\"processes\", -1, \"-1 process\")]\r\n    public void ToQuantityNumeric(string word, int quantity, string expected) =>\r\n        Assert.Equal(expected, word.ToQuantity(quantity));\r\n\r\n    [Fact]\r\n    public void ToQuantityPublicApiIncludesIntOverloads()\r\n    {\r\n        var hasCountOverload = false;\r\n        var hasFormatOverload = false;\r\n\r\n        foreach (var method in typeof(ToQuantityExtensions).GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static))\r\n        {\r\n            if (method.Name != \"ToQuantity\")\r\n            {\r\n                continue;\r\n            }\r\n\r\n            var parameters = method.GetParameters();\r\n\r\n            if (parameters.Length == 3 &&\r\n                parameters[0].ParameterType == typeof(string) &&\r\n                parameters[1].ParameterType == typeof(int) &&\r\n                parameters[2].ParameterType == typeof(ShowQuantityAs))\r\n            {\r\n                hasCountOverload = true;\r\n            }\r\n\r\n            if (parameters.Length == 4 &&\r\n                parameters[0].ParameterType == typeof(string) &&\r\n                parameters[1].ParameterType == typeof(int) &&\r\n                parameters[2].ParameterType == typeof(string) &&\r\n                parameters[3].ParameterType == typeof(IFormatProvider))\r\n            {\r\n                hasFormatOverload = true;\r\n            }\r\n        }\r\n\r\n        Assert.True(hasCountOverload);\r\n        Assert.True(hasFormatOverload);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(\"hour\", -1, \"-1 hour\")]\r\n    [InlineData(\"hour\", -0.5, \"-0.5 hours\")]\r\n    [InlineData(\"hour\", -22.4, \"-22.4 hours\")]\r\n    [InlineData(\"hour\", 1, \"1 hour\")]\r\n    [InlineData(\"hour\", 0.5, \"0.5 hours\")]\r\n    [InlineData(\"hour\", 22.4, \"22.4 hours\")]\r\n    public void ToDoubleQuantityNumeric(string word, double quantity, string expected) =>\r\n        // ReSharper disable once RedundantArgumentDefaultValue\r\n        Assert.Equal(expected, word.ToQuantity(quantity));\r\n\r\n    [Theory]\r\n    [InlineData(\"case\", 0, \"zero cases\")]\r\n    [InlineData(\"case\", 1, \"one case\")]\r\n    [InlineData(\"case\", -1, \"minus one case\")]\r\n    [InlineData(\"case\", 5, \"five cases\")]\r\n    [InlineData(\"case\", -5, \"minus five cases\")]\r\n    [InlineData(\"man\", 0, \"zero men\")]\r\n    [InlineData(\"man\", 1, \"one man\")]\r\n    [InlineData(\"man\", -1, \"minus one man\")]\r\n    [InlineData(\"man\", 2, \"two men\")]\r\n    [InlineData(\"man\", -2, \"minus two men\")]\r\n    [InlineData(\"men\", 2, \"two men\")]\r\n    [InlineData(\"men\", -2, \"minus two men\")]\r\n    [InlineData(\"process\", 2, \"two processes\")]\r\n    [InlineData(\"process\", -2, \"minus two processes\")]\r\n    [InlineData(\"process\", 1, \"one process\")]\r\n    [InlineData(\"process\", -1, \"minus one process\")]\r\n    [InlineData(\"processes\", 2, \"two processes\")]\r\n    [InlineData(\"processes\", -2, \"minus two processes\")]\r\n    [InlineData(\"processes\", 1200, \"one thousand two hundred processes\")]\r\n    [InlineData(\"processes\", -1200, \"minus one thousand two hundred processes\")]\r\n    [InlineData(\"processes\", 1, \"one process\")]\r\n    [InlineData(\"processes\", -1, \"minus one process\")]\r\n    public void ToQuantityWords(string word, int quantity, string expected) =>\r\n        Assert.Equal(expected, word.ToQuantity(quantity, ShowQuantityAs.Words));\r\n\r\n    [Theory]\r\n    [InlineData(\"case\", 0, null, \"0 cases\")]\r\n    [InlineData(\"case\", 1, null, \"1 case\")]\r\n    [InlineData(\"case\", -1, null, \"-1 case\")]\r\n    [InlineData(\"case\", 2, null, \"2 cases\")]\r\n    [InlineData(\"case\", -2, null, \"-2 cases\")]\r\n    [InlineData(\"case\", 1, \"N0\", \"1 case\")]\r\n    [InlineData(\"case\", -1, \"N0\", \"-1 case\")]\r\n    [InlineData(\"case\", 2, \"N0\", \"2 cases\")]\r\n    [InlineData(\"case\", -2, \"N0\", \"-2 cases\")]\r\n    [InlineData(\"case\", 123456, \"N0\", \"123,456 cases\")]\r\n    [InlineData(\"case\", -123456, \"N0\", \"-123,456 cases\")]\r\n    [InlineData(\"case\", 123456, \"N2\", \"123,456.00 cases\")]\r\n    [InlineData(\"case\", -123456, \"N2\", \"-123,456.00 cases\")]\r\n    [InlineData(\"dollar\", 0, \"C0\", \"$0 dollars\")]\r\n    [InlineData(\"dollar\", 1, \"C0\", \"$1 dollar\")]\r\n    [InlineData(\"dollar\", 2, \"C0\", \"$2 dollars\")]\r\n    [InlineData(\"dollar\", 2, \"C2\", \"$2.00 dollars\")]\r\n    public void ToQuantityWordsWithCurrentCultureFormatting(string word, int quantity, string? format, string expected) =>\r\n        Assert.Equal(expected, word.ToQuantity(quantity, format));\r\n\r\n    [Theory]\r\n    [InlineData(\"case\", 0, \"N0\", \"it-IT\", \"0 cases\")]\r\n    [InlineData(\"case\", 1, \"N0\", \"it-IT\", \"1 case\")]\r\n    [InlineData(\"case\", -1, \"N0\", \"it-IT\", \"-1 case\")]\r\n    [InlineData(\"case\", 2, \"N0\", \"it-IT\", \"2 cases\")]\r\n    [InlineData(\"case\", -2, \"N0\", \"it-IT\", \"-2 cases\")]\r\n    [InlineData(\"case\", 1234567, \"N0\", \"it-IT\", \"1.234.567 cases\")]\r\n    [InlineData(\"case\", -1234567, \"N0\", \"it-IT\", \"-1.234.567 cases\")]\r\n    [InlineData(\"case\", 1234567, \"N2\", \"it-IT\", \"1.234.567,00 cases\")]\r\n    [InlineData(\"case\", -1234567, \"N2\", \"it-IT\", \"-1.234.567,00 cases\")]\r\n    [InlineData(\"euro\", 0, \"C0\", \"es-ES\", \"0 € euros\")]\r\n    [InlineData(\"euro\", 1, \"C0\", \"es-ES\", \"1 € euro\")]\r\n    [InlineData(\"euro\", -1, \"C0\", \"es-ES\", \"-1 € euro\")]\r\n    [InlineData(\"euro\", 2, \"C0\", \"es-ES\", \"2 € euros\")]\r\n    [InlineData(\"euro\", -2, \"C0\", \"es-ES\", \"-2 € euros\")]\r\n    [InlineData(\"euro\", 2, \"C2\", \"es-ES\", \"2,00 € euros\")]\r\n    [InlineData(\"euro\", -2, \"C2\", \"es-ES\", \"-2,00 € euros\")]\r\n    public void ToQuantityWordsWithCustomCultureFormatting(string word, int quantity, string format, string cultureCode, string expected)\r\n    {\r\n        var culture = new CultureInfo(cultureCode);\r\n\r\n        Assert.Equal(expected, word.ToQuantity(quantity, format, culture), GetStringComparer(culture));\r\n    }\r\n\r\n    internal static StringComparer GetStringComparer(CultureInfo culture) =>\r\n        StringComparer.Create(culture, false);\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/TransformersTests.cs",
    "content": "﻿public class TransformersTests\r\n{\r\n    [Theory]\r\n    [InlineData(\"lower case statement\", \"Lower Case Statement\")]\r\n    [InlineData(\"Sentence casing\", \"Sentence Casing\")]\r\n    [InlineData(\"honors UPPER case\", \"Honors UPPER Case\")]\r\n    [InlineData(\"INvalid caSEs arE corrected\", \"Invalid Cases Are Corrected\")]\r\n    [InlineData(\"Can deal w 1 letter words as i do\", \"Can Deal W 1 Letter Words as I Do\")]\r\n    [InlineData(\"  random spaces   are HONORED    too \", \"  Random Spaces   Are HONORED    Too \")]\r\n    [InlineData(\"Title Case\", \"Title Case\")]\r\n    [InlineData(\"a great movie\", \"A Great Movie\")]\r\n    [InlineData(\"apostrophe's aren't capitalized\", \"Apostrophe's Aren't Capitalized\")]\r\n    [InlineData(\"titles with, commas work too\", \"Titles With, Commas Work Too\")]\r\n    public void TransformToTitleCase(string input, string expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Transform(To.TitleCase));\r\n\r\n    [Theory]\r\n    [InlineData(\"lower case statement\", \"lower case statement\")]\r\n    [InlineData(\"Sentence casing\", \"sentence casing\")]\r\n    [InlineData(\"No honor for UPPER case\", \"no honor for upper case\")]\r\n    [InlineData(\"Title Case\", \"title case\")]\r\n    public void TransformToLowerCase(string input, string expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Transform(To.LowerCase));\r\n\r\n    [Theory]\r\n    [InlineData(\"lower case statement\", \"Lower case statement\")]\r\n    [InlineData(\"Sentence casing\", \"Sentence casing\")]\r\n    [InlineData(\"honors UPPER case\", \"Honors UPPER case\")]\r\n    public void TransformToSentenceCase(string input, string expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Transform(To.SentenceCase));\r\n\r\n    [Theory]\r\n    [InlineData(\"lower case statement\", \"LOWER CASE STATEMENT\")]\r\n    [InlineData(\"Sentence casing\", \"SENTENCE CASING\")]\r\n    [InlineData(\"Title Case\", \"TITLE CASE\")]\r\n    public void TransformToUpperCase(string input, string expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Transform(To.UpperCase));\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/TruncatorTests.cs",
    "content": "﻿public class TruncatorTests\r\n{\r\n    [Theory(DisplayName = \"01 - Truncate\")]\r\n    [InlineData(null, 10, null)]\r\n    [InlineData(\"\", 10, \"\")]\r\n    [InlineData(\"a\", 1, \"a\")]\r\n    [InlineData(\"Text longer than truncate length\", 10, \"Text long…\")]\r\n    [InlineData(\"Text with length equal to truncate length\", 41, \"Text with length equal to truncate length\")]\r\n    [InlineData(\"Text smaller than truncate length\", 34, \"Text smaller than truncate length\")]\r\n    public void Truncate(string? input, int length, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length));\r\n\r\n    [Theory(DisplayName = \"02.1 - TruncateWithFixedLengthTruncator\")]\r\n    [InlineData(\"short text\", 20, null, \"short text\")]\r\n    [InlineData(\"short text\", 20, \"trunc\", \"short text\")]\r\n    [InlineData(\"short text\", 20, \"very long truncation string\", \"short text\")]\r\n    [InlineData(\"Text longer than truncate length\", 10, \"very long truncation string\", \"Text longe\")]\r\n    [InlineData(\"Text longer than truncate length\", 10, \"trunc\", \"Text trunc\")]\r\n    public void TruncateWithCustomTruncationString(string? input, int length, string? trunactionString, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, trunactionString));\r\n\r\n    [Theory(DisplayName = \"02.2 - TruncateWithFixedLengthTruncator\")]\r\n    [InlineData(null, 10, null)]\r\n    [InlineData(\"\", 10, \"\")]\r\n    [InlineData(\"a\", 1, \"a\")]\r\n    [InlineData(\"Text longer than truncate length\", 10, \"Text long…\")]\r\n    [InlineData(\"Text with length equal to truncate length\", 41, \"Text with length equal to truncate length\")]\r\n    [InlineData(\"Text smaller than truncate length\", 34, \"Text smaller than truncate length\")]\r\n    public void TruncateWithFixedLengthTruncator(string? input, int length, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, Truncator.FixedLength));\r\n\r\n    [Theory(DisplayName = \"03 - TruncateWithFixedNumberOfCharactersTruncator\")]\r\n    [InlineData(null, 10, null)]\r\n    [InlineData(\"\", 10, \"\")]\r\n    [InlineData(\"a\", 1, \"a\")]\r\n    [InlineData(\"Text with more characters than truncate length\", 10, \"Text with m…\")]\r\n    [InlineData(\"Text with number of characters equal to truncate length\", 47, \"Text with number of characters equal to truncate length\")]\r\n    [InlineData(\"Text with less characters than truncate length\", 41, \"Text with less characters than truncate length\")]\r\n    public void TruncateWithFixedNumberOfCharactersTruncator(string? input, int length, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, Truncator.FixedNumberOfCharacters));\r\n\r\n    [Theory(DisplayName = \"04 - TruncateWithFixedNumberOfCharactersTruncator\")]\r\n    [InlineData(null, 10, null)]\r\n    [InlineData(\"\", 10, \"\")]\r\n    [InlineData(\"a\", 1, \"a\")]\r\n    [InlineData(\"Text with more words than truncate length\", 4, \"Text with more words…\")]\r\n    [InlineData(\"Text with number of words equal to truncate length\", 9, \"Text with number of words equal to truncate length\")]\r\n    [InlineData(\"Text with less words than truncate length\", 8, \"Text with less words than truncate length\")]\r\n    [InlineData(\"Words are\\nsplit\\rby\\twhitespace\", 4, \"Words are\\nsplit\\rby…\")]\r\n    public void TruncateWithFixedNumberOfWordsTruncator(string? input, int length, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, Truncator.FixedNumberOfWords));\r\n\r\n    [Theory(DisplayName = \"05 - TruncateWithDynamicLengthAndPreserveWordsTruncator\")]\r\n    [InlineData(null, 10, null)]\r\n    [InlineData(\"\", 10, \"\")]\r\n    [InlineData(\"a\", 1, \"a\")]\r\n    [InlineData(\"Text longer than truncate length\", 10, \"Text…\")]\r\n    [InlineData(\"Text with length equal to truncate length\", 41, \"Text with length equal to truncate length\")]\r\n    [InlineData(\"Text smaller than truncate length\", 34, \"Text smaller than truncate length\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 4, \"…\")]\r\n    [InlineData(\"A Text with delimiter length less than truncate length and the last word fit\", 1, \"…\")]\r\n    [InlineData(\"A Text with delimiter length less than truncate length and the last word fit\", 2, \"A…\")]\r\n    public void TruncateWithDynamicLengthAndPreserveWordsTruncator(string? input, int length, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, Truncator.DynamicLengthAndPreserveWords));\r\n\r\n    [Theory(DisplayName = \"06 - TruncateWithDynamicNumberOfCharactersAndPreserveWordsTruncator\")]\r\n    [InlineData(null, 10, null)]\r\n    [InlineData(\"\", 10, \"\")]\r\n    [InlineData(\"a\", 1, \"a\")]\r\n    [InlineData(\"Text with more characters than truncate length\", 10, \"Text with…\")]\r\n    [InlineData(\"Text with number of characters equal to truncate length\", 47, \"Text with number of characters equal to truncate length\")]\r\n    [InlineData(\"Text with less characters than truncate length\", 41, \"Text with less characters than truncate length\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 4, \"…\")]\r\n    [InlineData(\"A Text with delimiter length less than truncate length and the first word fit\", 2, \"A…\")]\r\n    [InlineData(\"A Text with delimiter length equal to truncate length and the first word fit\", 1, \"…\")]\r\n    public void TruncateWithDynamicNumberOfCharactersAndPreserveWordsTruncator(string? input, int length, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, Truncator.DynamicNumberOfCharactersAndPreserveWords));\r\n\r\n    [Theory(DisplayName = \"07 - TruncateWithTruncationString\")]\r\n    [InlineData(null, 10, \"...\", null)]\r\n    [InlineData(\"\", 10, \"...\", \"\")]\r\n    [InlineData(\"a\", 1, \"...\", \"a\")]\r\n    [InlineData(\"Text longer than truncate length\", 10, \"...\", \"Text lo...\")]\r\n    [InlineData(\"Text with length equal to truncate length\", 41, \"...\", \"Text with length equal to truncate length\")]\r\n    [InlineData(\"Text smaller than truncate length\", 34, \"...\", \"Text smaller than truncate length\")]\r\n    [InlineData(\"Text with delimiter length greater than truncate length truncates to fixed length without truncation string\", 2, \"...\", \"Te\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 4, null, \"Null\")]\r\n    public void TruncateWithTruncationString(string? input, int length, string? truncationString, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, truncationString));\r\n\r\n    [Theory(DisplayName = \"08 - TruncateWithTruncationStringAndFixedLengthTruncator\")]\r\n    [InlineData(null, 10, \"...\", null)]\r\n    [InlineData(\"\", 10, \"...\", \"\")]\r\n    [InlineData(\"a\", 1, \"...\", \"a\")]\r\n    [InlineData(\"Text longer than truncate length\", 10, \"...\", \"Text lo...\")]\r\n    [InlineData(\"Text with different truncation string\", 10, \"---\", \"Text wi---\")]\r\n    [InlineData(\"Text with length equal to truncate length\", 41, \"...\", \"Text with length equal to truncate length\")]\r\n    [InlineData(\"Text smaller than truncate length\", 34, \"...\", \"Text smaller than truncate length\")]\r\n    [InlineData(\"Text with delimiter length greater than truncate length truncates to fixed length without truncation string\", 2, \"...\", \"Te\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 4, null, \"Null\")]\r\n    public void TruncateWithTruncationStringAndFixedLengthTruncator(string? input, int length, string? truncationString, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, truncationString, Truncator.FixedLength));\r\n\r\n    [Theory(DisplayName = \"09 - TruncateWithTruncationStringAndFixedNumberOfCharactersTruncator\")]\r\n    [InlineData(null, 10, \"...\", null)]\r\n    [InlineData(\"\", 10, \"...\", \"\")]\r\n    [InlineData(\"a\", 1, \"...\", \"a\")]\r\n    [InlineData(\"Text with more characters than truncate length\", 10, \"...\", \"Text wit...\")]\r\n    [InlineData(\"Text with different truncation string\", 10, \"---\", \"Text wit---\")]\r\n    [InlineData(\"Text with number of characters equal to truncate length\", 47, \"...\", \"Text with number of characters equal to truncate length\")]\r\n    [InlineData(\"Text with less characters than truncate length\", 41, \"...\", \"Text with less characters than truncate length\")]\r\n    [InlineData(\"Text with delimiter length greater than truncate length truncates to fixed length without truncation string\", 2, \"...\", \"Te\")]\r\n    [InlineData(\"Text     with additional spaces and null truncate string\", 10, null, \"Text     with ad\")]\r\n    [InlineData(\"Text     with additional spaces and empty string as truncate string\", 10, \"\", \"Text     with ad\")]\r\n    public void TruncateWithTruncationStringAndFixedNumberOfCharactersTruncator(string? input, int length, string? truncationString, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, truncationString, Truncator.FixedNumberOfCharacters));\r\n\r\n    [Theory(DisplayName = \"10 - TruncateWithTruncationStringAndFixedNumberOfWordsTruncator\")]\r\n    [InlineData(null, 10, \"...\", null)]\r\n    [InlineData(\"\", 10, \"...\", \"\")]\r\n    [InlineData(\"a\", 1, \"...\", \"a\")]\r\n    [InlineData(\"Text with more words than truncate length\", 4, \"...\", \"Text with more words...\")]\r\n    [InlineData(\"Text with different truncation string\", 4, \"---\", \"Text with different truncation---\")]\r\n    [InlineData(\"Text with number of words equal to truncate length\", 9, \"...\", \"Text with number of words equal to truncate length\")]\r\n    [InlineData(\"Text with less words than truncate length\", 8, \"...\", \"Text with less words than truncate length\")]\r\n    [InlineData(\"Words are\\nsplit\\rby\\twhitespace\", 4, \"...\", \"Words are\\nsplit\\rby...\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 4, null, \"Null truncation string truncates\")]\r\n    public void TruncateWithTruncationStringAndFixedNumberOfWordsTruncator(string? input, int length, string? truncationString, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, truncationString, Truncator.FixedNumberOfWords));\r\n\r\n    [Theory(DisplayName = \"11 - TruncateWithTruncationStringAndDynamicLengthAndPreserveWordsTruncator\")]\r\n    [InlineData(null, 10, \"...\", null)]\r\n    [InlineData(\"\", 10, \"...\", \"\")]\r\n    [InlineData(\"a\", 1, \"...\", \"a\")]\r\n    [InlineData(\"Text longer than truncate length\", 10, \"...\", \"Text...\")]\r\n    [InlineData(\"Text with different truncation string\", 10, \"---\", \"Text---\")]\r\n    [InlineData(\"Text with length equal to truncate length\", 41, \"...\", \"Text with length equal to truncate length\")]\r\n    [InlineData(\"Text smaller than truncate length\", 34, \"...\", \"Text smaller than truncate length\")]\r\n    [InlineData(\"Text with delimiter length greater than truncate length truncates to fixed length without truncation string\", 2, \"...\", \"Te\")]\r\n    [InlineData(\"Text with delimiter length greater than truncate length truncates nothingness without truncation string\", 2, \"\", \"\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 4, \"...\", \"...\")]\r\n    [InlineData(\"Text with delimiter length less than truncate length and the last word fit\", 4, \"...\", \"...\")]\r\n    [InlineData(\"Text with delimiter length less than truncate length and the last word fit\", 5, \"...\", \"...\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 3, null, \"\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 4, null, \"Null\")]\r\n    public void TruncateWithTruncationStringAndDynamicLengthAndPreserveWordsTruncator(string? input, int length, string? truncationString, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, truncationString, Truncator.DynamicLengthAndPreserveWords));\r\n\r\n    [Theory(DisplayName = \"12 - TruncateWithTruncationStringAndDynamicNumberOfCharactersAndPreserveWordsTruncator\")]\r\n    [InlineData(null, 10, \"...\", null)]\r\n    [InlineData(\"\", 10, \"...\", \"\")]\r\n    [InlineData(\"a\", 1, \"...\", \"a\")]\r\n    [InlineData(\"Text with more characters than truncate length\", 10, \"...\", \"Text...\")]\r\n    [InlineData(\"Text with different truncation string\", 10, \"---\", \"Text---\")]\r\n    [InlineData(\"Text with number of characters equal to truncate length\", 47, \"...\", \"Text with number of characters equal to truncate length\")]\r\n    [InlineData(\"Text with less characters than truncate length\", 41, \"...\", \"Text with less characters than truncate length\")]\r\n    [InlineData(\"Text with delimiter length greater than truncate length truncates to fixed length without truncation string\", 2, \"...\", \"\")]\r\n    [InlineData(\"Text     with additional spaces and null truncate string\", 10, null, \"Text     with\")]\r\n    [InlineData(\"Text     with additional spaces and empty string as truncate string\", 10, \"\", \"Text     with\")]\r\n    [InlineData(\"Text with delimiter length greater than truncate length truncates nothingness without truncation string\", 2, \"\", \"\")]\r\n    [InlineData(\"Text delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 4, \"...\", \"...\")]\r\n    [InlineData(\"Text with delimiter length less than truncate length and the last word fit\", 4, \"...\", \"...\")]\r\n    [InlineData(\"Text with delimiter length less than truncate length and the last word fit\", 5, \"...\", \"...\")]\r\n    [InlineData(\"Text with delimiter length less than truncate length and the last word fit\", 7, \"...\", \"Text...\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 2, null, \"\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 3, null, \"\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 4, null, \"Null\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 5, null, \"Null\")]\r\n    public void TruncateWithTruncationStringAndDynamicNumberOfCharactersAndPreserveWordsTruncator(string? input, int length, string? truncationString, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, truncationString, Truncator.DynamicNumberOfCharactersAndPreserveWords));\r\n\r\n    [Theory(DisplayName = \"13 - TruncateWithFixedLengthTruncatorTruncateFromLeft\")]\r\n    [InlineData(null, 10, null)]\r\n    [InlineData(\"\", 10, \"\")]\r\n    [InlineData(\"a\", 1, \"a\")]\r\n    [InlineData(\"Text longer than truncate length\", 10, \"…te length\")]\r\n    [InlineData(\"Text with length equal to truncate length\", 41, \"Text with length equal to truncate length\")]\r\n    [InlineData(\"Text smaller than truncate length\", 34, \"Text smaller than truncate length\")]\r\n    public void TruncateWithFixedLengthTruncatorTruncateFromLeft(string? input, int length, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, Truncator.FixedLength, TruncateFrom.Left));\r\n\r\n    [Theory(DisplayName = \"14 - TruncateWithFixedNumberOfCharactersTruncatorTruncateFromLeft\")]\r\n    [InlineData(null, 10, null)]\r\n    [InlineData(\"\", 10, \"\")]\r\n    [InlineData(\"a\", 1, \"a\")]\r\n    [InlineData(\"Text with more characters than truncate length\", 10, \"…ate length\")]\r\n    [InlineData(\"Text with number of characters equal to truncate length\", 47, \"Text with number of characters equal to truncate length\")]\r\n    [InlineData(\"Text with less characters than truncate length\", 41, \"Text with less characters than truncate length\")]\r\n    [InlineData(\"Text with strange characters ^$(*^ and more ^$**)%  \", 10, \"…rs ^$(*^ and more ^$**)%  \")]\r\n    public void TruncateWithFixedNumberOfCharactersTruncatorTruncateFromLeft(string? input, int length, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, Truncator.FixedNumberOfCharacters, TruncateFrom.Left));\r\n\r\n    [Theory(DisplayName = \"15 - TruncateWithFixedNumberOfWordsTruncatorTruncateFromLeft\")]\r\n    [InlineData(null, 10, null)]\r\n    [InlineData(\"\", 10, \"\")]\r\n    [InlineData(\"a\", 1, \"a\")]\r\n    [InlineData(\"Text with more words than truncate length\", 4, \"…words than truncate length\")]\r\n    [InlineData(\"Text with number of words equal to truncate length\", 9, \"Text with number of words equal to truncate length\")]\r\n    [InlineData(\"Text with less words than truncate length\", 8, \"Text with less words than truncate length\")]\r\n    [InlineData(\"Words are\\nsplit\\rby\\twhitespace\", 4, \"…are\\nsplit\\rby\\twhitespace\")]\r\n    [InlineData(\"Text with whitespace at the end  \", 4, \"…whitespace at the end\")]\r\n    public void TruncateWithFixedNumberOfWordsTruncatorTruncateFromLeft(string? input, int length, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, Truncator.FixedNumberOfWords, TruncateFrom.Left));\r\n\r\n    [Theory(DisplayName = \"16 - TruncateWithDynamicLengthAndPreserveWordsTruncatorTruncateFromLeft\")]\r\n    [InlineData(null, 10, null)]\r\n    [InlineData(\"\", 10, \"\")]\r\n    [InlineData(\"a\", 1, \"a\")]\r\n    [InlineData(\"Text longer than truncate length\", 10, \"…length\")]\r\n    [InlineData(\"Text with length equal to truncate length\", 41, \"Text with length equal to truncate length\")]\r\n    [InlineData(\"Text smaller than truncate length\", 34, \"Text smaller than truncate length\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 4, \"…\")]\r\n    [InlineData(\"A Text with delimiter length less than truncate length and the last word fit\", 5, \"…fit\")]\r\n    [InlineData(\"A Text with delimiter length less than truncate length and the last word fit\", 4, \"…fit\")]\r\n    [InlineData(\"A Text with delimiter length less than truncate length and the last word fit\", 3, \"…\")]\r\n    public void TruncateWithDynamicLengthAndPreserveWordsTruncatorTruncateFromLeft(string? input, int length, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, Truncator.DynamicLengthAndPreserveWords, TruncateFrom.Left));\r\n\r\n    [Theory(DisplayName = \"17 - TruncateWithDynamicNumberOfCharactersAndPreserveWordsTruncatorTruncateFromLeft\")]\r\n    [InlineData(null, 10, null)]\r\n    [InlineData(\"\", 10, \"\")]\r\n    [InlineData(\"a\", 1, \"a\")]\r\n    [InlineData(\"Text with more characters than truncate length\", 10, \"…length\")]\r\n    [InlineData(\"Text with number of characters equal to truncate length\", 47, \"Text with number of characters equal to truncate length\")]\r\n    [InlineData(\"Text with less characters than truncate length\", 41, \"Text with less characters than truncate length\")]\r\n    [InlineData(\"Text with strange characters ^$(*^ and more ^$**)%  \", 10, \"…^$(*^ and more ^$**)%  \")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 4, \"…\")]\r\n    [InlineData(\"A Text with delimiter length less than truncate length and the last word fit\", 4, \"…fit\")]\r\n    [InlineData(\"A Text with delimiter length less than truncate length and the last word fit\", 3, \"…\")]\r\n    public void TruncateWithDynamicNumberOfCharactersAndPreserveWordsTruncatorTruncateFromLeft(string? input, int length, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, Truncator.DynamicNumberOfCharactersAndPreserveWords, TruncateFrom.Left));\r\n\r\n    [Theory(DisplayName = \"18 - TruncateWithTruncationStringAndFixedLengthTruncatorTruncateFromLeft\")]\r\n    [InlineData(null, 10, \"...\", null)]\r\n    [InlineData(\"\", 10, \"...\", \"\")]\r\n    [InlineData(\"a\", 1, \"...\", \"a\")]\r\n    [InlineData(\"Text longer than truncate length\", 10, \"...\", \"... length\")]\r\n    [InlineData(\"Text with different truncation string\", 10, \"---\", \"--- string\")]\r\n    [InlineData(\"Text with length equal to truncate length\", 41, \"...\", \"Text with length equal to truncate length\")]\r\n    [InlineData(\"Text smaller than truncate length\", 34, \"...\", \"Text smaller than truncate length\")]\r\n    [InlineData(\"Text with delimiter length greater than truncate length truncates to fixed length without truncation string\", 2, \"...\", \"ng\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 4, null, \"ring\")]\r\n    public void TruncateWithTruncationStringAndFixedLengthTruncatorTruncateFromLeft(string? input, int length, string? truncationString, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, truncationString, Truncator.FixedLength, TruncateFrom.Left));\r\n\r\n    [Theory(DisplayName = \"19 - TruncateWithTruncationStringAndFixedNumberOfCharactersTruncatorTruncateFromLeft\")]\r\n    [InlineData(null, 10, \"...\", null)]\r\n    [InlineData(\"\", 10, \"...\", \"\")]\r\n    [InlineData(\"a\", 1, \"...\", \"a\")]\r\n    [InlineData(\"Text with more characters than truncate length\", 10, \"...\", \"...e length\")]\r\n    [InlineData(\"Text with different truncation string\", 10, \"---\", \"---n string\")]\r\n    [InlineData(\"Text with number of characters equal to truncate length\", 47, \"...\", \"Text with number of characters equal to truncate length\")]\r\n    [InlineData(\"Text with less characters than truncate length\", 41, \"...\", \"Text with less characters than truncate length\")]\r\n    [InlineData(\"Text with delimiter length greater than truncate length truncates to fixed number of characters without truncation string\", 2, \"...\", \"ng\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 4, null, \"ring\")]\r\n    public void TruncateWithTruncationStringAndFixedNumberOfCharactersTruncatorTruncateFromLeft(string? input, int length, string? truncationString, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, truncationString, Truncator.FixedNumberOfCharacters, TruncateFrom.Left));\r\n\r\n    [Theory(DisplayName = \"20 - TruncateWithTruncationStringAndFixedNumberOfWordsTruncatorTruncateFromLeft\")]\r\n    [InlineData(null, 10, \"...\", null)]\r\n    [InlineData(\"\", 10, \"...\", \"\")]\r\n    [InlineData(\"a\", 1, \"...\", \"a\")]\r\n    [InlineData(\"Text with more words than truncate length\", 4, \"...\", \"...words than truncate length\")]\r\n    [InlineData(\"Text with different truncation string\", 4, \"---\", \"---with different truncation string\")]\r\n    [InlineData(\"Text with number of words equal to truncate length\", 9, \"...\", \"Text with number of words equal to truncate length\")]\r\n    [InlineData(\"Text with less words than truncate length\", 8, \"...\", \"Text with less words than truncate length\")]\r\n    [InlineData(\"Words are\\nsplit\\rby\\twhitespace\", 4, \"...\", \"...are\\nsplit\\rby\\twhitespace\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 4, null, \"length without truncation string\")]\r\n    [InlineData(\"Text with whitespace at the end  \", 4, \"...\", \"...whitespace at the end\")]\r\n    public void TruncateWithTruncationStringAndFixedNumberOfWordsTruncatorTruncateFromLeft(string? input, int length, string? truncationString, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, truncationString, Truncator.FixedNumberOfWords, TruncateFrom.Left));\r\n\r\n    [Theory(DisplayName = \"20 - TruncateWithTruncationStringAndDynamicLengthAndPreserveWordsTruncatorTruncateFromLeft\")]\r\n    [InlineData(null, 10, \"...\", null)]\r\n    [InlineData(\"\", 10, \"...\", \"\")]\r\n    [InlineData(\"a\", 1, \"...\", \"a\")]\r\n    [InlineData(\"Text longer than truncate length\", 10, \"...\", \"...length\")]\r\n    [InlineData(\"Text with different truncation string\", 10, \"---\", \"---string\")]\r\n    [InlineData(\"Text with length equal to truncate length\", 41, \"...\", \"Text with length equal to truncate length\")]\r\n    [InlineData(\"Text smaller than truncate length\", 34, \"...\", \"Text smaller than truncate length\")]\r\n    [InlineData(\"Text with delimiter length greater than truncate length truncates nothingness without truncation string\", 2, \"\", \"\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 4, \"...\", \"...\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 5, \"...\", \"...\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 6, \"...\", \"...\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 7, \"...\", \"...\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 9, \"...\", \"...alone\")]\r\n    [InlineData(\"A Text with delimiter length less than truncate length and the last word fit\", 4, \"...\", \"...\")]\r\n    [InlineData(\"A Text with delimiter length less than truncate length and the last word fit\", 3, \"...\", \"...\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 4, null, \"\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 6, null, \"string\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 7, null, \"string\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 10, null, \"string\")]\r\n    public void TruncateWithTruncationStringAndDynamicLengthAndPreserveWordsTruncatorTruncateFromLeft(string? input, int length, string? truncationString, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, truncationString, Truncator.DynamicLengthAndPreserveWords, TruncateFrom.Left));\r\n\r\n    [Theory(DisplayName = \"21 - TruncateWithTruncationStringAndDynamicNumberOfCharactersAndPreserveWordsTruncatorTruncateFromLeft\")]\r\n    [InlineData(null, 10, \"...\", null)]\r\n    [InlineData(\"\", 10, \"...\", \"\")]\r\n    [InlineData(\"a\", 1, \"...\", \"a\")]\r\n    [InlineData(\"Text with more characters than truncate length\", 10, \"...\", \"...length\")]\r\n    [InlineData(\"Text with different truncation string\", 10, \"---\", \"---string\")]\r\n    [InlineData(\"Text with number of characters equal to truncate length\", 47, \"...\", \"Text with number of characters equal to truncate length\")]\r\n    [InlineData(\"Text with less characters than truncate length\", 41, \"...\", \"Text with less characters than truncate length\")]\r\n    [InlineData(\"Text with delimiter length greater than truncate length truncates nothingness without truncation string\", 2, \"\", \"\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 2, \"...\", \"\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 4, \"...\", \"...\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 5, \"...\", \"...\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 6, \"...\", \"...\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 8, \"...\", \"...alone\")]\r\n    [InlineData(\"Textual with delimiter length less than truncate length and starting word longer than truncate length to truncation string alone\", 9, \"...\", \"...alone\")]\r\n    [InlineData(\"A Text with delimiter length less than truncate length and the last word fit\", 2, \"...\", \"\")]\r\n    [InlineData(\"A Text with delimiter length less than truncate length and the last word fit\", 4, \".....\", \"fit\")]\r\n    [InlineData(\"A Text with delimiter length less than truncate length and the last word fit\", 5, \".....\", \".....\")]\r\n    [InlineData(\"A Text with delimiter length less than truncate length and the last word fit\", 6, \".....\", \".....\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 4, null, \"\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 6, null, \"string\")]\r\n    [InlineData(\"Null truncation string truncates to truncate length without truncation string\", 7, null, \"string\")]\r\n    public void TruncateWithTruncationStringAndDynamicNumberOfCharactersAndPreserveWordsTruncatorTruncateFromLeft(string? input, int length, string? truncationString, string? expectedOutput) =>\r\n        Assert.Equal(expectedOutput, input.Truncate(length, truncationString, Truncator.DynamicNumberOfCharactersAndPreserveWords, TruncateFrom.Left));\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/TupleizeTests.cs",
    "content": "// ReSharper disable IdentifierTypo\r\n// ReSharper disable StringLiteralTypo\r\n\r\npublic class TupleizeTests\r\n{\r\n    [Theory]\r\n    [InlineData(1, \"single\")]\r\n    [InlineData(2, \"double\")]\r\n    [InlineData(3, \"triple\")]\r\n    [InlineData(4, \"quadruple\")]\r\n    [InlineData(5, \"quintuple\")]\r\n    [InlineData(6, \"sextuple\")]\r\n    [InlineData(7, \"septuple\")]\r\n    [InlineData(8, \"octuple\")]\r\n    [InlineData(9, \"nonuple\")]\r\n    [InlineData(10, \"decuple\")]\r\n    [InlineData(100, \"centuple\")]\r\n    [InlineData(1000, \"milluple\")]\r\n    public void Given_int_with_named_tuple_gives_correct_result(int n, string expected) =>\r\n        Assert.Equal(expected, n.Tupleize());\r\n\r\n    [Theory]\r\n    [InlineData(0)]\r\n    [InlineData(-1)]\r\n    [InlineData(int.MinValue)]\r\n    [InlineData(int.MaxValue)]\r\n    public void Given_other_number_returns_n_tuple(int n) =>\r\n        Assert.Equal($\"{n}-tuple\", n.Tupleize());\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/UseCultureAttribute.cs",
    "content": "using System.Reflection;\r\n\r\n\r\n\r\n\r\n/// <summary>\r\n/// Apply this attribute to your test method to replace the\r\n/// <see cref=\"Thread.CurrentThread\" /> <see cref=\"CultureInfo.CurrentCulture\" /> and\r\n/// <see cref=\"CultureInfo.CurrentUICulture\" /> with another culture.\r\n/// </summary>\r\n/// <remarks>\r\n/// Replaces the culture and UI culture of the current thread with\r\n/// <paramref name=\"culture\" />\r\n/// </remarks>\r\n/// <remarks>\r\n/// <para>\r\n/// This constructor overload uses <paramref name=\"culture\" /> for both\r\n/// <see cref=\"CultureInfo.CurrentCulture\" /> and <see cref=\"CultureInfo.CurrentUICulture\" />.\r\n/// </para>\r\n/// </remarks>\r\n[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]\r\npublic class UseCultureAttribute(string culture) : BeforeAfterTestAttribute\r\n{\r\n    readonly Lazy<CultureInfo> culture = new(() => new CultureInfo(culture));\r\n    CultureInfo? originalCulture;\r\n    CultureInfo? originalUICulture;\r\n\r\n    public CultureInfo Culture => culture.Value;\r\n\r\n    /// <summary>\r\n    /// Stores the current <see cref=\"CultureInfo.CurrentCulture\" />\r\n    /// <see cref=\"CultureInfo.CurrentCulture\" /> and <see cref=\"CultureInfo.CurrentUICulture\" />\r\n    /// and replaces them with the new cultures defined in the constructor.\r\n    /// </summary>\r\n    /// <param name=\"methodUnderTest\">The method under test</param>\r\n    public override void Before(MethodInfo methodUnderTest, IXunitTest test)\r\n    {\r\n        originalCulture = CultureInfo.CurrentCulture;\r\n        originalUICulture = CultureInfo.CurrentUICulture;\r\n\r\n        CultureInfo.CurrentCulture = Culture;\r\n        CultureInfo.CurrentUICulture = Culture;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Restores the original <see cref=\"CultureInfo.CurrentCulture\" /> and\r\n    /// <see cref=\"CultureInfo.CurrentUICulture\" /> to <see cref=\"CultureInfo.CurrentCulture\" />\r\n    /// </summary>\r\n    /// <param name=\"methodUnderTest\">The method under test</param>\r\n    public override void After(MethodInfo methodUnderTest, IXunitTest test)\r\n    {\r\n        CultureInfo.CurrentCulture = originalCulture!;\r\n        CultureInfo.CurrentUICulture = originalUICulture!;\r\n    }\r\n}"
  },
  {
    "path": "tests/Humanizer.Tests/WordsToNumberTests.cs",
    "content": "namespace Humanizer.Tests;\r\n\r\n[UseCulture(\"en-US\")]\r\npublic class WordsToNumberTests_US\r\n{\r\n    [Theory]\r\n    [InlineData(\"zero\", 0)]\r\n    [InlineData(\"one\", 1)]\r\n    [InlineData(\"minus five\", -5)]\r\n    [InlineData(\"eleven\", 11)]\r\n    [InlineData(\"ninety five\", 95)]\r\n    [InlineData(\"hundred five\", 105)]\r\n    [InlineData(\"one hundred ninety six\", 196)]\r\n    [InlineData(\"minus one hundred and five\", -105)]\r\n    [InlineData(\"seventeenth\", 17)]\r\n    [InlineData(\"thirtieth\", 30)]\r\n    [InlineData(\"twenty-seventh\", 27)]\r\n    [InlineData(\"thirty-first\", 31)]\r\n    [InlineData(\"minus twenty-first\", -21)]\r\n    [InlineData(\"two thousand twenty three\", 2023)]\r\n    [InlineData(\"one million two hundred thirty four thousand five hundred sixty seven\", 1234567)]\r\n    [InlineData(\"one hundred and third\", 103)]\r\n    [InlineData(\"two hundred and first\", 201)]\r\n    [InlineData(\"five thousand and ninth\", 5009)]\r\n    [InlineData(\"17th\", 17)]\r\n    [InlineData(\"31st\", 31)]\r\n    [InlineData(\"100th\", 100)]\r\n    [InlineData(\"203rd\", 203)]\r\n    [InlineData(\"minus 21st\", -21)]\r\n    [InlineData(\"negative five\", -5)]\r\n    [InlineData(\"negative one hundred and five\", -105)]\r\n    [InlineData(\"negative twenty-first\", -21)]\r\n    public void ToNumber_US(string words, int expectedNumber) => Assert.Equal(expectedNumber, words.ToNumber(CultureInfo.CurrentCulture));\r\n\r\n    [Theory]\r\n    [InlineData(\"zero\", 0, null)]\r\n    [InlineData(\"one\", 1, null)]\r\n    [InlineData(\"minus five\", -5, null)]\r\n    [InlineData(\"eleven\", 11, null)]\r\n    [InlineData(\"ninety five\", 95, null)]\r\n    [InlineData(\"hundred five\", 105, null)]\r\n    [InlineData(\"one hundred ninety six\", 196, null)]\r\n    [InlineData(\"minus one hundred and five\", -105, null)]\r\n    [InlineData(\"seventeenth\", 17, null)]\r\n    [InlineData(\"thirtieth\", 30, null)]\r\n    [InlineData(\"twenty-seventh\", 27, null)]\r\n    [InlineData(\"thirty-first\", 31, null)]\r\n    [InlineData(\"minus twenty-first\", -21, null)]\r\n    [InlineData(\"two thousand twenty three\", 2023, null)]\r\n    [InlineData(\"one million two hundred thirty four thousand five hundred sixty seven\", 1234567, null)]\r\n    [InlineData(\"one hundred and third\", 103, null)]\r\n    [InlineData(\"two hundred and first\", 201, null)]\r\n    [InlineData(\"five thousand and ninth\", 5009, null)]\r\n    [InlineData(\"17th\", 17, null)]\r\n    [InlineData(\"31st\", 31, null)]\r\n    [InlineData(\"100th\", 100, null)]\r\n    [InlineData(\"203rd\", 203, null)]\r\n    [InlineData(\"minus 21st\", -21, null)]\r\n    [InlineData(\"negative five\", -5, null)]\r\n    [InlineData(\"negative one hundred and five\", -105, null)]\r\n    [InlineData(\"negative twenty-first\", -21, null)]\r\n    public void TryToNumber_ValidInput_US(string words, int expectedNumber, string? expectedUnrecognizedWord)\r\n    {\r\n        Assert.True(words.TryToNumber(out var parsedNumber, CultureInfo.CurrentCulture, out var unrecognizedWord));\r\n        Assert.Equal(unrecognizedWord, expectedUnrecognizedWord);\r\n        Assert.Equal(expectedNumber, parsedNumber);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(\"twenty nine hello\", 0, \"hello\")]\r\n    [InlineData(\"mister three\", 0, \"mister\")]\r\n    [InlineData(\"tenn\", 0, \"tenn\")]\r\n    [InlineData(\"twenty sveen\", 0, \"sveen\")]\r\n    [InlineData(\"minus fift five\", 0, \"fift\")]\r\n    [InlineData(\"sixty two j\", 0, \"j\")]\r\n    [InlineData(\"two hundred , ninetyy sevennn\", 0, \"ninetyy\")]\r\n    [InlineData(\"invalidinput\", 0, \"invalidinput\")]\r\n    [InlineData(\"30rmd\", 0, \"30rmd\")]\r\n    [InlineData(\"negative energy\", 0, \"energy\")]\r\n    public void TryToNumber_InvalidInput_US(string words, int expectedNumber, string? expectedUnrecognizedWord)\r\n    {\r\n        Assert.False(words.TryToNumber(out var parsedNumber, CultureInfo.CurrentCulture, out var unrecognizedWord));\r\n        Assert.Equal(unrecognizedWord, expectedUnrecognizedWord);\r\n        Assert.Equal(expectedNumber, parsedNumber);\r\n    }\r\n\r\n}\r\n\r\n[UseCulture(\"en-GB\")]\r\npublic class WordsToNumberTests_GB\r\n{\r\n    [Theory]\r\n    [InlineData(\"zero\", 0, null)]\r\n    [InlineData(\"one\", 1, null)]\r\n    [InlineData(\"minus five\", -5, null)]\r\n    [InlineData(\"eleven\", 11, null)]\r\n    [InlineData(\"ninety five\", 95, null)]\r\n    [InlineData(\"hundred five\", 105, null)]\r\n    [InlineData(\"one hundred ninety six\", 196, null)]\r\n    [InlineData(\"minus one hundred and five\", -105, null)]\r\n    [InlineData(\"seventeenth\", 17, null)]\r\n    [InlineData(\"thirtieth\", 30, null)]\r\n    [InlineData(\"twenty-seventh\", 27, null)]\r\n    [InlineData(\"thirty-first\", 31, null)]\r\n    [InlineData(\"minus twenty-first\", -21, null)]\r\n    [InlineData(\"two thousand twenty three\", 2023, null)]\r\n    [InlineData(\"one million two hundred thirty four thousand five hundred sixty seven\", 1234567, null)]\r\n    [InlineData(\"one hundred and third\", 103, null)]\r\n    [InlineData(\"two hundred and first\", 201, null)]\r\n    [InlineData(\"five thousand and ninth\", 5009, null)]\r\n    [InlineData(\"17th\", 17, null)]\r\n    [InlineData(\"31st\", 31, null)]\r\n    [InlineData(\"100th\", 100, null)]\r\n    [InlineData(\"203rd\", 203, null)]\r\n    [InlineData(\"minus 21st\", -21, null)]\r\n    [InlineData(\"negative five\", -5, null)]\r\n    [InlineData(\"negative one hundred and five\", -105, null)]\r\n    [InlineData(\"negative twenty-first\", -21, null)]\r\n    public void TryToNumber_ValidInput_GB(string words, int expectedNumber, string? expectedUnrecognizedWord)\r\n    {\r\n        Assert.True(words.TryToNumber(out var parsedNumber, CultureInfo.CurrentCulture, out var unrecognizedWord));\r\n        Assert.Equal(unrecognizedWord, expectedUnrecognizedWord);\r\n        Assert.Equal(expectedNumber, parsedNumber);\r\n    }\r\n\r\n    [Theory]\r\n    [InlineData(\"twenty nine hello\", 0, \"hello\")]\r\n    [InlineData(\"mister three\", 0, \"mister\")]\r\n    [InlineData(\"tenn\", 0, \"tenn\")]\r\n    [InlineData(\"twenty sveen\", 0, \"sveen\")]\r\n    [InlineData(\"minus fift five\", 0, \"fift\")]\r\n    [InlineData(\"sixty two j\", 0, \"j\")]\r\n    [InlineData(\"two hundred , ninetyy sevennn\", 0, \"ninetyy\")]\r\n    [InlineData(\"invalidinput\", 0, \"invalidinput\")]\r\n    [InlineData(\"30rmd\", 0, \"30rmd\")]\r\n    [InlineData(\"negative energy\", 0, \"energy\")]\r\n    public void TryToNumber_InvalidInput_GB(string words, int expectedNumber, string? expectedUnrecognizedWord)\r\n    {\r\n        Assert.False(words.TryToNumber(out var parsedNumber, CultureInfo.CurrentCulture, out var unrecognizedWord));\r\n        Assert.Equal(unrecognizedWord, expectedUnrecognizedWord);\r\n        Assert.Equal(expectedNumber, parsedNumber);\r\n    }\r\n\r\n}\r\npublic class WordsToNumberTests_NonEnglish\r\n{\r\n    [Theory]\r\n    [InlineData(\"es-ES\", \"veinte\")]\r\n    [InlineData(\"fr-FR\", \"vingt\")]\r\n    public void ThrowsForNonEnglishWords(string cultureName, string word)\r\n    {\r\n        var culture = new CultureInfo(cultureName);\r\n        var ex = Assert.Throws<NotSupportedException>(() =>\r\n            word.ToNumber(culture));\r\n\r\n        Assert.Contains($\"'{culture.TwoLetterISOLanguageName}'\", ex.Message);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/Humanizer.Tests/testconfig.json",
    "content": "﻿{\n  \"xUnit\": {\n    \"diagnosticMessages\": true,\n    \"methodDisplay\": \"method\",\n    \"parallelizeAssembly\": true,\n    \"parallelizeTestCollections\": false,\n    \"showLiveOutput\": true\n  },\n  \"codeCoverage\": {\n    \"Configuration\": {\n      \"Format\": \"cobertura\",\n      \"CodeCoverage\": {\n        \"Attributes\": {\n          \"Exclude\": [\n            \"^System\\\\.Diagnostics\\\\.DebuggerHiddenAttribute$\",\n            \"^System\\\\.Diagnostics\\\\.DebuggerNonUserCodeAttribute$\",\n            \"^System\\\\.CodeDom\\\\.Compiler\\\\.GeneratedCodeAttribute$\",\n            \"^System\\\\.Diagnostics\\\\.CodeAnalysis\\\\.ExcludeFromCodeCoverageAttribute$\"\n          ]\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "tests/fixtures/PackageSmoke/AnalyzerProbe.cs",
    "content": "namespace Humanizer.Bytes\r\n{\r\n    public class StubFormatter\r\n    {\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/fixtures/PackageSmoke/BlazorConsumer/App.razor",
    "content": "<h1>Hello</h1>\n"
  },
  {
    "path": "tests/fixtures/PackageSmoke/BlazorConsumer/Consumer.csproj.template",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>__TARGET_FRAMEWORK__</TargetFramework>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <Nullable>enable</Nullable>\r\n  </PropertyGroup>\r\n__PACKAGE_REFERENCES__\r\n</Project>\r\n"
  },
  {
    "path": "tests/fixtures/PackageSmoke/BlazorConsumer/Program.cs",
    "content": "using Consumer;\r\nusing Humanizer;\r\nusing System.Globalization;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddRazorComponents();\r\n\r\nvar app = builder.Build();\r\n\r\nif (args.Contains(\"--humanizer-smoke-exit\", StringComparer.Ordinal))\r\n{\r\n    Console.WriteLine(2.ToWords(new CultureInfo(\"fr\")));\r\n    return;\r\n}\r\n\r\napp.MapRazorComponents<App>();\r\napp.Run();\r\n"
  },
  {
    "path": "tests/fixtures/PackageSmoke/ConsoleConsumer/Consumer.csproj.template",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\r\n  <PropertyGroup>\r\n    <OutputType>Exe</OutputType>\r\n    <TargetFramework>__TARGET_FRAMEWORK__</TargetFramework>\r\n    <ImplicitUsings Condition=\"'$(TargetFramework)' == 'net48'\">disable</ImplicitUsings>\r\n    <ImplicitUsings Condition=\"'$(TargetFramework)' != 'net48'\">enable</ImplicitUsings>\r\n    <Nullable Condition=\"'$(TargetFramework)' == 'net48'\">disable</Nullable>\r\n    <Nullable Condition=\"'$(TargetFramework)' != 'net48'\">enable</Nullable>\r\n  </PropertyGroup>\r\n__PACKAGE_REFERENCES__\r\n</Project>\r\n"
  },
  {
    "path": "tests/fixtures/PackageSmoke/ConsoleConsumer/Program.cs",
    "content": "using System;\r\nusing Humanizer;\r\nusing System.Globalization;\r\n\r\npublic static class Program\r\n{\r\n    public static void Main()\r\n    {\r\n        Console.WriteLine(2.ToWords(new CultureInfo(\"fr\")));\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/fixtures/PackageSmoke/WebApiConsumer/Consumer.csproj.template",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>__TARGET_FRAMEWORK__</TargetFramework>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <Nullable>enable</Nullable>\r\n  </PropertyGroup>\r\n__PACKAGE_REFERENCES__\r\n</Project>\r\n"
  },
  {
    "path": "tests/fixtures/PackageSmoke/WebApiConsumer/Program.cs",
    "content": "using Humanizer;\r\nusing System.Globalization;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nvar app = builder.Build();\r\n\r\nif (args.Contains(\"--humanizer-smoke-exit\", StringComparer.Ordinal))\r\n{\r\n    Console.WriteLine(2.ToWords(new CultureInfo(\"fr\")));\r\n    return;\r\n}\r\n\r\napp.MapGet(\"/\", () => \"ok\");\r\napp.Run();\r\n"
  },
  {
    "path": "tests/fixtures/WapProjSmoke/EntryPointApp/EntryPointApp.csproj.template",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\r\n  <PropertyGroup>\r\n    <OutputType>WinExe</OutputType>\r\n    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <Nullable>enable</Nullable>\r\n    <RuntimeIdentifier>win-x64</RuntimeIdentifier>\r\n    <SelfContained>true</SelfContained>\r\n    <RestorePackagesPath>__PACKAGES_PATH__</RestorePackagesPath>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Humanizer\" Version=\"__PACKAGE_VERSION__\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "tests/fixtures/WapProjSmoke/EntryPointApp/Program.cs",
    "content": "using Humanizer;\r\nusing System.Globalization;\r\n\r\nConsole.WriteLine(2.ToWords(new CultureInfo(\"fr\")));\r\n"
  },
  {
    "path": "tests/fixtures/WapProjSmoke/Package/Package.appxmanifest",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\" xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\" xmlns:rescap=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities\" IgnorableNamespaces=\"uap rescap\">\n  <Identity Name=\"Humanizer.WapProbe\" Publisher=\"CN=Humanizer\" Version=\"1.0.0.0\" />\n  <Properties>\n    <DisplayName>HumanizerWapProbe</DisplayName>\n    <PublisherDisplayName>Humanizer</PublisherDisplayName>\n    <Logo>Images\\StoreLogo.png</Logo>\n  </Properties>\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.0.0\" MaxVersionTested=\"10.0.0.0\" />\n    <TargetDeviceFamily Name=\"Windows.Desktop\" MinVersion=\"10.0.17763.0\" MaxVersionTested=\"10.0.19041.0\" />\n  </Dependencies>\n  <Resources>\n    <Resource Language=\"en-us\" />\n  </Resources>\n  <Applications>\n    <Application Id=\"App\" Executable=\"EntryPointApp\\EntryPointApp.exe\" EntryPoint=\"Windows.FullTrustApplication\">\n      <uap:VisualElements DisplayName=\"HumanizerWapProbe\" Description=\"HumanizerWapProbe\" BackgroundColor=\"transparent\" Square150x150Logo=\"Images\\Square150x150Logo.png\" Square44x44Logo=\"Images\\Square44x44Logo.png\">\n        <uap:DefaultTile Wide310x150Logo=\"Images\\Wide310x150Logo.png\" />\n        <uap:SplashScreen Image=\"Images\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n    <rescap:Capability Name=\"runFullTrust\" />\n  </Capabilities>\n</Package>\n"
  },
  {
    "path": "tests/fixtures/WapProjSmoke/Package/Package.wapproj.template",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup Condition=\"'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '15.0'\">\r\n    <VisualStudioVersion>15.0</VisualStudioVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup>\r\n    <WapProjPath Condition=\"'$(WapProjPath)'==''\">$(MSBuildExtensionsPath)\\Microsoft\\DesktopBridge\\</WapProjPath>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(WapProjPath)\\Microsoft.DesktopBridge.props\" />\r\n  <PropertyGroup>\r\n    <ProjectGuid>{5A6E0905-0F24-4E09-8A57-4E16E7E7E0AA}</ProjectGuid>\r\n    <TargetPlatformVersion>10.0.19041.0</TargetPlatformVersion>\r\n    <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>\r\n    <DefaultLanguage>en-US</DefaultLanguage>\r\n    <AppxPackageSigningEnabled>false</AppxPackageSigningEnabled>\r\n    <EntryPointProjectUniqueName>..\\EntryPointApp\\EntryPointApp.csproj</EntryPointProjectUniqueName>\r\n    <DebuggerType>CoreClr</DebuggerType>\r\n    <PackageOutputGroups>@(PackageOutputGroups);__GetPublishItems</PackageOutputGroups>\r\n    <RestorePackagesPath>__PACKAGES_PATH__</RestorePackagesPath>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <AppxManifest Include=\"Package.appxmanifest\">\r\n      <SubType>Designer</SubType>\r\n    </AppxManifest>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"Images\\SplashScreen.scale-200.png\" />\r\n    <Content Include=\"Images\\LockScreenLogo.scale-200.png\" />\r\n    <Content Include=\"Images\\Square150x150Logo.scale-200.png\" />\r\n    <Content Include=\"Images\\Square44x44Logo.scale-200.png\" />\r\n    <Content Include=\"Images\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\r\n    <Content Include=\"Images\\StoreLogo.png\" />\r\n    <Content Include=\"Images\\Wide310x150Logo.scale-200.png\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\EntryPointApp\\EntryPointApp.csproj\" SkipGetTargetFrameworkProperties=\"true\" Properties=\"RuntimeIdentifier=win-x64;SelfContained=true;RestorePackagesPath=__PACKAGES_PATH__\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(WapProjPath)\\Microsoft.DesktopBridge.targets\" />\r\n  <Target Name=\"_ValidateAppReferenceItems\" />\r\n  <Target Name=\"_FixEntryPoint\" AfterTargets=\"_ConvertItems\">\r\n    <PropertyGroup>\r\n      <EntryPointExe>EntryPointApp\\EntryPointApp.exe</EntryPointExe>\r\n    </PropertyGroup>\r\n  </Target>\r\n  <Target Name=\"PublishReferences\" BeforeTargets=\"ExpandProjectReferences\">\r\n    <MSBuild Projects=\"@(ProjectReference->'%(FullPath)')\" BuildInParallel=\"$(BuildInParallel)\" Targets=\"Publish\" Properties=\"RuntimeIdentifier=win-x64;SelfContained=true;RestorePackagesPath=__PACKAGES_PATH__\" />\r\n  </Target>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.Windows.SDK.BuildTools\" Version=\"10.0.26100.4948\" PrivateAssets=\"all\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "tests/verify-packages.ps1",
    "content": "<#\r\n.SYNOPSIS\r\n    Verifies Humanizer NuGet packages structure, dependencies, and SDK compatibility.\r\n\r\n.DESCRIPTION\r\n    This script validates that Humanizer NuGet packages are correctly built and can be restored\r\n    across multiple .NET SDK versions. It performs the following checks:\r\n    \r\n    1. Verifies all expected packages exist (main metapackage, core package, and satellite packages)\r\n    2. Tests package restoration and build on multiple .NET SDK versions (8, 9, 10, and 11)\r\n       - Creates isolated test environments with global.json for each SDK version\r\n       - Validates that packages can be restored and built successfully\r\n    3. Verifies that the main Humanizer metapackage includes all satellite packages as dependencies\r\n    4. Runs package smoke tests for metapackage and core-plus-language consumer scenarios\r\n    \r\n    The script is designed to run in CI/CD pipelines (Azure DevOps) and provides detailed\r\n    logging with Azure DevOps-specific formatting.\r\n\r\n.PARAMETER PackageVersion\r\n    The version of the Humanizer packages to verify (e.g., \"3.0.0-rc.14\").\r\n\r\n.PARAMETER PackagesDirectory\r\n    The directory containing the built NuGet packages (.nupkg files).\r\n\r\n.PARAMETER MinimumPassingSdkVersion\r\n    Optional minimum .NET SDK version (e.g., \"9.0.200\") that is expected to restore packages successfully.\r\n    SDK targets with versions lower than this threshold are treated as expected failures (the script reports\r\n    success when they fail and failure when they succeed). The default value is 9.0.200.\r\n\r\n.EXAMPLE\r\n    .\\tests\\verify-packages.ps1 -PackageVersion \"3.0.0\" -PackagesDirectory \".\\artifacts\\packages\"\r\n\r\n.NOTES\r\n    - The script requires .NET SDK 8, 9, 10, and/or 11 to be installed\r\n    - SDKs that are not installed will be skipped with a warning\r\n    - Package smoke tests cover net8.0, net9.0, net10.0, net11.0, and net48 across console, Web API, and Blazor hosts\r\n    - WAP project smoke testing is Windows-only and opt-in via -IncludeWapProjSmokeTest\r\n#>\r\n\r\nparam(\r\n    [Parameter(Mandatory=$true)]\r\n    [string]$PackageVersion,\r\n\r\n    [Parameter(Mandatory=$true)]\r\n    [string]$PackagesDirectory,\r\n\r\n    [string]$MinimumPassingSdkVersion = \"9.0.200\",\r\n\r\n    [switch]$IncludeWapProjSmokeTest\r\n)\r\n\r\n$ErrorActionPreference = \"Stop\"\r\n\r\n$script:AzureDevOpsErrorLogged = $false\r\n$script:AzureDevOpsWarningLogged = $false\r\n\r\nfunction ConvertTo-AzureDevOpsCommandValue {\r\n    param([string]$Value)\r\n\r\n    if ([string]::IsNullOrEmpty($Value)) {\r\n        return $Value\r\n    }\r\n\r\n    return $Value.Replace('%', '%25').Replace(\"`r\", '%0D').Replace(\"`n\", '%0A').Replace(';', '%3B').Replace(']', '%5D')\r\n}\r\n\r\nfunction Write-AzureDevOpsSection {\r\n    param([string]$Message)\r\n    Write-Host \"##[section]$Message\"\r\n}\r\n\r\nfunction Write-AzureDevOpsError {\r\n    param([string]$Message)\r\n    if (-not [string]::IsNullOrEmpty($Message)) {\r\n        $escaped = ConvertTo-AzureDevOpsCommandValue $Message\r\n        Write-Host \"##vso[task.logissue type=error;]$escaped\"\r\n        $script:AzureDevOpsErrorLogged = $true\r\n    }\r\n}\r\n\r\nfunction Write-AzureDevOpsWarning {\r\n    param([string]$Message)\r\n    if (-not [string]::IsNullOrEmpty($Message)) {\r\n        $escaped = ConvertTo-AzureDevOpsCommandValue $Message\r\n        Write-Host \"##vso[task.logissue type=warning;]$escaped\"\r\n        $script:AzureDevOpsWarningLogged = $true\r\n    }\r\n}\r\n\r\nfunction Invoke-CommandText {\r\n    param(\r\n        [Parameter(Mandatory = $true)][string]$FilePath,\r\n        [string[]]$ArgumentList = @(),\r\n        [string]$WorkingDirectory\r\n    )\r\n\r\n    $currentLocation = Get-Location\r\n    try {\r\n        if ($WorkingDirectory) {\r\n            Set-Location $WorkingDirectory\r\n        }\r\n\r\n        $output = & $FilePath @ArgumentList 2>&1 | ForEach-Object { $_.ToString() }\r\n        return [PSCustomObject]@{\r\n            ExitCode = $LASTEXITCODE\r\n            Output   = ($output -join \"`n\")\r\n        }\r\n    } finally {\r\n        if ($WorkingDirectory) {\r\n            Set-Location $currentLocation\r\n        }\r\n    }\r\n}\r\n\r\nfunction Get-NormalizedVersionString {\r\n    param([string]$Version)\r\n\r\n    if ([string]::IsNullOrWhiteSpace($Version)) {\r\n        return $Version\r\n    }\r\n\r\n    $prefix = $Version.Split('-')[0].Split('+')[0]\r\n    $segments = $prefix.Split('.')\r\n    if ($segments.Length -le 3) {\r\n        return $prefix\r\n    }\r\n\r\n    return ($segments[0..2] -join '.')\r\n}\r\n\r\nfunction ConvertTo-VersionObject {\r\n    param([string]$VersionString)\r\n\r\n    if ([string]::IsNullOrWhiteSpace($VersionString)) {\r\n        return $null\r\n    }\r\n\r\n    $normalized = Get-NormalizedVersionString $VersionString\r\n    if ([string]::IsNullOrWhiteSpace($normalized)) {\r\n        return $null\r\n    }\r\n\r\n    $parts = $normalized.Split('.')\r\n    while ($parts.Length -lt 3) {\r\n        $parts += '0'\r\n    }\r\n\r\n    $joined = ($parts[0..2] -join '.')\r\n\r\n    try {\r\n        return [Version]::Parse($joined)\r\n    } catch {\r\n        return $null\r\n    }\r\n}\r\n\r\nfunction Write-FilteredProcessOutput {\r\n    param([PSCustomObject]$ProcessResult)\r\n\r\n    if ($null -eq $ProcessResult) {\r\n        return\r\n    }\r\n\r\n    if ([string]::IsNullOrWhiteSpace($ProcessResult.Output)) { return }\r\n\r\n    $combined = $ProcessResult.Output\r\n    $lines = $combined -split \"(`r`n|`r|`n)\"\r\n    foreach ($line in $lines) {\r\n        if ([string]::IsNullOrWhiteSpace($line)) { continue }\r\n        $trimmed = $line.Trim()\r\n\r\n        if ($trimmed -match '^(?i)info\\s*:') { continue }\r\n\r\n        $match = [regex]::Match($trimmed, '(?i)\\b(error|warning)\\b\\s*:?.*')\r\n        if ($match.Success) {\r\n            $message = $match.Value.Trim()\r\n            if (-not [string]::IsNullOrWhiteSpace($message)) {\r\n                Write-Host $message\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction New-RestoreProjectFile {\r\n    param(\r\n        [Parameter(Mandatory = $true)][string]$Directory,\r\n        [Parameter(Mandatory = $true)][string]$ProjectName,\r\n        [Parameter(Mandatory = $true)][string]$TargetFramework,\r\n        [Parameter(Mandatory = $true)][string]$PackageVersion\r\n    )\r\n\r\n    if (-not (Test-Path $Directory)) {\r\n        New-Item -ItemType Directory -Path $Directory -Force | Out-Null\r\n    }\r\n\r\n$projectContent = @\"\r\n<Project Sdk=\"Microsoft.NET.Sdk\">\r\n  <PropertyGroup>\r\n    <TargetFramework>$TargetFramework</TargetFramework>\r\n    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>\r\n    <MSBuildTreatWarningsAsErrors>true</MSBuildTreatWarningsAsErrors>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Humanizer\" Version=\"$PackageVersion\" />\r\n  </ItemGroup>\r\n</Project>\r\n\"@\r\n\r\n    $projectPath = Join-Path $Directory \"$ProjectName.csproj\"\r\n    Set-Content -Path $projectPath -Value $projectContent -Encoding UTF8\r\n\r\n    return $projectPath\r\n}\r\n\r\nfunction Format-RestoreSummaryLine {\r\n    param(\r\n        [PSCustomObject]$Result,\r\n        [string]$PrefixSymbol\r\n    )\r\n\r\n    if ($null -eq $Result) {\r\n        return $null\r\n    }\r\n\r\n    $line = \"  $PrefixSymbol $($Result.DisplayName)\"\r\n\r\n    if ($Result.Success -and $Result.FailureExpected) {\r\n        if ($Result.ExpectationReason) {\r\n            $line += \" (expected failure: $($Result.ExpectationReason))\"\r\n        } else {\r\n            $line += \" (expected failure)\"\r\n        }\r\n    } elseif (-not $Result.Success -and $Result.FailureExpected) {\r\n        if ($Result.ExpectationReason) {\r\n            $line += \" (unexpected success; expected failure: $($Result.ExpectationReason))\"\r\n        } else {\r\n            $line += \" (unexpected success; expected failure)\"\r\n        }\r\n    }\r\n\r\n    return $line\r\n}\r\n\r\nfunction Get-MSBuildProductName {\r\n    param([string]$Path)\r\n\r\n    if ([string]::IsNullOrWhiteSpace($Path)) {\r\n        return $null\r\n    }\r\n\r\n    if ($Path -match \"Microsoft Visual Studio\\\\(\\\\d{4})\\\\([^\\\\]+)\") {\r\n        $year = $Matches[1]\r\n        $segment = $Matches[2]\r\n        switch -Regex ($segment) {\r\n            '^BuildTools$' { return \"VS $year Build Tools\" }\r\n            '^Preview$'   { return \"VS $year Preview\" }\r\n            default       { return \"VS $year $segment\" }\r\n        }\r\n    }\r\n\r\n    return $null\r\n}\r\n\r\nfunction Get-MSBuildInfos {\r\n    param([bool]$RunningOnWindows)\r\n\r\n    if (-not $RunningOnWindows) {\r\n        return @()\r\n    }\r\n\r\n    $msbuildPaths = @()\r\n\r\n    $msbuildCommands = @(Get-Command msbuild.exe -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Source -Unique)\r\n    if ($msbuildCommands) {\r\n        $msbuildPaths += $msbuildCommands\r\n    }\r\n\r\n    $programFilesX86 = [Environment]::GetEnvironmentVariable(\"ProgramFiles(x86)\")\r\n    if (-not [string]::IsNullOrWhiteSpace($programFilesX86)) {\r\n        $vswherePath = Join-Path $programFilesX86 \"Microsoft Visual Studio/Installer/vswhere.exe\"\r\n        if (Test-Path $vswherePath) {\r\n            $vswhereArguments = @(\r\n                \"-prerelease\",\r\n                \"-products\", \"*\",\r\n                \"-requires\", \"Microsoft.Component.MSBuild\",\r\n                \"-find\", \"MSBuild/**/Bin/MSBuild.exe\",\r\n                \"-all\"\r\n            )\r\n            $vswhereOutput = & $vswherePath @vswhereArguments 2>$null\r\n            if ($vswhereOutput) {\r\n                $msbuildPaths += $vswhereOutput\r\n            }\r\n        }\r\n    }\r\n\r\n    $msbuildPaths = $msbuildPaths | Where-Object { $_ -and (Test-Path $_) } | Sort-Object -Unique\r\n    $msbuildInfos = @()\r\n\r\n    foreach ($msbuildPath in $msbuildPaths) {\r\n        $msbuildItem = Get-Item $msbuildPath\r\n        $msbuildVersion = $null\r\n        try {\r\n            $msbuildVersion = $msbuildItem.VersionInfo.ProductVersion\r\n            if (-not $msbuildVersion -and $msbuildItem.VersionInfo.FileVersion) {\r\n                $msbuildVersion = $msbuildItem.VersionInfo.FileVersion\r\n            }\r\n        } catch {\r\n            $msbuildVersion = $null\r\n        }\r\n\r\n        $normalizedMsbuildVersion = Get-NormalizedVersionString $msbuildVersion\r\n        $productName = Get-MSBuildProductName $msbuildPath\r\n        if (-not $productName -and $msbuildItem.VersionInfo -and $msbuildItem.VersionInfo.ProductName) {\r\n            $productName = $msbuildItem.VersionInfo.ProductName\r\n        }\r\n\r\n        $baseName = if ($normalizedMsbuildVersion) { \"MSBuild $normalizedMsbuildVersion\" } else { \"MSBuild\" }\r\n        $displayName = if ($productName) { \"$baseName ($productName)\" } else { $baseName }\r\n\r\n        $msbuildInfos += [PSCustomObject]@{\r\n            Path        = $msbuildPath\r\n            RawVersion  = $msbuildVersion\r\n            Version     = $normalizedMsbuildVersion\r\n            ProductName = $productName\r\n            DisplayName = $displayName\r\n        }\r\n    }\r\n\r\n    return $msbuildInfos\r\n}\r\n\r\nfunction Write-AzureDevOpsErrorDetail {\r\n    param(\r\n        [string]$Summary,\r\n        [string]$Details\r\n    )\r\n\r\n    if ([string]::IsNullOrWhiteSpace($Summary) -and [string]::IsNullOrWhiteSpace($Details)) {\r\n        return\r\n    }\r\n\r\n    $message = $null\r\n\r\n    if (-not [string]::IsNullOrWhiteSpace($Summary)) {\r\n        $message = $Summary.Trim()\r\n    }\r\n\r\n    if (-not [string]::IsNullOrWhiteSpace($Details)) {\r\n        $normalizedDetails = ($Details -replace \"(`r`n|`r)\", \"`n\").Trim(\"`n\")\r\n        if ($message) {\r\n            $message = \"$message`n$normalizedDetails\"\r\n        } else {\r\n            $message = $normalizedDetails\r\n        }\r\n    }\r\n\r\n    Write-AzureDevOpsError $message\r\n}\r\n\r\nfunction Get-RestoreDiagnostics {\r\n    param([string]$Output)\r\n\r\n    if ([string]::IsNullOrEmpty($Output)) {\r\n        return [PSCustomObject]@{ Errors = @(); Warnings = @() }\r\n    }\r\n\r\n    $lines = $Output -split \"(`r`n|`r|`n)\"\r\n    $errorLines = @()\r\n    $warningLines = @()\r\n    foreach ($line in $lines) {\r\n        $trimmed = $line.TrimEnd()\r\n        if ([string]::IsNullOrWhiteSpace($trimmed)) {\r\n            continue\r\n        }\r\n\r\n        if ($trimmed -match \"(?i)\\berror\\b\\s*:?\\s*[A-Z0-9]+:\") {\r\n            $match = [regex]::Match($trimmed, \"(?i)\\berror\\b\\s*:?\\s*[A-Z0-9]+:.*\")\r\n            if ($match.Success) {\r\n                $errorLines += $match.Value.Trim()\r\n            } else {\r\n                $errorLines += $trimmed\r\n            }\r\n            continue\r\n        }\r\n\r\n        if ($trimmed -match \"(?i)\\bwarning\\b\\s*:?\\s*[A-Z0-9]+:\") {\r\n            $match = [regex]::Match($trimmed, \"(?i)\\bwarning\\b\\s*:?\\s*[A-Z0-9]+:.*\")\r\n            if ($match.Success) {\r\n                $warningLines += $match.Value.Trim()\r\n            } else {\r\n                $warningLines += $trimmed\r\n            }\r\n        }\r\n    }\r\n\r\n    return [PSCustomObject]@{\r\n        Errors   = $errorLines | Select-Object -Unique\r\n        Warnings = $warningLines | Select-Object -Unique\r\n    }\r\n}\r\n\r\nfunction Get-RestoreTargets {\r\n    param(\r\n        [bool]$RunningOnWindows,\r\n        [string]$MinimumPassingSdkVersion\r\n    )\r\n\r\n    Write-AzureDevOpsSection \"Detecting installed .NET SDKs and MSBuild tools\"\r\n\r\n    $restoreTargets = @()\r\n\r\n    $minimumPassingVersionObject = ConvertTo-VersionObject $MinimumPassingSdkVersion\r\n\r\n    $listSdksResult = Invoke-CommandText -FilePath \"dotnet\" -ArgumentList @(\"--list-sdks\")\r\n    if ($listSdksResult.ExitCode -ne 0) {\r\n        Write-AzureDevOpsErrorDetail \"Failed to enumerate installed SDKs\" $listSdksResult.Output\r\n        Write-FilteredProcessOutput -ProcessResult $listSdksResult\r\n        throw \"Unable to determine installed SDKs\"\r\n    }\r\n\r\n    Write-FilteredProcessOutput -ProcessResult $listSdksResult\r\n\r\n    $installedSdkLines = @()\r\n    if ($listSdksResult.Output) {\r\n        $installedSdkLines = ($listSdksResult.Output -split \"(`r`n|`r|`n)\") | Where-Object { -not [string]::IsNullOrWhiteSpace($_) }\r\n    }\r\n\r\n    $sdksByMajor = @{}\r\n    foreach ($line in $installedSdkLines) {\r\n        if ($line -match '^(?<version>[^\\s]+)\\s+\\[(?<path>.+)\\]$') {\r\n            $version = $Matches['version']\r\n            $major = $version.Split('.')[0]\r\n            if (-not $sdksByMajor.ContainsKey($major)) {\r\n                $sdksByMajor[$major] = @()\r\n            }\r\n            $sdksByMajor[$major] += $version\r\n        }\r\n    }\r\n\r\n    $sdkVersionsToTest = @(\r\n        @{ Version = \"8.0.100\"; RollForward = \"latestFeature\"; Name = \"SDK 8\"; MajorVersion = 8; TargetFramework = \"net8.0\" },\r\n        @{ Version = \"9.0.100\"; RollForward = \"latestFeature\"; Name = \"SDK 9\"; MajorVersion = 9; TargetFramework = \"net9.0\" },\r\n        @{ Version = \"10.0.100\"; RollForward = \"latestFeature\"; Name = \"SDK 10\"; MajorVersion = 10; TargetFramework = \"net10.0\" },\r\n        @{ Version = \"11.0.100\"; RollForward = \"latestFeature\"; Name = \"SDK 11\"; MajorVersion = 11; TargetFramework = \"net11.0\" },\r\n        # Validate downlevel consumers on the latest installed SDK to avoid relying on older restore behavior.\r\n        @{ Version = \"11.0.100\"; RollForward = \"latestFeature\"; Name = \"SDK 11\"; MajorVersion = 11; TargetFramework = \"net8.0\" },\r\n        @{ Version = \"11.0.100\"; RollForward = \"latestFeature\"; Name = \"SDK 11\"; MajorVersion = 11; TargetFramework = \"net10.0\" }\r\n    )\r\n\r\n    foreach ($sdkConfig in $sdkVersionsToTest) {\r\n        $majorKey = [string]$sdkConfig.MajorVersion\r\n        if ($sdksByMajor.ContainsKey($majorKey)) {\r\n            $availableVersions = $sdksByMajor[$majorKey] | Sort-Object -Descending\r\n            $selectedVersion = $availableVersions | Select-Object -First 1\r\n            $normalizedVersion = Get-NormalizedVersionString $selectedVersion\r\n            if (-not $normalizedVersion) {\r\n                $normalizedVersion = Get-NormalizedVersionString $sdkConfig.Version\r\n            }\r\n\r\n            $baseDisplayName = if ($normalizedVersion) { \".NET $normalizedVersion\" } else { \".NET $($sdkConfig.MajorVersion)\" }\r\n            $displayName = \"$baseDisplayName ($($sdkConfig.TargetFramework))\"\r\n            $targetFrameworkId = ($sdkConfig.TargetFramework -replace '[^A-Za-z0-9]', '')\r\n\r\n            $selectedVersionObject = ConvertTo-VersionObject $normalizedVersion\r\n            $failureExpected = $false\r\n            $expectationReason = $null\r\n            if ($minimumPassingVersionObject -and $selectedVersionObject -ne $null -and $selectedVersionObject -lt $minimumPassingVersionObject) {\r\n                $failureExpected = $true\r\n                $expectationReason = \"SDK version below minimum $MinimumPassingSdkVersion\"\r\n            }\r\n\r\n            $restoreTargets += [PSCustomObject]@{\r\n                Kind                = 'dotnet'\r\n                Id                  = \"sdk$($sdkConfig.MajorVersion)-$targetFrameworkId\"\r\n                DisplayName         = $displayName\r\n                Version             = $normalizedVersion\r\n                TargetFramework     = $sdkConfig.TargetFramework\r\n                GlobalJsonVersion   = $selectedVersion\r\n                RollForward         = $sdkConfig.RollForward\r\n                FailureExpected     = $failureExpected\r\n                ExpectationReason   = $expectationReason\r\n            }\r\n        } else {\r\n            Write-AzureDevOpsWarning \"$($sdkConfig.Name) not installed, skipping\"\r\n        }\r\n    }\r\n\r\n    $dotnetTargets = $restoreTargets | Where-Object { $_.Kind -eq 'dotnet' }\r\n    if ($dotnetTargets.Count -eq 0) {\r\n        $sdkMajorVersions = ($sdkVersionsToTest | ForEach-Object { $_.MajorVersion }) -join \", \"\r\n        Write-AzureDevOpsWarning \"No target SDK versions ($sdkMajorVersions) are installed\"\r\n    }\r\n\r\n    if ($RunningOnWindows) {\r\n        $msbuildInfos = Get-MSBuildInfos -RunningOnWindows $RunningOnWindows\r\n        if ($msbuildInfos.Count -eq 0) {\r\n            Write-AzureDevOpsWarning \"No MSBuild installations detected\"\r\n        } else {\r\n            $index = 0\r\n            foreach ($info in $msbuildInfos) {\r\n                $index++\r\n                $displayName = if ($info.Version) { \"MSBuild $($info.Version)\" } else { \"MSBuild\" }\r\n                if ($info.ProductName) {\r\n                    $displayName = \"$displayName ($($info.ProductName))\"\r\n                }\r\n\r\n                $restoreTargets += [PSCustomObject]@{\r\n                    Kind              = 'msbuild'\r\n                    Id                = \"msbuild$index\"\r\n                    DisplayName       = $displayName\r\n                    Version           = $info.Version\r\n                    Path              = $info.Path\r\n                    FailureExpected   = $false\r\n                    ExpectationReason = $null\r\n                }\r\n            }\r\n        }\r\n    } else {\r\n        Write-AzureDevOpsWarning \"MSBuild restore tests skipped (non-Windows environment)\"\r\n    }\r\n\r\n    if ($restoreTargets.Count -gt 0) {\r\n        Write-Host \"Discovered restore targets:\"\r\n        foreach ($target in $restoreTargets) {\r\n            if ($target.FailureExpected -and $target.ExpectationReason) {\r\n                Write-Host \"  - $($target.DisplayName) (expected failure: $($target.ExpectationReason))\"\r\n            } elseif ($target.FailureExpected) {\r\n                Write-Host \"  - $($target.DisplayName) (expected failure)\"\r\n            } else {\r\n                Write-Host \"  - $($target.DisplayName)\"\r\n            }\r\n        }\r\n    } else {\r\n        Write-AzureDevOpsWarning \"No restore targets were discovered\"\r\n    }\r\n\r\n    return $restoreTargets\r\n}\r\n\r\nfunction Invoke-DotnetRestoreTarget {\r\n    param(\r\n        [PSCustomObject]$Target,\r\n        [string]$TempDir,\r\n        [string]$NuGetConfig,\r\n        [string]$PackageVersion\r\n    )\r\n\r\n    $resultRecord = [PSCustomObject]@{\r\n        Kind        = 'dotnet'\r\n        DisplayName = $Target.DisplayName\r\n        Version     = $Target.Version\r\n        Success     = $false\r\n        Details     = $null\r\n        FailureExpected = [bool]$Target.FailureExpected\r\n        ExpectationReason = $Target.ExpectationReason\r\n    }\r\n\r\n    $sdkTestDir = Join-Path $TempDir $Target.Id\r\n    New-Item -ItemType Directory -Path $sdkTestDir -Force | Out-Null\r\n\r\n    $currentLocation = Get-Location\r\n    try {\r\n        Set-Location $sdkTestDir\r\n\r\n        $globalJsonContent = @\"\r\n{\r\n  \"sdk\": {\r\n    \"version\": \"$($Target.GlobalJsonVersion)\",\r\n    \"rollForward\": \"$($Target.RollForward)\"\r\n  }\r\n}\r\n\"@\r\n        Set-Content -Path \"global.json\" -Value $globalJsonContent\r\n        Write-Host \"Created global.json targeting $($Target.GlobalJsonVersion) (rollForward $($Target.RollForward))\"\r\n\r\n        $projectRoot = Join-Path (Get-Location).Path \"MetaTest\"\r\n        New-Item -ItemType Directory -Path $projectRoot -Force | Out-Null\r\n        $projectPath = New-RestoreProjectFile -Directory $projectRoot -ProjectName \"MetaTest\" -TargetFramework $Target.TargetFramework -PackageVersion $PackageVersion\r\n\r\n        Set-Location $projectRoot\r\n\r\n        Write-Host \"Restoring packages...\"\r\n        $restoreArguments = @(\"restore\", \"--configfile\", $NuGetConfig, \"--verbosity\", \"minimal\")\r\n        $restoreResult = Invoke-CommandText -FilePath \"dotnet\" -ArgumentList $restoreArguments -WorkingDirectory (Get-Location).Path\r\n\r\n        $restoreSucceeded = ($restoreResult.ExitCode -eq 0)\r\n        if (-not $restoreSucceeded) {\r\n            $severity = if ($Target.FailureExpected) { 'none' } else { 'error' }\r\n            $context = \"Restore failed for $($Target.DisplayName) during dotnet restore\"\r\n            if ($Target.FailureExpected -and $Target.ExpectationReason) {\r\n                $context = \"$context (expected: $($Target.ExpectationReason))\"\r\n            } elseif ($Target.FailureExpected) {\r\n                $context = \"$context (expected failure)\"\r\n            }\r\n\r\n            $diagnostics = Publish-RestoreFailure $context $Target.DisplayName $restoreResult $severity\r\n            $resultRecord.Details = Get-FailureDetailText -Diagnostics $diagnostics -ProcessResult $restoreResult\r\n\r\n            if ($Target.FailureExpected) {\r\n                $resultRecord.Success = $true\r\n            }\r\n\r\n            return $resultRecord\r\n        }\r\n\r\n        $objPath = \"obj/project.assets.json\"\r\n        if (-not (Test-Path $objPath)) {\r\n            Write-AzureDevOpsError \"$($Target.DisplayName): project.assets.json not found after restore\"\r\n            $resultRecord.Details = \"project.assets.json missing\"\r\n            return $resultRecord\r\n        }\r\n\r\n        Publish-RestoreSuccess \"Restore succeeded: $($Target.DisplayName)\" $Target.DisplayName $restoreResult\r\n\r\n        if ($Target.FailureExpected) {\r\n            $message = \"$($Target.DisplayName): restore succeeded but failure was expected\"\r\n            if ($Target.ExpectationReason) {\r\n                $message = \"$message ($($Target.ExpectationReason))\"\r\n            }\r\n            Write-Host \"##[command]✗ $message\"\r\n            Write-AzureDevOpsError $message\r\n            $resultRecord.Details = $message\r\n            return $resultRecord\r\n        }\r\n        \r\n        Write-Host \"Building project...\"\r\n        $buildArguments = @(\"build\", \"--no-restore\", \"--verbosity\", \"minimal\")\r\n        $buildResult = Invoke-CommandText -FilePath \"dotnet\" -ArgumentList $buildArguments -WorkingDirectory (Get-Location).Path\r\n        $buildSucceeded = ($buildResult.ExitCode -eq 0)\r\n        if (-not $buildSucceeded) {\r\n            $context = \"Build failed for $($Target.DisplayName) during dotnet build\"\r\n            $diagnostics = Publish-RestoreFailure $context $Target.DisplayName $buildResult\r\n            $resultRecord.Details = Get-FailureDetailText -Diagnostics $diagnostics -ProcessResult $buildResult\r\n            return $resultRecord\r\n        }\r\n\r\n        Publish-RestoreSuccess \"Build succeeded: $($Target.DisplayName)\" $Target.DisplayName $buildResult\r\n\r\n        $resultRecord.Success = $true\r\n        return $resultRecord\r\n    } catch {\r\n        $exceptionText = $_ | Out-String\r\n        $exceptionTrimmed = $exceptionText.Trim()\r\n        Write-AzureDevOpsErrorDetail \"Exception testing $($Target.DisplayName): $($_.Exception.Message)\" $exceptionTrimmed\r\n        if ($exceptionText) { Write-Host $exceptionText }\r\n        $resultRecord.Details = $exceptionTrimmed\r\n        return $resultRecord\r\n    } finally {\r\n        Set-Location $currentLocation\r\n    }\r\n}\r\n\r\nfunction Invoke-MSBuildRestoreTarget {\r\n    param(\r\n        [PSCustomObject]$Target,\r\n        [string]$TempDir,\r\n        [string]$NuGetConfig,\r\n        [string]$PackageVersion\r\n    )\r\n\r\n    $resultRecord = [PSCustomObject]@{\r\n        Kind        = 'msbuild'\r\n        DisplayName = $Target.DisplayName\r\n        Version     = $Target.Version\r\n        Success     = $false\r\n        Details     = $null\r\n        FailureExpected = [bool]$Target.FailureExpected\r\n        ExpectationReason = $Target.ExpectationReason\r\n    }\r\n\r\n    $msbuildTestDir = Join-Path $TempDir $Target.Id\r\n    New-Item -ItemType Directory -Path $msbuildTestDir -Force | Out-Null\r\n\r\n    $currentLocation = Get-Location\r\n    try {\r\n        Set-Location $msbuildTestDir\r\n\r\n        $projectRoot = Join-Path (Get-Location).Path \"MetaTest\"\r\n        New-Item -ItemType Directory -Path $projectRoot -Force | Out-Null\r\n        Set-Location $projectRoot\r\n\r\n        $projectFile = New-RestoreProjectFile -Directory (Get-Location).Path -ProjectName \"MetaTest\" -TargetFramework \"net48\" -PackageVersion $PackageVersion\r\n\r\n        $msbuildRestoreResult = Invoke-CommandText -FilePath $Target.Path -ArgumentList @($projectFile, \"/t:Restore\", \"/p:RestoreConfigFile=$NuGetConfig\", \"/nologo\") -WorkingDirectory (Get-Location).Path\r\n\r\n        $restoreSucceeded = ($msbuildRestoreResult.ExitCode -eq 0)\r\n        if (-not $restoreSucceeded) {\r\n            $severity = if ($Target.FailureExpected) { 'none' } else { 'error' }\r\n            $context = \"Restore failed for $($Target.DisplayName) during MSBuild restore\"\r\n            if ($Target.FailureExpected -and $Target.ExpectationReason) {\r\n                $context = \"$context (expected: $($Target.ExpectationReason))\"\r\n            } elseif ($Target.FailureExpected) {\r\n                $context = \"$context (expected failure)\"\r\n            }\r\n\r\n            $diagnostics = Publish-RestoreFailure $context $Target.DisplayName $msbuildRestoreResult $severity\r\n            $resultRecord.Details = Get-FailureDetailText -Diagnostics $diagnostics -ProcessResult $msbuildRestoreResult\r\n\r\n            if ($Target.FailureExpected) {\r\n                $resultRecord.Success = $true\r\n            }\r\n\r\n            return $resultRecord\r\n        }\r\n\r\n        $msbuildAssetsPath = \"obj/project.assets.json\"\r\n        if (-not (Test-Path $msbuildAssetsPath)) {\r\n            Write-AzureDevOpsError \"$($Target.DisplayName): project.assets.json not found after restore\"\r\n            $resultRecord.Details = \"project.assets.json missing\"\r\n            return $resultRecord\r\n        }\r\n\r\n        Publish-RestoreSuccess \"Restore succeeded: $($Target.DisplayName)\" $Target.DisplayName $msbuildRestoreResult\r\n\r\n        if ($Target.FailureExpected) {\r\n            $message = \"$($Target.DisplayName): restore succeeded but failure was expected\"\r\n            if ($Target.ExpectationReason) {\r\n                $message = \"$message ($($Target.ExpectationReason))\"\r\n            }\r\n            Write-Host \"##[command]✗ $message\"\r\n            Write-AzureDevOpsError $message\r\n            $resultRecord.Details = $message\r\n            return $resultRecord\r\n        }\r\n        \r\n        Write-Host \"Building project...\"\r\n        $msbuildBuildResult = Invoke-CommandText -FilePath $Target.Path -ArgumentList @($projectFile, \"/t:Build\", \"/p:Restore=false\", \"/nologo\") -WorkingDirectory (Get-Location).Path\r\n        $buildSucceeded = ($msbuildBuildResult.ExitCode -eq 0)\r\n        if (-not $buildSucceeded) {\r\n            $context = \"Build failed for $($Target.DisplayName) during MSBuild build\"\r\n            $diagnostics = Publish-RestoreFailure $context $Target.DisplayName $msbuildBuildResult\r\n            $resultRecord.Details = Get-FailureDetailText -Diagnostics $diagnostics -ProcessResult $msbuildBuildResult\r\n            return $resultRecord\r\n        }\r\n\r\n        Publish-RestoreSuccess \"Build succeeded: $($Target.DisplayName)\" $Target.DisplayName $msbuildBuildResult\r\n\r\n        $resultRecord.Success = $true\r\n        return $resultRecord\r\n    } catch {\r\n        $exceptionText = $_ | Out-String\r\n        $exceptionTrimmed = $exceptionText.Trim()\r\n        Write-AzureDevOpsErrorDetail \"Exception testing $($Target.DisplayName): $($_.Exception.Message)\" $exceptionTrimmed\r\n        if ($exceptionText) { Write-Host $exceptionText }\r\n        $resultRecord.Details = $exceptionTrimmed\r\n        return $resultRecord\r\n    } finally {\r\n        Set-Location $currentLocation\r\n    }\r\n}\r\n\r\nfunction Write-RestoreDiagnosticLines {\r\n    param(\r\n        [string]$DisplayName,\r\n        [PSCustomObject]$Diagnostics,\r\n        [ValidateSet('error','warning','none')]\r\n        [string]$ErrorSeverity = 'error'\r\n    )\r\n\r\n    if ($null -eq $Diagnostics) {\r\n        return\r\n    }\r\n\r\n    if ($Diagnostics.Warnings -and $Diagnostics.Warnings.Count -gt 0) {\r\n        foreach ($warningLine in $Diagnostics.Warnings | Where-Object { -not [string]::IsNullOrWhiteSpace($_) }) {\r\n            $message = \"${DisplayName}: $($warningLine.Trim())\"\r\n            Write-Host $message\r\n            if ($ErrorSeverity -ne 'none') {\r\n                Write-AzureDevOpsWarning $message\r\n            }\r\n        }\r\n    }\r\n\r\n    if ($Diagnostics.Errors -and $Diagnostics.Errors.Count -gt 0) {\r\n        foreach ($errorLine in $Diagnostics.Errors | Where-Object { -not [string]::IsNullOrWhiteSpace($_) }) {\r\n            $message = \"${DisplayName}: $($errorLine.Trim())\"\r\n            Write-Host $message\r\n            switch ($ErrorSeverity) {\r\n                'warning' { Write-AzureDevOpsWarning $message }\r\n                'error'   { Write-AzureDevOpsError $message }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction Publish-RestoreFailure {\r\n    param(\r\n        [string]$Context,\r\n        [string]$DisplayName,\r\n        [PSCustomObject]$ProcessResult,\r\n        [ValidateSet('error','warning','none')]\r\n        [string]$ErrorSeverity = 'error'\r\n    )\r\n\r\n    if (-not [string]::IsNullOrWhiteSpace($Context)) {\r\n        Write-Host \"##[command]✗ $Context\"\r\n    }\r\n\r\n    if ($null -eq $ProcessResult) {\r\n        if (-not [string]::IsNullOrWhiteSpace($Context)) {\r\n            if ($ErrorSeverity -eq 'warning') {\r\n                Write-AzureDevOpsWarning $Context\r\n            } elseif ($ErrorSeverity -eq 'error') {\r\n                Write-AzureDevOpsError $Context\r\n            }\r\n        }\r\n        return $null\r\n    }\r\n\r\n    if ($ErrorSeverity -ne 'none') {\r\n        Write-FilteredProcessOutput -ProcessResult $ProcessResult\r\n    }\r\n\r\n    $diagnostics = Get-RestoreDiagnostics -Output $ProcessResult.Output\r\n\r\n    Write-RestoreDiagnosticLines -DisplayName $DisplayName -Diagnostics $diagnostics -ErrorSeverity $ErrorSeverity\r\n\r\n    if (($diagnostics.Errors.Count -eq 0) -and ($diagnostics.Warnings.Count -eq 0)) {\r\n        $fallbackMessage = $ProcessResult.Output\r\n\r\n        if (-not [string]::IsNullOrWhiteSpace($fallbackMessage)) {\r\n            $fallbackLines = ($fallbackMessage -split \"(`r`n|`r|`n)\") | Where-Object { -not [string]::IsNullOrWhiteSpace($_) }\r\n            foreach ($line in $fallbackLines) {\r\n                $trimmedFallback = $line.Trim()\r\n                if ([string]::IsNullOrWhiteSpace($trimmedFallback)) { continue }\r\n                if ($trimmedFallback -match '^(?i)info\\s*:') { continue }\r\n\r\n                $message = \"${DisplayName}: $trimmedFallback\"\r\n                Write-Host $message\r\n                if ($ErrorSeverity -eq 'warning') {\r\n                    Write-AzureDevOpsWarning $message\r\n                } elseif ($ErrorSeverity -eq 'error') {\r\n                    Write-AzureDevOpsError $message\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    return $diagnostics\r\n}\r\n\r\nfunction Publish-RestoreSuccess {\r\n    param(\r\n        [string]$Context,\r\n        [string]$DisplayName,\r\n        [PSCustomObject]$ProcessResult\r\n    )\r\n\r\n    if (-not [string]::IsNullOrWhiteSpace($Context)) {\r\n        Write-Host \"##[command]✓ $Context\"\r\n    }\r\n\r\n    if ($null -eq $ProcessResult) {\r\n        return $null\r\n    }\r\n\r\n    $diagnostics = Get-RestoreDiagnostics -Output $ProcessResult.Output\r\n\r\n    Write-RestoreDiagnosticLines -DisplayName $DisplayName -Diagnostics $diagnostics\r\n\r\n    return $diagnostics\r\n}\r\n\r\nfunction Get-FailureDetailText {\r\n    param(\r\n        [PSCustomObject]$Diagnostics,\r\n        [PSCustomObject]$ProcessResult\r\n    )\r\n\r\n    if ($Diagnostics) {\r\n        if ($Diagnostics.Errors -and $Diagnostics.Errors.Count -gt 0) {\r\n            return ($Diagnostics.Errors -join \"`n\").Trim()\r\n        }\r\n\r\n        if ($Diagnostics.Warnings -and $Diagnostics.Warnings.Count -gt 0) {\r\n            return ($Diagnostics.Warnings -join \"`n\").Trim()\r\n        }\r\n    }\r\n\r\n    if ($ProcessResult) {\r\n        if (-not [string]::IsNullOrWhiteSpace($ProcessResult.Output)) {\r\n            return $ProcessResult.Output.Trim()\r\n        }\r\n    }\r\n\r\n    return $null\r\n}\r\n\r\nfunction Invoke-WapProjSmokeTest {\r\n    param(\r\n        [Parameter(Mandatory = $true)][string]$PackageVersion,\r\n        [Parameter(Mandatory = $true)][string]$PackagesDirectory,\r\n        [Parameter(Mandatory = $true)][string]$MsbuildPath,\r\n        [Parameter(Mandatory = $true)][string]$TempDir\r\n    )\r\n\r\n    $resultRecord = [PSCustomObject]@{\r\n        DisplayName = \"WAP project smoke test\"\r\n        Success = $false\r\n        Executed = $false\r\n        Details = $null\r\n    }\r\n\r\n    $fixtureRoot = Join-Path $PSScriptRoot \"fixtures\\WapProjSmoke\"\r\n    if (-not (Test-Path $fixtureRoot)) {\r\n        $resultRecord.Details = \"WAP project fixture directory not found: $fixtureRoot\"\r\n        return $resultRecord\r\n    }\r\n\r\n    $smokeRoot = Join-Path $TempDir \"WapProjSmoke\"\r\n    if (Test-Path $smokeRoot) {\r\n        Remove-Item -Path $smokeRoot -Recurse -Force -ErrorAction SilentlyContinue\r\n    }\r\n\r\n    $localPackagesDirectory = Join-Path $smokeRoot \".nuget\\packages\"\r\n    New-Item -ItemType Directory -Path $smokeRoot -Force | Out-Null\r\n    Copy-Item -Path (Join-Path $fixtureRoot \"EntryPointApp\") -Destination (Join-Path $smokeRoot \"EntryPointApp\") -Recurse -Force\r\n    Copy-Item -Path (Join-Path $fixtureRoot \"Package\") -Destination (Join-Path $smokeRoot \"Package\") -Recurse -Force\r\n    New-Item -ItemType Directory -Path $localPackagesDirectory -Force | Out-Null\r\n\r\n    $entryPointDirectory = Join-Path $smokeRoot \"EntryPointApp\"\r\n    $packageDirectory = Join-Path $smokeRoot \"Package\"\r\n    $entryPointProjectFile = Join-Path $entryPointDirectory \"EntryPointApp.csproj\"\r\n    Expand-TemplateFile `\r\n        -TemplatePath (Join-Path $entryPointDirectory \"EntryPointApp.csproj.template\") `\r\n        -DestinationPath $entryPointProjectFile `\r\n        -Tokens @{\r\n            \"__PACKAGE_VERSION__\" = $PackageVersion\r\n            \"__PACKAGES_PATH__\" = $localPackagesDirectory\r\n        }\r\n    Remove-Item -Path (Join-Path $entryPointDirectory \"EntryPointApp.csproj.template\") -Force -ErrorAction SilentlyContinue\r\n\r\n    $wapProjectFile = Join-Path $packageDirectory \"Package.wapproj\"\r\n    Expand-TemplateFile `\r\n        -TemplatePath (Join-Path $packageDirectory \"Package.wapproj.template\") `\r\n        -DestinationPath $wapProjectFile `\r\n        -Tokens @{\r\n            \"__PACKAGES_PATH__\" = $localPackagesDirectory\r\n        }\r\n    Remove-Item -Path (Join-Path $packageDirectory \"Package.wapproj.template\") -Force -ErrorAction SilentlyContinue\r\n\r\n    $nuGetConfigFile = Join-Path $smokeRoot \"NuGet.config\"\r\n    $nuGetConfigContent = @'\r\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n  <config>\r\n    <add key=\"globalPackagesFolder\" value=\"__PACKAGES_PATH__\" />\r\n  </config>\r\n  <packageSources>\r\n    <clear />\r\n    <add key=\"LocalPackages\" value=\"__PACKAGES_DIRECTORY__\" />\r\n    <add key=\"nuget.org\" value=\"https://api.nuget.org/v3/index.json\" />\r\n  </packageSources>\r\n</configuration>\r\n'@.Replace(\"__PACKAGES_DIRECTORY__\", (Resolve-Path $PackagesDirectory).Path).Replace(\"__PACKAGES_PATH__\", $localPackagesDirectory)\r\n    Set-Content -Path $nuGetConfigFile -Value $nuGetConfigContent -Encoding UTF8\r\n\r\n    $restoreArguments = @(\r\n        $wapProjectFile,\r\n        \"/t:Restore\",\r\n        \"/p:RestoreConfigFile=$nuGetConfigFile\",\r\n        \"/p:Platform=x64\",\r\n        \"/p:Configuration=Release\",\r\n        \"/p:RuntimeIdentifier=win-x64\",\r\n        \"/p:SelfContained=true\",\r\n        \"/p:RestorePackagesPath=$localPackagesDirectory\",\r\n        \"/nologo\"\r\n    )\r\n    $restoreResult = Invoke-CommandText -FilePath $MsbuildPath -ArgumentList $restoreArguments -WorkingDirectory $packageDirectory\r\n    if ($restoreResult.ExitCode -ne 0) {\r\n        $diagnostics = Publish-RestoreFailure \"WAP project restore failed\" $resultRecord.DisplayName $restoreResult\r\n        $resultRecord.Details = Get-FailureDetailText -Diagnostics $diagnostics -ProcessResult $restoreResult\r\n        return $resultRecord\r\n    }\r\n\r\n    $buildArguments = @(\r\n        $wapProjectFile,\r\n        \"/t:Build\",\r\n        \"/p:Restore=false\",\r\n        \"/p:RestoreConfigFile=$nuGetConfigFile\",\r\n        \"/p:Platform=x64\",\r\n        \"/p:Configuration=Release\",\r\n        \"/p:RuntimeIdentifier=win-x64\",\r\n        \"/p:SelfContained=true\",\r\n        \"/p:RestorePackagesPath=$localPackagesDirectory\",\r\n        \"/nologo\"\r\n    )\r\n    $buildResult = Invoke-CommandText -FilePath $MsbuildPath -ArgumentList $buildArguments -WorkingDirectory $packageDirectory\r\n    $resultRecord.Executed = $true\r\n    if ($buildResult.ExitCode -ne 0) {\r\n        $diagnostics = Publish-RestoreFailure \"WAP project build failed\" $resultRecord.DisplayName $buildResult\r\n        $resultRecord.Details = Get-FailureDetailText -Diagnostics $diagnostics -ProcessResult $buildResult\r\n        return $resultRecord\r\n    }\r\n\r\n    Publish-RestoreSuccess \"WAP project build succeeded\" $resultRecord.DisplayName $buildResult | Out-Null\r\n    $resultRecord.Success = $true\r\n    return $resultRecord\r\n}\r\n\r\nfunction Get-PackageReferencesXml {\r\n    param(\r\n        [Parameter(Mandatory = $true)][string]$Scenario,\r\n        [Parameter(Mandatory = $true)][string]$PackageVersion\r\n    )\r\n\r\n    switch ($Scenario.ToLowerInvariant()) {\r\n        'meta' {\r\n            return @\"\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Humanizer\" Version=\"$PackageVersion\" />\r\n  </ItemGroup>\r\n\"@\r\n        }\r\n        'core-lang' {\r\n            return @\"\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Humanizer.Core\" Version=\"$PackageVersion\" />\r\n    <PackageReference Include=\"Humanizer.Core.fr\" Version=\"$PackageVersion\" />\r\n  </ItemGroup>\r\n\"@\r\n        }\r\n        default {\r\n            throw \"Unsupported package smoke scenario '$Scenario'\"\r\n        }\r\n    }\r\n}\r\n\r\nfunction Expand-TemplateDirectory {\r\n    param(\r\n        [Parameter(Mandatory = $true)][string]$TemplateDirectory,\r\n        [Parameter(Mandatory = $true)][string]$DestinationDirectory,\r\n        [Parameter(Mandatory = $true)][hashtable]$Tokens\r\n    )\r\n\r\n    New-Item -ItemType Directory -Path $DestinationDirectory -Force | Out-Null\r\n\r\n    foreach ($item in Get-ChildItem -Path $TemplateDirectory -Recurse -Force) {\r\n        $relativePath = $item.FullName.Substring($TemplateDirectory.Length).TrimStart('\\', '/')\r\n        if ([string]::IsNullOrWhiteSpace($relativePath)) {\r\n            continue\r\n        }\r\n\r\n        if ($item.PSIsContainer) {\r\n            New-Item -ItemType Directory -Path (Join-Path $DestinationDirectory $relativePath) -Force | Out-Null\r\n            continue\r\n        }\r\n\r\n        $targetRelativePath = if ($relativePath.EndsWith('.template')) {\r\n            $relativePath.Substring(0, $relativePath.Length - '.template'.Length)\r\n        } else {\r\n            $relativePath\r\n        }\r\n\r\n        $destinationPath = Join-Path $DestinationDirectory $targetRelativePath\r\n        $destinationParent = Split-Path -Parent $destinationPath\r\n        if (-not [string]::IsNullOrWhiteSpace($destinationParent)) {\r\n            New-Item -ItemType Directory -Path $destinationParent -Force | Out-Null\r\n        }\r\n\r\n        if (-not $relativePath.EndsWith('.template')) {\r\n            Copy-Item -Path $item.FullName -Destination $destinationPath -Force\r\n            continue\r\n        }\r\n\r\n        $content = Get-Content -Raw $item.FullName\r\n        foreach ($token in $Tokens.GetEnumerator()) {\r\n            $content = $content.Replace($token.Key, [string]$token.Value)\r\n        }\r\n        Set-Content -Path $destinationPath -Value $content -Encoding UTF8\r\n    }\r\n}\r\n\r\nfunction New-SmokeProjectNuGetConfig {\r\n    param(\r\n        [Parameter(Mandatory = $true)][string]$ProjectDirectory,\r\n        [Parameter(Mandatory = $true)][string]$PackagesDirectory\r\n    )\r\n\r\n    $globalPackagesDirectory = Join-Path $ProjectDirectory \".nuget\\packages\"\r\n    New-Item -ItemType Directory -Path $globalPackagesDirectory -Force | Out-Null\r\n\r\n    $nuGetConfigPath = Join-Path $ProjectDirectory \"NuGet.config\"\r\n    $nuGetConfigContent = @\"\r\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n  <config>\r\n    <add key=\"globalPackagesFolder\" value=\"$globalPackagesDirectory\" />\r\n  </config>\r\n  <packageSources>\r\n    <clear />\r\n    <add key=\"LocalPackages\" value=\"$PackagesDirectory\" />\r\n    <add key=\"nuget.org\" value=\"https://api.nuget.org/v3/index.json\" />\r\n  </packageSources>\r\n</configuration>\r\n\"@\r\n    Set-Content -Path $nuGetConfigPath -Value $nuGetConfigContent -Encoding UTF8\r\n\r\n    return [PSCustomObject]@{\r\n        GlobalPackagesDirectory = $globalPackagesDirectory\r\n        NuGetConfigPath = $nuGetConfigPath\r\n    }\r\n}\r\n\r\nfunction Expand-TemplateFile {\r\n    param(\r\n        [Parameter(Mandatory = $true)][string]$TemplatePath,\r\n        [Parameter(Mandatory = $true)][string]$DestinationPath,\r\n        [Parameter(Mandatory = $true)][hashtable]$Tokens\r\n    )\r\n\r\n    $content = Get-Content -Raw $TemplatePath\r\n    foreach ($token in $Tokens.GetEnumerator()) {\r\n        $content = $content.Replace($token.Key, [string]$token.Value)\r\n    }\r\n\r\n    $destinationParent = Split-Path -Parent $DestinationPath\r\n    if (-not [string]::IsNullOrWhiteSpace($destinationParent)) {\r\n        New-Item -ItemType Directory -Path $destinationParent -Force | Out-Null\r\n    }\r\n\r\n    Set-Content -Path $DestinationPath -Value $content -Encoding UTF8\r\n}\r\n\r\nfunction Invoke-SmokeProject {\r\n    param(\r\n        [Parameter(Mandatory = $true)][string]$TemplateDirectory,\r\n        [Parameter(Mandatory = $true)][string]$DisplayName,\r\n        [Parameter(Mandatory = $true)][string]$TargetFramework,\r\n        [Parameter(Mandatory = $true)][string]$Scenario,\r\n        [Parameter(Mandatory = $true)][string]$PackageVersion,\r\n        [Parameter(Mandatory = $true)][string]$PackagesDirectory,\r\n        [Parameter(Mandatory = $true)][string]$TempDir,\r\n        [switch]$ExpectAnalyzerDiagnostic\r\n    )\r\n\r\n    $resultRecord = [PSCustomObject]@{\r\n        DisplayName = $DisplayName\r\n        Success = $false\r\n        Details = $null\r\n    }\r\n\r\n    $templateName = Split-Path -Leaf $TemplateDirectory\r\n    $workingDirectory = Join-Path $TempDir (\"smoke-{0}-{1}-{2}\" -f $templateName, $Scenario, ($TargetFramework -replace '[^A-Za-z0-9]', ''))\r\n    if (Test-Path $workingDirectory) {\r\n        Remove-Item -Path $workingDirectory -Recurse -Force -ErrorAction SilentlyContinue\r\n    }\r\n\r\n    Expand-TemplateDirectory `\r\n        -TemplateDirectory $TemplateDirectory `\r\n        -DestinationDirectory $workingDirectory `\r\n        -Tokens @{\r\n            \"__PACKAGE_REFERENCES__\" = Get-PackageReferencesXml -Scenario $Scenario -PackageVersion $PackageVersion\r\n            \"__TARGET_FRAMEWORK__\" = $TargetFramework\r\n        }\r\n\r\n    if ($ExpectAnalyzerDiagnostic) {\r\n        Copy-Item -Path (Join-Path $PSScriptRoot \"fixtures\\PackageSmoke\\AnalyzerProbe.cs\") -Destination (Join-Path $workingDirectory \"AnalyzerProbe.cs\") -Force\r\n    }\r\n\r\n    $projectContext = New-SmokeProjectNuGetConfig -ProjectDirectory $workingDirectory -PackagesDirectory $PackagesDirectory\r\n    $projectFile = Join-Path $workingDirectory \"Consumer.csproj\"\r\n\r\n    $restoreResult = Invoke-CommandText `\r\n        -FilePath \"dotnet\" `\r\n        -ArgumentList @(\"restore\", $projectFile, \"--configfile\", $projectContext.NuGetConfigPath, \"--packages\", $projectContext.GlobalPackagesDirectory) `\r\n        -WorkingDirectory $workingDirectory\r\n    if ($restoreResult.ExitCode -ne 0) {\r\n        $diagnostics = Publish-RestoreFailure \"Smoke project restore failed: $DisplayName\" $DisplayName $restoreResult\r\n        $resultRecord.Details = Get-FailureDetailText -Diagnostics $diagnostics -ProcessResult $restoreResult\r\n        return $resultRecord\r\n    }\r\n\r\n    $buildResult = Invoke-CommandText -FilePath \"dotnet\" -ArgumentList @(\"build\", $projectFile, \"--no-restore\") -WorkingDirectory $workingDirectory\r\n    if ($ExpectAnalyzerDiagnostic) {\r\n        if ($buildResult.ExitCode -eq 0 -or ($buildResult.Output -notmatch 'HUMANIZER001')) {\r\n            $resultRecord.Details = \"Expected HUMANIZER001 analyzer diagnostic for $DisplayName.\"\r\n            return $resultRecord\r\n        }\r\n\r\n        $resultRecord.Success = $true\r\n        return $resultRecord\r\n    }\r\n\r\n    if ($buildResult.ExitCode -ne 0) {\r\n        $diagnostics = Publish-RestoreFailure \"Smoke project build failed: $DisplayName\" $DisplayName $buildResult\r\n        $resultRecord.Details = Get-FailureDetailText -Diagnostics $diagnostics -ProcessResult $buildResult\r\n        return $resultRecord\r\n    }\r\n\r\n    $resultRecord.Success = $true\r\n    return $resultRecord\r\n}\r\n\r\nfunction Invoke-PackageSmokeTests {\r\n    param(\r\n        [Parameter(Mandatory = $true)][string]$PackageVersion,\r\n        [Parameter(Mandatory = $true)][string]$PackagesDirectory,\r\n        [Parameter(Mandatory = $true)][string[]]$TargetFrameworks,\r\n        [Parameter(Mandatory = $true)][string[]]$Hosts,\r\n        [Parameter(Mandatory = $true)][string[]]$Scenarios\r\n    )\r\n\r\n    $resultRecord = [PSCustomObject]@{\r\n        DisplayName = \"Package smoke tests\"\r\n        Success = $false\r\n        Executed = $false\r\n        Details = $null\r\n        Hosts = @($Hosts)\r\n        TargetFrameworks = @($TargetFrameworks)\r\n        Scenarios = @($Scenarios)\r\n    }\r\n\r\n    if ($TargetFrameworks.Count -eq 0 -or $Hosts.Count -eq 0 -or $Scenarios.Count -eq 0) {\r\n        $resultRecord.Success = $true\r\n        $resultRecord.Details = \"Package smoke tests skipped (no frameworks, hosts, or scenarios configured)\"\r\n        return $resultRecord\r\n    }\r\n\r\n    $packageSmokeFixtureRoot = Join-Path $PSScriptRoot \"fixtures\\PackageSmoke\"\r\n    if (-not (Test-Path $packageSmokeFixtureRoot)) {\r\n        $resultRecord.Details = \"Package smoke fixture root not found: $packageSmokeFixtureRoot\"\r\n        return $resultRecord\r\n    }\r\n\r\n    $resolvedPackagesDirectory = (Resolve-Path $PackagesDirectory).Path\r\n    $smokeResults = @()\r\n    foreach ($scenario in $Scenarios) {\r\n        foreach ($targetFramework in $TargetFrameworks) {\r\n            foreach ($hostName in $Hosts) {\r\n                switch ($hostName) {\r\n                    'console' {\r\n                        $smokeResults += Invoke-SmokeProject `\r\n                            -TemplateDirectory (Join-Path $packageSmokeFixtureRoot 'ConsoleConsumer') `\r\n                            -DisplayName \"Console $scenario $targetFramework\" `\r\n                            -TargetFramework $targetFramework `\r\n                            -Scenario $scenario `\r\n                            -PackageVersion $PackageVersion `\r\n                            -PackagesDirectory $resolvedPackagesDirectory `\r\n                            -TempDir $TempDir\r\n                    }\r\n                    'webapi' {\r\n                        if ($targetFramework -eq 'net48') { continue }\r\n                        $smokeResults += Invoke-SmokeProject `\r\n                            -TemplateDirectory (Join-Path $packageSmokeFixtureRoot 'WebApiConsumer') `\r\n                            -DisplayName \"Web API $scenario $targetFramework\" `\r\n                            -TargetFramework $targetFramework `\r\n                            -Scenario $scenario `\r\n                            -PackageVersion $PackageVersion `\r\n                            -PackagesDirectory $resolvedPackagesDirectory `\r\n                            -TempDir $TempDir\r\n                    }\r\n                    'blazor' {\r\n                        if ($targetFramework -eq 'net48') { continue }\r\n                        $smokeResults += Invoke-SmokeProject `\r\n                            -TemplateDirectory (Join-Path $packageSmokeFixtureRoot 'BlazorConsumer') `\r\n                            -DisplayName \"Blazor $scenario $targetFramework\" `\r\n                            -TargetFramework $targetFramework `\r\n                            -Scenario $scenario `\r\n                            -PackageVersion $PackageVersion `\r\n                            -PackagesDirectory $resolvedPackagesDirectory `\r\n                            -TempDir $TempDir\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    $smokeResults += Invoke-SmokeProject `\r\n        -TemplateDirectory (Join-Path $packageSmokeFixtureRoot 'ConsoleConsumer') `\r\n        -DisplayName 'Console analyzer net48' `\r\n        -TargetFramework 'net48' `\r\n        -Scenario 'meta' `\r\n        -PackageVersion $PackageVersion `\r\n        -PackagesDirectory $resolvedPackagesDirectory `\r\n        -TempDir $TempDir `\r\n        -ExpectAnalyzerDiagnostic\r\n\r\n    $smokeResults += Invoke-SmokeProject `\r\n        -TemplateDirectory (Join-Path $packageSmokeFixtureRoot 'BlazorConsumer') `\r\n        -DisplayName 'Blazor analyzer net8.0' `\r\n        -TargetFramework 'net8.0' `\r\n        -Scenario 'meta' `\r\n        -PackageVersion $PackageVersion `\r\n        -PackagesDirectory $resolvedPackagesDirectory `\r\n        -TempDir $TempDir `\r\n        -ExpectAnalyzerDiagnostic\r\n\r\n    $resultRecord.Executed = ($smokeResults.Count -gt 0)\r\n    $failedSmokeResult = $smokeResults | Where-Object { -not $_.Success } | Select-Object -First 1\r\n    if ($null -ne $failedSmokeResult) {\r\n        $resultRecord.Details = $failedSmokeResult.Details\r\n        return $resultRecord\r\n    }\r\n\r\n    $resultRecord.Success = $true\r\n    return $resultRecord\r\n}\r\n\r\nWrite-AzureDevOpsSection \"Humanizer Package Verification\"\r\nWrite-Host \"Package Version: $PackageVersion\"\r\nWrite-Host \"Packages Directory: $PackagesDirectory\"\r\nWrite-Host \"\"\r\n\r\n# Verify the packages directory exists\r\nif (-not (Test-Path $PackagesDirectory)) {\r\n    Write-AzureDevOpsError \"Packages directory not found: $PackagesDirectory\"\r\n    throw \"Packages directory not found: $PackagesDirectory\"\r\n}\r\n\r\n# Find all packages\r\n$mainPackage = Get-ChildItem -Path $PackagesDirectory -Filter \"Humanizer.$PackageVersion.nupkg\" -File\r\n$corePackage = Get-ChildItem -Path $PackagesDirectory -Filter \"Humanizer.Core.$PackageVersion.nupkg\" -File\r\n$satellitePackages = Get-ChildItem -Path $PackagesDirectory -Filter \"Humanizer.Core.*.$PackageVersion.nupkg\" -File | \r\n    Where-Object { $_.Name -ne \"Humanizer.Core.$PackageVersion.nupkg\" }\r\n\r\nif (-not $mainPackage) {\r\n    Write-AzureDevOpsError \"Main Humanizer metapackage not found: Humanizer.$PackageVersion.nupkg\"\r\n    throw \"Main Humanizer metapackage not found\"\r\n}\r\nWrite-Host \"##[command]Found main metapackage: $($mainPackage.Name)\"\r\n\r\nif (-not $corePackage) {\r\n    Write-AzureDevOpsError \"Humanizer.Core package not found: Humanizer.Core.$PackageVersion.nupkg\"\r\n    throw \"Humanizer.Core package not found\"\r\n}\r\nWrite-Host \"##[command]Found core package: $($corePackage.Name)\"\r\n\r\nWrite-Host \"##[command]Found $($satellitePackages.Count) satellite (localized) packages\"\r\n$satellitePackages | ForEach-Object { Write-Host \"  - $($_.Name)\" }\r\nWrite-Host \"\"\r\n\r\n# Create a temporary test directory\r\n$tempPath = if ($env:TEMP) { $env:TEMP } elseif ($env:TMP) { $env:TMP } else { \"/tmp\" }\r\n$tempDir = Join-Path $tempPath \"HumanizerPackageTest_$(New-Guid)\"\r\nNew-Item -ItemType Directory -Path $tempDir -Force | Out-Null\r\n\r\ntry {\r\n    # Create NuGet.config pointing to local packages\r\n    $nugetConfig = Join-Path $tempDir \"NuGet.config\"\r\n    $absolutePackagesDir = (Resolve-Path $PackagesDirectory).Path\r\n    $nugetConfigContent = @\"\r\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n  <packageSources>\r\n    <clear />\r\n    <add key=\"LocalPackages\" value=\"$absolutePackagesDir\" />\r\n    <add key=\"nuget.org\" value=\"https://api.nuget.org/v3/index.json\" />\r\n  </packageSources>\r\n</configuration>\r\n\"@\r\n    Set-Content -Path $nugetConfig -Value $nugetConfigContent\r\n\r\n    # Discover restore targets\r\n    $restoreTestResults = @()\r\n    $verificationFailures = @()\r\n\r\n    $runningOnWindows = $false\r\n    try {\r\n        $runningOnWindows = [System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform([System.Runtime.InteropServices.OSPlatform]::Windows)\r\n    } catch {\r\n        $runningOnWindows = $false\r\n    }\r\n\r\n    $restoreTargets = Get-RestoreTargets -RunningOnWindows $runningOnWindows -MinimumPassingSdkVersion $MinimumPassingSdkVersion\r\n    $smokeTestTargetFrameworkList = @('net8.0', 'net9.0', 'net10.0', 'net11.0')\r\n    if ($runningOnWindows) {\r\n        $smokeTestTargetFrameworkList += 'net48'\r\n    }\r\n    $smokeTestHostList = @('console', 'webapi', 'blazor')\r\n    if ($runningOnWindows -and $IncludeWapProjSmokeTest) {\r\n        $smokeTestHostList += 'wapproj'\r\n    }\r\n    $packageSmokeHostList = @($smokeTestHostList | Where-Object { $_ -ne 'wapproj' })\r\n    $smokeTestScenarioList = @('meta', 'core-lang')\r\n\r\n    foreach ($target in $restoreTargets) {\r\n        Write-AzureDevOpsSection \"Testing package restoration with $($target.DisplayName)\"\r\n\r\n        if ($target.Kind -eq 'dotnet') {\r\n            $testResult = Invoke-DotnetRestoreTarget -Target $target -TempDir $tempDir -NuGetConfig $nugetConfig -PackageVersion $PackageVersion\r\n        } elseif ($target.Kind -eq 'msbuild') {\r\n            $testResult = Invoke-MSBuildRestoreTarget -Target $target -TempDir $tempDir -NuGetConfig $nugetConfig -PackageVersion $PackageVersion\r\n        } else {\r\n            continue\r\n        }\r\n\r\n        if ($null -ne $testResult) {\r\n            $restoreTestResults += $testResult\r\n        }\r\n    }\r\n\r\n    Write-Host \"\"\r\n    Write-AzureDevOpsSection \"Restore Test Results\"\r\n\r\n    $validRestoreResults = @($restoreTestResults | Where-Object { $_ -and -not [string]::IsNullOrWhiteSpace($_.DisplayName) })\r\n\r\n    if ($validRestoreResults.Count -eq 0) {\r\n        Write-AzureDevOpsWarning \"No restore tests were executed\"\r\n    } else {\r\n        foreach ($result in $validRestoreResults) {\r\n            if ($result.Success) {\r\n                Write-Host \"  ✓ $($result.DisplayName)\"\r\n            } else {\r\n                Write-Host \"  ✗ $($result.DisplayName)\"\r\n            }\r\n        }\r\n    }\r\n\r\n    # Verify main metapackage can be restored and pulls in satellites\r\n    Write-Host \"\"\r\n    Write-AzureDevOpsSection \"Verifying Humanizer metapackage dependencies\"\r\n    Push-Location $tempDir\r\n\r\n    $missingSatellites = @()\r\n    $metapackageCheckCompleted = $false\r\n\r\n    Write-Host \"Creating test project...\"\r\n    $metaVerificationSucceeded = $true\r\n    $metaProjectCreated = $false\r\n    $metaProjectRoot = Join-Path (Get-Location).Path \"MetaTest\"\r\n    try {\r\n        New-Item -ItemType Directory -Path $metaProjectRoot -Force | Out-Null\r\n        $metaProjectPath = New-RestoreProjectFile -Directory $metaProjectRoot -ProjectName \"MetaTest\" -TargetFramework \"net8.0\" -PackageVersion $PackageVersion\r\n        $metaProjectCreated = $true\r\n    } catch {\r\n        $metaVerificationSucceeded = $false\r\n        $metaProjectCreated = $false\r\n        $creationDetails = ($_ | Out-String)\r\n        Write-AzureDevOpsErrorDetail \"Failed to create metapackage verification project\" $creationDetails\r\n        $verificationFailures += \"Metapackage verification project creation failed\"\r\n    }\r\n\r\n    if ($metaVerificationSucceeded -and $metaProjectCreated) {\r\n        Set-Location $metaProjectRoot\r\n    }\r\n\r\n    if ($metaVerificationSucceeded -and $metaProjectCreated) {\r\n        Write-Host \"Restoring packages...\"\r\n        $globalRestoreResult = Invoke-CommandText -FilePath \"dotnet\" -ArgumentList @(\"restore\", \"--configfile\", $nugetConfig) -WorkingDirectory (Get-Location).Path\r\n        if ($globalRestoreResult.ExitCode -ne 0) {\r\n            Publish-RestoreFailure \"Failed to restore Humanizer metapackage\" \"Humanizer metapackage\" $globalRestoreResult\r\n            $verificationFailures += \"Metapackage restore failed\"\r\n            $metaVerificationSucceeded = $false\r\n        } else {\r\n            Publish-RestoreSuccess \"Humanizer metapackage restore succeeded\" \"Humanizer metapackage\" $globalRestoreResult\r\n        }\r\n\r\n        if ($metaVerificationSucceeded) {\r\n            $objPath = \"obj/project.assets.json\"\r\n            if (-not (Test-Path $objPath)) {\r\n                Write-AzureDevOpsError \"project.assets.json not found after metapackage restore\"\r\n                $verificationFailures += \"Metapackage restore assets missing\"\r\n                $metaVerificationSucceeded = $false\r\n            } else {\r\n                $assets = Get-Content $objPath | ConvertFrom-Json\r\n                $restoredPackages = $assets.libraries.PSObject.Properties.Name | Where-Object { $_ -like \"Humanizer*\" }\r\n\r\n                Write-Host \"Restored packages:\"\r\n                $restoredPackages | ForEach-Object { Write-Host \"  - $_\" }\r\n                Write-Host \"\"\r\n\r\n                $missingSatellites = @()\r\n                foreach ($satellite in $satellitePackages) {\r\n                    $pkgName = $satellite.Name -replace \"\\.$PackageVersion\\.nupkg$\", \"\"\r\n                    $pkgEntry = \"$pkgName/$PackageVersion\"\r\n                    if ($restoredPackages -notcontains $pkgEntry) {\r\n                        $missingSatellites += $pkgName\r\n                    }\r\n                }\r\n\r\n                $metapackageCheckCompleted = $true\r\n\r\n                if ($missingSatellites.Count -gt 0) {\r\n                    $missingMessage = \"The following satellite packages are NOT dependencies of the Humanizer metapackage: $($missingSatellites -join ', ')\"\r\n                    Write-AzureDevOpsError $missingMessage\r\n                    $verificationFailures += \"Humanizer metapackage dependencies are incomplete\"\r\n                } else {\r\n                    Write-Host \"##[command]✓ All $($satellitePackages.Count) satellite packages are dependencies of the Humanizer metapackage\"\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    if ($metaProjectCreated -and (Get-Location).Path -like \"*MetaTest\") {\r\n        Set-Location ..\r\n    }\r\n\r\n    Pop-Location\r\n    Write-Host \"\"\r\n\r\n    Write-AzureDevOpsSection \"Running package smoke tests\"\r\n    $packageSmokeTestResult = Invoke-PackageSmokeTests `\r\n        -PackageVersion $PackageVersion `\r\n        -PackagesDirectory $PackagesDirectory `\r\n        -TargetFrameworks $smokeTestTargetFrameworkList `\r\n        -Hosts $packageSmokeHostList `\r\n        -Scenarios $smokeTestScenarioList\r\n\r\n    if (-not $packageSmokeTestResult.Success) {\r\n        $verificationFailures += \"Package smoke tests failed\"\r\n    }\r\n\r\n    $wapProjSmokeTestResult = [PSCustomObject]@{\r\n        DisplayName = \"WAP project smoke test\"\r\n        Success = $true\r\n        Executed = $false\r\n        Details = $null\r\n    }\r\n\r\n    if ($smokeTestHostList -contains 'wapproj') {\r\n        $msbuildSmokeTarget = $restoreTargets | Where-Object { $_.Kind -eq 'msbuild' } | Select-Object -First 1\r\n        if ($null -eq $msbuildSmokeTarget) {\r\n            $wapProjSmokeTestResult.Success = $false\r\n            $wapProjSmokeTestResult.Details = \"WAP project smoke test requested but no MSBuild installation was found.\"\r\n            $verificationFailures += \"WAP project smoke tests failed\"\r\n        } else {\r\n            Write-AzureDevOpsSection \"Running WAP project smoke test\"\r\n            $wapProjSmokeTestResult = Invoke-WapProjSmokeTest `\r\n                -PackageVersion $PackageVersion `\r\n                -PackagesDirectory $PackagesDirectory `\r\n                -MsbuildPath $msbuildSmokeTarget.Path `\r\n                -TempDir $tempDir\r\n\r\n            if (-not $wapProjSmokeTestResult.Success) {\r\n                $verificationFailures += \"WAP project smoke tests failed\"\r\n            }\r\n        }\r\n    }\r\n\r\n    Write-AzureDevOpsSection \"Verification Summary\"\r\n\r\n    $restoreSuccesses = @($validRestoreResults | Where-Object { $_.Success })\r\n    $restoreFailures = @($validRestoreResults | Where-Object { -not $_.Success })\r\n    $restorePassedCount = $restoreSuccesses.Count\r\n    $restoreTotalCount = $validRestoreResults.Count\r\n\r\n    $summaryLines = @()\r\n    $summaryLines += \"Summary:\"\r\n    $summaryLines += \"  ✓ Humanizer\"\r\n    $summaryLines += \"  ✓ Humanizer.Core\"\r\n\r\n    $satelliteLine = \"  ✓ Satellite packages verified: $($satellitePackages.Count)\"\r\n    if ($satellitePackages.Count -eq 0) {\r\n        $satelliteLine = \"  ✗ Satellite packages verified: 0\"\r\n    }\r\n    $summaryLines += $satelliteLine\r\n\r\n    if ($metapackageCheckCompleted -and $missingSatellites.Count -eq 0) {\r\n        $summaryLines += \"  ✓ All satellites are dependencies of Humanizer\"\r\n    } elseif ($metapackageCheckCompleted) {\r\n        $summaryLines += \"  ✗ All satellites are dependencies of Humanizer\"\r\n    } else {\r\n        $summaryLines += \"  ✗ All satellites are dependencies of Humanizer (not verified)\"\r\n    }\r\n\r\n    if ($packageSmokeTestResult.Success -and $packageSmokeTestResult.Executed) {\r\n        $summaryLines += \"  ✓ Package smoke tests: $($packageSmokeTestResult.TargetFrameworks -join ', ') / $($packageSmokeTestResult.Hosts -join ', ') / $($packageSmokeTestResult.Scenarios -join ', ')\"\r\n    } elseif ($packageSmokeTestResult.Executed) {\r\n        $summaryLines += \"  ✗ Package smoke tests: $($packageSmokeTestResult.TargetFrameworks -join ', ') / $($packageSmokeTestResult.Hosts -join ', ') / $($packageSmokeTestResult.Scenarios -join ', ')\"\r\n    } else {\r\n        $summaryLines += \"  ✓ Package smoke tests skipped\"\r\n    }\r\n\r\n    if ($smokeTestHostList -contains 'wapproj') {\r\n        if ($wapProjSmokeTestResult.Success -and $wapProjSmokeTestResult.Executed) {\r\n            $summaryLines += \"  ✓ WAP project smoke test\"\r\n        } elseif ($wapProjSmokeTestResult.Executed -or -not $wapProjSmokeTestResult.Success) {\r\n            $summaryLines += \"  ✗ WAP project smoke test\"\r\n        } else {\r\n            $summaryLines += \"  ✓ WAP project smoke test skipped\"\r\n        }\r\n    }\r\n\r\n    $summaryLines += \"\"\r\n    $summaryLines += \"Restore tests passed: $restorePassedCount/$restoreTotalCount\"\r\n\r\n    if ($restoreTotalCount -eq 0) {\r\n        $summaryLines += \"  (no restore tests executed)\"\r\n    } else {\r\n        foreach ($result in $restoreSuccesses) {\r\n            $formatted = Format-RestoreSummaryLine -Result $result -PrefixSymbol \"✓\"\r\n            if ($formatted) { $summaryLines += $formatted }\r\n        }\r\n    }\r\n\r\n    if ($restoreFailures.Count -gt 0) {\r\n        $summaryLines += \"Restore tests failed:\"\r\n        foreach ($failure in $restoreFailures) {\r\n            $formattedFailure = Format-RestoreSummaryLine -Result $failure -PrefixSymbol \"✗\"\r\n            if ($formattedFailure) { $summaryLines += $formattedFailure }\r\n        }\r\n    }\r\n\r\n    if ($verificationFailures.Count -gt 0) {\r\n        $summaryLines += \"\"\r\n        foreach ($failure in $verificationFailures) {\r\n            $summaryLines += \"  ✗ $failure\"\r\n        }\r\n    }\r\n\r\n    foreach ($line in $summaryLines) {\r\n        Write-Host $line\r\n    }\r\n\r\n    $summaryText = $summaryLines -join \"`n\"\r\n\r\n    $hasFailures = ($restoreFailures.Count -gt 0) -or ($verificationFailures.Count -gt 0)\r\n\r\n    if ($hasFailures) {\r\n        Write-AzureDevOpsError $summaryText\r\n        $completionMessage = ConvertTo-AzureDevOpsCommandValue $summaryText\r\n        Write-Host \"##vso[task.complete result=Failed;]$completionMessage\"\r\n    } else {\r\n        if ($script:AzureDevOpsWarningLogged) {\r\n            Write-AzureDevOpsWarning $summaryText\r\n        } else {\r\n            $completionMessage = ConvertTo-AzureDevOpsCommandValue $summaryText\r\n            Write-Host \"##vso[task.complete result=Succeeded;]$completionMessage\"\r\n        }\r\n    }\r\n\r\n} catch {\r\n    $catchText = ($_ | Out-String).Trim()\r\n    Write-AzureDevOpsErrorDetail $_.Exception.Message $catchText\r\n    throw\r\n} finally {\r\n    # Cleanup\r\n    if (Test-Path $tempDir) {\r\n        Write-Host \"\"\r\n        Write-Host \"Cleaning up temporary directory...\"\r\n        Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue\r\n    }\r\n}\r\n"
  },
  {
    "path": "version.json",
    "content": "{\n  \"version\": \"3.1.0-dev.{height}\",\n  \"publicReleaseRefSpec\": [\n    \"^refs/heads/main$\", // we release out of main\n    \"^refs/heads/rel/v\\\\d+\\\\.\\\\d+\" // we also release branches starting with rel/vN.N\n  ],\n  \"nugetPackageVersion\":{\n    \"semVer\": 2\n  }\n}\n"
  }
]