Repository: Blaspsoft/blasp Branch: main Commit: e0a2ea52cbe7 Files: 84 Total size: 367.1 KB Directory structure: gitextract_qpmp_x7w/ ├── .github/ │ └── workflows/ │ └── main.yml ├── .gitignore ├── .styleci.yml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── composer.json ├── config/ │ ├── blasp.php │ └── languages/ │ ├── english.php │ ├── french.php │ ├── german.php │ └── spanish.php ├── phpunit.xml ├── src/ │ ├── BlaspManager.php │ ├── BlaspServiceProvider.php │ ├── Blaspable.php │ ├── Console/ │ │ ├── ClearCommand.php │ │ ├── LanguagesCommand.php │ │ └── TestCommand.php │ ├── Core/ │ │ ├── Analyzer.php │ │ ├── Contracts/ │ │ │ ├── DriverInterface.php │ │ │ └── MaskStrategyInterface.php │ │ ├── Dictionary.php │ │ ├── Masking/ │ │ │ ├── CallbackMask.php │ │ │ ├── CharacterMask.php │ │ │ └── GrawlixMask.php │ │ ├── MatchedWord.php │ │ ├── Matchers/ │ │ │ ├── CompoundWordDetector.php │ │ │ ├── FalsePositiveFilter.php │ │ │ ├── PhoneticMatcher.php │ │ │ └── RegexMatcher.php │ │ ├── Normalizers/ │ │ │ ├── EnglishNormalizer.php │ │ │ ├── FrenchNormalizer.php │ │ │ ├── GermanNormalizer.php │ │ │ ├── NullNormalizer.php │ │ │ ├── SpanishNormalizer.php │ │ │ └── StringNormalizer.php │ │ ├── Result.php │ │ └── Score.php │ ├── Drivers/ │ │ ├── PatternDriver.php │ │ ├── PhoneticDriver.php │ │ ├── PipelineDriver.php │ │ └── RegexDriver.php │ ├── Enums/ │ │ └── Severity.php │ ├── Events/ │ │ ├── ContentBlocked.php │ │ ├── ModelProfanityDetected.php │ │ └── ProfanityDetected.php │ ├── Exceptions/ │ │ └── ProfanityRejectedException.php │ ├── Facades/ │ │ └── Blasp.php │ ├── Middleware/ │ │ └── CheckProfanity.php │ ├── PendingCheck.php │ ├── Rules/ │ │ └── Profanity.php │ └── Testing/ │ └── BlaspFake.php └── tests/ ├── AllLanguagesApiTest.php ├── AllLanguagesDetectionTest.php ├── BladeDirectiveTest.php ├── BlaspCheckTest.php ├── BlaspCheckValidationTest.php ├── BlaspableTest.php ├── BypassVulnerabilityTest.php ├── CacheDriverConfigurationTest.php ├── ConfigurationLoaderLanguageTest.php ├── ConfigurationLoaderTest.php ├── CustomMaskCharacterTest.php ├── DetectionStrategyRegistryTest.php ├── EdgeCaseTest.php ├── EmptyInputTest.php ├── FrenchStringNormalizerTest.php ├── GermanStringNormalizerTest.php ├── Issue24Test.php ├── Issue32FalsePositiveTest.php ├── MiddlewareAliasTest.php ├── MultiLanguageDetectionConfigTest.php ├── MultiLanguageProfanityTest.php ├── PhoneticDriverTest.php ├── PipelineDriverTest.php ├── ProfanityExpressionGeneratorTest.php ├── ResultCachingTest.php ├── SeverityMapTest.php ├── SpanishStringNormalizerTest.php ├── StrMacroTest.php ├── TestCase.php └── UuidFalsePositiveTest.php ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/workflows/main.yml ================================================ name: Run Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: # Step 1: Check out the repository - name: Checkout code uses: actions/checkout@v4 # Step 2: Set up PHP - name: Set up PHP uses: shivammathur/setup-php@v2 with: php-version: "8.2" # Set your desired PHP version extensions: mbstring, dom, zip # Step 3: Install Composer dependencies - name: Install dependencies run: composer install --no-interaction --prefer-dist # Step 4: Run PHPUnit tests - name: Run tests run: php ./vendor/bin/phpunit ================================================ FILE: .gitignore ================================================ /vendor composer.lock .phpunit.result.cache /.idea ================================================ FILE: .styleci.yml ================================================ preset: laravel disabled: - single_class_element_per_statement ================================================ FILE: CHANGELOG.md ================================================ # Changelog All notable changes to `blasp` will be documented in this file ## 3.0.0 - 2025-01-05 ### Added - Custom mask character support with `maskWith()` method - Simplified API with Laravel facade pattern and method chaining - Comprehensive multi-language support (Spanish, German, French) - Expanded test coverage across all languages - Comprehensive extensibility system with full test coverage - Basic registry pattern for language normalizers - Language files publishing to ServiceProvider - Comprehensive documentation for maskWith() and all chainable methods ### Changed - Implemented dependency injection and simplified service dependencies - Extracted expression generation logic to dedicated generator - Improved substitution detection across all languages - Updated README with simplified chainable API documentation - Updated README with comprehensive multi-language support documentation - Updated README with language files publishing options - Updated README for v3.0 features ### Fixed - Resolved language switching not loading correct profanities - Prevented cross-word-boundary profanity matches ### Removed - Strategy factory, plugin manager, and default detection strategy - Domain-specific detection strategies (email, URL, phone) - Unused strict() and lenient() detection modes - README duplications and outdated references ## 1.0.0 - 201X-XX-XX - initial release ================================================ FILE: CONTRIBUTING.md ================================================ # 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](https://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](https://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](https://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting. **Happy coding**! ================================================ FILE: LICENSE.md ================================================ MIT License Copyright (c) Michael Deeming Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================
@clean($comment->body)
{{-- Equivalent to: {{ app('blasp')->check($comment->body)->clean() }} --}} ``` Output is HTML-escaped via `e()` for XSS safety. ## Str / Stringable Macros Blasp registers macros on Laravel's `Str` and `Stringable` classes: ```php use Illuminate\Support\Str; // Static methods Str::isProfane('fuck this'); // true Str::isProfane('hello'); // false Str::cleanProfanity('fuck this'); // '**** this' Str::cleanProfanity('hello'); // 'hello' // Fluent Stringable methods Str::of('fuck this')->isProfane(); // true Str::of('fuck this')->cleanProfanity(); // Stringable('**** this') Str::of('hello')->cleanProfanity()->upper(); // 'HELLO' (chaining works) ``` ## Configuration Full `config/blasp.php` reference: ```php return [ 'default' => env('BLASP_DRIVER', 'regex'), // 'regex' | 'pattern' | 'phonetic' | 'pipeline' 'language' => env('BLASP_LANGUAGE', 'english'), // Default language 'mask' => '*', // Default mask character 'severity' => 'mild', // Minimum severity 'events' => false, // Fire ProfanityDetected events 'cache' => [ 'enabled' => true, 'driver' => env('BLASP_CACHE_DRIVER'), 'ttl' => 86400, 'results' => true, // Cache check() results by content hash ], 'middleware' => [ 'action' => 'reject', 'fields' => ['*'], 'except' => ['password', 'email', '_token'], 'severity' => 'mild', ], 'model' => [ 'mode' => env('BLASP_MODEL_MODE', 'sanitize'), // 'sanitize' | 'reject' ], 'drivers' => [ 'pipeline' => [ 'drivers' => ['regex', 'phonetic'], // Sub-drivers to chain ], 'phonetic' => [ 'phonemes' => 4, // metaphone code length (2-8) 'min_word_length' => 3, // skip short words 'max_distance_ratio' => 0.6, // levenshtein threshold (0.3-0.8) 'supported_languages' => ['english'], // metaphone is English-oriented 'false_positives' => ['fork', '...'], // never flag these words ], ], 'allow' => [], // Global allow-list 'block' => [], // Global block-list 'separators' => [...], // Characters treated as separators 'substitutions' => [...], // Character leet-speak mappings 'false_positives' => [...], // Words that should never be flagged ]; ``` ## Custom Drivers Implement `DriverInterface` and register with the manager: ```php use Blaspsoft\Blasp\Core\Contracts\DriverInterface; use Blaspsoft\Blasp\Core\Result; use Blaspsoft\Blasp\Core\Dictionary; use Blaspsoft\Blasp\Core\Contracts\MaskStrategyInterface; class MyDriver implements DriverInterface { public function detect(string $text, Dictionary $dictionary, MaskStrategyInterface $mask, array $options = []): Result { // Your detection logic } } // Register in a service provider Blasp::extend('my-driver', fn($app) => new MyDriver()); // Use it Blasp::driver('my-driver')->check($text); ``` ## Caching Blasp caches `check()` results by default. When the same text is checked with the same configuration (language, driver, severity, allow/block lists), the cached result is returned instantly. ```php // First call — runs full analysis, caches result $result = Blasp::check('some text'); // Second call — returns cached result $result = Blasp::check('some text'); ``` Configure caching in `config/blasp.php`: ```php 'cache' => [ 'enabled' => true, // Master switch for all caching 'driver' => env('BLASP_CACHE_DRIVER'), // null = default cache driver 'ttl' => 86400, // Cache lifetime in seconds 'results' => true, // Cache check() results (disable independently) ], ``` Result caching is automatically bypassed when using a `CallbackMask` (closures can't be serialized). Clear both dictionary and result caches with: ```bash php artisan blasp:clear ``` Or programmatically: ```php Dictionary::clearCache(); ``` ## Artisan Commands ```bash # Clear the profanity cache php artisan blasp:clear # Test text from the command line php artisan blasp:test "some text to check" --lang=english --detail # List available languages with word counts php artisan blasp:languages ``` ## Testing ### Faking ```php use Blaspsoft\Blasp\Facades\Blasp; use Blaspsoft\Blasp\Core\Result; // Replace with a fake — all checks return clean by default Blasp::fake(); // Pre-configure specific responses Blasp::fake([ 'bad text' => Result::withMatches(['fuck']), 'clean text' => Result::none('clean text'), ]); $result = Blasp::check('bad text'); $result->isOffensive(); // true // Assertions Blasp::assertChecked(); Blasp::assertCheckedTimes(1); Blasp::assertCheckedWith('bad text'); ``` ### Disabling Filtering ```php Blasp::withoutFiltering(function () { // All checks return clean results }); ``` ## Events Enable global events with `'events' => true` in config: | Event | Fired When | Properties | |-------|------------|------------| | `ProfanityDetected` | `check()` finds profanity | `result`, `originalText` | | `ContentBlocked` | Middleware detects profanity | `result`, `request`, `field`, `action` | | `ModelProfanityDetected` | Blaspable trait detects profanity | `model`, `attribute`, `result` | `ModelProfanityDetected` always fires (not gated by the `events` config). ## Migrating from v3 ### Namespace Changes | v3 | v4 | |----|-----| | `Blaspsoft\Blasp\Facades\Blasp` | `Blaspsoft\Blasp\Facades\Blasp` (unchanged) | | `Blaspsoft\Blasp\ServiceProvider` | `Blaspsoft\Blasp\BlaspServiceProvider` | The Laravel auto-discovery handles provider/alias registration automatically. The facade namespace is the same as v3, so no import changes are needed for the facade. ### Config Changes | v3 Key | v4 Key | Notes | |--------|--------|-------| | `default_language` | `language` | `default_language` still works as alias | | `mask_character` | `mask` | `mask_character` still works as alias | | `cache_driver` | `cache.driver` | `cache_driver` still works as alias | | — | `default` | New: driver selection (`regex`/`pattern`) | | — | `severity` | New: minimum severity level | | — | `events` | New: enable global events | | — | `allow` / `block` | New: global allow/block lists | | — | `middleware` | New: middleware configuration section | | — | `model` | New: Blaspable trait configuration | ### Result API Changes | v3 Method | v4 Method | |-----------|-----------| | `hasProfanity()` | `isOffensive()` | | `getCleanString()` | `clean()` | | `getSourceString()` | `original()` | | `getProfanitiesCount()` | `count()` | | `getUniqueProfanitiesFound()` | `uniqueWords()` | All v3 methods still work as deprecated aliases. ### Builder API Changes | v3 Method | v4 Method | |-----------|-----------| | `maskWith($char)` | `mask($char)` | | `allLanguages()` | `inAllLanguages()` | | `language($lang)` | `in($lang)` | | `configure($profanities, $falsePositives)` | `block(...$words)` / `allow(...$words)` | All v3 methods still work as deprecated aliases. ### New in v4 - **Driver architecture** — `regex` and `pattern` drivers, custom driver support - **Severity system** — Mild/Moderate/High/Extreme levels with scoring - **Masking strategies** — Grawlix and callback masking - **Blaspable trait** — Automatic Eloquent model profanity checking - **Middleware** — Request-level profanity filtering - **Fluent validation rule** — `Profanity::in('spanish')->severity(Severity::High)` - **Testing utilities** — `Blasp::fake()`, assertions, `withoutFiltering()` - **Events** — `ProfanityDetected`, `ContentBlocked`, `ModelProfanityDetected` - **Artisan commands** — `blasp:clear`, `blasp:test`, `blasp:languages` - **Batch checking** — `Blasp::checkMany([...])` - **Multi-language in one call** — `Blasp::in('english', 'spanish')->check($text)` ## Contributing We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details. ## Changelog See [CHANGELOG.md](CHANGELOG.md) for detailed version history. ## License Blasp is open-sourced software licensed under the [MIT license](LICENSE). ================================================ FILE: composer.json ================================================ { "name": "blaspsoft/blasp", "description": "Blasp is a powerful and customisable profanity filter package for Laravel applications", "keywords": [ "blaspsoft", "blasp" ], "homepage": "https://github.com/blaspsoft/blasp", "license": "MIT", "type": "library", "authors": [ { "name": "Michael Deeming", "email": "michael.deeming90@gmail.com", "role": "Developer" } ], "require": { "php": "^8.2", "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0" }, "require-dev": { "orchestra/testbench": "^10.0|^11.0", "phpunit/phpunit": "^11.0|^12.5.12" }, "autoload": { "psr-4": { "Blaspsoft\\Blasp\\": "src/" } }, "autoload-dev": { "psr-4": { "Blaspsoft\\Blasp\\Tests\\": "tests" } }, "minimum-stability": "stable", "prefer-stable": true, "scripts": { "test": "vendor/bin/phpunit", "test-coverage": "vendor/bin/phpunit --coverage-html coverage" }, "config": { "sort-packages": true }, "extra": { "laravel": { "providers": [ "Blaspsoft\\Blasp\\BlaspServiceProvider" ], "aliases": { "Blasp": "Blaspsoft\\Blasp\\Facades\\Blasp" } } } } ================================================ FILE: config/blasp.php ================================================ env('BLASP_DRIVER', 'regex'), /* |-------------------------------------------------------------------------- | Default Language |-------------------------------------------------------------------------- | | The default language to use for profanity detection. | */ 'language' => env('BLASP_LANGUAGE', 'english'), // Backward compat alias 'default_language' => env('BLASP_LANGUAGE', 'english'), /* |-------------------------------------------------------------------------- | Mask Character |-------------------------------------------------------------------------- | | The character used to mask detected profanities. | */ 'mask' => '*', // Backward compat alias 'mask_character' => '*', /* |-------------------------------------------------------------------------- | Minimum Severity |-------------------------------------------------------------------------- | | The minimum severity level to detect. Words below this severity | will be ignored. Options: mild, moderate, high, extreme | */ 'severity' => 'mild', /* |-------------------------------------------------------------------------- | Events |-------------------------------------------------------------------------- | | When enabled, ProfanityDetected events will be fired automatically | when profanity is found during a check. | */ 'events' => false, /* |-------------------------------------------------------------------------- | Cache Configuration |-------------------------------------------------------------------------- */ 'cache' => [ 'enabled' => true, 'driver' => env('BLASP_CACHE_DRIVER'), 'ttl' => 86400, 'results' => true, ], // Backward compat alias 'cache_driver' => env('BLASP_CACHE_DRIVER'), /* |-------------------------------------------------------------------------- | Middleware Configuration |-------------------------------------------------------------------------- */ 'middleware' => [ 'action' => 'reject', 'fields' => ['*'], 'except' => ['password', 'email', '_token'], 'severity' => 'mild', ], /* |-------------------------------------------------------------------------- | Model Configuration |-------------------------------------------------------------------------- | | Controls how the Blaspable trait behaves on Eloquent models. | 'sanitize' replaces profanity with the mask character. | 'reject' throws a ProfanityRejectedException instead of saving. | */ 'model' => [ 'mode' => env('BLASP_MODEL_MODE', 'sanitize'), ], /* |-------------------------------------------------------------------------- | Driver-Specific Configuration |-------------------------------------------------------------------------- */ 'drivers' => [ 'pipeline' => [ 'drivers' => ['regex', 'phonetic'], ], 'phonetic' => [ 'phonemes' => 4, // metaphone code length (2-8, lower=more aggressive) 'min_word_length' => 3, // skip words shorter than this 'max_distance_ratio' => 0.6, // levenshtein threshold (0.3-0.8, lower=stricter) 'supported_languages' => ['english'], 'false_positives' => [ 'fork', 'forked', 'forking', 'beach', 'beaches', 'witch', 'witches', 'sheet', 'sheets', 'deck', 'decks', 'count', 'counts', 'counter', 'county', 'ship', 'shipped', 'shipping', 'duck', 'ducked', 'ducking', 'fudge', 'fudging', 'buck', 'bucks', 'puck', 'pucks', 'bass', 'mass', 'pass', 'passed', 'heck', 'shoot', 'shot', 'what', 'white', 'while', 'whole', ], ], ], /* |-------------------------------------------------------------------------- | Character Separators |-------------------------------------------------------------------------- */ 'separators' => [ '@', '#', '%', '&', '_', ';', "'", '"', ',', '~', '`', '|', '!', '$', '^', '*', '(', ')', '-', '+', '=', '{', '}', '[', ']', ':', '<', '>', '?', '.', '/', ], /* |-------------------------------------------------------------------------- | Character Substitutions |-------------------------------------------------------------------------- */ 'substitutions' => [ '/a/' => ['a', '4', '@', '*', 'Á', 'á', 'À', 'Â', 'à', 'Â', 'â', 'Ä', 'ä', 'Ã', 'ã', 'Å', 'å', 'æ', 'Æ', 'α', 'Δ', 'Λ', 'λ'], '/b/' => ['b', '8', '\\', '3', '*', 'ß', 'Β', 'β'], '/c/' => ['c', '*', 'Ç', 'ç', 'ć', 'Ć', 'č', 'Č', '¢', '€', '<', '(', '{', '©'], '/d/' => ['d', '*', '\\', ')', 'Þ', 'þ', 'Ð', 'ð'], '/e/' => ['e', '3', '*', '€', 'È', 'è', 'É', 'é', 'Ê', 'ê', 'ë', 'Ë', 'ē', 'Ē', 'ė', 'Ė', 'ę', 'Ę', '∑'], '/f/' => ['f', '*', 'ƒ'], '/g/' => ['g', '6', '9', '*'], '/h/' => ['h', '*', 'Η'], '/i/' => ['i', '!', '|', ']', '[', '1', '*', '∫', 'Ì', 'Í', 'Î', 'Ï', 'ì', 'í', 'î', 'ï', 'ī', 'Ī', 'į', 'Į'], '/j/' => ['j', '*'], '/k/' => ['k', '*', 'Κ', 'κ'], '/l/' => ['l', '!', '|', ']', '[', '*', '£', '∫', 'Ì', 'Í', 'Î', 'Ï', 'ł', 'Ł'], '/m/' => ['m', '*'], '/n/' => ['n', '*', 'η', 'Ν', 'Π', 'ñ', 'Ñ', 'ń', 'Ń'], '/o/' => ['o', '0', '*', 'Ο', 'ο', 'Φ', '¤', '°', 'ø', 'ô', 'Ô', 'ö', 'Ö', 'ò', 'Ò', 'ó', 'Ó', 'œ', 'Œ', 'ø', 'Ø', 'ō', 'Ō', 'õ', 'Õ'], '/p/' => ['p', '*', 'ρ', 'Ρ', '¶', 'þ'], '/q/' => ['q', '*'], '/r/' => ['r', '*', '®'], '/s/' => ['s', '5', '*', '\$', '§', 'ß', 'Ś', 'ś', 'Š', 'š'], '/t/' => ['t', '*', 'Τ', 'τ'], '/u/' => ['u', 'υ', 'µ', 'û', 'ü', 'ù', 'ú', 'ū', 'Û', 'Ü', 'Ù', 'Ú', 'Ū', '@', '*'], '/v/' => ['v', '*', 'υ', 'ν'], '/w/' => ['w', '*', 'ω', 'ψ', 'Ψ'], '/x/' => ['x', '*', 'Χ', 'χ'], '/y/' => ['y', '*', '¥', 'γ', 'ÿ', 'ý', 'Ÿ', 'Ý'], '/z/' => ['z', '*', 'Ζ', 'ž', 'Ž', 'ź', 'Ź', 'ż', 'Ż'], ], /* |-------------------------------------------------------------------------- | False Positives |-------------------------------------------------------------------------- */ 'false_positives' => [ 'hello', 'scunthorpe', 'cockburn', 'penistone', 'lightwater', 'assume', 'bass', 'class', 'compass', 'pass', 'dickinson', 'middlesex', 'cockerel', 'butterscotch', 'blackcock', 'countryside', 'arsenal', 'flick', 'flicker', 'analyst', 'cocktail', 'musicals hit', 'is hit', 'blackcocktail', 'its not', ], /* |-------------------------------------------------------------------------- | Global Allow List |-------------------------------------------------------------------------- | | Words in this list will never be flagged as profanity. | */ 'allow' => [], /* |-------------------------------------------------------------------------- | Global Block List |-------------------------------------------------------------------------- | | Additional words to always flag as profanity. | */ 'block' => [], /* |-------------------------------------------------------------------------- | Backward Compatibility: Profanities |-------------------------------------------------------------------------- | | Basic profanity list for backward compatibility. | Full lists are in config/languages/*.php | */ 'profanities' => [ 'fuck', 'shit', 'damn', 'bitch', 'ass', 'hell', ], ]; ================================================ FILE: config/languages/english.php ================================================ [ 'mild' => [ 'damn', 'hell', 'crap', 'arse', 'sucks', 'piss', 'bloody', 'bollocks', 'bugger', 'crikey', 'darn', 'heck', 'turd', 'puke', 'puuke', 'puuker', 'shat', 'trots', 'vomit', 'waysted', 'wuss', 'wuzzie', ], 'moderate' => [ 'ass', 'bitch', 'bastard', 'slut', 'whore', 'douche', 'douchebag', 'skank', 'slag', 'tramp', 'tosser', 'wanker', 'wanking', 'prick', 'dick', 'knob', 'bellend', 'minger', 'git', 'twit', 'dipshit', 'jackass', 'smartass', 'dumbass', 'asshole', 'arsehole', 'shag', 'shagger', 'shagging', 'hooker', 'hussy', 'floozy', 'tart', 'sissy', 'pansy', ], 'high' => [ 'fuck', 'shit', 'cock', 'pussy', 'cunt', 'twat', 'tit', 'tits', 'fucking', 'fucker', 'motherfucker', 'bullshit', 'horseshit', 'shithead', 'shithole', 'shitface', 'fuckface', 'fuckhead', 'cocksucker', 'asswipe', 'clusterfuck', 'mindfuck', 'dumbfuck', 'fuckwit', 'shitbag', 'shitcunt', 'thundercunt', 'cum', 'jizz', 'dildo', 'blowjob', 'handjob', 'rimjob', 'fellatio', 'cunnilingus', ], 'extreme' => [ 'nigger', 'nigga', 'niggers', 'niggas', 'coon', 'darkie', 'kike', 'spic', 'spick', 'wetback', 'chink', 'gook', 'paki', 'raghead', 'towelhead', 'sandnigger', 'beaner', 'gringo', 'wop', 'dago', 'polack', 'retard', 'retarded', 'faggot', 'fag', 'dyke', 'tranny', ], ], 'profanities' => [ 'abbo', 'abortionist', 'abuser', 'ahole', 'alabama hotpocket', 'alligatorbait', 'anal', 'analannie', 'analsex', 'areola', 'arse', 'arsebagger', 'arsebandit', 'arseblaster', 'arsecowboy', 'arsefuck', 'arsefucker', 'arsehat', 'arsehole', 'arseholes', 'arsehore', 'arsejockey', 'arsekiss', 'arsekisser', 'arselick', 'arselicker', 'arselover', 'arseman', 'arsemonkey', 'arsemunch', 'arsemuncher', 'arsepacker', 'arsepirate', 'arsepuppies', 'arseranger', 'arses', 'arsewhore', 'arsewipe', 'ass', 'assbag', 'assbagger', 'assbandit', 'assbanger', 'assbite', 'assblaster', 'assclown', 'asscock', 'asscowboy', 'asscracker', 'asses', 'assface', 'assfuck', 'assfucker', 'assgoblin', 'ass-hat', 'asshat', 'asshead', 'asshole', 'assholes', 'assholz', 'asshopper', 'asshore', 'ass-jabber', 'assjacker', 'assjockey', 'asskiss', 'asskisser', 'assklown', 'asslick', 'asslicker', 'asslover', 'assman', 'assmonkey', 'ass monkey', 'assmunch', 'assmuncher', 'assnigger', 'asspacker', 'ass-pirate', 'asspirate', 'asspuppies', 'assranger', 'assshit', 'assshole', 'asssucker', 'asswad', 'asswhore', 'asswipe', 'axwound', 'azzhole', 'backdoorman', 'badfuck', 'baldy', 'ball licker', 'balllicker', 'ballsack', 'bampot', 'banging', 'barelylegal', 'barface', 'barfface', 'bassterds', 'bastard', 'bastards', 'bastardz', 'basterds', 'basterdz', 'bazongas', 'bazooms', 'beaner', 'beastality', 'beastial', 'beastiality', 'beat-off', 'beatoff', 'beatyourmeat', 'bestial', 'bestiality', 'biatch', 'bicurious', 'bigass', 'bigbastard', 'bigbutt', 'bitch', 'bitchass', 'bitcher', 'bitches', 'bitchez', 'bitchin', 'bitching', 'bitchslap', 'bitchtits', 'bitchy', 'biteme', 'blow job', 'blowjob', 'boffing', 'bohunk', 'bollick', 'bollock', 'bollocks', 'bollox', 'bondage', 'boner', 'boob', 'boobies', 'boobs', 'booby', 'bootycall', 'bountybar', 'breastjob', 'breastlover', 'breastman', 'brothel', 'brotherfucker', 'bugger', 'buggered', 'buggery', 'bukake', 'bullcrap', 'bulldike', 'bulldyke', 'bullshit', 'bumblefuck', 'bumfuck', 'bungabunga', 'bunghole', 'butchbabes', 'butchdike', 'butchdyke', 'butt-bang', 'buttbang', 'buttcheeks', 'buttface', 'butt-fuck', 'buttfuck', 'buttfucka', 'butt-fucker', 'buttfucker', 'butt-fuckers', 'buttfuckers', 'butthead', 'butthole', 'buttman', 'buttmunch', 'buttmuncher', 'butt-pirate', 'buttpirate', 'butt plug', 'buttplug', 'buttstain', 'buttwipe', 'byatch', 'cacker', 'cameljockey', 'camel toe', 'cameltoe', 'carpet muncher', 'carpetmuncher', 'cawk', 'cawks', 'chav', 'cherrypopper', 'chesticle', 'chickslick', 'chinc', 'chink', 'choad', 'chode', 'clamdigger', 'clamdiver', 'clit', 'clitface', 'clitfuck', 'clitoris', 'clogwog', 'clunge', 'clusterfuck', 'cnts', 'cntz', 'cock', 'cockass', 'cockbite', 'cockblock', 'cockblocker', 'cockburger', 'cockcowboy', 'cockface', 'cockfight', 'cockfucker', 'cock-head', 'cockhead', 'cockjockey', 'cockknob', 'cockknoker', 'cocklicker', 'cocklover', 'cockmaster', 'cockmongler', 'cockmongruel', 'cockmonkey', 'cockmuncher', 'cocknob', 'cocknose', 'cocknugget', 'cockqueen', 'cockrider', 'cocks', 'cockshit', 'cocksman', 'cocksmith', 'cocksmoke', 'cocksmoker', 'cocksniffer', 'cocksucer', 'cocksuck', 'cocksucked', 'cock-sucker', 'cocksucker', 'cocksucking', 'cocktease', 'cockwaffle', 'cocky', 'coitus', 'cok', 'commie', 'coochie', 'coochy', 'coon', 'coondog', 'cooter', 'copulate', 'cracker', 'crackpipe', 'crack-whore', 'crackwhore', 'crap', 'crappy', 'crotchjockey', 'crotchmonkey', 'crotchrot', 'cuck', 'cum', 'cumbubble', 'cumdumpster', 'cumfest', 'cumguzzler', 'cumjockey', 'cumm', 'cumquat', 'cumqueen', 'cumshot', 'cumslut', 'cumtart', 'cunilingus', 'cunillingus', 'cunnie', 'cunnilingus', 'cunntt', 'cunt', 'cuntass', 'cunteyed', 'cuntface', 'cuntfucker', 'cunthole', 'cuntlick', 'cuntlicker', 'cuntlicker', 'cuntlicking', 'cuntrag', 'cunts', 'cuntslut', 'cuntsucker', 'cuntz', 'cybersex', 'cyberslimer', 'dago', 'dammit', 'damn', 'damnation', 'damnit', 'darkie', 'darky', 'datnigga', 'deapthroat', 'deepthroat', 'deggo', 'dego', 'devilworshipper', 'dick', 'dickbag', 'dickbeaters', 'dickbrain', 'dickface', 'dickforbrains', 'dickfuck', 'dickfucker', 'dickhead', 'dickhole', 'dickjuice', 'dickless', 'dicklick', 'dicklicker', 'dickmilk', 'dickmonger', 'dicks', 'dickslap', 'dick-sneeze', 'dicksucker', 'dicksucking', 'dicktickler', 'dickwad', 'dickweasel', 'dickweed', 'dickwod', 'dike', 'dildo', 'dildos', 'dilldo', 'dilldos', 'dipshit', 'dipstick', 'dixiedike', 'dixiedyke', 'doggiestyle', 'doggystyle', 'dominatricks', 'dominatrics', 'dominatrix', 'doochbag', 'dookie', 'douch', 'douchbag', 'douche', 'douchebag', 'douche-fag', 'douchewaffle', 'drag queen', 'dragqueen', 'dragqween', 'dripdick', 'dumass', 'dumb ass', 'dumbass', 'dumbbitch', 'dumbfuck', 'dumbshit', 'dumshit', 'dyke', 'easyslut', 'eatballs', 'eatme', 'eatpussy', 'ejaculate', 'ejaculated', 'ejaculating', 'ejaculation', 'enema', 'excrement', 'facefucker', 'facist', 'faeces', 'fag', 'fagbag', 'faget', 'fagfucker', 'fagging', 'faggit', 'faggot', 'faggotcock', 'faggots', 'fagit', 'fagot', 'fags', 'fagtard', 'fagz', 'faig', 'faigs', 'fannyfucker', 'fark', 'farted', 'farting', 'farty', 'fastfuck', 'fatass', 'fatfuck', 'fatfucker', 'fatso', 'feces', 'felatio', 'felch', 'felcher', 'felching', 'fellatio', 'feltch', 'feltcher', 'feltching', 'fingerfuck', 'fingerfucked', 'fingerfucker', 'fingerfuckers', 'fingerfucking', 'fister', 'fistfuck', 'fistfucked', 'fistfucker', 'fistfucking', 'fisting', 'flamer', 'flasher', 'flid', 'flipping the bird', 'flyd', 'flydie', 'flydye', 'fondle', 'footaction', 'footfuck', 'footfucker', 'footlicker', 'fornicate', 'freakfuck', 'freakyfucker', 'freefuck', 'fubar', 'fucck', 'fuck', 'fucka', 'fuckable', 'fuckass', 'fuckbag', 'fuckboy', 'fuckbrain', 'fuckbuddy', 'fuckbutt', 'fuckbutter', 'fucked', 'fucker', 'fuckers', 'fuckersucker', 'fuckface', 'fuckfest', 'fuckfreak', 'fuckfriend', 'fuckhead', 'fuckhole', 'fuckin', 'fuckina', 'fucking', 'fuckingbitch', 'fuckinnuts', 'fuckinright', 'fuckit', 'fuckknob', 'fuckmonkey', 'fucknut', 'fucknutt', 'fuckoff', 'fuckpig', 'fuckstick', 'fucktard', 'fucktart', 'fuckup', 'fuckwad', 'fuckwhore', 'fuckwit', 'fuckwitt', 'fuckyou', 'fudge packer', 'fudgepacker', 'Fudge Packer', 'fugly', 'fuk', 'Fukah', 'Fuken', 'fuker', 'Fukin', 'Fukk', 'Fukkah', 'Fukken', 'Fukker', 'Fukkin', 'fuks', 'funfuck', 'fuuck', 'gang bang', 'gangbang', 'gangbanged', 'gangbanger', 'gatorbait', 'gayass', 'gaybob', 'gayboy', 'gaydo', 'gayfuck', 'gayfuckist', 'gaygirl', 'gaylord', 'gaymuthafuckinwhore', 'gays', 'gaysex', 'gaytard', 'gaywad', 'gayz', 'getiton', 'givehead', 'glazeddonut', 'godammit', 'goddamit', 'goddammit', 'goddamn', 'goddamned', 'god-damned', 'goddamnes', 'goddamnit', 'goddamnmuthafucker', 'goldenshower', 'gonorrehea', 'gonzagas', 'gooch', 'gook', 'gotohell', 'greaseball', 'gringo', 'grostulation', 'guido', 'gypo', 'gypp', 'gyppie', 'gyppo', 'gyppy', 'handjob', 'hard on', 'hardon', 'headfuck', 'heeb', 'hell', 'herpes', 'hijacker', 'hijacking', 'hillbillies', 'hindoo', 'hitler', 'hitlerism', 'hitlerist', 'hoar', 'hobo', 'hoe', 'hoes', 'holestuffer', 'homo', 'homobangers', 'homodumbshit', 'honger', 'honkers', 'honkey', 'honky', 'hookers', 'hoor', 'hoore', 'hore', 'horney', 'horniest', 'horny', 'horseshit', 'hosejob', 'hotdamn', 'hotpussy', 'hottotrot', 'humping', 'hymen', 'iblowu', 'idiot', 'incest', 'insest', 'internet wife', 'inthebuff', 'jackass', 'jackoff', 'jackshit', 'jagoff', 'jap', 'japcrap', 'japs', 'jerkass', 'jerk off', 'jerk-off', 'jerkoff', 'jesuschrist', 'jigaboo', 'jiggabo', 'jihad', 'jijjiboo', 'jisim', 'jism', 'jiss', 'jizim', 'jizjuice', 'jizm', 'jizm', 'jizz', 'jizzim', 'jizzum', 'jubblies', 'juggalo', 'jungle bunny', 'junglebunny', 'kiddy fiddler', 'kike', 'kinky', 'kissass', 'knobz', 'kondum', 'kooch', 'kootch', 'krap', 'krappy', 'kraut', 'kumbubble', 'kumbullbe', 'kummer', 'kumming', 'kums', 'kunilingus', 'kunnilingus', 'kunt', 'kunts', 'kuntz', 'kyke', 'labia', 'lactate', 'lady boy', 'ladyboy', 'lameass', 'lapdance', 'lardass', 'lesbain', 'lesbayn', 'lesbian', 'lesbin', 'lesbo', 'lezbe', 'lezbefriends', 'lezbo', 'lezz', 'lezzer', 'lezzie', 'lezzo', 'libido', 'lickme', 'limpdick', 'lipshits', 'lipshitz', 'livesex', 'lmfao', 'loadedgun', 'lovebone', 'lovegoo', 'lovegun', 'lovejuice', 'lovemuscle', 'lovepistol', 'loverocket', 'low life', 'lowlife', 'lubejob', 'luckycameltoe', 'manhater', 'manpaste', 'masochist', 'masokist', 'massterbait', 'masstrbait', 'masstrbate', 'mastabate', 'mastabater', 'masterbaiter', 'masterbate', 'master bates', 'masterbates', 'mastrabator', 'masturbate', 'masturbating', 'mattressprincess', 'mcfagget', 'meatbeater', 'meatrack', 'mgger', 'mggor', 'milf', 'minge', 'mofo', 'molest', 'molestation', 'molester', 'molestor', 'moneyshot', 'mooncricket', 'moron', 'mothafuck', 'mothafucka', 'mothafuckaz', 'mothafucked', 'mothafucker', 'motha fucker', 'mothafuckin', 'mothafucking', 'mothafuckings', 'motha fuker', 'motha fukkah', 'motha fukker', 'motherfuck', 'motherfucked', 'mother-fucker', 'motherfucker', 'mother fucker', 'motherfuckin', 'motherfucking', 'motherfuckings', 'mother fukah', 'mother fuker', 'mother fukkah', 'mother fukker', 'motherlovebone', 'muff', 'muffdive', 'muffdiver', 'muffindiver', 'mufflikcer', 'muncher', 'munging', 'muthafucker', 'mutha fucker', 'mutha fukah', 'mutha fuker', 'mutha fukkah', 'mutha fukker', 'nastt', 'nastybitch', 'nastyho', 'nastyslut', 'nastywhore', 'nazi', 'necro', 'negro', 'negroes', 'negroid', 'nigaboo', 'nigga', 'niggah', 'niggaracci', 'niggard', 'niggarded', 'niggarding', 'niggardliness', "niggardliness's", 'niggardly', "niggard's", 'niggards', 'niggaz', 'nigger', 'niggerhead', 'niggerhole', "nigger's", 'niggers', 'niggle', 'niggled', 'niggles', 'niggling', 'nigglings', 'niggor', 'niggur', 'niglet', 'nignog', 'nigr', 'nigra', 'nigre', 'nigur', 'niiger', 'niigr', 'nipple', 'nipplering', 'nittit', 'nlgger', 'nlggor', 'nofuckingway', 'nonce', 'nookey', 'nookie', 'nudger', 'nut case', 'nutcase', 'nutfucker', 'nut sack', 'nutsack', 'ontherag', 'orafis', 'orgasim', 'orgasim', 'orgasm', 'orgasum', 'orgies', 'orgy', 'oriface', 'orifice', 'orifiss', 'osama bin laden', 'packi', 'packie', 'packy', 'paedo', 'paedofile', 'paedophile', 'paki', 'pakie', 'paky', 'palesimian', 'panooch', 'panti', 'pearlnecklace', 'pecker', 'peckerhead', 'peckerwood', 'peedo', 'peeenus', 'peeenusss', 'peehole', 'peenus', 'peinus', 'penas', 'penile', 'penisbanger', 'penis-breath', 'penises', 'penisfucker', 'penispuffer', 'penus', 'penuus', 'perv', 'perversion', 'pervert', 'phonesex', 'phuc', 'phuck', 'phuk', 'phuked', 'phuker', 'phuking', 'phukked', 'phukker', 'phukking', 'phungky', 'phuq', 'pi55', 'picaninny', 'piccaninny', 'pickaninny', 'pikey', 'piky', 'pimper', 'pimpjuic', 'pimpjuice', 'pimpsimp', 'pindick', 'piss', 'pissed', 'pissed off', 'pisser', 'pisses', 'pissflaps', 'pisshead', 'pissin', 'pissing', 'pissoff', 'play boy', 'playboy', 'play bunny', 'playbunny', 'play girl', 'playgirl', 'plumper', 'pocketpool', 'polac', 'polack', 'polak', 'polesmoker', 'pollock', 'poon', 'poonani', 'poonany', 'poontang', 'pooperscooper', 'pooping', 'poorwhitetrash', 'poostabber', 'popimp', 'porch monkey', 'porchmonkey', 'porn', 'pornflick', 'pornking', 'porno', 'pornprincess', 'pric', 'prick', 'prik', 'prickhead', 'prostitute', 'pu55i', 'pu55y', 'pube', 'pubiclice', 'puke', 'punanny', 'punta', 'puntang', 'purinaprincess', 'pusse', 'pussee', 'pussie', 'pussies', 'pussy', 'pussyeater', 'pussyfucker', 'pussylicker', 'pussylicking', 'pussylips', 'pussylover', 'pussypounder', 'pusy', 'puto', 'puuke', 'puuker', 'queef', 'queer', 'queerbait', 'queerhole', 'queers', 'queerz', 'quim', 'qweers', 'qweerz', 'qweir', 'rag head', 'raghead', 'raped', 'rapist', 'rearend', 'rearentry', 'recktum', 'rectum', 'redneck', 'renob', 'rentafuck', 'rimjob', 'rimming', 'ruski', 'russki', 'russkie', 'sadist', 'sadom', 'saeema butt', 'sandm', 'sand nigger', 'sandnigger', 'scag', 'scank', 'scat', 'schlong', 'screwing', 'screwyou', 'scrote', 'scrotum', 'scum', 'scumbag', 'seaman staines', 'semen', 'sexed', 'sexfarm', 'sexhound', 'sexhouse', 'sexing', 'sexkitten', 'sexpot', 'sexslave', 'sextogo', 'sextoy', 'sextoys', 'sexwhore', 'sexymoma', 'sexy-slim', 'seymour butts', 'shag', 'shagger', 'shaggin', 'shagging', 'shat', 'shhit', 'shit', 'shitass', 'shitbag', 'shitbagger', 'shitbrains', 'shitbreath', 'shitcan', 'shitcanned', 'shitcunt', 'shitdick', 'shite', 'shiteater', 'shited', 'shiter', 'shitface', 'shitfaced', 'shitfit', 'shitforbrains', 'shitfuck', 'shitfucker', 'shitfull', 'shithapens', 'shithappens', 'shithead', 'shithole', 'shithouse', 'shiting', 'shitlist', 'shitola', 'shitoutofluck', 'shits', 'shitspitter', 'shitstain', 'shitted', 'shitter', 'shittiest', 'shitting', 'shitty', 'shity', 'shitz', 'shiz', 'shiznit', 'shortfuck', 'shyt', 'shyte', 'shytty', 'shyty', 'sissy', 'sixsixsix', 'sixtynine', 'sixtyniner', 'skanck', 'skank', 'skankbitch', 'skankee', 'skankey', 'skankfuck', 'skanks', 'skankwhore', 'skanky', 'skankybitch', 'skankywhore', 'skeet', 'skinflute', 'skullfuck', 'skum', 'skumbag', 'slanteye', 'slantyeye', 'slapper', 'slavedriver', 'sleezebag', 'sleezeball', 'slideitin', 'slimeball', 'slimebucket', 'slopehead', 'slopey', 'slopy', 'slut', 'slutbag', 'sluts', 'slutt', 'slutting', 'slutty', 'slutwear', 'slutwhore', 'slutz', 'smackthemonkey', 'smeg', 'smelly', 'smut', 'snatch', 'snatchpatch', 'snot', 'snowback', 'snownigger', 'sodom', 'sodomise', 'sodomite', 'sodomize', 'sodomy', 'son-of-a-bitch', 'sonofabitch', 'sonofbitch', 'spac', 'spacca', 'spaghettibender', 'spaghettinigger', 'spankthemonkey', 'spazza', 'sperm', 'spermacide', 'spermbag', 'spermhearder', 'spermherder', 'spic', 'spick', 'spig', 'spigotty', 'spik', 'spitter', 'splittail', 'splooge', 'spooge', 'spook', 'spreadeagle', 'squaw', 'stabber', 'stiffy', 'strapon', 'stripclub', 'stroking', 'stupidfuck', 'stupidfucker', 'suckass', 'suckdick', 'sucker', 'suckme', 'suckmyass', 'suckmydick', 'suckmytit', 'suckoff', 'swastika', 'tampon', 'tarbaby', 'tard', 'teat', 'teste', 'testicle', 'testicles', 'thicklips', 'thicko', 'thirdeye', 'thirdleg', 'threesome', 'thundercunt', 'timbernigger', 'tit', 'titbitnipply', 'titfuck', 'titfucker', 'titfuckin', 'titjob', 'titlicker', 'titlover', 'tits', 'tittie', 'titties', 'titty', 'tittyfuck', 'tonguethrust', 'tonguethruster', 'tonguetramp', 'torture', 'tosser', 'tosspot', 'towel head', 'towelhead', 'trailertrash', 'tramp', 'trannie', 'tranny', 'trots', 'trouser snake', 'tuckahoe', 'tunneloflove', 'turd', 'twat', 'twatlips', 'twats', 'twatwaffle', 'twink', 'twinkie', 'twobitwhore', 'unclefucker', 'unfuckable', 'upskirt', 'uptheass', 'upthebutt', 'urinate', 'urine', 'usama bin laden', 'uterus', 'vag', 'vagina', 'vaginal', 'vajayjay', 'vajina', 'va-j-j', 'valjina', 'vibrater', 'vibrator', 'vietcong', 'violate', 'violation', 'virginbreaker', 'vjayjay', 'vomit', 'vullva', 'vulva', 'wank', 'wanker', 'wanking', 'wankjob', 'waysted', 'welcher', 'wetback', 'wetspot', 'whacker', 'whigger', 'whiskeydick', 'whiskydick', 'whitenigger', 'whitetrash', 'whitey', 'whoor', 'whop', 'whore', 'whorebag', 'whoreface', 'whorefucker', 'whorehouse', 'wife beater', 'williewanker', 'wog', 'wop', 'wuss', 'wuzzie', 'x-rated', 'xrated', 'yellowman', 'zigabo', 'zipperhea', 'zipper head', 'sucks', 'bloody', 'crikey', 'darn', 'heck', 'slag', 'knob', 'bellend', 'minger', 'git', 'twit', 'smartass', 'hooker', 'hussy', 'floozy', 'tart', 'pansy', 'mindfuck', 'niggas', 'retard', 'retarded', ], 'false_positives' => [ 'hello', 'scunthorpe', 'cockburn', 'penistone', 'lightwater', 'assume', 'bass', 'class', 'compass', 'pass', 'dickinson', 'middlesex', 'cockerel', 'butterscotch', 'blackcock', 'countryside', 'arsenal', 'flick', 'flicker', 'analyst', 'cocktail', 'musicals hit', 'is hit', 'blackcocktail', 'its not', // Common words containing "ass" 'assignment', 'assign', 'assigned', 'assigns', 'assigning', 'assist', 'assistant', 'assisted', 'assists', 'assistance', 'associate', 'associated', 'associates', 'association', 'associations', 'assemble', 'assembled', 'assembles', 'assembly', 'assert', 'asserted', 'assertion', 'assertions', 'asserts', 'assess', 'assessed', 'assesses', 'assessing', 'assessment', 'assessments', 'asset', 'assets', 'assure', 'assured', 'assures', 'assurance', 'assorted', 'assortment', 'assassin', 'assassins', 'assassination', 'assassinated', 'assault', 'assaulted', 'assaults', 'passion', 'passionate', 'passions', 'passive', 'passively', 'passenger', 'passengers', 'passage', 'passages', 'passing', 'passed', 'passes', 'passport', 'passports', 'password', 'passwords', 'bypass', 'bypassed', 'bypasses', 'bypassing', 'classroom', 'classrooms', 'classic', 'classical', 'classics', 'classification', 'classifications', 'classified', 'classify', 'classmate', 'classmates', 'classed', 'classes', 'classy', 'mass', 'masses', 'massive', 'massively', 'massage', 'massages', 'massacre', 'massacres', 'embassy', 'embassies', 'ambassador', 'ambassadors', 'embarrass', 'embarrassed', 'embarrassing', 'embarrassment', 'harass', 'harassed', 'harassing', 'harassment', 'brass', 'brassy', 'crass', 'glass', 'glasses', 'glassy', 'grass', 'grasses', 'grassy', 'lass', 'lassie', 'molasses', 'morass', 'sass', 'sassy', 'trespass', 'trespassed', 'trespassing', 'surpass', 'surpassed', 'surpasses', 'compassion', 'compassionate', 'encompass', 'encompassed', 'encompasses', 'encompassing', // Common words containing "tit" 'title', 'titles', 'titled', 'subtitle', 'subtitles', 'entity', 'entities', 'identity', 'identities', 'quantity', 'quantities', 'constitution', 'constitutional', 'constitutions', 'constitute', 'constitutes', 'institution', 'institutional', 'institutions', 'petition', 'petitions', 'petitioner', 'competition', 'competitions', 'competitive', 'competitor', 'competitors', 'repetition', 'repetitions', 'repetitive', 'appetite', 'appetites', 'gratitude', 'attitude', 'attitudes', 'altitude', 'altitudes', 'aptitude', 'multitude', 'fortitude', 'latitude', 'latitudes', 'partition', 'partitions', 'practitioner', 'practitioners', 'restitution', 'prostitution', 'superstition', 'superstitions', 'superstitious', 'titillate', 'titan', 'titans', 'titanium', // Common words containing "cum" 'document', 'documents', 'documentary', 'documentation', 'documented', 'circumstance', 'circumstances', 'circumference', 'accumulate', 'accumulated', 'accumulation', 'cucumber', 'cucumbers', 'incumbent', 'incumbents', // Common words containing "ho" / "hoe" 'shoe', 'shoes', 'shoelace', 'horseshoe', // Common words containing "nig" 'night', 'nights', 'nightclub', 'nightfall', 'nightlife', 'nightmare', 'nightmares', 'nightstand', 'nighttime', 'tonight', 'overnight', 'knight', 'knights', // Common words containing "rap" 'grape', 'grapes', 'drape', 'drapes', 'scrape', 'scraped', 'scraper', 'therapy', 'therapies', 'therapist', 'therapists', // Common words containing "nob" 'noble', 'nobles', 'nobleman', 'nobility', 'snob', 'snobs', 'snobbish', 'snobby', ], 'substitutions' => [ '/a/' => ['a', '4', '@', 'Á', 'á', 'À', 'Â', 'à', 'Â', 'â', 'Ä', 'ä', 'Ã', 'ã', 'Å', 'å', 'æ', 'Æ', 'α', 'Δ', 'Λ', 'λ'], '/e/' => ['e', '3', '€', 'È', 'è', 'É', 'é', 'Ê', 'ê', 'ë', 'Ë', 'ē', 'Ē', 'ė', 'Ė', 'ę', 'Ę', '∑'], '/i/' => ['i', '!', '|', ']', '[', '1', '∫', 'Ì', 'Í', 'Î', 'Ï', 'ì', 'í', 'î', 'ï', 'ī', 'Ī', 'į', 'Į'], '/o/' => ['o', '0', 'Ο', 'ο', 'Φ', '¤', '°', 'ø', 'ô', 'Ô', 'ö', 'Ö', 'ò', 'Ò', 'ó', 'Ó', 'œ', 'Œ', 'ø', 'Ø', 'ō', 'Ō', 'õ', 'Õ'], '/u/' => ['u', 'υ', 'µ', 'û', 'ü', 'ù', 'ú', 'ū', 'Û', 'Ü', 'Ù', 'Ú', 'Ū', '@', '*'], ] ]; ================================================ FILE: config/languages/french.php ================================================ [ 'mild' => [ 'crotte', 'crottes', 'caca', 'cacas', 'zut', 'punaise', 'idiot', 'idiots', 'idiote', 'idiotes', 'bête', 'bete', 'bêtes', 'betes', 'sot', 'sots', 'sotte', 'sottes', 'niais', 'niaise', 'niaises', 'ballot', 'ballots', 'andouille', 'andouilles', ], 'moderate' => [ 'connard', 'connarde', 'con', 'conne', 'salaud', 'salope', 'garce', 'garces', 'pétasse', 'petasse', 'pétasses', 'petasses', 'bâtard', 'batard', 'bâtards', 'batards', 'bâtarde', 'batarde', 'bâtardes', 'batardes', 'abruti', 'abrutis', 'abrutie', 'abruties', 'crétin', 'cretin', 'crétins', 'cretins', 'crétine', 'cretine', 'crétines', 'cretines', 'débile', 'debile', 'débiles', 'debiles', 'imbécile', 'imbecile', 'imbéciles', 'imbeciles', 'cul', 'culs', 'trou du cul', 'trou de balle', 'cochon', 'cochons', 'cochonne', 'cochonnes', ], 'high' => [ 'merde', 'putain', 'enculé', 'encule', 'niquer', 'nique', 'baiser', 'baise', 'foutre', 'foutu', 'foutue', 'chier', 'bite', 'pute', 'fils de pute', ], 'extreme' => [ 'pédé', 'pede', 'pédés', 'pedes', 'pédéraste', 'pederaste', 'pédérastes', 'pederastes', 'tapette', 'tapettes', 'tantouze', 'tantouzes', 'fiotte', 'fiottes', 'tarlouze', 'tarlouzes', 'gouine', 'gouines', 'attardé', 'attarde', 'attardés', 'attardes', 'attardée', 'attardee', 'attardées', 'attardees', ], ], 'profanities' => [ // Common French profanities and vulgar expressions 'merde', 'putain', 'connard', 'connarde', 'con', 'conne', 'salaud', 'salope', 'enculé', 'encule', 'enculée', 'enculee', 'fils de pute', 'fils de putain', 'bordel', 'chier', 'chiasse', 'chieur', 'chieuse', 'emmerde', 'emmerder', 'emmerdeur', 'emmerdeuse', 'baiser', 'baise', 'baisé', 'baise', 'baisée', 'baisee', 'foutre', 'foutue', 'foutu', 'niquer', 'nique', 'niqué', 'nique', 'niquée', 'niquee', 'bite', 'bites', 'pine', 'pines', 'queue', 'queues', 'vit', 'verge', 'zob', 'zobs', 'biroute', 'biroutes', 'braquemart', 'braquemarts', 'dard', 'dards', 'gourdin', 'gourdins', 'gland', 'glands', 'prépuce', 'prepuce', 'prépuces', 'prepuces', 'couilles', 'couille', 'couillon', 'couillonne', 'couillons', 'couillonnes', 'roubignoles', 'roubignole', 'burnes', 'burne', 'roustons', 'rouston', 'testicules', 'testicule', 'génitoires', 'genitoires', 'génitoire', 'genitoire', 'chatte', 'chattes', 'minou', 'minous', 'con', 'cons', 'moule', 'moules', 'fente', 'fentes', 'cramouille', 'cramouilles', 'crevasse', 'crevasses', 'cyprine', 'cyprines', 'foufoune', 'foufounes', 'motte', 'mottes', 'touffe', 'touffes', 'abricot', 'abricots', 'nichons', 'nichon', 'tétons', 'teton', 'téton', 'tetons', 'roberts', 'robert', 'doudounes', 'doudoune', 'lolos', 'lolo', 'miches', 'miche', 'mamelles', 'mamelle', 'seins', 'sein', 'nénés', 'nene', 'nénée', 'nenee', 'roploplos', 'roploplo', 'flotteurs', 'flotteur', 'amortisseurs', 'amortisseur', 'airbags', 'airbag', 'cul', 'culs', 'fesses', 'fesse', 'pétard', 'petard', 'pétards', 'petards', 'postérieur', 'posterieur', 'postérieurs', 'posterieurs', 'derrière', 'derriere', 'derrières', 'derrieres', 'fion', 'fions', 'trou du cul', 'trou de balle', 'anus', 'orifice', 'orifices', 'rosette', 'rosettes', 'rondelle', 'rondelles', 'bague', 'bagues', 'anneau', 'anneaux', 'pédé', 'pede', 'pédés', 'pedes', 'pédéraste', 'pederaste', 'pédérastes', 'pederastes', 'tapette', 'tapettes', 'tante', 'tantes', 'tantouze', 'tantouzes', 'fiotte', 'fiottes', 'tarlouze', 'tarlouzes', 'tafiole', 'tafioles', 'gouine', 'gouines', 'lesbienne', 'lesbiennes', 'tribade', 'tribades', 'saphique', 'saphiques', 'lesbos', 'lesbo', 'garce', 'garces', 'pétasse', 'petasse', 'pétasses', 'petasses', 'traînée', 'trainee', 'traînées', 'trainees', 'pute', 'putes', 'putain', 'putains', 'catin', 'catins', 'caillera', 'cailleras', 'racaille', 'racailles', 'voyou', 'voyous', 'truand', 'truands', 'bandit', 'bandits', 'malfrat', 'malfrats', 'gangster', 'gangsters', 'criminel', 'criminels', 'criminelle', 'criminelles', 'assassin', 'assassins', 'tueur', 'tueurs', 'tueuse', 'tueuses', 'meurtrier', 'meurtriers', 'meurtrière', 'meurtrieres', 'bourrin', 'bourrins', 'bourrine', 'bourrines', 'rustre', 'rustres', 'plouc', 'ploucs', 'péquenaud', 'pequenaud', 'péquenauds', 'pequenauds', 'cul-terreux', 'cul terreux', 'bouseux', 'boueuse', 'bouseux', 'bouseuses', 'bâtard', 'batard', 'bâtards', 'batards', 'bâtarde', 'batarde', 'bâtardes', 'batardes', 'salopard', 'salopards', 'saloparde', 'salopardes', 'fumier', 'fumiers', 'ordure', 'ordures', 'pourriture', 'pourritures', 'charogne', 'charognes', 'raclure', 'raclures', 'déchet', 'dechet', 'déchets', 'dechets', 'rebut', 'rebuts', 'lie', 'lies', 'écume', 'ecume', 'écumes', 'ecumes', 'fange', 'fanges', 'boue', 'boues', 'vase', 'vases', 'crotte', 'crottes', 'étron', 'etron', 'étrons', 'etrons', 'caca', 'cacas', 'bouse', 'bouses', 'fiente', 'fientes', 'colombin', 'colombins', 'boudin', 'boudins', 'saucisse', 'saucisses', 'andouille', 'andouilles', 'crétin', 'cretin', 'crétins', 'cretins', 'crétine', 'cretine', 'crétines', 'cretines', 'débile', 'debile', 'débiles', 'debiles', 'attardé', 'attarde', 'attardés', 'attardes', 'attardée', 'attardee', 'attardées', 'attardees', 'demeuré', 'demeure', 'demeurés', 'demeures', 'demeurée', 'demeuree', 'demeurées', 'demeurees', 'simple', 'simples', 'idiot', 'idiots', 'idiote', 'idiotes', 'imbécile', 'imbecile', 'imbéciles', 'imbeciles', 'stupide', 'stupides', 'bête', 'bete', 'bêtes', 'betes', 'sot', 'sots', 'sotte', 'sottes', 'niais', 'niaise', 'niaises', 'nigaud', 'nigauds', 'nigaude', 'nigaudes', 'benêt', 'benet', 'benêts', 'benets', 'benête', 'benete', 'benêtes', 'benetes', 'ballot', 'ballots', 'ballotte', 'ballottes', 'balourd', 'balourds', 'balourde', 'balourdes', 'lourdaud', 'lourdauds', 'lourdaude', 'lourdaudes', 'abruti', 'abrutis', 'abrutie', 'abruties', 'bourrique', 'bourriques', 'âne', 'ane', 'ânes', 'anes', 'ânesse', 'anesse', 'ânesses', 'anesses', 'baudet', 'baudets', 'bourricot', 'bourricots', 'gourde', 'gourdes', 'cornichon', 'cornichons', 'navet', 'navets', 'nouille', 'nouilles', 'patate', 'patates', 'buse', 'buses', 'dinde', 'dindes', 'dindon', 'dindons', 'oie', 'oies', 'jars', 'bécasse', 'becasse', 'bécasses', 'becasses', 'bécassine', 'becassine', 'bécassines', 'becassines', 'poule', 'poules', 'poulet', 'poulets', 'coquette', 'coquettes', 'coq', 'coqs', 'chapon', 'chapons', 'poularde', 'poulardes', 'poussin', 'poussins', 'poussinière', 'poussiniere', 'poussinières', 'poussinieres', 'cochon', 'cochons', 'cochonne', 'cochonnes', 'porc', 'porcs', 'truie', 'truies', 'pourceau', 'pourceaux', 'goret', 'gorets', 'cochonnet', 'cochonnets', 'cochonnaille', 'cochonnailles', 'verrat', 'verrats', 'bauge', 'bauges', 'porcherie', 'porcheries', 'étable', 'etable', 'étables', 'etables', 'écurie', 'ecurie', 'écuries', 'ecuries', 'box', 'boxs', 'stalle', 'stalles', 'enclos', 'clos', 'parc', 'parcs', 'paddock', 'paddocks', 'pâturage', 'paturage', 'pâturages', 'paturages', 'prairie', 'prairies', 'pré', 'pre', 'prés', 'pres', 'herbage', 'herbages', 'pacage', 'pacages', 'pâture', 'pature', 'pâtures', 'patures', 'fourrage', 'fourrages', 'foin', 'foins', 'paille', 'pailles', 'litière', 'litiere', 'litières', 'litieres', 'fumier', 'fumiers', 'purin', 'purins', 'lisier', 'lisiers', 'compost', 'composts', 'engrais', 'fertilisant', 'fertilisants', 'amendement', 'amendements', 'terreau', 'terreaux', 'humus', 'tourbe', 'tourbes', 'mousse', 'mousses', 'lichen', 'lichens', 'algue', 'algues', 'varech', 'varechs', 'goémon', 'goemon', 'goémons', 'goemons', 'sargasse', 'sargasses', 'zostère', 'zostere', 'zostères', 'zosteres', 'laminaire', 'laminaires', 'fucus', 'ulve', 'ulves', 'spiruline', 'spirulines', 'chlorelle', 'chlorelles', 'microalgue', 'microalgues', 'phytoplancton', 'phytoplanctons', 'zooplancton', 'zooplanctons', 'plancton', 'planctons', 'krill', 'krills', 'copépode', 'copepode', 'copépodes', 'copepodes', 'rotifère', 'rotifere', 'rotifères', 'rotiferes', 'protozoaire', 'protozoaires', 'paramècie', 'paramecie', 'paramécies', 'paramecies', 'amibe', 'amibes', 'euglène', 'euglene', 'euglènes', 'euglenes', 'volvox', 'hydre', 'hydres', 'méduse', 'meduse', 'méduses', 'meduses', 'polype', 'polypes', 'corail', 'coraux', 'anémone', 'anemone', 'anémones', 'anemones', 'actinie', 'actinies', 'éponge', 'eponge', 'éponges', 'eponges', 'spongieux', 'spongieuse', 'spongieuses', 'poreux', 'poreuse', 'poreuses', 'alvéolé', 'alveole', 'alvéolés', 'alveoles', 'alvéolée', 'alveolee', 'alvéolées', 'alveolees', 'cellulaire', 'cellulaires', 'cellule', 'cellules', 'cytoplasme', 'cytoplasmes', 'noyau', 'noyaux', 'nucléole', 'nucleole', 'nucléoles', 'nucleoles', 'chromosome', 'chromosomes', 'chromatine', 'chromatines', 'gène', 'gene', 'gènes', 'genes', 'génome', 'genome', 'génomes', 'genomes', 'génétique', 'genetique', 'génétiques', 'genetiques', 'héréditaire', 'hereditaire', 'héréditaires', 'hereditaires', 'hérédité', 'heredite', 'hérédités', 'heredites', 'descendance', 'descendances', 'progéniture', 'progeniture', 'progénitures', 'progenitures', 'postérité', 'posterite', 'postérités', 'posterites', 'lignée', 'lignee', 'lignées', 'lignees', 'dynastie', 'dynasties', 'famille', 'familles', 'clan', 'clans', 'tribu', 'tribus', 'peuplade', 'peuplades', 'ethnie', 'ethnies', 'race', 'races', 'espèce', 'espece', 'espèces', 'especes', 'genre', 'genres', 'variété', 'variete', 'variétés', 'varietes', 'sous-espèce', 'sous-espece', 'sous-espèces', 'sous-especes', 'subspecies', 'sous-variété', 'sous-variete', 'sous-variétés', 'sous-varietes', 'cultivar', 'cultivars', 'hybride', 'hybrides', 'croisement', 'croisements', 'métissage', 'metissage', 'métissages', 'metissages', 'brassage', 'brassages', 'mélange', 'melange', 'mélanges', 'melanges', 'mixture', 'mixtures', 'composition', 'compositions', 'formule', 'formules', 'recette', 'recettes', 'procédé', 'procede', 'procédés', 'procedes', 'méthode', 'methode', 'méthodes', 'methodes', 'technique', 'techniques', 'procédure', 'procedure', 'procédures', 'procedures', 'protocole', 'protocoles', 'marche', 'marches', 'démarche', 'demarche', 'démarches', 'demarches', 'approche', 'approches', 'façon', 'facon', 'façons', 'facons', 'manière', 'maniere', 'manières', 'manieres', 'mode', 'modes', 'modalité', 'modalite', 'modalités', 'modalites', 'moyen', 'moyens', 'outil', 'outils', 'instrument', 'instruments', 'ustensile', 'ustensiles', 'appareil', 'appareils', 'dispositif', 'dispositifs', 'mécanisme', 'mecanisme', 'mécanismes', 'mecanismes', 'machine', 'machines', 'engin', 'engins', 'équipement', 'equipement', 'équipements', 'equipements', 'matériel', 'materiel', 'matériels', 'materiels', 'outillage', 'outillages', 'machinerie', 'machineries', 'mécanique', 'mecanique', 'mécaniques', 'mecaniques', 'automatique', 'automatiques', 'électrique', 'electrique', 'électriques', 'electriques', 'électronique', 'electronique', 'électroniques', 'electroniques', 'numérique', 'numerique', 'numériques', 'numeriques', 'digital', 'digitaux', 'digitale', 'digitales', 'informatique', 'informatiques', 'ordinateur', 'ordinateurs', 'computer', 'computers', 'pc', 'pcs', 'micro', 'micros', 'portable', 'portables', 'laptop', 'laptops', 'tablette', 'tablettes', 'smartphone', 'smartphones', 'téléphone', 'telephone', 'téléphones', 'telephones', 'mobile', 'mobiles', 'cellulaire', 'cellulaires', 'sans-fil', 'sans fil', 'wifi', 'bluetooth', 'internet', 'web', 'site', 'sites', 'page', 'pages', 'lien', 'liens', 'url', 'urls', 'adresse', 'adresses', 'email', 'emails', 'courriel', 'courriels', 'message', 'messages', 'texto', 'textos', 'sms', 'mms', 'chat', 'chats', 'forum', 'forums', 'blog', 'blogs', 'réseau', 'reseau', 'réseaux', 'reseaux', 'social', 'sociaux', 'sociale', 'sociales', 'facebook', 'twitter', 'instagram', 'linkedin', 'youtube', 'google', 'yahoo', 'bing', 'moteur', 'moteurs', 'recherche', 'recherches', 'requête', 'requete', 'requêtes', 'requetes', 'base', 'bases', 'donnée', 'donnee', 'données', 'donnees', 'information', 'informations', 'renseignement', 'renseignements', 'détail', 'detail', 'détails', 'details', 'précision', 'precision', 'précisions', 'precisions', 'exactitude', 'exactitudes', 'justesse', 'justesses', 'vérité', 'verite', 'vérités', 'verites', 'réalité', 'realite', 'réalités', 'realites', 'fait', 'faits', 'élément', 'element', 'éléments', 'elements', 'composant', 'composants', 'composante', 'composantes', 'partie', 'parties', 'portion', 'portions', 'section', 'sections', 'segment', 'segments', 'fragment', 'fragments', 'morceau', 'morceaux', 'bout', 'bouts', 'extrémité', 'extremite', 'extrémités', 'extremites', 'pointe', 'pointes', 'sommet', 'sommets', 'pic', 'pics', 'cime', 'cimes', 'faîte', 'faite', 'faîtes', 'faites', 'crête', 'crete', 'crêtes', 'cretes', 'arête', 'arete', 'arêtes', 'aretes', 'angle', 'angles', 'coin', 'coins', 'recoin', 'recoins', 'recess', 'alcôve', 'alcove', 'alcôves', 'alcoves', 'niche', 'niches', 'anfractuosité', 'anfractuosite', 'anfractuosités', 'anfractuosites', 'cavité', 'cavite', 'cavités', 'cavites', 'trou', 'trous', 'creux', 'orifice', 'orifices', 'ouverture', 'ouvertures', 'fente', 'fentes', 'fissure', 'fissures', 'crevasse', 'crevasses', 'lézarde', 'lezarde', 'lézardes', 'lezardes', 'gerçure', 'gercure', 'gerçures', 'gercures', 'cassure', 'cassures', 'fracture', 'fractures', 'rupture', 'ruptures', 'brisure', 'brisures', 'félure', 'felure', 'félures', 'felures', 'brèche', 'breche', 'brèches', 'breches', 'trouée', 'trouee', 'trouées', 'trouees', 'percée', 'percee', 'percées', 'percees', 'passage', 'passages', 'couloir', 'couloirs', 'corridor', 'corridors', 'galerie', 'galeries', 'tunnel', 'tunnels', 'souterrain', 'souterrains', 'grotte', 'grottes', 'caverne', 'cavernes', 'antre', 'antres', 'tanière', 'taniere', 'tanières', 'tanieres', 'gîte', 'gite', 'gîtes', 'gites', 'refuge', 'refuges', 'abri', 'abris', 'cachette', 'cachettes', 'planque', 'planques', 'repaire', 'repaires', 'retraite', 'retraites', 'ermitage', 'ermitages', 'solitude', 'solitudes', 'isolement', 'isolements', 'séparation', 'separation', 'séparations', 'separations', 'division', 'divisions', 'cloison', 'cloisons', 'paroi', 'parois', 'mur', 'murs', 'muraille', 'murailles', 'rempart', 'remparts', 'fortification', 'fortifications', 'défense', 'defense', 'défenses', 'defenses', 'protection', 'protections', 'blindage', 'blindages', 'cuirasse', 'cuirasses', 'armure', 'armures', 'bouclier', 'boucliers', 'écu', 'ecu', 'écus', 'ecus', 'pavois', 'rondache', 'rondaches', 'targe', 'targes', 'carapace', 'carapaces', 'coquille', 'coquilles', 'écaille', 'ecaille', 'écailles', 'ecailles', 'plaque', 'plaques', 'lame', 'lames', 'feuille', 'feuilles', 'pellicule', 'pellicules', 'membrane', 'membranes', 'tissu', 'tissus', 'étoffe', 'etoffe', 'étoffes', 'etoffes', 'textile', 'textiles', 'fibre', 'fibres', 'fil', 'fils', 'filament', 'filaments', 'brin', 'brins', 'corde', 'cordes', 'ficelle', 'ficelles', 'câble', 'cable', 'câbles', 'cables', 'chaîne', 'chaine', 'chaînes', 'chaines', 'maillon', 'maillons', 'anneau', 'anneaux', 'bague', 'bagues', 'alliance', 'alliances', 'jonc', 'joncs', 'chevalière', 'chevaliere', 'chevalières', 'chevalieres', 'solitaire', 'solitaires', 'diamant', 'diamants', 'pierre', 'pierres', 'gemme', 'gemmes', 'bijou', 'bijoux', 'joyau', 'joyaux', 'parure', 'parures', 'ornement', 'ornements', 'décoration', 'decoration', 'décorations', 'decorations', 'enjolivement', 'enjolivements', 'embellissement', 'embellissements', 'agrément', 'agrement', 'agréments', 'agrements', 'atour', 'atours', 'apparence', 'apparences', 'aspect', 'aspects', 'allure', 'allures', 'prestance', 'prestances', 'élégance', 'elegance', 'élégances', 'elegances', 'raffinement', 'raffinements', 'distinction', 'distinctions', 'classe', 'classes', 'style', 'styles', 'genre', 'genres', 'mode', 'modes', 'tendance', 'tendances', 'fashion', 'fashions', 'couture', 'coutures', 'prêt-à-porter', 'pret-a-porter', 'haute-couture', 'haute couture', 'confection', 'confections', 'vêtement', 'vetement', 'vêtements', 'vetements', 'habit', 'habits', 'tenue', 'tenues', 'costume', 'costumes', 'toilette', 'toilettes', 'mise', 'mises', 'accoutrement', 'accoutrements', 'harnachement', 'harnachements', 'équipement', 'equipement', 'équipements', 'equipements', 'attirail', 'attirails', 'matériel', 'materiel', 'matériels', 'materiels', 'outillage', 'outillages', 'arsenal', 'arsenaux', 'armement', 'armements', 'panoplie', 'panoplies', 'collection', 'collections', 'assortiment', 'assortiments', 'gamme', 'gammes', 'palette', 'palettes', 'éventail', 'eventail', 'éventails', 'eventails', 'choix', 'sélection', 'selection', 'sélections', 'selections', 'tri', 'tris', 'triage', 'triages', 'criblage', 'criblages', 'filtrage', 'filtrages', 'épuration', 'epuration', 'épurations', 'epurations', 'purification', 'purifications', 'assainissement', 'assainissements', 'nettoyage', 'nettoyages', 'lavage', 'lavages', 'rinçage', 'rincage', 'rinçages', 'rincages', 'lessivage', 'lessivages', 'blanchiment', 'blanchiments', 'dégraissage', 'degraissage', 'dégraissages', 'degraissages', 'détachage', 'detachage', 'détachages', 'detachages', 'décrassage', 'decrassage', 'décrassages', 'decrassages', 'récurage', 'recurage', 'récurages', 'recurages', 'frottage', 'frottages', 'brossage', 'brossages', 'polissage', 'polissages', 'lustrage', 'lustrages', 'cirage', 'cirages', 'encaustique', 'encaustiques', 'cire', 'cires', 'pommade', 'pommades', 'baume', 'baumes', 'crème', 'creme', 'crèmes', 'cremes', 'onguent', 'onguents', 'liniment', 'liniments', 'embrocation', 'embrocations', 'friction', 'frictions', 'massage', 'massages', 'pétrissage', 'petrissage', 'pétrissages', 'petrissages', 'malaxage', 'malaxages', 'manipulation', 'manipulations', 'maniement', 'maniements', 'manutention', 'manutentions', 'transport', 'transports', 'acheminement', 'acheminements', 'convoyage', 'convoyages', 'livraison', 'livraisons', 'distribution', 'distributions', 'répartition', 'repartition', 'répartitions', 'repartitions', 'partage', 'partages', 'division', 'divisions', 'séparation', 'separation', 'séparations', 'separations', 'scission', 'scissions', 'coupure', 'coupures', 'découpage', 'decoupage', 'découpages', 'decoupages', 'sectionnement', 'sectionnements', 'segmentation', 'segmentations', 'morcellement', 'morcellements', 'fragmentation', 'fragmentations', 'émiettement', 'emiettement', 'émiettements', 'emiettements', 'pulvérisation', 'pulverisation', 'pulvérisations', 'pulverisations', 'atomisation', 'atomisations', 'vaporisation', 'vaporisations', 'évaporation', 'evaporation', 'évaporations', 'evaporations', 'sublimation', 'sublimations', 'distillation', 'distillations', 'condensation', 'condensations', 'liquéfaction', 'liquefaction', 'liquéfactions', 'liquefactions', 'solidification', 'solidifications', 'cristallisation', 'cristallisations', 'congélation', 'congelation', 'congélations', 'congelations', 'gel', 'gels', 'glaciation', 'glaciations', 'refroidissement', 'refroidissements', 'réfrigération', 'refrigeration', 'réfrigérations', 'refrigerations', 'zut', 'punaise', ], 'false_positives' => [ // Common French words that might be detected as false positives 'analyse', 'analyses', 'classe', 'classes', 'passer', 'passage', 'passages', 'expression', 'expressions', 'assassin', 'assassins', 'assassiner', 'assassinat', 'assassinats', 'entreprise', 'entreprises', 'entrepreneur', 'entrepreneurs', 'affaire', 'affaires', 'travail', 'travaux', 'travailler', 'travailleur', 'travailleurs', 'travailleuse', 'travailleuses', 'emploi', 'emplois', 'employé', 'employe', 'employés', 'employes', 'employée', 'employee', 'employées', 'employees', 'employeur', 'employeurs', 'bureau', 'bureaux', 'ordinateur', 'ordinateurs', 'machine', 'machines', 'appareil', 'appareils', 'dispositif', 'dispositifs', 'instrument', 'instruments', 'outil', 'outils', 'utilité', 'utilites', 'fonction', 'fonctions', 'fonctionner', 'fonctionnement', 'fonctionnements', 'caractéristique', 'caracteristique', 'caractéristiques', 'caracteristiques', 'spécialité', 'specialite', 'spécialités', 'specialites', 'spécialiste', 'specialiste', 'spécialistes', 'specialistes', 'spécialiser', 'specialiser', 'spécialisé', 'specialise', 'spécialisée', 'specialisee', 'spécialisés', 'specialises', 'spécialisées', 'specialisees', 'spécialisation', 'specialisation', 'spécialisations', 'specialisations', 'professionnel', 'professionnels', 'professionnelle', 'professionnelles', 'profession', 'professions', 'professeur', 'professeurs', 'enseigner', 'enseignement', 'enseignements', 'éducation', 'education', 'éducatif', 'educatif', 'éducative', 'educative', 'éducatifs', 'educatifs', 'éducatives', 'educatives', 'éduquer', 'eduquer', 'éduqué', 'eduque', 'éduquée', 'eduquee', 'éduqués', 'eduques', 'éduquées', 'eduquees', 'éducateur', 'educateur', 'éducateurs', 'educateurs', 'éducatrice', 'educatrice', 'éducatrices', 'educatrices', 'étudiant', 'etudiant', 'étudiants', 'etudiants', 'étudiante', 'etudiante', 'étudiantes', 'etudiantes', 'étudier', 'etudier', 'étude', 'etude', 'études', 'etudes', 'étudié', 'etudie', 'étudiée', 'etudiee', 'étudiés', 'etudies', 'étudiées', 'etudiees', 'recherche', 'recherches', 'rechercher', 'chercheur', 'chercheurs', 'chercheuse', 'chercheuses', 'scientifique', 'scientifiques', 'science', 'sciences', 'connaissance', 'connaissances', 'connaître', 'connaitre', 'connu', 'connue', 'connus', 'connues', 'savoir', 'savoirs', 'su', 'sue', 'sus', 'sues', 'sagesse', 'sagesses', 'sage', 'sages', 'intelligence', 'intelligences', 'intelligent', 'intelligents', 'intelligente', 'intelligentes', 'talent', 'talents', 'talentueux', 'talentueuse', 'talentueuses', 'habileté', 'habilete', 'habiletés', 'habiletes', 'habile', 'habiles', 'adresse', 'adresses', 'adroit', 'adroits', 'adroite', 'adroites', 'maître', 'maitre', 'maîtres', 'maitres', 'maîtresse', 'maitresse', 'maîtresses', 'maitresses', 'maîtrise', 'maitrise', 'maîtrises', 'maitrises', 'maîtriser', 'maitriser', 'maîtrisé', 'maitrise', 'maîtrisée', 'maitrisee', 'maîtrisés', 'maitrises', 'maîtrisées', 'maitrisees', 'domaine', 'domaines', 'dominer', 'dominé', 'domine', 'dominée', 'dominee', 'dominés', 'domines', 'dominées', 'dominees', 'contrôle', 'controle', 'contrôles', 'controles', 'contrôler', 'controler', 'contrôlé', 'controle', 'contrôlée', 'controlee', 'contrôlés', 'controles', 'contrôlées', 'controlees', 'administration', 'administrations', 'administrer', 'administrateur', 'administrateurs', 'administratrice', 'administratrices', 'gestion', 'gestions', 'gérer', 'gerer', 'géré', 'gere', 'gérée', 'geree', 'gérés', 'geres', 'gérées', 'gerees', 'gestionnaire', 'gestionnaires', 'organisation', 'organisations', 'organiser', 'organisé', 'organise', 'organisée', 'organisee', 'organisés', 'organises', 'organisées', 'organisees', 'organisateur', 'organisateurs', 'organisatrice', 'organisatrices', 'système', 'systeme', 'systèmes', 'systemes', 'systématique', 'systematique', 'systématiques', 'systematiques', 'méthode', 'methode', 'méthodes', 'methodes', 'méthodologie', 'methodologie', 'méthodologies', 'methodologies', 'processus', 'traiter', 'traité', 'traite', 'traitée', 'traitee', 'traités', 'traites', 'traitées', 'traitees', 'procédure', 'procedure', 'procédures', 'procedures', 'procéder', 'proceder', 'protocole', 'protocoles', 'norme', 'normes', 'normal', 'normaux', 'normale', 'normales', 'normalité', 'normalite', 'normalités', 'normalites', 'normaliser', 'normalisé', 'normalise', 'normalisée', 'normalisee', 'normalisés', 'normalises', 'normalisées', 'normalisees', 'standard', 'standards', 'standardiser', 'standardisé', 'standardise', 'standardisée', 'standardisee', 'standardisés', 'standardises', 'standardisées', 'standardisees', 'règle', 'regle', 'règles', 'regles', 'règlement', 'reglement', 'règlements', 'reglements', 'réglementer', 'reglementer', 'réglementaire', 'reglementaire', 'réglementaires', 'reglementaires', 'réguler', 'reguler', 'régulier', 'regulier', 'réguliers', 'reguliers', 'régulière', 'reguliere', 'régulières', 'regulieres', 'régularité', 'regularite', 'régularités', 'regularites', 'régulariser', 'regulariser', 'régularisé', 'regularise', 'régularisée', 'regularisee', 'régularisés', 'regularises', 'régularisées', 'regularisees', 'loi', 'lois', 'légal', 'legal', 'légaux', 'legaux', 'légale', 'legale', 'légales', 'legales', 'légalité', 'legalite', 'légalités', 'legalites', 'légaliser', 'legaliser', 'légalisé', 'legalise', 'légalisée', 'legalisee', 'légalisés', 'legalises', 'légalisées', 'legalisees', 'droit', 'droits', 'juridique', 'juridiques', 'justice', 'justices', 'juste', 'justes', 'injuste', 'injustes', 'injustice', 'injustices', 'tribunal', 'tribunaux', 'juge', 'juges', 'jugement', 'jugements', 'juger', 'jugé', 'juge', 'jugée', 'jugee', 'jugés', 'juges', 'jugées', 'jugees', 'sentence', 'sentences', 'condamnation', 'condamnations', 'condamner', 'condamné', 'condamne', 'condamnée', 'condamnee', 'condamnés', 'condamnes', 'condamnées', 'condamnees', 'punition', 'punitions', 'punir', 'puni', 'punie', 'punis', 'punies', 'peine', 'peines', 'prison', 'prisons', 'emprisonner', 'emprisonné', 'emprisonne', 'emprisonnée', 'emprisonnee', 'emprisonnés', 'emprisonnes', 'emprisonnées', 'emprisonnees', 'prisonnier', 'prisonniers', 'prisonnière', 'prisonniere', 'prisonnières', 'prisonnieres', 'détenu', 'detenu', 'détenus', 'detenus', 'détenue', 'detenue', 'détenues', 'detenues', 'pénitencier', 'penitencier', 'pénitenciers', 'penitenciers', 'maison', 'maisons', 'arrêt', 'arret', 'arrêts', 'arrets', ], 'substitutions' => [ '/à/' => ['à', 'a', '@', '4'], '/â/' => ['â', 'a', '@', '4'], '/ä/' => ['ä', 'a', '@', '4'], '/á/' => ['á', 'a', '@', '4'], '/ã/' => ['ã', 'a', '@', '4'], '/å/' => ['å', 'a', '@', '4'], '/æ/' => ['æ', 'ae', 'a'], '/è/' => ['è', 'e', '3', '€'], '/é/' => ['é', 'e', '3', '€'], '/ê/' => ['ê', 'e', '3', '€'], '/ë/' => ['ë', 'e', '3', '€'], '/ì/' => ['ì', 'i', '1', '!', '|'], '/í/' => ['í', 'i', '1', '!', '|'], '/î/' => ['î', 'i', '1', '!', '|'], '/ï/' => ['ï', 'i', '1', '!', '|'], '/ò/' => ['ò', 'o', '0', 'ø'], '/ó/' => ['ó', 'o', '0', 'ø'], '/ô/' => ['ô', 'o', '0', 'ø'], '/ö/' => ['ö', 'o', '0', 'ø'], '/õ/' => ['õ', 'o', '0', 'ø'], '/ø/' => ['ø', 'o', '0'], '/œ/' => ['œ', 'oe', 'o'], '/ù/' => ['ù', 'u', 'ü'], '/ú/' => ['ú', 'u', 'ü'], '/û/' => ['û', 'u', 'ü'], '/ü/' => ['ü', 'u', 'ù'], '/u/' => ['u', 'ù', 'ú', 'û', 'ü', '@', '*'], '/ÿ/' => ['ÿ', 'y', 'i'], '/ç/' => ['ç', 'c', 's'], '/ñ/' => ['ñ', 'n', '~n'], '/c/' => ['c', 'k', 'ç', 's'], '/k/' => ['k', 'c', 'q'], '/ph/' => ['ph', 'f'], '/qu/' => ['qu', 'k', 'q'], '/x/' => ['x', 'ks', 'gs'], '/z/' => ['z', 's'], '/j/' => ['j', 'g'], '/g/' => ['g', 'j'], ] ]; ================================================ FILE: config/languages/german.php ================================================ [ 'mild' => [ 'mist', 'kacke', 'verdammt', 'verdammte', 'verdammter', 'verdammtes', 'blöd', 'bloed', 'blöde', 'bloede', 'blöder', 'bloeder', 'blödes', 'bloedes', 'doof', 'doofe', 'doofer', 'doofes', 'dumm', 'dumme', 'dummer', 'dummes', 'albern', 'alberne', 'alberner', 'albernes', 'peinlich', 'peinliche', 'peinlicher', 'peinliches', ], 'moderate' => [ 'arsch', 'arschloch', 'arschlöcher', 'arschlocher', 'schlampe', 'nutte', 'hure', 'wichser', 'depp', 'trottel', 'idiot', 'vollidiot', 'bescheuert', 'bescheuerte', 'bescheuerter', 'bescheuertes', 'bekloppt', 'bekloppte', 'bekloppter', 'beklopptes', 'schwanz', 'pimmel', 'hintern', 'po', 'popo', 'schwul', 'schwuler', 'schwule', 'schwules', ], 'high' => [ 'scheiße', 'scheisse', 'ficken', 'fick', 'gefickt', 'verfickt', 'fotze', 'muschi', 'möse', 'moese', 'hurensohn', 'hurenkind', 'arschficker', 'vögeln', 'voegeln', 'bumsen', ], 'extreme' => [ 'tunte', 'tuntig', 'kampflesbe', 'kampflesben', 'kanake', 'kanaken', 'neger', 'negerin', 'zigeuner', 'zigeunerin', 'retardiert', 'retardierte', 'retardierter', ], ], 'profanities' => [ // Common German profanities and vulgar expressions 'scheiße', 'scheisse', 'scheiß', 'scheiss', 'kacke', 'mist', 'arsch', 'arschloch', 'arschlöcher', 'arschlocher', 'ficken', 'fick', 'gefickt', 'verfickt', 'verfickte', 'verfickter', 'verficktes', 'verdammt', 'verdammte', 'verdammter', 'verdammtes', 'hurensohn', 'hurenkind', 'hure', 'nutte', 'schlampe', 'fotze', 'muschi', 'möse', 'moese', 'schwanz', 'pimmel', 'dödel', 'doedel', 'lümmel', 'luemmel', 'rute', 'zipfel', 'glied', 'eier', 'hoden', 'klöten', 'kloeten', 'sack', 'hodensack', 'nüsse', 'nuesse', 'kugeln', 'beutel', 'titten', 'brüste', 'brueste', 'busen', 'möpse', 'moepse', 'hupen', 'vorbau', 'körbchen', 'koerbchen', 'milchdrüsen', 'milchdruesen', 'warzen', 'nippel', 'brustwarzen', 'zitzen', 'hintern', 'po', 'popo', 'gesäß', 'gesaess', 'kehrseite', 'vier buchstaben', 'allerwertester', 'rückseite', 'rueckseite', 'backen', 'pobacken', 'arschbacken', 'speck', 'hinterteil', 'schwul', 'schwuler', 'schwule', 'schwules', 'homo', 'homos', 'homosexuell', 'homosexuelle', 'homosexueller', 'homosexuelles', 'tuntig', 'tunte', 'warm', 'warmer', 'warme', 'warmes', 'lesbe', 'lesben', 'lesbisch', 'lesbische', 'lesbischer', 'lesbisches', 'kampflesbe', 'kampflesben', 'butze', 'butzen', 'wichser', 'wichsen', 'wichst', 'gewichst', 'onanieren', 'onaniert', 'masturbieren', 'masturbiert', 'selbstbefriedigung', 'handjob', 'blasen', 'bläst', 'blaest', 'blowjob', 'oral', 'lecken', 'leckt', 'geleckt', 'cunnilingus', 'fellatio', 'lutschen', 'lutscht', 'gelutscht', 'saugen', 'saugt', 'gesaugt', 'pusten', 'pustet', 'gepustet', 'vögeln', 'voegeln', 'vögelt', 'voegelt', 'gevögelt', 'gevoegelt', 'bumsen', 'bumst', 'gebumst', 'poppen', 'poppt', 'gepoppt', 'knallen', 'knallt', 'geknallt', 'nageln', 'nagelt', 'genagelt', 'rammeln', 'rammelt', 'gerammelt', 'durchnageln', 'durchnagelt', 'durchgenagelt', 'durchficken', 'durchfickt', 'durchgefickt', 'rannehmen', 'rannimmt', 'rangenommen', 'besteigen', 'besteigt', 'bestiegen', 'bespringen', 'bespringt', 'besprungen', 'penis', 'vagina', 'vulva', 'klitoris', 'kitzler', 'schamlippen', 'venushügel', 'venushuegel', 'scham', 'geschlecht', 'geschlechtsteil', 'geschlechtsteile', 'genitalien', 'intimbereich', 'unterkörper', 'unterkoerper', 'lenden', 'lendengegend', 'schritt', 'schrittbereich', 'unterleib', 'becken', 'beckenboden', 'damm', 'perineum', 'anus', 'after', 'poloch', 'arschloch', 'rosette', 'poperze', 'hintertür', 'hintertuer', 'ausgang', 'darmausgang', 'enddarm', 'rektum', 'mastdarm', 'analbereich', 'afterbereich', 'hinterlader', 'arschficker', 'arschficken', 'arschgefickt', 'analverkehr', 'analsex', 'sodomie', 'sodomist', 'sodomistin', 'pervers', 'perverse', 'perverser', 'perverses', 'perversling', 'pervertiert', 'pervertierte', 'pervertierter', 'pervertiertes', 'versaut', 'versaute', 'versauter', 'versautes', 'schmutzig', 'schmutzige', 'schmutziger', 'schmutziges', 'dreckig', 'dreckige', 'dreckiger', 'dreckiges', 'dreck', 'unrat', 'abschaum', 'pack', 'gesindel', 'pöbel', 'poebel', 'mob', 'kanaille', 'lumpen', 'lump', 'schuft', 'schurke', 'halunke', 'gauner', 'ganove', 'gangster', 'verbrecher', 'kriminell', 'kriminelle', 'krimineller', 'kriminelles', 'asozial', 'asoziale', 'asozialer', 'asoziales', 'asi', 'prollig', 'prollige', 'prolliger', 'prolliges', 'proll', 'prolet', 'unterschicht', 'prekariat', 'hartz', 'hartzer', 'arbeitslos', 'arbeitslose', 'arbeitsloser', 'arbeitsloses', 'sozialhilfe', 'sozialschmarotzer', 'schmarotzer', 'parasit', 'parasiten', 'ungeziefer', 'schädling', 'schaedling', 'schädlinge', 'schaedlinge', 'plage', 'pest', 'seuche', 'krankheit', 'leiden', 'übel', 'uebel', 'böse', 'boese', 'schlecht', 'schlimm', 'schrecklich', 'furchtbar', 'entsetzlich', 'grauenhaft', 'grausam', 'brutal', 'roh', 'primitiv', 'primitive', 'primitiver', 'primitives', 'barbarisch', 'barbarische', 'barbarischer', 'barbarisches', 'wild', 'wilde', 'wilder', 'wildes', 'ungezähmt', 'ungebildet', 'ungebildete', 'ungebildeter', 'ungebildetes', 'dumm', 'dumme', 'dummer', 'dummes', 'doof', 'doofe', 'doofer', 'doofes', 'blöd', 'bloed', 'blöde', 'bloede', 'blöder', 'bloeder', 'blödes', 'bloedes', 'bescheuert', 'bescheuerte', 'bescheuerter', 'bescheuertes', 'bekloppt', 'bekloppte', 'bekloppter', 'beklopptes', 'verrückt', 'verrueckt', 'verrückte', 'verrueckte', 'verrückter', 'verrueckter', 'verrücktes', 'verruecktes', 'irre', 'irrer', 'irres', 'wahnsinnig', 'wahnsinnige', 'wahnsinniger', 'wahnsinniges', 'gestört', 'gestoert', 'gestörte', 'gestoerte', 'gestörter', 'gestoerter', 'gestörtes', 'gestoertes', 'krank', 'kranke', 'kranker', 'krankes', 'pathologisch', 'pathologische', 'pathologischer', 'pathologisches', 'abnormal', 'abnormale', 'abnormaler', 'abnormales', 'unnormal', 'unnormale', 'unnormaler', 'unnormales', 'abartig', 'abartige', 'abartiger', 'abartiges', 'widerlich', 'widerliche', 'widerlicher', 'widerliches', 'ekelhaft', 'ekelhafte', 'ekelhafter', 'ekelhaftes', 'eklig', 'eklige', 'ekliger', 'ekliges', 'widerwertig', 'widerwertige', 'widerwertiger', 'widerwertiges', 'abstoßend', 'abstossend', 'abstoßende', 'abstossende', 'abstoßender', 'abstossender', 'abstoßendes', 'abstossendes', 'absurd', 'absurde', 'absurder', 'absurdes', 'lächerlich', 'laecherlich', 'lächerliche', 'laecherliche', 'lächerlicher', 'laecherlicher', 'lächerliches', 'laecherliches', 'albern', 'alberne', 'alberner', 'albernes', 'affig', 'affige', 'affiger', 'affiges', 'närrisch', 'naerrisch', 'närrische', 'naerrische', 'närrischer', 'naerrischer', 'närrisches', 'naerrisches', 'töricht', 'toericht', 'törichte', 'toerichte', 'törichter', 'toerichter', 'törichtes', 'toerichtes', 'blamabel', 'blamable', 'blamabler', 'blamables', 'peinlich', 'peinliche', 'peinlicher', 'peinliches', 'beschämend', 'beschaemend', 'beschämende', 'beschaemende', 'beschämender', 'beschaemender', 'beschämendes', 'beschaemendes', 'schmählich', 'schmaehlich', 'schmähliche', 'schmaehliche', 'schmählicher', 'schmaehlicher', 'schmähliches', 'schmaehliches', 'schändlich', 'schaendlich', 'schändliche', 'schaendliche', 'schändlicher', 'schaendlicher', 'schändliches', 'schaendliches', 'gemein', 'gemeine', 'gemeiner', 'gemeines', 'niederträchtig', 'niedertraechtig', 'niederträchtige', 'niedertraechtige', 'niederträchtiger', 'niedertraechtiger', 'niederträchtiges', 'niedertraechtiges', 'hinterhältig', 'hinterhaeltig', 'hinterhältige', 'hinterhaeltige', 'hinterhältiger', 'hinterhaeltiger', 'hinterhältiges', 'hinterhaeltiges', 'heimtückisch', 'heimtueckisch', 'heimtückische', 'heimtueckische', 'heimtückischer', 'heimtueckischer', 'heimtückisches', 'heimtueckisches', 'falsch', 'falsche', 'falscher', 'falsches', 'verlogen', 'verlogene', 'verlogener', 'verlogenes', 'heuchlerisch', 'heuchlerische', 'heuchlerischer', 'heuchlerisches', 'scheinheilig', 'scheinheilige', 'scheinheiliger', 'scheinheiliges', 'doppelzüngig', 'doppelzuengig', 'doppelzüngige', 'doppelzuengige', 'doppelzüngiger', 'doppelzuengiger', 'doppelzüngiges', 'doppelzuengiges', 'verlogen', 'verlogene', 'verlogener', 'verlogenes', 'unaufrichtig', 'unaufrichtige', 'unaufrichtiger', 'unaufrichtiges', 'unehrlich', 'unehrliche', 'unehrlicher', 'unehrliches', 'betrügerisch', 'betruegerisch', 'betrügerische', 'betruegerische', 'betrügerischer', 'betruegerischer', 'betrügerisches', 'betruegerisches', 'schwindelhaft', 'schwindlerisch', 'schwindlerische', 'schwindlerischer', 'schwindlerisches', 'unredlich', 'unredliche', 'unredlicher', 'unredliches', 'unlauter', 'unlautere', 'unlauterer', 'unlauteres', 'unseriös', 'unserioes', 'unseriöse', 'unserioes', 'unseriöser', 'unserioeser', 'unseriöses', 'unserioes', 'dubios', 'dubiose', 'dubioser', 'dubioses', 'fragwürdig', 'fragwuerdig', 'fragwürdige', 'fragwuerdige', 'fragwürdiger', 'fragwuerdiger', 'fragwürdiges', 'fragwuerdiges', 'zweifelhaft', 'zweifelhafte', 'zweifelhafter', 'zweifelhaftes', 'suspekt', 'suspekte', 'suspekter', 'suspektes', 'verdächtig', 'verdaechtig', 'verdächtige', 'verdaechtige', 'verdächtiger', 'verdaechtiger', 'verdächtiges', 'verdaechtiges', 'obskur', 'obskure', 'obskurer', 'obskures', 'dunkel', 'dunkle', 'dunkler', 'dunkles', 'finster', 'finstere', 'finsterer', 'finsteres', 'schwarz', 'schwarze', 'schwarzer', 'schwarzes', 'düster', 'duester', 'düstere', 'duestere', 'düsterer', 'duesterer', 'düsteres', 'duesteres', 'trüb', 'trueb', 'trübe', 'truebe', 'trüber', 'trueber', 'trübes', 'truebes', 'matt', 'matte', 'matter', 'mattes', 'fahl', 'fahle', 'fahler', 'fahles', 'blass', 'blasse', 'blasser', 'blasses', 'bleich', 'bleiche', 'bleicher', 'bleiches', 'käsig', 'kaesig', 'käsige', 'kaesige', 'käsiger', 'kaesiger', 'käsiges', 'kaesiges', 'kränklich', 'kraenklich', 'kränkliche', 'kraenkliche', 'kränklicher', 'kraenklicher', 'kränkliches', 'kraenkliches', 'schwächlich', 'schwaechlich', 'schwächliche', 'schwaechliche', 'schwächlicher', 'schwaechlicher', 'schwächliches', 'schwaechliches', 'schwach', 'schwache', 'schwacher', 'schwaches', 'kraftlos', 'kraftlose', 'kraftloser', 'kraftloses', 'energielos', 'energielose', 'energieloser', 'energieloses', 'müde', 'muede', 'müder', 'mueder', 'müdes', 'muedes', 'erschöpft', 'erschoepft', 'erschöpfte', 'erschoepfte', 'erschöpfter', 'erschoepfter', 'erschöpftes', 'erschoepftes', 'ausgepowert', 'ausgepowerte', 'ausgepower', 'ausgepowertes', 'kaputt', 'kaputte', 'kaputter', 'kaputtes', 'defekt', 'defekte', 'defekter', 'defektes', 'hinüber', 'hinueber', 'im arsch', 'futsch', 'dahin', 'ruiniert', 'ruinierte', 'ruinierter', 'ruiniertes', 'zerstört', 'zerstoert', 'zerstörte', 'zerstoerte', 'zerstörter', 'zerstoerter', 'zerstörtes', 'zerstoertes', 'zerbrochen', 'zerbrochene', 'zerbrochener', 'zerbrochenes', 'zerschmettert', 'zerschmetterte', 'zerschmetterter', 'zerschmettertes', 'demoliert', 'demolierte', 'demolierter', 'demoliertes', 'vernichtet', 'vernichtete', 'vernichteter', 'vernichtetes', 'ausgelöscht', 'ausgeloescht', 'ausgelöschte', 'ausgeloeschte', 'ausgelöschter', 'ausgeloeschter', 'ausgelöschtes', 'ausgeloeschtes', 'eliminiert', 'eliminierte', 'eliminierter', 'eliminiertes', 'getötet', 'getoetet', 'getötete', 'getoetete', 'getöteter', 'getoeteter', 'getötetes', 'getoetetes', 'umgebracht', 'umgebrachte', 'umgebrachter', 'umgebrachtes', 'ermordet', 'ermordete', 'ermordeter', 'ermordetes', 'hingerichtet', 'hingerichtete', 'hingerichteter', 'hingerichtetes', 'exekutiert', 'exekutierte', 'exekutierter', 'exekutiertes', 'liquidiert', 'liquidierte', 'liquidierter', 'liquidiertes', 'abgemurkst', 'abgemurks', 'abgemurkstes', 'kaltgemacht', 'kaltgemachte', 'kaltgemachter', 'kaltgemachtes', 'plattgemacht', 'plattgemachte', 'plattgemachter', 'plattgemachtes', 'fertiggemacht', 'fertiggemachte', 'fertiggemachter', 'fertiggemachtes', 'kaputtgemacht', 'kaputtgemachte', 'kaputtgemachter', 'kaputtgemachtes', 'totgemacht', 'totgemachte', 'totgemachter', 'totgemachtes', 'totgeschlagen', 'totgeschlagene', 'totgeschlagener', 'totgeschlagenes', 'totgeprügelt', 'totgeprügelte', 'totgeprügelter', 'totgeprügeltes', 'totgetrampelt', 'totgetrampelte', 'totgetrampelter', 'totgetrampe', 'totgefahren', 'totgefahrene', 'totgefahrener', 'totgefahrenes', 'überfahren', 'ueberfahren', 'überfahrene', 'ueberfahrene', 'überfahrener', 'ueberfahrener', 'überfahrenes', 'ueberfahrenes', 'totgefahren', 'totgefahrene', 'totgefahrener', 'totgefahrenes', 'erstickt', 'erstickte', 'erstickter', 'ersticktes', 'erwürgt', 'erwuergt', 'erwürgte', 'erwuergte', 'erwürgter', 'erwuergter', 'erwürgtes', 'erwuergtes', 'erdrosselt', 'erdrosselte', 'erdrosselter', 'erdrosseltes', 'stranguliert', 'strangulierte', 'strangulierter', 'stranguliertes', 'gehängt', 'gehaengt', 'gehängte', 'gehaengte', 'gehängter', 'gehaengter', 'gehängtes', 'gehaengtes', 'aufgehängt', 'aufgehaengt', 'aufgehängte', 'aufgehaengte', 'aufgehängter', 'aufgehaengter', 'aufgehängtes', 'aufgehaengtes', 'erhängt', 'erhaengt', 'erhängte', 'erhaengte', 'erhängter', 'erhaengter', 'erhängtes', 'erhaengtes', 'verbrannt', 'verbrannte', 'verbrannter', 'verbranntes', 'angezündet', 'angezuendet', 'angezündete', 'angezuendete', 'angezündeter', 'angezuendeter', 'angezündetes', 'angezuendetes', 'abgefackelt', 'abgefackelte', 'abgefackelter', 'abgefackeltes', 'niedergebrannt', 'niedergebrannte', 'niedergebrannter', 'niedergebranntes', 'eingeäschert', 'eingeaeschert', 'eingeäscherte', 'eingeaescherte', 'eingeäscherter', 'eingeaescherter', 'eingeäschertes', 'eingeaeschertes', 'verbrannt', 'verbrannte', 'verbrannter', 'verbranntes', 'verkohlt', 'verkohlte', 'verkohlter', 'verkohltes', 'verkocht', 'verkochte', 'verkochter', 'verkochtes', 'versotten', 'versottene', 'versottener', 'versottenes', 'versotten', 'versoffene', 'versoffener', 'versoffenes', 'besoffen', 'besoffene', 'besoffener', 'besoffenes', 'betrunken', 'betrunkene', 'betrunkener', 'betrunkenes', 'angetrunken', 'angetrunkene', 'angetrunkener', 'angetrunkenes', 'alkoholisiert', 'alkoholisierte', 'alkoholisierter', 'alkoholisiertes', 'breit', 'breite', 'breiter', 'breites', 'zu', 'zugedröhnt', 'zugedroehnt', 'zugedröhnte', 'zugedroehnte', 'zugedröhnter', 'zugedroeh', 'zugedröhntes', 'zugedroeh', 'dicht', 'dichte', 'dichter', 'dichtes', 'voll', 'volle', 'voller', 'volles', 'hinüber', 'hinueber', 'weggetreten', 'weggetretene', 'weggetretener', 'weggetretenes', 'weg', 'wege', 'weger', 'weges', 'drauf', 'high', 'highe', 'higher', 'highes', 'stoned', 'stoner', 'stones', 'bekifft', 'bekiffte', 'bekiffter', 'bekifftes', 'zugekifft', 'zugekiffte', 'zugekiffter', 'zugekifftes', 'zugeraucht', 'zugerauchte', 'zugerauchter', 'zugerauchtes', 'stramm', 'stramme', 'strammer', 'strammes', 'dicht', 'dichte', 'dichter', 'dichtes', 'platt', 'platte', 'platter', 'plattes', 'depp', 'trottel', 'idiot', 'vollidiot', 'kanake', 'kanaken', 'neger', 'negerin', 'zigeuner', 'zigeunerin', 'retardiert', 'retardierte', 'retardierter', ], 'false_positives' => [ // Common German words that might be detected as false positives 'analyse', 'analysen', 'analysieren', 'analysiert', 'analysierte', 'analysierter', 'analysiertes', 'klasse', 'klassen', 'klassisch', 'klassische', 'klassischer', 'klassisches', 'passen', 'passt', 'gepasst', 'passage', 'passagen', 'ausdruck', 'ausdrücke', 'ausdruecke', 'ausdrücklich', 'ausdruecklich', 'ausdrückliche', 'ausdrueckliche', 'ausdrücklicher', 'ausdruecklicher', 'ausdrückliches', 'ausdrueckliches', 'mörder', 'moerder', 'morden', 'mordet', 'gemordet', 'mord', 'morde', 'mordtat', 'mordtaten', 'unternehmen', 'unternehmens', 'unternehmung', 'unternehmungen', 'unternehmer', 'unternehmerin', 'geschäft', 'geschaeft', 'geschäfte', 'geschaefte', 'geschäftlich', 'geschaeftlich', 'geschäftliche', 'geschaeftliche', 'geschäftlicher', 'geschaeftlicher', 'geschäftliches', 'geschaeftliches', 'arbeit', 'arbeiten', 'arbeiter', 'arbeiterin', 'arbeiterinnen', 'arbeitsplatz', 'arbeitsplätze', 'arbeitsplaetze', 'anstellung', 'anstellungen', 'angestellt', 'angestellte', 'angestellter', 'angestelltes', 'arbeitgeber', 'arbeitgeberin', 'arbeitnehmer', 'arbeitnehmerin', 'büro', 'buero', 'büros', 'bueros', 'computer', 'computers', 'rechner', 'maschine', 'maschinen', 'maschinell', 'maschinelle', 'maschineller', 'maschinelles', 'gerät', 'geraet', 'geräte', 'geraete', 'apparat', 'apparate', 'vorrichtung', 'vorrichtungen', 'instrument', 'instrumente', 'werkzeug', 'werkzeuge', 'hilfsmittel', 'nutzen', 'nützen', 'nuetzen', 'nützlich', 'nuetzlich', 'nützliche', 'nuetzliche', 'nützlicher', 'nuetzlicher', 'nützliches', 'nuetzliches', 'funktion', 'funktionen', 'funktionieren', 'funktioniert', 'funktionierte', 'funktioniertes', 'eigenschaft', 'eigenschaften', 'charakteristikum', 'charakteristika', 'charakteristisch', 'charakteristische', 'charakteristischer', 'charakteristisches', 'spezialität', 'spezialitaet', 'spezialitäten', 'spezialitaeten', 'spezialist', 'spezialisten', 'spezialistin', 'spezialistinnen', 'spezialisieren', 'spezialisiert', 'spezialisierte', 'spezialisierter', 'spezialisiertes', 'spezialisierung', 'spezialisierungen', 'beruflich', 'berufliche', 'beruflicher', 'berufliches', 'beruf', 'berufe', 'lehrer', 'lehrerin', 'lehrerinnen', 'unterrichten', 'unterrichtet', 'unterrichtete', 'unterrichtetes', 'unterricht', 'lehre', 'lehren', 'lehrte', 'gelehrt', 'gelehrte', 'gelehrter', 'gelehrtes', 'bildung', 'bildungen', 'bildungswesen', 'ausbildung', 'ausbildungen', 'erziehung', 'erziehen', 'erzieht', 'erzogen', 'erzogene', 'erzogener', 'erzogenes', 'erzieher', 'erzieherin', 'erzieherinnen', 'student', 'studenten', 'studentin', 'studentinnen', 'studieren', 'studiert', 'studierte', 'studierter', 'studiertes', 'studium', 'studien', 'studie', 'forschung', 'forschungen', 'forschen', 'forscht', 'forschte', 'geforscht', 'forscher', 'forscherin', 'forscherinnen', 'wissenschaft', 'wissenschaften', 'wissenschaftlich', 'wissenschaftliche', 'wissenschaftlicher', 'wissenschaftliches', 'wissenschaftler', 'wissenschaftlerin', 'wissenschaftlerinnen', 'wissen', 'weiss', 'weiß', 'gewusst', 'wusste', 'wissend', 'wissende', 'wissender', 'wissendes', 'kenntnis', 'kenntnisse', 'kennen', 'kennt', 'kannte', 'gekannt', 'bekannt', 'bekannte', 'bekannter', 'bekanntes', 'erkennen', 'erkennt', 'erkannte', 'erkannt', 'erkannte', 'erkannter', 'erkanntes', 'erkenntnis', 'erkenntnisse', 'weisheit', 'weise', 'weisen', 'wies', 'gewiesen', 'intelligent', 'intelligente', 'intelligenter', 'intelligentes', 'intelligenz', 'talent', 'talente', 'talentiert', 'talentierte', 'talentierter', 'talentiertes', 'fähigkeit', 'faehigkeit', 'fähigkeiten', 'faehigkeiten', 'fähig', 'faehig', 'fähige', 'faehige', 'fähiger', 'faehiger', 'fähiges', 'faehiges', 'geschick', 'geschickt', 'geschickte', 'geschickter', 'geschicktes', 'geschicklichkeit', 'geschicklichkeiten', 'fertigkeit', 'fertigkeiten', 'können', 'koennen', 'kann', 'konnte', 'gekonnt', 'meister', 'meisterin', 'meisterinnen', 'meisterschaft', 'meisterschaften', 'meistern', 'meistert', 'meisterte', 'gemeistert', 'bereich', 'bereiche', 'gebiet', 'gebiete', 'domain', 'domäne', 'domaene', 'domänen', 'domaenen', 'beherrschen', 'beherrscht', 'beherrschte', 'beherrschtes', 'beherrschung', 'kontrolle', 'kontrollieren', 'kontrolliert', 'kontrollierte', 'kontrolliertes', 'verwaltung', 'verwaltungen', 'verwalten', 'verwaltet', 'verwaltete', 'verwaltetes', 'verwalter', 'verwalterin', 'verwalterinnen', 'management', 'managements', 'managen', 'gemanagt', 'manager', 'managerin', 'managerinnen', 'führung', 'fuehrung', 'führungen', 'fuehrungen', 'führen', 'fuehren', 'führt', 'fuehrt', 'führte', 'fuehrte', 'geführt', 'gefuehrt', 'führer', 'fuehrer', 'führerin', 'fuehrerin', 'führerinnen', 'fuehrerinnen', 'leitung', 'leitungen', 'leiten', 'leitet', 'leitete', 'geleitet', 'leiter', 'leiterin', 'leiterinnen', 'organisation', 'organisationen', 'organisieren', 'organisiert', 'organisierte', 'organisierter', 'organisiertes', 'system', 'systeme', 'systematisch', 'systematische', 'systematischer', 'systematisches', 'methode', 'methoden', 'methodisch', 'methodische', 'methodischer', 'methodisches', 'verfahren', 'prozess', 'prozesse', 'prozessieren', 'prozessiert', 'prozessierte', 'prozessiertes', 'ablauf', 'abläufe', 'ablaeufe', 'vorgang', 'vorgänge', 'vorgaenge', 'procedere', 'protokoll', 'protokolle', 'norm', 'normen', 'normieren', 'normiert', 'normierte', 'normierter', 'normiertes', 'normal', 'normale', 'normaler', 'normales', 'normalität', 'normalitaet', 'standard', 'standards', 'standardisieren', 'standardisiert', 'standardisierte', 'standardisierter', 'standardisiertes', 'regel', 'regeln', 'reglement', 'reglements', 'reglementieren', 'reglementiert', 'reglementierte', 'reglementiertes', 'regulieren', 'reguliert', 'regulierte', 'reguliertes', 'regular', 'reguläre', 'regulaere', 'regulärer', 'regulaerer', 'reguläres', 'regulaeres', 'regelmäßig', 'regelmaessig', 'regelmäßige', 'regelmaessige', 'regelmäßiger', 'regelmaessiger', 'regelmäßiges', 'regelmaessiges', 'gesetz', 'gesetze', 'gesetzlich', 'gesetzliche', 'gesetzlicher', 'gesetzliches', 'legal', 'legale', 'legaler', 'legales', 'legalität', 'legalitaet', 'legitimität', 'legitimiatet', 'legitim', 'legitime', 'legitimer', 'legitimes', 'legitimieren', 'legitimiert', 'legitimierte', 'legitimiertes', 'recht', 'rechte', 'rechtlich', 'rechtliche', 'rechtlicher', 'rechtliches', 'rechtmäßig', 'rechtmaessig', 'rechtmäßige', 'rechtmaessige', 'rechtmäßiger', 'rechtmaessiger', 'rechtmäßiges', 'rechtmaessiges', 'gerechtigkeit', 'gerecht', 'gerechte', 'gerechter', 'gerechtes', 'ungerecht', 'ungerechte', 'ungerechter', 'ungerechtes', 'ungerechtigkeit', 'ungerechtigkeiten', 'gericht', 'gerichte', 'richter', 'richterin', 'richterinnen', 'richten', 'richtet', 'richtete', 'gerichtet', 'urteil', 'urteile', 'urteilen', 'beurteilen', 'beurteilt', 'beurteilte', 'beurteiltes', 'beurteilung', 'beurteilungen', 'verurteilung', 'verurteilungen', 'verurteilen', 'verurteilt', 'verurteilte', 'verurteiltes', 'schuld', 'schuldig', 'schuldige', 'schuldiger', 'schuldiges', 'strafe', 'strafen', 'bestrafen', 'bestraft', 'bestrafte', 'bestrafter', 'bestrafftes', 'bestrafung', 'bestrafungen', 'gefängnis', 'gefaengnis', 'gefängnisse', 'gefaengnisse', 'knast', 'einsperren', 'eingesperrt', 'eingesperrte', 'eingesperrter', 'eingesperrtes', 'häftling', 'haeftling', 'häftlinge', 'haeftlinge', 'sträfling', 'straefling', 'sträflinge', 'straeflinge', 'inhaftiert', 'inhaftierte', 'inhaftierter', 'inhaftiertes', 'inhaftierung', 'inhaftierungen', 'festnahme', 'festnahmen', 'festnehmen', 'festgenommen', 'verhaftung', 'verhaftungen', 'verhaften', 'verhaftet', 'verhaftete', 'verhafteter', 'verhaftetes', 'arrest', 'arrestieren', 'arrestiert', 'arrestierte', 'arrestiertes', ], 'substitutions' => [ '/ä/' => ['ä', 'a', 'ae', '@', '4'], '/ö/' => ['ö', 'o', 'oe', '0', 'ø'], '/ü/' => ['ü', 'u', 'ue'], '/ß/' => ['ß', 'ss', 's'], '/á/' => ['á', 'a', '@', '4'], '/à/' => ['à', 'a', '@', '4'], '/â/' => ['â', 'a', '@', '4'], '/ã/' => ['ã', 'a', '@', '4'], '/å/' => ['å', 'a', '@', '4'], '/æ/' => ['æ', 'ae', 'a'], '/é/' => ['é', 'e', '3', '€'], '/è/' => ['è', 'e', '3', '€'], '/ê/' => ['ê', 'e', '3', '€'], '/ë/' => ['ë', 'e', '3', '€'], '/í/' => ['í', 'i', '1', '!', '|'], '/ì/' => ['ì', 'i', '1', '!', '|'], '/î/' => ['î', 'i', '1', '!', '|'], '/ï/' => ['ï', 'i', '1', '!', '|'], '/ó/' => ['ó', 'o', '0', 'ø'], '/ò/' => ['ò', 'o', '0', 'ø'], '/ô/' => ['ô', 'o', '0', 'ø'], '/õ/' => ['õ', 'o', '0', 'ø'], '/ø/' => ['ø', 'o', '0'], '/ú/' => ['ú', 'u', 'ü'], '/ù/' => ['ù', 'u', 'ü'], '/û/' => ['û', 'u', 'ü'], '/u/' => ['u', 'ü', 'ù', 'ú', 'û', '@', '*'], '/c/' => ['c', 'k', 's', 'z'], '/k/' => ['k', 'c', 'ck'], '/ck/' => ['ck', 'k', 'c'], '/z/' => ['z', 's', 'tz'], '/tz/' => ['tz', 'z', 's'], '/pf/' => ['pf', 'f', 'p'], '/ph/' => ['ph', 'f'], '/sch/' => ['sch', 'sh', 'ch'], '/ch/' => ['ch', 'sh', 'x'], '/ie/' => ['ie', 'i', 'y'], '/ei/' => ['ei', 'ai', 'ey'], '/ai/' => ['ai', 'ei', 'ay'], '/au/' => ['au', 'aw', 'ou'], '/eu/' => ['eu', 'oi', 'oy'], '/äu/' => ['äu', 'aeu', 'oy'], '/dt/' => ['dt', 't', 'd'], '/st/' => ['st', 's', 't'], ] ]; ================================================ FILE: config/languages/spanish.php ================================================ [ 'mild' => [ 'maldito', 'maldita', 'maldición', 'maldicion', 'carajo', 'hostia', 'hostias', 'jolines', 'joline', 'jobar', 'joroba', 'caca', 'mear', 'meada', 'peo', 'pedorro', 'pedorra', 'pedos', 'tonto', 'tonta', 'bobo', 'boba', 'baboso', 'babosa', 'cursi', 'pesado', 'pesada', 'latoso', 'latosa', ], 'moderate' => [ 'cabrón', 'cabron', 'cabrona', 'cabrones', 'cabronazo', 'perra', 'zorra', 'gilipollas', 'gilipolla', 'imbécil', 'imbecil', 'idiota', 'estúpido', 'estupido', 'estúpida', 'estupida', 'pendejo', 'pendeja', 'mamón', 'mamon', 'boludo', 'boluda', 'pelotudo', 'pelotuda', 'culo', 'ojete', 'putilla', 'putita', 'capullo', 'coñazo', 'conazo', 'putada', ], 'high' => [ 'mierda', 'joder', 'coño', 'puta', 'puto', 'chingar', 'chingado', 'chingada', 'pinche', 'verga', 'follar', 'follada', 'follando', 'hijo de puta', 'hijoputa', 'concha', 'cojones', ], 'extreme' => [ 'maricón', 'maricon', 'marica', 'maricona', 'mariconazo', 'tortillera', 'bollera', 'retrasado', 'retrasada', 'retardado', 'retardada', 'mongoloide', 'subnormal', ], ], 'profanities' => [ // Common Spanish profanities and vulgar expressions 'mierda', 'joder', 'coño', 'cabrón', 'cabron', 'puta', 'puto', 'jodido', 'jodida', 'hijo de puta', 'hijoputa', 'gilipollas', 'gilipolla', 'imbécil', 'imbecil', 'idiota', 'estúpido', 'estupido', 'pendejo', 'pendeja', 'mamón', 'mamon', 'mamada', 'chingar', 'chingas', 'chingado', 'chingada', 'pinche', 'verga', 'carajo', 'cojones', 'huevos', 'huevón', 'huevon', 'maricón', 'maricon', 'marica', 'homosexual', 'tortillera', 'bollera', 'follar', 'folla', 'follada', 'follando', 'culiar', 'culear', 'culo', 'ojete', 'concha', 'chocha', 'chochito', 'chucha', 'almeja', 'zorra', 'zorro', 'putilla', 'putita', 'perra', 'perro', 'cabrona', 'cabrones', 'puton', 'putón', 'putona', 'putañero', 'putanero', 'polla', 'picha', 'rabo', 'nabo', 'cipote', 'chorizo', 'salchicha', 'salchichón', 'salchichon', 'miembro', 'pene', 'pijo', 'capullo', 'caput', 'gusano', 'rata', 'caca', 'mear', 'meada', 'orín', 'orin', 'orina', 'orinarse', 'cagar', 'cagada', 'cagarse', 'cagón', 'cagon', 'cagona', 'culiacan', 'culiao', 'culiado', 'culero', 'culera', 'nalgas', 'trasero', 'pompis', 'pompas', 'tetona', 'tetuda', 'tetas', 'pechos', 'chichonas', 'chichona', 'zángano', 'zangano', 'cabronazo', 'hijoelagranputa', 'hijoeputa', 'malparido', 'malparida', 'desgraciado', 'desgraciada', 'sinvergüenza', 'sinverguenza', 'cochino', 'cochina', 'guarro', 'guarra', 'sucio', 'sucia', 'asqueroso', 'asquerosa', 'repugnante', 'vomitivo', 'vomitiva', 'nauseabundo', 'nauseabunda', 'escoria', 'basura', 'porquería', 'porqueria', 'maldito', 'maldita', 'condenado', 'condenada', 'jodón', 'jodon', 'jodona', 'molesto', 'molesta', 'fastidioso', 'fastidiosa', 'cabronazo', 'maricona', 'mariconazo', 'bolludo', 'bolluda', 'boludo', 'boluda', 'pelotudo', 'pelotuda', 'tarado', 'tarada', 'retrasado', 'retrasada', 'retardado', 'retardada', 'mongoloide', 'subnormal', 'anormal', 'deficiente', 'tonto', 'tonta', 'bobo', 'boba', 'baboso', 'babosa', 'babas', 'ñoño', 'ñona', 'cursi', 'ridículo', 'ridiculo', 'ridícula', 'ridicula', 'estúpida', 'estupida', 'gorda', 'gordo', 'gordinflas', 'gordinfla', 'ballena', 'vaca', 'cerda', 'cerdo', 'chancho', 'chancha', 'marrano', 'marrana', 'cochino', 'cochina', 'puerco', 'puerca', 'animal', 'bestia', 'salvaje', 'bárbaro', 'barbaro', 'bárbara', 'barbara', 'bruto', 'bruta', 'burro', 'burra', 'asno', 'asna', 'mula', 'mulo', 'bestia', 'fiera', 'demonio', 'diablo', 'diabla', 'satanás', 'satanas', 'lucifer', 'maldición', 'maldicion', 'carajo', 'hostia', 'hostias', 'jolines', 'joline', 'jobar', 'joroba', 'cojonudo', 'cojonuda', 'cojudo', 'cojuda', 'acojonante', 'descojonarse', 'descojonar', 'tocapelotas', 'tocacojones', 'rompepelotas', 'rompecojones', 'pelmazos', 'pelmazo', 'pelma', 'plasta', 'pesado', 'pesada', 'pesao', 'pesá', 'latoso', 'latosa', 'coñazo', 'conazo', 'putada', 'jodienda', 'follón', 'follon', 'lío', 'lio', 'marrón', 'marron', 'peo', 'pedorro', 'pedorra', 'pedos', 'ventosidad', 'flatulencia', 'gases', 'tirarse pedos', 'echar pedos', 'soltar pedos', 'heder', 'apestar', 'oler mal', 'tufo', 'peste', 'pestilencia', 'putrefacción', 'putrefaccion', 'putrefacto', 'putrefacta', 'podrido', 'podrida', 'rancio', 'rancia', 'agrio', 'agria', 'amargo', 'amarga', 'salado', 'salada', 'soso', 'sosa', 'insípido', 'insipido', 'insípida', 'insipida', 'desabrido', 'desabrida', 'malo', 'mala', 'malísimo', 'malisimo', 'malísima', 'malisima', 'pésimo', 'pesimo', 'pésima', 'pesima', 'horrible', 'horroroso', 'horrorosa', 'terrorífico', 'terrorifico', 'terrorífica', 'terrorifica', 'espantoso', 'espantosa', 'horripilante', 'espeluznante', 'escalofriante', 'siniestro', 'siniestra', 'tenebroso', 'tenebrosa', 'lúgubre', 'lugubre', 'sombrío', 'sombrio', 'sombría', 'sombria', 'triste', 'melancólico', 'melancolico', 'melancólica', 'melancolica', 'deprimido', 'deprimida', 'depresivo', 'depresiva', 'suicida', 'morir', 'muerte', 'muerto', 'muerta', 'cadáver', 'cadaver', 'difunto', 'difunta', 'finado', 'finada', 'fallecido', 'fallecida', 'occiso', 'occisa', 'fiambre', 'estirar la pata', 'diñar', 'dinar', 'palmar', 'pelar', 'espichar', 'fenecer', 'expirar', 'perecer', 'sucumbir', 'fallecer', 'óbito', 'obito', 'defunción', 'defuncion', 'deceso', 'tránsito', 'transito', 'partida', 'despedida', 'adiós', 'adios', 'hasta la vista', 'hasta luego', 'hasta pronto', 'hasta mañana', 'hasta manana', 'chau', 'chao', 'bye', 'goodbye', ], 'false_positives' => [ // Common Spanish words that might be detected as false positives 'análisis', 'analisis', 'clase', 'clases', 'paso', 'pasos', 'expresión', 'expresion', 'expresiones', 'asesino', 'asesina', 'asesinar', 'asesinato', 'empresa', 'empresas', 'empresario', 'empresaria', 'negocio', 'negocios', 'trabajo', 'trabajos', 'trabajar', 'trabajador', 'trabajadora', 'empleo', 'empleos', 'empleado', 'empleada', 'empleador', 'empleadora', 'oficina', 'oficinas', 'oficinista', 'escritorio', 'escritorios', 'computadora', 'computadoras', 'computador', 'computadores', 'ordenador', 'ordenadores', 'máquina', 'maquina', 'máquinas', 'maquinas', 'aparato', 'aparatos', 'dispositivo', 'dispositivos', 'instrumento', 'instrumentos', 'herramienta', 'herramientas', 'útil', 'util', 'útiles', 'utiles', 'utilidad', 'utilidades', 'función', 'funcion', 'funciones', 'funcional', 'funcionalidad', 'funcionalidades', 'característico', 'caracteristico', 'característica', 'caracteristica', 'características', 'caracteristicas', 'especialidad', 'especialidades', 'especialista', 'especialistas', 'especializar', 'especializado', 'especializada', 'especialización', 'especializacion', 'profesional', 'profesionales', 'profesión', 'profesion', 'profesiones', 'profesor', 'profesora', 'profesores', 'profesoras', 'enseñar', 'ensenar', 'enseñanza', 'ensenanza', 'enseñanzas', 'ensenanzas', 'educación', 'educacion', 'educativo', 'educativa', 'educativos', 'educativas', 'educar', 'educado', 'educada', 'educador', 'educadora', 'educadores', 'educadoras', 'estudiante', 'estudiantes', 'estudiar', 'estudio', 'estudios', 'estudiado', 'estudiada', 'investigación', 'investigacion', 'investigaciones', 'investigar', 'investigador', 'investigadora', 'investigadores', 'investigadoras', 'científico', 'cientifico', 'científica', 'cientifica', 'científicos', 'cientificos', 'científicas', 'cientificas', 'ciencia', 'ciencias', 'conocimiento', 'conocimientos', 'conocer', 'conocido', 'conocida', 'conocidos', 'conocidas', 'saber', 'sabido', 'sabida', 'sabidos', 'sabidas', 'sabiduría', 'sabiduria', 'sabio', 'sabia', 'sabios', 'sabias', 'inteligente', 'inteligentes', 'inteligencia', 'inteligencias', 'talento', 'talentos', 'talentoso', 'talentosa', 'talentosos', 'talentosas', 'habilidad', 'habilidades', 'hábil', 'habil', 'hábiles', 'habiles', 'destreza', 'destrezas', 'destro', 'destra', 'diestro', 'diestra', 'diestros', 'diestras', 'maestro', 'maestra', 'maestros', 'maestras', 'maestría', 'maestria', 'maestrías', 'maestrias', 'dominio', 'dominios', 'dominar', 'dominado', 'dominada', 'dominados', 'dominadas', 'control', 'controles', 'controlar', 'controlado', 'controlada', 'controlados', 'controladas', 'administración', 'administracion', 'administrar', 'administrador', 'administradora', 'administradores', 'administradoras', 'gestión', 'gestion', 'gestiones', 'gestionar', 'gestor', 'gestora', 'gestores', 'gestoras', 'organización', 'organizacion', 'organizaciones', 'organizar', 'organizador', 'organizadora', 'organizadores', 'organizadoras', 'sistema', 'sistemas', 'sistemático', 'sistematico', 'sistemática', 'sistematica', 'sistemáticos', 'sistematicos', 'sistemáticas', 'sistematicas', 'método', 'metodo', 'métodos', 'metodos', 'metodología', 'metodologia', 'metodologías', 'metodologias', 'proceso', 'procesos', 'procesar', 'procesado', 'procesada', 'procesados', 'procesadas', 'procedimiento', 'procedimientos', 'proceder', 'protocolo', 'protocolos', 'norma', 'normas', 'normal', 'normales', 'normalidad', 'normalidades', 'normalizar', 'normalizado', 'normalizada', 'normalizados', 'normalizadas', 'estándar', 'estandar', 'estándares', 'estandares', 'estandarizar', 'estandarizado', 'estandarizada', 'estandarizados', 'estandarizadas', 'regla', 'reglas', 'reglamento', 'reglamentos', 'reglamentar', 'reglamentario', 'reglamentaria', 'reglamentarios', 'reglamentarias', 'regular', 'regulares', 'regularidad', 'regularidades', 'regularizar', 'regularizado', 'regularizada', 'regularizados', 'regularizadas', 'ley', 'leyes', 'legal', 'legales', 'legalidad', 'legalidades', 'legalizar', 'legalizado', 'legalizada', 'legalizados', 'legalizadas', 'derecho', 'derechos', 'jurídico', 'juridico', 'jurídica', 'juridica', 'jurídicos', 'juridicos', 'jurídicas', 'juridicas', 'justicia', 'justicias', 'justo', 'justa', 'justos', 'justas', 'injusto', 'injusta', 'injustos', 'injustas', 'injusticia', 'injusticias', 'tribunal', 'tribunales', 'juez', 'jueces', 'jueza', 'juezas', 'juzgar', 'juzgado', 'juzgada', 'juzgados', 'juzgadas', 'sentencia', 'sentencias', 'sentenciar', 'sentenciado', 'sentenciada', 'sentenciados', 'sentenciadas', 'condena', 'condenas', 'condenar', 'condenado', 'condenada', 'condenados', 'condenadas', 'castigo', 'castigos', 'castigar', 'castigado', 'castigada', 'castigados', 'castigadas', 'pena', 'penas', 'penar', 'penado', 'penada', 'penados', 'penadas', 'prisión', 'prision', 'prisiones', 'cárcel', 'carcel', 'cárceles', 'carceles', 'encarcelar', 'encarcelado', 'encarcelada', 'encarcelados', 'encarceladas', 'preso', 'presa', 'presos', 'presas', 'presidio', 'presidios', 'penitenciaría', 'penitenciaria', 'penitenciarías', 'penitenciarias', 'reformatorio', 'reformatorios', ], 'substitutions' => [ '/ñ/' => ['ñ', 'n', '~n', 'ni'], '/á/' => ['á', 'a', '@', '4'], '/é/' => ['é', 'e', '3', '€'], '/í/' => ['í', 'i', '1', '!', '|'], '/ó/' => ['ó', 'o', '0', 'ø'], '/ú/' => ['ú', 'u', 'ü'], '/ü/' => ['ü', 'u', 'ú'], '/u/' => ['u', 'ú', 'ü', '@', '*'], '/c/' => ['c', 'k', 'ç'], '/ll/' => ['ll', 'y', 'i'], '/rr/' => ['rr', 'r'], '/ch/' => ['ch', 'x'], '/z/' => ['z', 's', 'c'], '/j/' => ['j', 'x', 'h'], '/g/' => ['g', 'j', 'h'], '/b/' => ['b', 'v', 'w'], '/v/' => ['v', 'b', 'w'], ] ]; ================================================ FILE: phpunit.xml ================================================