diff --git a/.gitattributes b/.gitattributes
index b263871..1c2fc12 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -4,7 +4,7 @@
# Ignore all test and documentation with "export-ignore".
/.gitattributes export-ignore
/.gitignore export-ignore
-/.travis.yml export-ignore
/phpunit.xml.dist export-ignore
-/.scrutinizer.yml export-ignore
/tests export-ignore
+/docs export-ignore
+php_cs.dist.php export-ignore
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..5ccc87c
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+github: spatie
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..141e28e
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,8 @@
+blank_issues_enabled: true
+contact_links:
+ - name: Feature Request
+ url: https://github.com/spatie/laravel-translatable/discussions/new?category=ideas
+ about: Share ideas for new features
+ - name: Ask a Question
+ url: https://github.com/spatie/laravel-translatable/discussions/new?category=q-a
+ about: Ask the community for help
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..a76dd83
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,8 @@
+version: 2
+
+updates:
+
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "weekly"
diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml
new file mode 100644
index 0000000..531772b
--- /dev/null
+++ b/.github/workflows/dependabot-auto-merge.yml
@@ -0,0 +1,40 @@
+name: dependabot-auto-merge
+on: pull_request_target
+
+permissions:
+ pull-requests: write
+ contents: write
+
+jobs:
+ dependabot:
+ runs-on: ubuntu-latest
+ if: ${{ github.actor == 'dependabot[bot]' }}
+ steps:
+
+ - name: Dependabot metadata
+ id: metadata
+ uses: dependabot/fetch-metadata@v2.4.0
+ with:
+ github-token: "${{ secrets.GITHUB_TOKEN }}"
+ compat-lookup: true
+
+ - name: Auto-merge Dependabot PRs for semver-minor updates
+ if: ${{steps.metadata.outputs.update-type == 'version-update:semver-minor'}}
+ run: gh pr merge --auto --merge "$PR_URL"
+ env:
+ PR_URL: ${{github.event.pull_request.html_url}}
+ GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
+
+ - name: Auto-merge Dependabot PRs for semver-patch updates
+ if: ${{steps.metadata.outputs.update-type == 'version-update:semver-patch'}}
+ run: gh pr merge --auto --merge "$PR_URL"
+ env:
+ PR_URL: ${{github.event.pull_request.html_url}}
+ GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
+
+ - name: Auto-merge Dependabot PRs for Action major versions when compatibility is higher than 90%
+ if: ${{steps.metadata.outputs.package-ecosystem == 'github_actions' && steps.metadata.outputs.update-type == 'version-update:semver-major' && steps.metadata.outputs.compatibility-score >= 90}}
+ run: gh pr merge --auto --merge "$PR_URL"
+ env:
+ PR_URL: ${{github.event.pull_request.html_url}}
+ GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
diff --git a/.github/workflows/php-cs-fixer.yml b/.github/workflows/php-cs-fixer.yml
new file mode 100644
index 0000000..fce0e57
--- /dev/null
+++ b/.github/workflows/php-cs-fixer.yml
@@ -0,0 +1,28 @@
+name: Fix PHP code style issues
+
+on:
+ push:
+ paths:
+ - '**.php'
+
+permissions:
+ contents: write
+
+jobs:
+ php-code-styling:
+ runs-on: ubuntu-latest
+ timeout-minutes: 5
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.head_ref }}
+
+ - name: Fix PHP code style issues
+ uses: aglipanci/laravel-pint-action@2.6
+
+ - name: Commit changes
+ uses: stefanzweifel/git-auto-commit-action@v7
+ with:
+ commit_message: Fix styling
diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
new file mode 100644
index 0000000..fe3b7ef
--- /dev/null
+++ b/.github/workflows/run-tests.yml
@@ -0,0 +1,53 @@
+name: run-tests
+
+on: [push, pull_request]
+
+jobs:
+ test:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: true
+ matrix:
+ os: [ubuntu-latest]
+ php: [8.4, 8.3, 8.2, 8.1, 8.0]
+ laravel: [12.*, 11.*, 10.*]
+ stability: [prefer-lowest, prefer-stable]
+ include:
+ - laravel: 12.*
+ testbench: 10.*
+ - laravel: 11.*
+ testbench: 9.*
+ - laravel: 10.*
+ testbench: 8.*
+ exclude:
+ - laravel: 12.*
+ php: 8.1
+ - laravel: 12.*
+ php: 8.0
+ - laravel: 11.*
+ php: 8.1
+ - laravel: 11.*
+ php: 8.0 #
+ - laravel: 10.*
+ php: 8.0
+
+ name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.stability }} - ${{ matrix.os }}
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ matrix.php }}
+ extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, imagick
+ coverage: none
+
+ - name: Install dependencies
+ run: |
+ composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" --no-interaction
+ composer update --${{ matrix.stability }} --prefer-dist --no-interaction
+
+ - name: Execute tests
+ run: vendor/bin/pest
diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml
new file mode 100644
index 0000000..d9e92e7
--- /dev/null
+++ b/.github/workflows/update-changelog.yml
@@ -0,0 +1,28 @@
+name: "Update Changelog"
+
+on:
+ release:
+ types: [released]
+
+jobs:
+ update:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ ref: main
+
+ - name: Update Changelog
+ uses: stefanzweifel/changelog-updater-action@v1
+ with:
+ latest-version: ${{ github.event.release.name }}
+ release-notes: ${{ github.event.release.body }}
+
+ - name: Commit updated CHANGELOG
+ uses: stefanzweifel/git-auto-commit-action@v7
+ with:
+ branch: main
+ commit_message: Update CHANGELOG
+ file_pattern: CHANGELOG.md
diff --git a/.gitignore b/.gitignore
index f02a2f8..b06a48e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,6 @@
build
composer.lock
-docs
vendor
+.phpunit.result.cache
+.php-cs-fixer.cache
+.idea
diff --git a/.phpunit.cache/test-results b/.phpunit.cache/test-results
new file mode 100644
index 0000000..96aead2
--- /dev/null
+++ b/.phpunit.cache/test-results
@@ -0,0 +1 @@
+{"version":"pest_3.7.4","defects":[],"times":{"P\\Tests\\EventTest::__pest_evaluable_it_will_fire_an_event_when_a_translation_has_been_set":0.013,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_package_fallback_locale_translation_when_getting_an_unknown_locale":0.008,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_default_fallback_locale_translation_when_getting_an_unknown_locale":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_provides_a_flog_to_not_return_fallback_locale_translation_when_getting_an_unknown_locale":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_fallback_locale_translation_when_getting_an_unknown_locale_and_fallback_is_true":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_execute_callback_fallback_when_getting_an_unknown_locale_and_fallback_callback_is_enabled":0.005,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_use_callback_fallback_return_value_as_translation":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_wont_use_callback_fallback_return_value_as_translation_if_it_is_not_a_string":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_wont_execute_callback_fallback_when_getting_an_existing_translation":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_wont_fail_if_callback_fallback_throw_exception":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_an_empty_string_when_getting_an_unknown_locale_and_fallback_is_not_set":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_an_empty_string_when_getting_an_unknown_locale_and_fallback_is_empty":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_save_a_translated_attribute":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_translated_values_when_creating_a_model":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_save_multiple_translations":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_the_value_of_the_current_locale_when_using_the_property":0.002,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_get_all_translations_in_one_go":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_get_specified_translations_in_one_go":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_get_all_translations_for_all_translatable_attributes_in_one_go":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_get_specified_translations_for_all_translatable_attributes_in_one_go":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_get_the_locales_which_have_a_translation":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_forget_a_translation":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_forget_all_translations_of_field":0.002,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_forget_all_translations_of_field_and_make_field_null":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_forget_a_field_with_mutator_translation":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_forget_all_translations":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_throw_an_exception_when_trying_to_translate_an_untranslatable_attribute":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_is_compatible_with_accessors_on_non_translatable_attributes":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_use_accessors_on_translated_attributes":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_be_converted_to_array_when_using_accessors_on_translated_attributes":0.002,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_use_mutators_on_translated_attributes":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_translations_for_default_language":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_multiple_translations_at_once":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_check_if_an_attribute_is_translatable":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_check_if_an_attribute_has_translation":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_correctly_set_a_field_when_a_mutator_is_defined":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_multiple_translations_when_a_mutator_is_defined":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_multiple_translations_on_field_when_a_mutator_is_defined":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_uses_the_attribute_to_mutate_the_translated_value":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_translate_a_field_based_on_the_translations_of_another_one":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_handle_null_value_from_database":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_get_all_translations":0.002,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_fallback_locale_translation_when_getting_an_empty_translation_from_the_locale":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_correct_translation_value_if_value_is_set_to_zero":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_not_return_fallback_value_if_value_is_set_to_zero":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_not_remove_zero_value_of_other_locale_in_database":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_be_translated_based_on_given_locale":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_and_fetch_attributes_based_on_set_locale":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_replace_translations":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_use_any_locale_if_given_locale_not_set":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_set_translation_when_fallback_any_set":0.002,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_fallback_translation_when_fallback_any_set":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_provides_a_flog_to_not_return_any_translation_when_getting_an_unknown_locale":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_default_fallback_locale_translation_when_getting_an_unknown_locale_with_fallback_any":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_all_locales_when_getting_all_translations":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_queries_the_database_whether_a_locale_exists":0.002,"P\\Tests\\TranslatableTest::__pest_evaluable_it_queries_the_database_for_multiple_locales":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_queries_the_database_whether_a_value_exists_in_a_locale":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_queries_the_database_whether_a_value_exists_in_a_multiple_locales":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_disable_attribute_locale_fallback_on_a_per_model_basis":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_fallback_locale_on_model":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_translations_macro_meets_expectations#(['english'], 'en', 'english')":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_translations_macro_meets_expectations#(['english', 'english'], ['en', 'nl'], 'english')":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_translations_macro_meets_expectations#(['english', 'dutch'], ['en', 'nl'], ['english', 'dutch'])":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_should_return_null_when_the_underlying_attribute_in_database_is_null":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_should_return_locales_with_empty_string_translations_when_allowEmptyStringForTranslation_is_true":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_should_not_return_locales_with_empty_string_translations_when_allowEmptyStringForTranslation_is_false":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_should_return_locales_with_null_translations_when_allowNullForTranslation_is_true":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_should_not_return_locales_with_null_translations_when_allowNullForTranslation_is_false":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_an_array_list_as_value_for_translation_using__setTranslation_":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_an_array_list_as_value_for_translation_using_default_local":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_treat_an_empty_array_as_value_for_clearing_translations":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_and_retrieve_translations_for_nested_fields":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_uses_mutators_for_setting_and_getting_translated_values_of_nested_fields":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_should_return_null_when_translation_is_null_and_allowNullForTranslation_is_true":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_should_return_empty_string_when_translation_is_null_and_allowNullForTranslation_is_false":0}}
\ No newline at end of file
diff --git a/.scrutinizer.yml b/.scrutinizer.yml
deleted file mode 100644
index df16b68..0000000
--- a/.scrutinizer.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-filter:
- excluded_paths: [tests/*]
-
-checks:
- php:
- remove_extra_empty_lines: true
- remove_php_closing_tag: true
- remove_trailing_whitespace: true
- fix_use_statements:
- remove_unused: true
- preserve_multiple: false
- preserve_blanklines: true
- order_alphabetically: true
- fix_php_opening_tag: true
- fix_linefeed: true
- fix_line_ending: true
- fix_identation_4spaces: true
- fix_doc_comments: true
-
diff --git a/.styleci.yml b/.styleci.yml
deleted file mode 100644
index 0285f17..0000000
--- a/.styleci.yml
+++ /dev/null
@@ -1 +0,0 @@
-preset: laravel
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index bd1d94e..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-language: php
-
-php:
- - 7.2
- - 7.3
-
-env:
- matrix:
- - COMPOSER_FLAGS="--prefer-lowest"
- - COMPOSER_FLAGS=""
-
-before_script:
- - travis_retry composer self-update
- - travis_retry composer update ${COMPOSER_FLAGS} --no-interaction --prefer-source
-
-script:
- - phpunit --coverage-text --coverage-clover=coverage.clover
-
-after_script:
- - php vendor/bin/ocular code-coverage:upload --format=php-clover coverage.clover
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ec816be..8ebff21 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,401 @@
All notable changes to `laravel-translatable` will be documented in this file
+## 6.11.4 - 2025-02-20
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.11.3...6.11.4
+
+## 6.11.3 - 2025-02-14
+
+### What's Changed
+
+* Allow null value in translations if allowNullForTranslation is true by @dont-know-php in https://github.com/spatie/laravel-translatable/pull/488
+
+### New Contributors
+
+* @dont-know-php made their first contribution in https://github.com/spatie/laravel-translatable/pull/488
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.10.2...6.11.3
+
+## 6.10.2 - 2025-02-03
+
+### What's Changed
+
+* Fix casts on initialization of HasTranslation by @thaqebon in https://github.com/spatie/laravel-translatable/pull/486
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.10.1...6.10.2
+
+## 6.10.1 - 2025-01-31
+
+### What's Changed
+
+* Handle null database values as null in translations by @alipadron in https://github.com/spatie/laravel-translatable/pull/479
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.10.0...6.10.1
+
+## 6.10.0 - 2025-01-31
+
+### What's Changed
+
+* Support clearing translations using an empty array by @alipadron in https://github.com/spatie/laravel-translatable/pull/478
+* Bump dependabot/fetch-metadata from 2.2.0 to 2.3.0 by @dependabot in https://github.com/spatie/laravel-translatable/pull/484
+* Add support for nested key translations by @thaqebon in https://github.com/spatie/laravel-translatable/pull/483
+
+### New Contributors
+
+* @thaqebon made their first contribution in https://github.com/spatie/laravel-translatable/pull/483
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.9.3...6.10.0
+
+## 6.9.3 - 2024-12-16
+
+### What's Changed
+
+* Revert return value change when column value is `null` by @vencelkatai in https://github.com/spatie/laravel-translatable/pull/474
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.9.2...6.9.3
+
+## 6.9.2 - 2024-12-11
+
+### What's Changed
+
+* Improve `setAttribute` to handle array list as value for translation by @alipadron in https://github.com/spatie/laravel-translatable/pull/469
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.9.1...6.9.2
+
+## 6.9.1 - 2024-12-11
+
+### What's Changed
+
+* Fix attribute mutators by @vencelkatai in https://github.com/spatie/laravel-translatable/pull/470
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.9.0...6.9.1
+
+## 6.9.0 - 2024-12-09
+
+### What's Changed
+
+* PHP 8.4 deprecates implicitly nullable parameter types. by @selfsimilar in https://github.com/spatie/laravel-translatable/pull/458
+* Add .idea to .gitignore, PHP CS Fixer to dev dependencies, and rename PHP CS Fixer config by @alipadron in https://github.com/spatie/laravel-translatable/pull/466
+* Allow configuration for handling null and empty strings in translations (Fixes #456) by @alipadron in https://github.com/spatie/laravel-translatable/pull/465
+
+### New Contributors
+
+* @selfsimilar made their first contribution in https://github.com/spatie/laravel-translatable/pull/458
+* @alipadron made their first contribution in https://github.com/spatie/laravel-translatable/pull/466
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.8.0...6.9.0
+
+## 6.8.0 - 2024-07-24
+
+### What's Changed
+
+* Bump dependabot/fetch-metadata from 2.1.0 to 2.2.0 by @dependabot in https://github.com/spatie/laravel-translatable/pull/453
+* Added operand for json scopes by @rcerljenko in https://github.com/spatie/laravel-translatable/pull/454
+
+### New Contributors
+
+* @rcerljenko made their first contribution in https://github.com/spatie/laravel-translatable/pull/454
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.7.1...6.8.0
+
+## 6.7.1 - 2024-05-14
+
+### What's Changed
+
+* fix: PHPDoc block in Translatable facade by @kyryl-bogach in https://github.com/spatie/laravel-translatable/pull/448
+* Bump dependabot/fetch-metadata from 1.6.0 to 2.1.0 by @dependabot in https://github.com/spatie/laravel-translatable/pull/446
+
+### New Contributors
+
+* @kyryl-bogach made their first contribution in https://github.com/spatie/laravel-translatable/pull/448
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.7.0...6.7.1
+
+## 6.7.0 - 2024-05-13
+
+### What's Changed
+
+* Add method comment to Facade for IDE autocompletion by @Muetze42 in https://github.com/spatie/laravel-translatable/pull/438
+* Docs: add type declarations `array $translatable` by @fahrim in https://github.com/spatie/laravel-translatable/pull/441
+* [FEAT] add ability for filtering a column's locale or multiple locale… by @AbdelrahmanBl in https://github.com/spatie/laravel-translatable/pull/447
+
+### New Contributors
+
+* @fahrim made their first contribution in https://github.com/spatie/laravel-translatable/pull/441
+* @AbdelrahmanBl made their first contribution in https://github.com/spatie/laravel-translatable/pull/447
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.6.2...6.7.0
+
+## 6.6.2 - 2024-03-01
+
+### What's Changed
+
+* Fix toArray when using accessors on translatable attributes by @vencelkatai in https://github.com/spatie/laravel-translatable/pull/437
+
+### New Contributors
+
+* @vencelkatai made their first contribution in https://github.com/spatie/laravel-translatable/pull/437
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.6.1...6.6.2
+
+## 6.6.1 - 2024-02-26
+
+### What's Changed
+
+* fix: allow raw searchable umlauts by @Muetze42 in https://github.com/spatie/laravel-translatable/pull/436
+
+### New Contributors
+
+* @Muetze42 made their first contribution in https://github.com/spatie/laravel-translatable/pull/436
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.6.0...6.6.1
+
+## 6.6.0 - 2024-02-23
+
+### What's Changed
+
+* Add laravel 11 support by @mokhosh in https://github.com/spatie/laravel-translatable/pull/434
+
+### New Contributors
+
+* @mokhosh made their first contribution in https://github.com/spatie/laravel-translatable/pull/434
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.5.5...6.6.0
+
+## 6.5.5 - 2023-12-06
+
+### What's Changed
+
+* Revert "Keep null value" by @mabdullahsari in https://github.com/spatie/laravel-translatable/pull/428
+
+### New Contributors
+
+* @mabdullahsari made their first contribution in https://github.com/spatie/laravel-translatable/pull/428
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.5.4...6.5.5
+
+## 6.5.4 - 2023-12-01
+
+### What's Changed
+
+* Bump actions/checkout from 3 to 4 by @dependabot in https://github.com/spatie/laravel-translatable/pull/413
+* Keep the number of translations even with null values by @sdebacker in https://github.com/spatie/laravel-translatable/pull/427
+* Bump stefanzweifel/git-auto-commit-action from 4 to 5 by @dependabot in https://github.com/spatie/laravel-translatable/pull/418
+
+### New Contributors
+
+* @sdebacker made their first contribution in https://github.com/spatie/laravel-translatable/pull/427
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.5.3...6.5.4
+
+## 6.5.3 - 2023-07-19
+
+### What's Changed
+
+- Bump dependabot/fetch-metadata from 1.5.1 to 1.6.0 by @dependabot in https://github.com/spatie/laravel-translatable/pull/398
+- handle new attribute mutator :boom: by @messi89 in https://github.com/spatie/laravel-translatable/pull/402
+
+### New Contributors
+
+- @messi89 made their first contribution in https://github.com/spatie/laravel-translatable/pull/402
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.5.2...6.5.3
+
+## 6.5.2 - 2023-06-20
+
+### What's Changed
+
+- Bump dependabot/fetch-metadata from 1.4.0 to 1.5.1 by @dependabot in https://github.com/spatie/laravel-translatable/pull/394
+- Convert static methods to scopes by @gdebrauwer in https://github.com/spatie/laravel-translatable/pull/396
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.5.1...6.5.2
+
+## 6.5.1 - 2023-05-06
+
+### What's Changed
+
+- Bump dependabot/fetch-metadata from 1.3.6 to 1.4.0 by @dependabot in https://github.com/spatie/laravel-translatable/pull/389
+- Add getFallbackLocale method by @gdebrauwer in https://github.com/spatie/laravel-translatable/pull/391
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.5.0...6.5.1
+
+## 6.5.0 - 2023-04-20
+
+### What's Changed
+
+- update customize-the-toarray-method.md by @moham96 in https://github.com/spatie/laravel-translatable/pull/387
+- Add macro for `$this->translations()` in factories by @bram-pkg in https://github.com/spatie/laravel-translatable/pull/382
+
+### New Contributors
+
+- @moham96 made their first contribution in https://github.com/spatie/laravel-translatable/pull/387
+- @bram-pkg made their first contribution in https://github.com/spatie/laravel-translatable/pull/382
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.4.0...6.5.0
+
+## 6.4.0 - 2023-03-19
+
+### What's Changed
+
+- Bump dependabot/fetch-metadata from 1.3.5 to 1.3.6 by @dependabot in https://github.com/spatie/laravel-translatable/pull/376
+- Fix badge with `tests` status in `README.md` by @gomzyakov in https://github.com/spatie/laravel-translatable/pull/377
+- Update README.md by @alirezasalehizadeh in https://github.com/spatie/laravel-translatable/pull/381
+- Enable fallback locale on a per model basis by @yoeriboven in https://github.com/spatie/laravel-translatable/pull/380
+
+### New Contributors
+
+- @gomzyakov made their first contribution in https://github.com/spatie/laravel-translatable/pull/377
+- @alirezasalehizadeh made their first contribution in https://github.com/spatie/laravel-translatable/pull/381
+- @yoeriboven made their first contribution in https://github.com/spatie/laravel-translatable/pull/380
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.3.0...6.4.0
+
+## 6.3.0 - 2023-01-14
+
+### What's Changed
+
+- Laravel 10.x support by @erikn69 in https://github.com/spatie/laravel-translatable/pull/374
+
+### New Contributors
+
+- @erikn69 made their first contribution in https://github.com/spatie/laravel-translatable/pull/374
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.2.0...6.3.0
+
+## 6.2.0 - 2022-12-23
+
+### What's Changed
+
+- Add Dependabot Automation by @patinthehat in https://github.com/spatie/laravel-translatable/pull/366
+- Add PHP 8.2 Support by @patinthehat in https://github.com/spatie/laravel-translatable/pull/367
+- Bump actions/checkout from 2 to 3 by @dependabot in https://github.com/spatie/laravel-translatable/pull/368
+- Added whereLocale and whereLocales methods by @ahmetbarut in https://github.com/spatie/laravel-translatable/pull/370
+
+### New Contributors
+
+- @dependabot made their first contribution in https://github.com/spatie/laravel-translatable/pull/368
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.1.0...6.2.0
+
+## 6.1.0 - 2022-10-21
+
+### What's Changed
+
+- PHPUnit to Pest Converter by @freekmurze in https://github.com/spatie/laravel-translatable/pull/335
+- Fix typo in "Getting and setting translations" by @sami-cha in https://github.com/spatie/laravel-translatable/pull/346
+- Fix typo in advanced usage docs directory name by @greatislander in https://github.com/spatie/laravel-translatable/pull/347
+- Fixed example for forgetAllTranslations() method. by @odeland in https://github.com/spatie/laravel-translatable/pull/348
+- added locales method by @ahmetbarut in https://github.com/spatie/laravel-translatable/pull/361
+
+### New Contributors
+
+- @sami-cha made their first contribution in https://github.com/spatie/laravel-translatable/pull/346
+- @greatislander made their first contribution in https://github.com/spatie/laravel-translatable/pull/347
+- @odeland made their first contribution in https://github.com/spatie/laravel-translatable/pull/348
+- @ahmetbarut made their first contribution in https://github.com/spatie/laravel-translatable/pull/361
+
+**Full Changelog**: https://github.com/spatie/laravel-translatable/compare/6.0.0...6.1.0
+
+## 6.0.0 - 2022-03-07
+
+- improved fallback customisations
+- modernized code base
+- drop support for Laravel 8
+
+## 5.2.0 - 2022-01-13
+
+- support Laravel 9
+
+## 5.0.3 - 2021-10-04
+
+- solve the string value issue in filterTranslations method (#300)
+
+## 5.0.2 - 2021-09-28
+
+- specify locales in get translations method (#299)
+
+## 5.0.1 - 2021-07-15
+
+- fix return types of getTranslation (#286)
+
+## 5.0.0 - 2021-03-26
+
+- require PHP 8+
+- convert syntax to PHP 8
+- drop support for PHP 7.x
+- drop support for Laravel 6.x
+- implement `spatie/laravel-package-tools`
+
+## 4.6.0 - 2020-11-19
+
+- add support for PHP 8.0 (#241)
+- drop support for Laravel 5.8 (#241)
+
+## 4.5.2 - 2020-10-22
+
+- revert #235
+
+## 4.5.1 - 2020-10-22
+
+- use string casting for translatable columns (#235)
+
+## 4.5.0 2020-10-03
+
+- add replaceTranslations method (#231)
+
+## 4.4.3 - 2020-10-2
+
+- rename `withLocale` to `usingLocale`
+
+## 4.4.2 - 2020-10-02
+
+- elegant syntax update (#229)
+
+## 4.4.1 - 2020-09-06
+
+- add support for Laravel 8 (#226)
+
+## 4.4.0 - 2020-07-09
+
+- make possible to set multiple translations on mutator model field with array (#216)
+
+## 4.3.2 - 2020-04-30
+
+- fix `forgetTranslation` & `forgetAllTranslations` on fields with mutator (#205)
+
+## 4.3.1 - 2020-03-07
+
+- Lumen fix (#201)
+
+## 4.3.0 - 2020-03-02
+
+- add support for Laravel 7
+
+## 4.2.2 - 2020-01-20
+
+- open up for non-model objects (#186)
+
+## 4.2.1 - 2019-10-03
+
+- add third param to translate method (#177)
+
+## 4.2.0 - 2019-09-04
+
+- make compatible with Laravel 6
+
+## 4.1.4 - 2019-08-28
+
+- re-added the `translatable.fallback_local` config which overrule `app.fallback_local` (see https://github.com/spatie/laravel-translatable/issues/170)
+
+## 4.1.3 - 2019-06-16
+
+- improve dependencies
+
+## 4.1.2 - 2019-06-06
+
+- allow false and true values in translations
+
## 4.1.1 - 2019-02-27
- fix service provider error
@@ -45,51 +440,67 @@ All notable changes to `laravel-translatable` will be documented in this file
- add support for Laravel 5.7
## 2.2.0 - 2018-03-09
+
- made it possible to get all translations in one go
## 2.1.5 - 2018-02-28
+
- better handling of `null` values
## 2.1.4 - 2018-02-08
+
- add support for L5.6
## 2.1.3 - 2018-01-24
+
- make locale handling more flexible
## 2.1.2 - 2017-12-24
+
- fix for using translations within translations
## 2.1.1 - 2017-12-20
+
- fix event `key` attribute
- fix support for mutators
## 2.1.0 - 2017-09-21
+
- added support for setting a translation directly through the property
## 2.0.0 - 2017-08-30
+
- added support for Laravel 5.5, dropped support for all older versions
- rename config file from `laravel-translatable` to `translatable`
## 1.3.0 - 2017-06-12
+
- add `forgetAllTranslations`
## 1.2.2 - 2016-01-27
+
- improve support for fallback locale
## 1.2.1 - 2016-01-23
+
- improve compatibility for Laravel 5.4
## 1.2.0 - 2016-01-23
+
- add compatibility for Laravel 5.4
## 1.1.2 - 2016-10-02
+
- made `isTranslatableAttribute` public
## 1.1.1 - 2016-08-24
+
- add L5.3 compatibility
## 1.1.0 - 2016-05-02
+
- added support for a fallback locale
## 1.0.0 - 2016-04-10
+
- initial release
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index 4da74e3..0000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,55 +0,0 @@
-# Contributing
-
-Contributions are **welcome** and will be fully **credited**.
-
-Please read and understand the contribution guide before creating an issue or pull request.
-
-## Etiquette
-
-This project is open source, and as such, the maintainers give their free time to build and maintain the source code
-held within. They make the code freely available in the hope that it will be of use to other developers. It would be
-extremely unfair for them to suffer abuse or anger for their hard work.
-
-Please be considerate towards maintainers when raising issues or presenting pull requests. Let's show the
-world that developers are civilized and selfless people.
-
-It's the duty of the maintainer to ensure that all submissions to the project are of sufficient
-quality to benefit the project. Many developers have different skillsets, strengths, and weaknesses. Respect the maintainer's decision, and do not be upset or abusive if your submission is not used.
-
-## Viability
-
-When requesting or submitting new features, first consider whether it might be useful to others. Open
-source projects are used by many developers, who may have entirely different needs to your own. Think about
-whether or not your feature is likely to be used by other users of the project.
-
-## Procedure
-
-Before filing an issue:
-
-- Attempt to replicate the problem, to ensure that it wasn't a coincidental incident.
-- Check to make sure your feature suggestion isn't already present within the project.
-- Check the pull requests tab to ensure that the bug doesn't have a fix in progress.
-- Check the pull requests tab to ensure that the feature isn't already in progress.
-
-Before submitting a pull request:
-
-- Check the codebase to ensure that your feature doesn't already exist.
-- Check the pull requests to ensure that another person hasn't already submitted the feature or fix.
-
-## Requirements
-
-If the project maintainer has any additional requirements, you will find them listed here.
-
-- **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - The easiest way to apply the conventions is to install [PHP Code Sniffer](http://pear.php.net/package/PHP_CodeSniffer).
-
-- **Add tests!** - Your patch won't be accepted if it doesn't have tests.
-
-- **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date.
-
-- **Consider our release cycle** - We try to follow [SemVer v2.0.0](http://semver.org/). Randomly breaking public APIs is not an option.
-
-- **One pull request per feature** - If you want to do more than one thing, send multiple pull requests.
-
-- **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](http://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting.
-
-**Happy coding**!
diff --git a/README.md b/README.md
index c9689ee..c959042 100644
--- a/README.md
+++ b/README.md
@@ -1,50 +1,23 @@
-# A trait to make Eloquent models translatable
+