├── .gitignore ├── LICENSE.md ├── README.md ├── composer.json ├── composer.lock ├── config └── auto-translate.php └── src ├── AutoTranslateProvider.php └── Commands ├── AutoTranslate.php └── TranslateMissing.php /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/build 3 | /public/hot 4 | /public/storage 5 | /storage/*.key 6 | /vendor 7 | .env 8 | .env.backup 9 | .phpunit.result.cache 10 | Homestead.json 11 | Homestead.yaml 12 | auth.json 13 | npm-debug.log 14 | yarn-error.log 15 | /.idea 16 | /.vscode -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) shuvroroy 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Laravel Auto Translations 2 | 3 | [![Latest Version on Packagist](https://img.shields.io/packagist/v/devaslanphp/auto-translate.svg?style=flat-square)](https://packagist.org/packages/devaslanphp/auto-translate) 4 | [![Total Downloads](https://img.shields.io/packagist/dt/devaslanphp/auto-translate.svg?style=flat-square)](https://packagist.org/packages/devaslanphp/auto-translate) 5 | 6 | This package provides a simple way to automatically generate translation JSON files for you, it helps you to generate the missing translation also. 7 | The translation are generated automatically using Google Translations, based on the package `stichoza/google-translate-php` and exporting translations string from your source code using the package `kkomelin/laravel-translatable-string-exporter`. 8 | 9 | # Installation 10 | 11 | You can install the package via composer: 12 | 13 | ```shell 14 | composer require devaslanphp/auto-translate 15 | ``` 16 | 17 | Add the package provider into your `config/app.php` file: 18 | 19 | ```php 20 | //... 21 | 22 | 'providers' => [ 23 | // ... 24 | 25 | \Devaslanphp\AutoTranslate\AutoTranslateProvider::class, 26 | ], 27 | 28 | // ... 29 | ``` 30 | 31 | *REQUIRED*: You need to publish the package config file, so you can update the `base_locale` and `locales` list as needed: 32 | 33 | ```shell 34 | php artisan vendor:publish --tag=auto-translate-config 35 | ``` 36 | 37 | **That's it**, you can use the package commands to generate missing translations and automatically translate them using Google Translations 38 | 39 | # Configuration 40 | 41 | The configuration file of this package comes like below: 42 | 43 | ```php 44 | [ 57 | 'fr', 58 | 'ar' 59 | ], 60 | 61 | /* 62 | * 63 | * The base locale to use when using the command "translate:missing" to 64 | * generate missing translations for other JSON files 65 | * 66 | */ 67 | 'base_locale' => 'fr' 68 | 69 | ]; 70 | ``` 71 | 72 | I think it's well documented, I will let you check it. 73 | 74 | ## Usage 75 | 76 | The package provides 2 Artisan commands: 77 | 78 | ### Automatic translations generation 79 | 80 | To generate translation JSON files from your source code, you can execute the following command: 81 | 82 | ```shell 83 | php artisan auto:translate 84 | ``` 85 | 86 | This command will check your configuration `auto-translate.locales` to generate for each locale of this list a JSON file based on your source code (`@lang()`, `__()`, ...) and translate the string into the desired locale based on Google Translations. 87 | 88 | ### Translate missing keys 89 | 90 | The package provides also a command to let you generate translations for missing keys based on a specific JSON file (`auto-translate.base_locale`.json). To generate missing translation, you only need to execute the following command: 91 | 92 | ```shell 93 | php artisan translate:missing 94 | ``` 95 | 96 | ## Credits 97 | 98 | - [All Contributors](https://github.com/devaslanphp/auto-translate/graphs/contributors) 99 | 100 | ## License 101 | 102 | The MIT License (MIT). Please see [License File](LICENSE.md) for more information. 103 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "devaslanphp/auto-translate", 3 | "description": "Auto generate translation JSON files", 4 | "type": "library", 5 | "license": "MIT", 6 | "autoload": { 7 | "psr-4": { 8 | "Devaslanphp\\AutoTranslate\\": "src/" 9 | } 10 | }, 11 | "authors": [ 12 | { 13 | "name": "DevaslanPHP" 14 | } 15 | ], 16 | "minimum-stability": "dev", 17 | "require": { 18 | "kkomelin/laravel-translatable-string-exporter": "^1.17", 19 | "stichoza/google-translate-php": "^4.1" 20 | }, 21 | "require-dev": { 22 | "spatie/laravel-package-tools": "^1.9" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "2ef5f2544c8daf28bbffd85527daf9c2", 8 | "packages": [ 9 | { 10 | "name": "doctrine/inflector", 11 | "version": "2.1.x-dev", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/doctrine/inflector.git", 15 | "reference": "8d1cb761ee70411b1b854f4851bcfc6d72accb5e" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/8d1cb761ee70411b1b854f4851bcfc6d72accb5e", 20 | "reference": "8d1cb761ee70411b1b854f4851bcfc6d72accb5e", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": "^7.2 || ^8.0" 25 | }, 26 | "require-dev": { 27 | "doctrine/coding-standard": "^10", 28 | "phpstan/phpstan": "^1.8", 29 | "phpstan/phpstan-phpunit": "^1.1", 30 | "phpstan/phpstan-strict-rules": "^1.3", 31 | "phpunit/phpunit": "^8.5 || ^9.5", 32 | "vimeo/psalm": "^4.25" 33 | }, 34 | "type": "library", 35 | "autoload": { 36 | "psr-4": { 37 | "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" 38 | } 39 | }, 40 | "notification-url": "https://packagist.org/downloads/", 41 | "license": [ 42 | "MIT" 43 | ], 44 | "authors": [ 45 | { 46 | "name": "Guilherme Blanco", 47 | "email": "guilhermeblanco@gmail.com" 48 | }, 49 | { 50 | "name": "Roman Borschel", 51 | "email": "roman@code-factory.org" 52 | }, 53 | { 54 | "name": "Benjamin Eberlei", 55 | "email": "kontakt@beberlei.de" 56 | }, 57 | { 58 | "name": "Jonathan Wage", 59 | "email": "jonwage@gmail.com" 60 | }, 61 | { 62 | "name": "Johannes Schmitt", 63 | "email": "schmittjoh@gmail.com" 64 | } 65 | ], 66 | "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", 67 | "homepage": "https://www.doctrine-project.org/projects/inflector.html", 68 | "keywords": [ 69 | "inflection", 70 | "inflector", 71 | "lowercase", 72 | "manipulation", 73 | "php", 74 | "plural", 75 | "singular", 76 | "strings", 77 | "uppercase", 78 | "words" 79 | ], 80 | "support": { 81 | "issues": "https://github.com/doctrine/inflector/issues", 82 | "source": "https://github.com/doctrine/inflector/tree/2.1.x" 83 | }, 84 | "funding": [ 85 | { 86 | "url": "https://www.doctrine-project.org/sponsorship.html", 87 | "type": "custom" 88 | }, 89 | { 90 | "url": "https://www.patreon.com/phpdoctrine", 91 | "type": "patreon" 92 | }, 93 | { 94 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", 95 | "type": "tidelift" 96 | } 97 | ], 98 | "time": "2022-10-20T09:11:46+00:00" 99 | }, 100 | { 101 | "name": "guzzlehttp/guzzle", 102 | "version": "dev-master", 103 | "source": { 104 | "type": "git", 105 | "url": "https://github.com/guzzle/guzzle.git", 106 | "reference": "8459341c16f96b9610dcdfe22bd3060d60c0da04" 107 | }, 108 | "dist": { 109 | "type": "zip", 110 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/8459341c16f96b9610dcdfe22bd3060d60c0da04", 111 | "reference": "8459341c16f96b9610dcdfe22bd3060d60c0da04", 112 | "shasum": "" 113 | }, 114 | "require": { 115 | "ext-json": "*", 116 | "guzzlehttp/promises": "^1.5", 117 | "guzzlehttp/psr7": "^1.9 || ^2.4", 118 | "php": "^7.2.5 || ^8.0", 119 | "psr/http-client": "^1.0", 120 | "symfony/deprecation-contracts": "^2.2 || ^3.0" 121 | }, 122 | "provide": { 123 | "psr/http-client-implementation": "1.0" 124 | }, 125 | "require-dev": { 126 | "bamarni/composer-bin-plugin": "^1.8.1", 127 | "ext-curl": "*", 128 | "php-http/client-integration-tests": "^3.0", 129 | "phpunit/phpunit": "^8.5.29 || ^9.5.23", 130 | "psr/log": "^1.1 || ^2.0 || ^3.0" 131 | }, 132 | "suggest": { 133 | "ext-curl": "Required for CURL handler support", 134 | "ext-intl": "Required for Internationalized Domain Name (IDN) support", 135 | "psr/log": "Required for using the Log middleware" 136 | }, 137 | "default-branch": true, 138 | "type": "library", 139 | "extra": { 140 | "bamarni-bin": { 141 | "bin-links": true, 142 | "forward-command": false 143 | }, 144 | "branch-alias": { 145 | "dev-master": "7.5-dev" 146 | } 147 | }, 148 | "autoload": { 149 | "files": [ 150 | "src/functions_include.php" 151 | ], 152 | "psr-4": { 153 | "GuzzleHttp\\": "src/" 154 | } 155 | }, 156 | "notification-url": "https://packagist.org/downloads/", 157 | "license": [ 158 | "MIT" 159 | ], 160 | "authors": [ 161 | { 162 | "name": "Graham Campbell", 163 | "email": "hello@gjcampbell.co.uk", 164 | "homepage": "https://github.com/GrahamCampbell" 165 | }, 166 | { 167 | "name": "Michael Dowling", 168 | "email": "mtdowling@gmail.com", 169 | "homepage": "https://github.com/mtdowling" 170 | }, 171 | { 172 | "name": "Jeremy Lindblom", 173 | "email": "jeremeamia@gmail.com", 174 | "homepage": "https://github.com/jeremeamia" 175 | }, 176 | { 177 | "name": "George Mponos", 178 | "email": "gmponos@gmail.com", 179 | "homepage": "https://github.com/gmponos" 180 | }, 181 | { 182 | "name": "Tobias Nyholm", 183 | "email": "tobias.nyholm@gmail.com", 184 | "homepage": "https://github.com/Nyholm" 185 | }, 186 | { 187 | "name": "Márk Sági-Kazár", 188 | "email": "mark.sagikazar@gmail.com", 189 | "homepage": "https://github.com/sagikazarmark" 190 | }, 191 | { 192 | "name": "Tobias Schultze", 193 | "email": "webmaster@tubo-world.de", 194 | "homepage": "https://github.com/Tobion" 195 | } 196 | ], 197 | "description": "Guzzle is a PHP HTTP client library", 198 | "keywords": [ 199 | "client", 200 | "curl", 201 | "framework", 202 | "http", 203 | "http client", 204 | "psr-18", 205 | "psr-7", 206 | "rest", 207 | "web service" 208 | ], 209 | "support": { 210 | "issues": "https://github.com/guzzle/guzzle/issues", 211 | "source": "https://github.com/guzzle/guzzle/tree/master" 212 | }, 213 | "funding": [ 214 | { 215 | "url": "https://github.com/GrahamCampbell", 216 | "type": "github" 217 | }, 218 | { 219 | "url": "https://github.com/Nyholm", 220 | "type": "github" 221 | }, 222 | { 223 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", 224 | "type": "tidelift" 225 | } 226 | ], 227 | "time": "2022-08-29T11:03:19+00:00" 228 | }, 229 | { 230 | "name": "guzzlehttp/promises", 231 | "version": "dev-master", 232 | "source": { 233 | "type": "git", 234 | "url": "https://github.com/guzzle/promises.git", 235 | "reference": "b94b2807d85443f9719887892882d0329d1e2598" 236 | }, 237 | "dist": { 238 | "type": "zip", 239 | "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", 240 | "reference": "b94b2807d85443f9719887892882d0329d1e2598", 241 | "shasum": "" 242 | }, 243 | "require": { 244 | "php": ">=5.5" 245 | }, 246 | "require-dev": { 247 | "symfony/phpunit-bridge": "^4.4 || ^5.1" 248 | }, 249 | "default-branch": true, 250 | "type": "library", 251 | "extra": { 252 | "branch-alias": { 253 | "dev-master": "1.5-dev" 254 | } 255 | }, 256 | "autoload": { 257 | "files": [ 258 | "src/functions_include.php" 259 | ], 260 | "psr-4": { 261 | "GuzzleHttp\\Promise\\": "src/" 262 | } 263 | }, 264 | "notification-url": "https://packagist.org/downloads/", 265 | "license": [ 266 | "MIT" 267 | ], 268 | "authors": [ 269 | { 270 | "name": "Graham Campbell", 271 | "email": "hello@gjcampbell.co.uk", 272 | "homepage": "https://github.com/GrahamCampbell" 273 | }, 274 | { 275 | "name": "Michael Dowling", 276 | "email": "mtdowling@gmail.com", 277 | "homepage": "https://github.com/mtdowling" 278 | }, 279 | { 280 | "name": "Tobias Nyholm", 281 | "email": "tobias.nyholm@gmail.com", 282 | "homepage": "https://github.com/Nyholm" 283 | }, 284 | { 285 | "name": "Tobias Schultze", 286 | "email": "webmaster@tubo-world.de", 287 | "homepage": "https://github.com/Tobion" 288 | } 289 | ], 290 | "description": "Guzzle promises library", 291 | "keywords": [ 292 | "promise" 293 | ], 294 | "support": { 295 | "issues": "https://github.com/guzzle/promises/issues", 296 | "source": "https://github.com/guzzle/promises/tree/1.5.2" 297 | }, 298 | "funding": [ 299 | { 300 | "url": "https://github.com/GrahamCampbell", 301 | "type": "github" 302 | }, 303 | { 304 | "url": "https://github.com/Nyholm", 305 | "type": "github" 306 | }, 307 | { 308 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", 309 | "type": "tidelift" 310 | } 311 | ], 312 | "time": "2022-08-28T14:55:35+00:00" 313 | }, 314 | { 315 | "name": "guzzlehttp/psr7", 316 | "version": "dev-master", 317 | "source": { 318 | "type": "git", 319 | "url": "https://github.com/guzzle/psr7.git", 320 | "reference": "ddb46aeea6423f504136cff6989ae39064301eef" 321 | }, 322 | "dist": { 323 | "type": "zip", 324 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/ddb46aeea6423f504136cff6989ae39064301eef", 325 | "reference": "ddb46aeea6423f504136cff6989ae39064301eef", 326 | "shasum": "" 327 | }, 328 | "require": { 329 | "php": "^7.2.5 || ^8.0", 330 | "psr/http-factory": "^1.0", 331 | "psr/http-message": "^1.0", 332 | "ralouphie/getallheaders": "^3.0" 333 | }, 334 | "provide": { 335 | "psr/http-factory-implementation": "1.0", 336 | "psr/http-message-implementation": "1.0" 337 | }, 338 | "require-dev": { 339 | "bamarni/composer-bin-plugin": "^1.8.1", 340 | "http-interop/http-factory-tests": "^0.9", 341 | "phpunit/phpunit": "^8.5.29 || ^9.5.23" 342 | }, 343 | "suggest": { 344 | "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" 345 | }, 346 | "default-branch": true, 347 | "type": "library", 348 | "extra": { 349 | "bamarni-bin": { 350 | "bin-links": true, 351 | "forward-command": false 352 | }, 353 | "branch-alias": { 354 | "dev-master": "2.4-dev" 355 | } 356 | }, 357 | "autoload": { 358 | "psr-4": { 359 | "GuzzleHttp\\Psr7\\": "src/" 360 | } 361 | }, 362 | "notification-url": "https://packagist.org/downloads/", 363 | "license": [ 364 | "MIT" 365 | ], 366 | "authors": [ 367 | { 368 | "name": "Graham Campbell", 369 | "email": "hello@gjcampbell.co.uk", 370 | "homepage": "https://github.com/GrahamCampbell" 371 | }, 372 | { 373 | "name": "Michael Dowling", 374 | "email": "mtdowling@gmail.com", 375 | "homepage": "https://github.com/mtdowling" 376 | }, 377 | { 378 | "name": "George Mponos", 379 | "email": "gmponos@gmail.com", 380 | "homepage": "https://github.com/gmponos" 381 | }, 382 | { 383 | "name": "Tobias Nyholm", 384 | "email": "tobias.nyholm@gmail.com", 385 | "homepage": "https://github.com/Nyholm" 386 | }, 387 | { 388 | "name": "Márk Sági-Kazár", 389 | "email": "mark.sagikazar@gmail.com", 390 | "homepage": "https://github.com/sagikazarmark" 391 | }, 392 | { 393 | "name": "Tobias Schultze", 394 | "email": "webmaster@tubo-world.de", 395 | "homepage": "https://github.com/Tobion" 396 | }, 397 | { 398 | "name": "Márk Sági-Kazár", 399 | "email": "mark.sagikazar@gmail.com", 400 | "homepage": "https://sagikazarmark.hu" 401 | } 402 | ], 403 | "description": "PSR-7 message implementation that also provides common utility methods", 404 | "keywords": [ 405 | "http", 406 | "message", 407 | "psr-7", 408 | "request", 409 | "response", 410 | "stream", 411 | "uri", 412 | "url" 413 | ], 414 | "support": { 415 | "issues": "https://github.com/guzzle/psr7/issues", 416 | "source": "https://github.com/guzzle/psr7/tree/master" 417 | }, 418 | "funding": [ 419 | { 420 | "url": "https://github.com/GrahamCampbell", 421 | "type": "github" 422 | }, 423 | { 424 | "url": "https://github.com/Nyholm", 425 | "type": "github" 426 | }, 427 | { 428 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", 429 | "type": "tidelift" 430 | } 431 | ], 432 | "time": "2022-12-27T19:02:55+00:00" 433 | }, 434 | { 435 | "name": "illuminate/collections", 436 | "version": "9.x-dev", 437 | "source": { 438 | "type": "git", 439 | "url": "https://github.com/illuminate/collections.git", 440 | "reference": "9668ef5b1cc13cbc0a57a5208417dce2be66a3d4" 441 | }, 442 | "dist": { 443 | "type": "zip", 444 | "url": "https://api.github.com/repos/illuminate/collections/zipball/9668ef5b1cc13cbc0a57a5208417dce2be66a3d4", 445 | "reference": "9668ef5b1cc13cbc0a57a5208417dce2be66a3d4", 446 | "shasum": "" 447 | }, 448 | "require": { 449 | "illuminate/conditionable": "^9.0", 450 | "illuminate/contracts": "^9.0", 451 | "illuminate/macroable": "^9.0", 452 | "php": "^8.0.2" 453 | }, 454 | "suggest": { 455 | "symfony/var-dumper": "Required to use the dump method (^6.0)." 456 | }, 457 | "type": "library", 458 | "extra": { 459 | "branch-alias": { 460 | "dev-master": "9.x-dev" 461 | } 462 | }, 463 | "autoload": { 464 | "files": [ 465 | "helpers.php" 466 | ], 467 | "psr-4": { 468 | "Illuminate\\Support\\": "" 469 | } 470 | }, 471 | "notification-url": "https://packagist.org/downloads/", 472 | "license": [ 473 | "MIT" 474 | ], 475 | "authors": [ 476 | { 477 | "name": "Taylor Otwell", 478 | "email": "taylor@laravel.com" 479 | } 480 | ], 481 | "description": "The Illuminate Collections package.", 482 | "homepage": "https://laravel.com", 483 | "support": { 484 | "issues": "https://github.com/laravel/framework/issues", 485 | "source": "https://github.com/laravel/framework" 486 | }, 487 | "time": "2023-01-06T14:14:06+00:00" 488 | }, 489 | { 490 | "name": "illuminate/conditionable", 491 | "version": "9.x-dev", 492 | "source": { 493 | "type": "git", 494 | "url": "https://github.com/illuminate/conditionable.git", 495 | "reference": "5b40f51ccb07e0e7b1ec5559d8db9e0e2dc51883" 496 | }, 497 | "dist": { 498 | "type": "zip", 499 | "url": "https://api.github.com/repos/illuminate/conditionable/zipball/5b40f51ccb07e0e7b1ec5559d8db9e0e2dc51883", 500 | "reference": "5b40f51ccb07e0e7b1ec5559d8db9e0e2dc51883", 501 | "shasum": "" 502 | }, 503 | "require": { 504 | "php": "^8.0.2" 505 | }, 506 | "type": "library", 507 | "extra": { 508 | "branch-alias": { 509 | "dev-master": "9.x-dev" 510 | } 511 | }, 512 | "autoload": { 513 | "psr-4": { 514 | "Illuminate\\Support\\": "" 515 | } 516 | }, 517 | "notification-url": "https://packagist.org/downloads/", 518 | "license": [ 519 | "MIT" 520 | ], 521 | "authors": [ 522 | { 523 | "name": "Taylor Otwell", 524 | "email": "taylor@laravel.com" 525 | } 526 | ], 527 | "description": "The Illuminate Conditionable package.", 528 | "homepage": "https://laravel.com", 529 | "support": { 530 | "issues": "https://github.com/laravel/framework/issues", 531 | "source": "https://github.com/laravel/framework" 532 | }, 533 | "time": "2022-07-29T19:44:19+00:00" 534 | }, 535 | { 536 | "name": "illuminate/contracts", 537 | "version": "9.x-dev", 538 | "source": { 539 | "type": "git", 540 | "url": "https://github.com/illuminate/contracts.git", 541 | "reference": "856ad15be8d80a2f217d30cfe2df3fc3a5c886fd" 542 | }, 543 | "dist": { 544 | "type": "zip", 545 | "url": "https://api.github.com/repos/illuminate/contracts/zipball/856ad15be8d80a2f217d30cfe2df3fc3a5c886fd", 546 | "reference": "856ad15be8d80a2f217d30cfe2df3fc3a5c886fd", 547 | "shasum": "" 548 | }, 549 | "require": { 550 | "php": "^8.0.2", 551 | "psr/container": "^1.1.1|^2.0.1", 552 | "psr/simple-cache": "^1.0|^2.0|^3.0" 553 | }, 554 | "type": "library", 555 | "extra": { 556 | "branch-alias": { 557 | "dev-master": "9.x-dev" 558 | } 559 | }, 560 | "autoload": { 561 | "psr-4": { 562 | "Illuminate\\Contracts\\": "" 563 | } 564 | }, 565 | "notification-url": "https://packagist.org/downloads/", 566 | "license": [ 567 | "MIT" 568 | ], 569 | "authors": [ 570 | { 571 | "name": "Taylor Otwell", 572 | "email": "taylor@laravel.com" 573 | } 574 | ], 575 | "description": "The Illuminate Contracts package.", 576 | "homepage": "https://laravel.com", 577 | "support": { 578 | "issues": "https://github.com/laravel/framework/issues", 579 | "source": "https://github.com/laravel/framework" 580 | }, 581 | "time": "2022-12-31T20:34:28+00:00" 582 | }, 583 | { 584 | "name": "illuminate/filesystem", 585 | "version": "9.x-dev", 586 | "source": { 587 | "type": "git", 588 | "url": "https://github.com/illuminate/filesystem.git", 589 | "reference": "42a9fb83cae60faf208732c3008be19a0f7c89a4" 590 | }, 591 | "dist": { 592 | "type": "zip", 593 | "url": "https://api.github.com/repos/illuminate/filesystem/zipball/42a9fb83cae60faf208732c3008be19a0f7c89a4", 594 | "reference": "42a9fb83cae60faf208732c3008be19a0f7c89a4", 595 | "shasum": "" 596 | }, 597 | "require": { 598 | "illuminate/collections": "^9.0", 599 | "illuminate/contracts": "^9.0", 600 | "illuminate/macroable": "^9.0", 601 | "illuminate/support": "^9.0", 602 | "php": "^8.0.2", 603 | "symfony/finder": "^6.0" 604 | }, 605 | "suggest": { 606 | "ext-ftp": "Required to use the Flysystem FTP driver.", 607 | "illuminate/http": "Required for handling uploaded files (^7.0).", 608 | "league/flysystem": "Required to use the Flysystem local driver (^3.0.16).", 609 | "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", 610 | "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", 611 | "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", 612 | "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", 613 | "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", 614 | "symfony/mime": "Required to enable support for guessing extensions (^6.0)." 615 | }, 616 | "type": "library", 617 | "extra": { 618 | "branch-alias": { 619 | "dev-master": "9.x-dev" 620 | } 621 | }, 622 | "autoload": { 623 | "psr-4": { 624 | "Illuminate\\Filesystem\\": "" 625 | } 626 | }, 627 | "notification-url": "https://packagist.org/downloads/", 628 | "license": [ 629 | "MIT" 630 | ], 631 | "authors": [ 632 | { 633 | "name": "Taylor Otwell", 634 | "email": "taylor@laravel.com" 635 | } 636 | ], 637 | "description": "The Illuminate Filesystem package.", 638 | "homepage": "https://laravel.com", 639 | "support": { 640 | "issues": "https://github.com/laravel/framework/issues", 641 | "source": "https://github.com/laravel/framework" 642 | }, 643 | "time": "2023-01-05T16:47:17+00:00" 644 | }, 645 | { 646 | "name": "illuminate/macroable", 647 | "version": "9.x-dev", 648 | "source": { 649 | "type": "git", 650 | "url": "https://github.com/illuminate/macroable.git", 651 | "reference": "e3bfaf6401742a9c6abca61b9b10e998e5b6449a" 652 | }, 653 | "dist": { 654 | "type": "zip", 655 | "url": "https://api.github.com/repos/illuminate/macroable/zipball/e3bfaf6401742a9c6abca61b9b10e998e5b6449a", 656 | "reference": "e3bfaf6401742a9c6abca61b9b10e998e5b6449a", 657 | "shasum": "" 658 | }, 659 | "require": { 660 | "php": "^8.0.2" 661 | }, 662 | "type": "library", 663 | "extra": { 664 | "branch-alias": { 665 | "dev-master": "9.x-dev" 666 | } 667 | }, 668 | "autoload": { 669 | "psr-4": { 670 | "Illuminate\\Support\\": "" 671 | } 672 | }, 673 | "notification-url": "https://packagist.org/downloads/", 674 | "license": [ 675 | "MIT" 676 | ], 677 | "authors": [ 678 | { 679 | "name": "Taylor Otwell", 680 | "email": "taylor@laravel.com" 681 | } 682 | ], 683 | "description": "The Illuminate Macroable package.", 684 | "homepage": "https://laravel.com", 685 | "support": { 686 | "issues": "https://github.com/laravel/framework/issues", 687 | "source": "https://github.com/laravel/framework" 688 | }, 689 | "time": "2022-08-09T13:29:29+00:00" 690 | }, 691 | { 692 | "name": "illuminate/support", 693 | "version": "9.x-dev", 694 | "source": { 695 | "type": "git", 696 | "url": "https://github.com/illuminate/support.git", 697 | "reference": "5bc07de2bd63578f34099beb54950e041c4d8015" 698 | }, 699 | "dist": { 700 | "type": "zip", 701 | "url": "https://api.github.com/repos/illuminate/support/zipball/5bc07de2bd63578f34099beb54950e041c4d8015", 702 | "reference": "5bc07de2bd63578f34099beb54950e041c4d8015", 703 | "shasum": "" 704 | }, 705 | "require": { 706 | "doctrine/inflector": "^2.0", 707 | "ext-json": "*", 708 | "ext-mbstring": "*", 709 | "illuminate/collections": "^9.0", 710 | "illuminate/conditionable": "^9.0", 711 | "illuminate/contracts": "^9.0", 712 | "illuminate/macroable": "^9.0", 713 | "nesbot/carbon": "^2.62.1", 714 | "php": "^8.0.2", 715 | "voku/portable-ascii": "^2.0" 716 | }, 717 | "conflict": { 718 | "tightenco/collect": "<5.5.33" 719 | }, 720 | "suggest": { 721 | "illuminate/filesystem": "Required to use the composer class (^9.0).", 722 | "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.0.2).", 723 | "ramsey/uuid": "Required to use Str::uuid() (^4.7).", 724 | "symfony/process": "Required to use the composer class (^6.0).", 725 | "symfony/uid": "Required to use Str::ulid() (^6.0).", 726 | "symfony/var-dumper": "Required to use the dd function (^6.0).", 727 | "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." 728 | }, 729 | "type": "library", 730 | "extra": { 731 | "branch-alias": { 732 | "dev-master": "9.x-dev" 733 | } 734 | }, 735 | "autoload": { 736 | "files": [ 737 | "helpers.php" 738 | ], 739 | "psr-4": { 740 | "Illuminate\\Support\\": "" 741 | } 742 | }, 743 | "notification-url": "https://packagist.org/downloads/", 744 | "license": [ 745 | "MIT" 746 | ], 747 | "authors": [ 748 | { 749 | "name": "Taylor Otwell", 750 | "email": "taylor@laravel.com" 751 | } 752 | ], 753 | "description": "The Illuminate Support package.", 754 | "homepage": "https://laravel.com", 755 | "support": { 756 | "issues": "https://github.com/laravel/framework/issues", 757 | "source": "https://github.com/laravel/framework" 758 | }, 759 | "time": "2023-01-12T15:45:28+00:00" 760 | }, 761 | { 762 | "name": "illuminate/translation", 763 | "version": "9.x-dev", 764 | "source": { 765 | "type": "git", 766 | "url": "https://github.com/illuminate/translation.git", 767 | "reference": "53d0cd548a8ad64eaf12d539bf39ee4189dcee56" 768 | }, 769 | "dist": { 770 | "type": "zip", 771 | "url": "https://api.github.com/repos/illuminate/translation/zipball/53d0cd548a8ad64eaf12d539bf39ee4189dcee56", 772 | "reference": "53d0cd548a8ad64eaf12d539bf39ee4189dcee56", 773 | "shasum": "" 774 | }, 775 | "require": { 776 | "ext-json": "*", 777 | "illuminate/collections": "^9.0", 778 | "illuminate/contracts": "^9.0", 779 | "illuminate/filesystem": "^9.0", 780 | "illuminate/macroable": "^9.0", 781 | "illuminate/support": "^9.0", 782 | "php": "^8.0.2" 783 | }, 784 | "type": "library", 785 | "extra": { 786 | "branch-alias": { 787 | "dev-master": "9.x-dev" 788 | } 789 | }, 790 | "autoload": { 791 | "psr-4": { 792 | "Illuminate\\Translation\\": "" 793 | } 794 | }, 795 | "notification-url": "https://packagist.org/downloads/", 796 | "license": [ 797 | "MIT" 798 | ], 799 | "authors": [ 800 | { 801 | "name": "Taylor Otwell", 802 | "email": "taylor@laravel.com" 803 | } 804 | ], 805 | "description": "The Illuminate Translation package.", 806 | "homepage": "https://laravel.com", 807 | "support": { 808 | "issues": "https://github.com/laravel/framework/issues", 809 | "source": "https://github.com/laravel/framework" 810 | }, 811 | "time": "2022-10-09T13:21:28+00:00" 812 | }, 813 | { 814 | "name": "kkomelin/laravel-translatable-string-exporter", 815 | "version": "1.18.0", 816 | "source": { 817 | "type": "git", 818 | "url": "https://github.com/kkomelin/laravel-translatable-string-exporter.git", 819 | "reference": "c8b3364816d9f0ad2865c7538d8eb29ed8319136" 820 | }, 821 | "dist": { 822 | "type": "zip", 823 | "url": "https://api.github.com/repos/kkomelin/laravel-translatable-string-exporter/zipball/c8b3364816d9f0ad2865c7538d8eb29ed8319136", 824 | "reference": "c8b3364816d9f0ad2865c7538d8eb29ed8319136", 825 | "shasum": "" 826 | }, 827 | "require": { 828 | "ext-json": "*", 829 | "illuminate/support": "^8|^9", 830 | "illuminate/translation": "^8|^9", 831 | "php": "^8.0", 832 | "symfony/finder": "^5|^6" 833 | }, 834 | "require-dev": { 835 | "nunomaduro/larastan": "^1.0|^2.0", 836 | "orchestra/testbench": "^6.0|^7.0", 837 | "phpunit/phpunit": "^9.0" 838 | }, 839 | "type": "library", 840 | "extra": { 841 | "laravel": { 842 | "providers": [ 843 | "KKomelin\\TranslatableStringExporter\\Providers\\ExporterServiceProvider" 844 | ] 845 | } 846 | }, 847 | "autoload": { 848 | "psr-4": { 849 | "KKomelin\\TranslatableStringExporter\\": "src/" 850 | } 851 | }, 852 | "notification-url": "https://packagist.org/downloads/", 853 | "license": [ 854 | "MIT" 855 | ], 856 | "authors": [ 857 | { 858 | "name": "Konstantin Komelin", 859 | "email": "konstantin.komelin@gmail.com" 860 | } 861 | ], 862 | "description": "Translatable String Exporter for Laravel", 863 | "keywords": [ 864 | "export", 865 | "exporter", 866 | "json", 867 | "laravel", 868 | "localization", 869 | "translation", 870 | "translations" 871 | ], 872 | "support": { 873 | "issues": "https://github.com/kkomelin/laravel-translatable-string-exporter/issues", 874 | "source": "https://github.com/kkomelin/laravel-translatable-string-exporter/tree/1.18.0" 875 | }, 876 | "time": "2023-01-12T15:11:42+00:00" 877 | }, 878 | { 879 | "name": "nesbot/carbon", 880 | "version": "dev-master", 881 | "source": { 882 | "type": "git", 883 | "url": "https://github.com/briannesbitt/Carbon.git", 884 | "reference": "09acf64155c16dc6f580f36569ae89344e9734a3" 885 | }, 886 | "dist": { 887 | "type": "zip", 888 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/09acf64155c16dc6f580f36569ae89344e9734a3", 889 | "reference": "09acf64155c16dc6f580f36569ae89344e9734a3", 890 | "shasum": "" 891 | }, 892 | "require": { 893 | "ext-json": "*", 894 | "php": "^7.1.8 || ^8.0", 895 | "symfony/polyfill-mbstring": "^1.0", 896 | "symfony/polyfill-php80": "^1.16", 897 | "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" 898 | }, 899 | "require-dev": { 900 | "doctrine/dbal": "^2.0 || ^3.1.4", 901 | "doctrine/orm": "^2.7", 902 | "friendsofphp/php-cs-fixer": "^3.0", 903 | "kylekatarnls/multi-tester": "^2.0", 904 | "ondrejmirtes/better-reflection": "*", 905 | "phpmd/phpmd": "^2.9", 906 | "phpstan/extension-installer": "^1.0", 907 | "phpstan/phpstan": "^0.12.99 || ^1.7.14", 908 | "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", 909 | "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", 910 | "squizlabs/php_codesniffer": "^3.4" 911 | }, 912 | "default-branch": true, 913 | "bin": [ 914 | "bin/carbon" 915 | ], 916 | "type": "library", 917 | "extra": { 918 | "branch-alias": { 919 | "dev-3.x": "3.x-dev", 920 | "dev-master": "2.x-dev" 921 | }, 922 | "laravel": { 923 | "providers": [ 924 | "Carbon\\Laravel\\ServiceProvider" 925 | ] 926 | }, 927 | "phpstan": { 928 | "includes": [ 929 | "extension.neon" 930 | ] 931 | } 932 | }, 933 | "autoload": { 934 | "psr-4": { 935 | "Carbon\\": "src/Carbon/" 936 | } 937 | }, 938 | "notification-url": "https://packagist.org/downloads/", 939 | "license": [ 940 | "MIT" 941 | ], 942 | "authors": [ 943 | { 944 | "name": "Brian Nesbitt", 945 | "email": "brian@nesbot.com", 946 | "homepage": "https://markido.com" 947 | }, 948 | { 949 | "name": "kylekatarnls", 950 | "homepage": "https://github.com/kylekatarnls" 951 | } 952 | ], 953 | "description": "An API extension for DateTime that supports 281 different languages.", 954 | "homepage": "https://carbon.nesbot.com", 955 | "keywords": [ 956 | "date", 957 | "datetime", 958 | "time" 959 | ], 960 | "support": { 961 | "docs": "https://carbon.nesbot.com/docs", 962 | "issues": "https://github.com/briannesbitt/Carbon/issues", 963 | "source": "https://github.com/briannesbitt/Carbon" 964 | }, 965 | "funding": [ 966 | { 967 | "url": "https://github.com/sponsors/kylekatarnls", 968 | "type": "github" 969 | }, 970 | { 971 | "url": "https://opencollective.com/Carbon#sponsor", 972 | "type": "opencollective" 973 | }, 974 | { 975 | "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", 976 | "type": "tidelift" 977 | } 978 | ], 979 | "time": "2023-01-06T15:55:01+00:00" 980 | }, 981 | { 982 | "name": "psr/container", 983 | "version": "dev-master", 984 | "source": { 985 | "type": "git", 986 | "url": "https://github.com/php-fig/container.git", 987 | "reference": "90db7b9ac2a2c5b849fcb69dde58f3ae182c68f5" 988 | }, 989 | "dist": { 990 | "type": "zip", 991 | "url": "https://api.github.com/repos/php-fig/container/zipball/90db7b9ac2a2c5b849fcb69dde58f3ae182c68f5", 992 | "reference": "90db7b9ac2a2c5b849fcb69dde58f3ae182c68f5", 993 | "shasum": "" 994 | }, 995 | "require": { 996 | "php": ">=7.4.0" 997 | }, 998 | "default-branch": true, 999 | "type": "library", 1000 | "extra": { 1001 | "branch-alias": { 1002 | "dev-master": "2.0.x-dev" 1003 | } 1004 | }, 1005 | "autoload": { 1006 | "psr-4": { 1007 | "Psr\\Container\\": "src/" 1008 | } 1009 | }, 1010 | "notification-url": "https://packagist.org/downloads/", 1011 | "license": [ 1012 | "MIT" 1013 | ], 1014 | "authors": [ 1015 | { 1016 | "name": "PHP-FIG", 1017 | "homepage": "https://www.php-fig.org/" 1018 | } 1019 | ], 1020 | "description": "Common Container Interface (PHP FIG PSR-11)", 1021 | "homepage": "https://github.com/php-fig/container", 1022 | "keywords": [ 1023 | "PSR-11", 1024 | "container", 1025 | "container-interface", 1026 | "container-interop", 1027 | "psr" 1028 | ], 1029 | "support": { 1030 | "issues": "https://github.com/php-fig/container/issues", 1031 | "source": "https://github.com/php-fig/container/tree/master" 1032 | }, 1033 | "time": "2022-07-19T17:36:59+00:00" 1034 | }, 1035 | { 1036 | "name": "psr/http-client", 1037 | "version": "dev-master", 1038 | "source": { 1039 | "type": "git", 1040 | "url": "https://github.com/php-fig/http-client.git", 1041 | "reference": "22b2ef5687f43679481615605d7a15c557ce85b1" 1042 | }, 1043 | "dist": { 1044 | "type": "zip", 1045 | "url": "https://api.github.com/repos/php-fig/http-client/zipball/22b2ef5687f43679481615605d7a15c557ce85b1", 1046 | "reference": "22b2ef5687f43679481615605d7a15c557ce85b1", 1047 | "shasum": "" 1048 | }, 1049 | "require": { 1050 | "php": "^7.0 || ^8.0", 1051 | "psr/http-message": "^1.0" 1052 | }, 1053 | "default-branch": true, 1054 | "type": "library", 1055 | "extra": { 1056 | "branch-alias": { 1057 | "dev-master": "1.0.x-dev" 1058 | } 1059 | }, 1060 | "autoload": { 1061 | "psr-4": { 1062 | "Psr\\Http\\Client\\": "src/" 1063 | } 1064 | }, 1065 | "notification-url": "https://packagist.org/downloads/", 1066 | "license": [ 1067 | "MIT" 1068 | ], 1069 | "authors": [ 1070 | { 1071 | "name": "PHP-FIG", 1072 | "homepage": "https://www.php-fig.org/" 1073 | } 1074 | ], 1075 | "description": "Common interface for HTTP clients", 1076 | "homepage": "https://github.com/php-fig/http-client", 1077 | "keywords": [ 1078 | "http", 1079 | "http-client", 1080 | "psr", 1081 | "psr-18" 1082 | ], 1083 | "support": { 1084 | "source": "https://github.com/php-fig/http-client/tree/master" 1085 | }, 1086 | "time": "2020-09-19T09:12:31+00:00" 1087 | }, 1088 | { 1089 | "name": "psr/http-factory", 1090 | "version": "dev-master", 1091 | "source": { 1092 | "type": "git", 1093 | "url": "https://github.com/php-fig/http-factory.git", 1094 | "reference": "5a4f141ac2e5bc35e615134f127e1833158d2944" 1095 | }, 1096 | "dist": { 1097 | "type": "zip", 1098 | "url": "https://api.github.com/repos/php-fig/http-factory/zipball/5a4f141ac2e5bc35e615134f127e1833158d2944", 1099 | "reference": "5a4f141ac2e5bc35e615134f127e1833158d2944", 1100 | "shasum": "" 1101 | }, 1102 | "require": { 1103 | "php": ">=7.0.0", 1104 | "psr/http-message": "^1.0" 1105 | }, 1106 | "default-branch": true, 1107 | "type": "library", 1108 | "extra": { 1109 | "branch-alias": { 1110 | "dev-master": "1.0.x-dev" 1111 | } 1112 | }, 1113 | "autoload": { 1114 | "psr-4": { 1115 | "Psr\\Http\\Message\\": "src/" 1116 | } 1117 | }, 1118 | "notification-url": "https://packagist.org/downloads/", 1119 | "license": [ 1120 | "MIT" 1121 | ], 1122 | "authors": [ 1123 | { 1124 | "name": "PHP-FIG", 1125 | "homepage": "https://www.php-fig.org/" 1126 | } 1127 | ], 1128 | "description": "Common interfaces for PSR-7 HTTP message factories", 1129 | "keywords": [ 1130 | "factory", 1131 | "http", 1132 | "message", 1133 | "psr", 1134 | "psr-17", 1135 | "psr-7", 1136 | "request", 1137 | "response" 1138 | ], 1139 | "support": { 1140 | "source": "https://github.com/php-fig/http-factory/tree/master" 1141 | }, 1142 | "time": "2022-07-14T07:21:53+00:00" 1143 | }, 1144 | { 1145 | "name": "psr/http-message", 1146 | "version": "dev-master", 1147 | "source": { 1148 | "type": "git", 1149 | "url": "https://github.com/php-fig/http-message.git", 1150 | "reference": "efd67d1dc14a7ef4fc4e518e7dee91c271d524e4" 1151 | }, 1152 | "dist": { 1153 | "type": "zip", 1154 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/efd67d1dc14a7ef4fc4e518e7dee91c271d524e4", 1155 | "reference": "efd67d1dc14a7ef4fc4e518e7dee91c271d524e4", 1156 | "shasum": "" 1157 | }, 1158 | "require": { 1159 | "php": ">=5.3.0" 1160 | }, 1161 | "default-branch": true, 1162 | "type": "library", 1163 | "extra": { 1164 | "branch-alias": { 1165 | "dev-master": "1.0.x-dev" 1166 | } 1167 | }, 1168 | "autoload": { 1169 | "psr-4": { 1170 | "Psr\\Http\\Message\\": "src/" 1171 | } 1172 | }, 1173 | "notification-url": "https://packagist.org/downloads/", 1174 | "license": [ 1175 | "MIT" 1176 | ], 1177 | "authors": [ 1178 | { 1179 | "name": "PHP-FIG", 1180 | "homepage": "http://www.php-fig.org/" 1181 | } 1182 | ], 1183 | "description": "Common interface for HTTP messages", 1184 | "homepage": "https://github.com/php-fig/http-message", 1185 | "keywords": [ 1186 | "http", 1187 | "http-message", 1188 | "psr", 1189 | "psr-7", 1190 | "request", 1191 | "response" 1192 | ], 1193 | "support": { 1194 | "source": "https://github.com/php-fig/http-message/tree/master" 1195 | }, 1196 | "time": "2019-08-29T13:16:46+00:00" 1197 | }, 1198 | { 1199 | "name": "psr/simple-cache", 1200 | "version": "dev-master", 1201 | "source": { 1202 | "type": "git", 1203 | "url": "https://github.com/php-fig/simple-cache.git", 1204 | "reference": "2d280c2aaa23a120f35d55cfde8581954a8e77fa" 1205 | }, 1206 | "dist": { 1207 | "type": "zip", 1208 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/2d280c2aaa23a120f35d55cfde8581954a8e77fa", 1209 | "reference": "2d280c2aaa23a120f35d55cfde8581954a8e77fa", 1210 | "shasum": "" 1211 | }, 1212 | "require": { 1213 | "php": ">=8.0.0" 1214 | }, 1215 | "default-branch": true, 1216 | "type": "library", 1217 | "extra": { 1218 | "branch-alias": { 1219 | "dev-master": "3.0.x-dev" 1220 | } 1221 | }, 1222 | "autoload": { 1223 | "psr-4": { 1224 | "Psr\\SimpleCache\\": "src/" 1225 | } 1226 | }, 1227 | "notification-url": "https://packagist.org/downloads/", 1228 | "license": [ 1229 | "MIT" 1230 | ], 1231 | "authors": [ 1232 | { 1233 | "name": "PHP-FIG", 1234 | "homepage": "https://www.php-fig.org/" 1235 | } 1236 | ], 1237 | "description": "Common interfaces for simple caching", 1238 | "keywords": [ 1239 | "cache", 1240 | "caching", 1241 | "psr", 1242 | "psr-16", 1243 | "simple-cache" 1244 | ], 1245 | "support": { 1246 | "source": "https://github.com/php-fig/simple-cache/tree/master" 1247 | }, 1248 | "time": "2022-04-08T16:41:45+00:00" 1249 | }, 1250 | { 1251 | "name": "ralouphie/getallheaders", 1252 | "version": "3.0.3", 1253 | "source": { 1254 | "type": "git", 1255 | "url": "https://github.com/ralouphie/getallheaders.git", 1256 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 1257 | }, 1258 | "dist": { 1259 | "type": "zip", 1260 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 1261 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 1262 | "shasum": "" 1263 | }, 1264 | "require": { 1265 | "php": ">=5.6" 1266 | }, 1267 | "require-dev": { 1268 | "php-coveralls/php-coveralls": "^2.1", 1269 | "phpunit/phpunit": "^5 || ^6.5" 1270 | }, 1271 | "type": "library", 1272 | "autoload": { 1273 | "files": [ 1274 | "src/getallheaders.php" 1275 | ] 1276 | }, 1277 | "notification-url": "https://packagist.org/downloads/", 1278 | "license": [ 1279 | "MIT" 1280 | ], 1281 | "authors": [ 1282 | { 1283 | "name": "Ralph Khattar", 1284 | "email": "ralph.khattar@gmail.com" 1285 | } 1286 | ], 1287 | "description": "A polyfill for getallheaders.", 1288 | "support": { 1289 | "issues": "https://github.com/ralouphie/getallheaders/issues", 1290 | "source": "https://github.com/ralouphie/getallheaders/tree/develop" 1291 | }, 1292 | "time": "2019-03-08T08:55:37+00:00" 1293 | }, 1294 | { 1295 | "name": "stichoza/google-translate-php", 1296 | "version": "4.1.x-dev", 1297 | "source": { 1298 | "type": "git", 1299 | "url": "https://github.com/Stichoza/google-translate-php.git", 1300 | "reference": "14f6a9c84cd860910706ee3a668fba8a0a1aac0f" 1301 | }, 1302 | "dist": { 1303 | "type": "zip", 1304 | "url": "https://api.github.com/repos/Stichoza/google-translate-php/zipball/14f6a9c84cd860910706ee3a668fba8a0a1aac0f", 1305 | "reference": "14f6a9c84cd860910706ee3a668fba8a0a1aac0f", 1306 | "shasum": "" 1307 | }, 1308 | "require": { 1309 | "ext-json": "*", 1310 | "ext-mbstring": "*", 1311 | "guzzlehttp/guzzle": "~6.0|~7.0", 1312 | "php": "^7.1|^8" 1313 | }, 1314 | "require-dev": { 1315 | "phpunit/phpunit": "^7.0" 1316 | }, 1317 | "type": "library", 1318 | "autoload": { 1319 | "psr-4": { 1320 | "Stichoza\\GoogleTranslate\\": "src/" 1321 | } 1322 | }, 1323 | "notification-url": "https://packagist.org/downloads/", 1324 | "license": [ 1325 | "MIT" 1326 | ], 1327 | "authors": [ 1328 | { 1329 | "name": "Levan Velijanashvili", 1330 | "email": "me@stichoza.com" 1331 | } 1332 | ], 1333 | "description": "Free Google Translate API PHP Package", 1334 | "homepage": "https://github.com/Stichoza/google-translate-php", 1335 | "keywords": [ 1336 | "google", 1337 | "php", 1338 | "translate", 1339 | "translating", 1340 | "translator" 1341 | ], 1342 | "support": { 1343 | "issues": "https://github.com/Stichoza/google-translate-php/issues", 1344 | "source": "https://github.com/Stichoza/google-translate-php/tree/4.1" 1345 | }, 1346 | "funding": [ 1347 | { 1348 | "url": "https://btc.com/bc1qc25j4x7yahghm8nnn6lypnw59nptylsw32nkfl", 1349 | "type": "custom" 1350 | }, 1351 | { 1352 | "url": "https://www.paypal.me/stichoza", 1353 | "type": "custom" 1354 | }, 1355 | { 1356 | "url": "https://ko-fi.com/stichoza", 1357 | "type": "ko_fi" 1358 | }, 1359 | { 1360 | "url": "https://liberapay.com/stichoza", 1361 | "type": "liberapay" 1362 | }, 1363 | { 1364 | "url": "https://opencollective.com/stichoza", 1365 | "type": "open_collective" 1366 | }, 1367 | { 1368 | "url": "https://www.patreon.com/stichoza", 1369 | "type": "patreon" 1370 | } 1371 | ], 1372 | "time": "2022-11-25T11:17:52+00:00" 1373 | }, 1374 | { 1375 | "name": "symfony/deprecation-contracts", 1376 | "version": "dev-main", 1377 | "source": { 1378 | "type": "git", 1379 | "url": "https://github.com/symfony/deprecation-contracts.git", 1380 | "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" 1381 | }, 1382 | "dist": { 1383 | "type": "zip", 1384 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", 1385 | "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", 1386 | "shasum": "" 1387 | }, 1388 | "require": { 1389 | "php": ">=8.1" 1390 | }, 1391 | "default-branch": true, 1392 | "type": "library", 1393 | "extra": { 1394 | "branch-alias": { 1395 | "dev-main": "3.3-dev" 1396 | }, 1397 | "thanks": { 1398 | "name": "symfony/contracts", 1399 | "url": "https://github.com/symfony/contracts" 1400 | } 1401 | }, 1402 | "autoload": { 1403 | "files": [ 1404 | "function.php" 1405 | ] 1406 | }, 1407 | "notification-url": "https://packagist.org/downloads/", 1408 | "license": [ 1409 | "MIT" 1410 | ], 1411 | "authors": [ 1412 | { 1413 | "name": "Nicolas Grekas", 1414 | "email": "p@tchwork.com" 1415 | }, 1416 | { 1417 | "name": "Symfony Community", 1418 | "homepage": "https://symfony.com/contributors" 1419 | } 1420 | ], 1421 | "description": "A generic function and convention to trigger deprecation notices", 1422 | "homepage": "https://symfony.com", 1423 | "support": { 1424 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" 1425 | }, 1426 | "funding": [ 1427 | { 1428 | "url": "https://symfony.com/sponsor", 1429 | "type": "custom" 1430 | }, 1431 | { 1432 | "url": "https://github.com/fabpot", 1433 | "type": "github" 1434 | }, 1435 | { 1436 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1437 | "type": "tidelift" 1438 | } 1439 | ], 1440 | "time": "2022-11-25T10:21:52+00:00" 1441 | }, 1442 | { 1443 | "name": "symfony/finder", 1444 | "version": "6.3.x-dev", 1445 | "source": { 1446 | "type": "git", 1447 | "url": "https://github.com/symfony/finder.git", 1448 | "reference": "725285d8b254c57f061801e3e8210effe361c929" 1449 | }, 1450 | "dist": { 1451 | "type": "zip", 1452 | "url": "https://api.github.com/repos/symfony/finder/zipball/725285d8b254c57f061801e3e8210effe361c929", 1453 | "reference": "725285d8b254c57f061801e3e8210effe361c929", 1454 | "shasum": "" 1455 | }, 1456 | "require": { 1457 | "php": ">=8.1" 1458 | }, 1459 | "require-dev": { 1460 | "symfony/filesystem": "^6.0" 1461 | }, 1462 | "type": "library", 1463 | "autoload": { 1464 | "psr-4": { 1465 | "Symfony\\Component\\Finder\\": "" 1466 | }, 1467 | "exclude-from-classmap": [ 1468 | "/Tests/" 1469 | ] 1470 | }, 1471 | "notification-url": "https://packagist.org/downloads/", 1472 | "license": [ 1473 | "MIT" 1474 | ], 1475 | "authors": [ 1476 | { 1477 | "name": "Fabien Potencier", 1478 | "email": "fabien@symfony.com" 1479 | }, 1480 | { 1481 | "name": "Symfony Community", 1482 | "homepage": "https://symfony.com/contributors" 1483 | } 1484 | ], 1485 | "description": "Finds files and directories via an intuitive fluent interface", 1486 | "homepage": "https://symfony.com", 1487 | "support": { 1488 | "source": "https://github.com/symfony/finder/tree/6.3" 1489 | }, 1490 | "funding": [ 1491 | { 1492 | "url": "https://symfony.com/sponsor", 1493 | "type": "custom" 1494 | }, 1495 | { 1496 | "url": "https://github.com/fabpot", 1497 | "type": "github" 1498 | }, 1499 | { 1500 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1501 | "type": "tidelift" 1502 | } 1503 | ], 1504 | "time": "2023-01-13T09:23:11+00:00" 1505 | }, 1506 | { 1507 | "name": "symfony/polyfill-mbstring", 1508 | "version": "dev-main", 1509 | "source": { 1510 | "type": "git", 1511 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1512 | "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" 1513 | }, 1514 | "dist": { 1515 | "type": "zip", 1516 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", 1517 | "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", 1518 | "shasum": "" 1519 | }, 1520 | "require": { 1521 | "php": ">=7.1" 1522 | }, 1523 | "provide": { 1524 | "ext-mbstring": "*" 1525 | }, 1526 | "suggest": { 1527 | "ext-mbstring": "For best performance" 1528 | }, 1529 | "default-branch": true, 1530 | "type": "library", 1531 | "extra": { 1532 | "branch-alias": { 1533 | "dev-main": "1.27-dev" 1534 | }, 1535 | "thanks": { 1536 | "name": "symfony/polyfill", 1537 | "url": "https://github.com/symfony/polyfill" 1538 | } 1539 | }, 1540 | "autoload": { 1541 | "files": [ 1542 | "bootstrap.php" 1543 | ], 1544 | "psr-4": { 1545 | "Symfony\\Polyfill\\Mbstring\\": "" 1546 | } 1547 | }, 1548 | "notification-url": "https://packagist.org/downloads/", 1549 | "license": [ 1550 | "MIT" 1551 | ], 1552 | "authors": [ 1553 | { 1554 | "name": "Nicolas Grekas", 1555 | "email": "p@tchwork.com" 1556 | }, 1557 | { 1558 | "name": "Symfony Community", 1559 | "homepage": "https://symfony.com/contributors" 1560 | } 1561 | ], 1562 | "description": "Symfony polyfill for the Mbstring extension", 1563 | "homepage": "https://symfony.com", 1564 | "keywords": [ 1565 | "compatibility", 1566 | "mbstring", 1567 | "polyfill", 1568 | "portable", 1569 | "shim" 1570 | ], 1571 | "support": { 1572 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" 1573 | }, 1574 | "funding": [ 1575 | { 1576 | "url": "https://symfony.com/sponsor", 1577 | "type": "custom" 1578 | }, 1579 | { 1580 | "url": "https://github.com/fabpot", 1581 | "type": "github" 1582 | }, 1583 | { 1584 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1585 | "type": "tidelift" 1586 | } 1587 | ], 1588 | "time": "2022-11-03T14:55:06+00:00" 1589 | }, 1590 | { 1591 | "name": "symfony/polyfill-php80", 1592 | "version": "dev-main", 1593 | "source": { 1594 | "type": "git", 1595 | "url": "https://github.com/symfony/polyfill-php80.git", 1596 | "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" 1597 | }, 1598 | "dist": { 1599 | "type": "zip", 1600 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", 1601 | "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", 1602 | "shasum": "" 1603 | }, 1604 | "require": { 1605 | "php": ">=7.1" 1606 | }, 1607 | "default-branch": true, 1608 | "type": "library", 1609 | "extra": { 1610 | "branch-alias": { 1611 | "dev-main": "1.27-dev" 1612 | }, 1613 | "thanks": { 1614 | "name": "symfony/polyfill", 1615 | "url": "https://github.com/symfony/polyfill" 1616 | } 1617 | }, 1618 | "autoload": { 1619 | "files": [ 1620 | "bootstrap.php" 1621 | ], 1622 | "psr-4": { 1623 | "Symfony\\Polyfill\\Php80\\": "" 1624 | }, 1625 | "classmap": [ 1626 | "Resources/stubs" 1627 | ] 1628 | }, 1629 | "notification-url": "https://packagist.org/downloads/", 1630 | "license": [ 1631 | "MIT" 1632 | ], 1633 | "authors": [ 1634 | { 1635 | "name": "Ion Bazan", 1636 | "email": "ion.bazan@gmail.com" 1637 | }, 1638 | { 1639 | "name": "Nicolas Grekas", 1640 | "email": "p@tchwork.com" 1641 | }, 1642 | { 1643 | "name": "Symfony Community", 1644 | "homepage": "https://symfony.com/contributors" 1645 | } 1646 | ], 1647 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 1648 | "homepage": "https://symfony.com", 1649 | "keywords": [ 1650 | "compatibility", 1651 | "polyfill", 1652 | "portable", 1653 | "shim" 1654 | ], 1655 | "support": { 1656 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" 1657 | }, 1658 | "funding": [ 1659 | { 1660 | "url": "https://symfony.com/sponsor", 1661 | "type": "custom" 1662 | }, 1663 | { 1664 | "url": "https://github.com/fabpot", 1665 | "type": "github" 1666 | }, 1667 | { 1668 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1669 | "type": "tidelift" 1670 | } 1671 | ], 1672 | "time": "2022-11-03T14:55:06+00:00" 1673 | }, 1674 | { 1675 | "name": "symfony/translation", 1676 | "version": "6.3.x-dev", 1677 | "source": { 1678 | "type": "git", 1679 | "url": "https://github.com/symfony/translation.git", 1680 | "reference": "8447e264ced6f69fe9e50b3d617e6aa27b523caf" 1681 | }, 1682 | "dist": { 1683 | "type": "zip", 1684 | "url": "https://api.github.com/repos/symfony/translation/zipball/8447e264ced6f69fe9e50b3d617e6aa27b523caf", 1685 | "reference": "8447e264ced6f69fe9e50b3d617e6aa27b523caf", 1686 | "shasum": "" 1687 | }, 1688 | "require": { 1689 | "php": ">=8.1", 1690 | "symfony/polyfill-mbstring": "~1.0", 1691 | "symfony/translation-contracts": "^2.5|^3.0" 1692 | }, 1693 | "conflict": { 1694 | "symfony/config": "<5.4", 1695 | "symfony/console": "<5.4", 1696 | "symfony/dependency-injection": "<5.4", 1697 | "symfony/http-client-contracts": "<2.5", 1698 | "symfony/http-kernel": "<5.4", 1699 | "symfony/service-contracts": "<2.5", 1700 | "symfony/twig-bundle": "<5.4", 1701 | "symfony/yaml": "<5.4" 1702 | }, 1703 | "provide": { 1704 | "symfony/translation-implementation": "2.3|3.0" 1705 | }, 1706 | "require-dev": { 1707 | "nikic/php-parser": "^4.13", 1708 | "psr/log": "^1|^2|^3", 1709 | "symfony/config": "^5.4|^6.0", 1710 | "symfony/console": "^5.4|^6.0", 1711 | "symfony/dependency-injection": "^5.4|^6.0", 1712 | "symfony/finder": "^5.4|^6.0", 1713 | "symfony/http-client-contracts": "^2.5|^3.0", 1714 | "symfony/http-kernel": "^5.4|^6.0", 1715 | "symfony/intl": "^5.4|^6.0", 1716 | "symfony/polyfill-intl-icu": "^1.21", 1717 | "symfony/routing": "^5.4|^6.0", 1718 | "symfony/service-contracts": "^2.5|^3", 1719 | "symfony/yaml": "^5.4|^6.0" 1720 | }, 1721 | "suggest": { 1722 | "nikic/php-parser": "To use PhpAstExtractor", 1723 | "psr/log-implementation": "To use logging capability in translator", 1724 | "symfony/config": "", 1725 | "symfony/yaml": "" 1726 | }, 1727 | "type": "library", 1728 | "autoload": { 1729 | "files": [ 1730 | "Resources/functions.php" 1731 | ], 1732 | "psr-4": { 1733 | "Symfony\\Component\\Translation\\": "" 1734 | }, 1735 | "exclude-from-classmap": [ 1736 | "/Tests/" 1737 | ] 1738 | }, 1739 | "notification-url": "https://packagist.org/downloads/", 1740 | "license": [ 1741 | "MIT" 1742 | ], 1743 | "authors": [ 1744 | { 1745 | "name": "Fabien Potencier", 1746 | "email": "fabien@symfony.com" 1747 | }, 1748 | { 1749 | "name": "Symfony Community", 1750 | "homepage": "https://symfony.com/contributors" 1751 | } 1752 | ], 1753 | "description": "Provides tools to internationalize your application", 1754 | "homepage": "https://symfony.com", 1755 | "support": { 1756 | "source": "https://github.com/symfony/translation/tree/6.3" 1757 | }, 1758 | "funding": [ 1759 | { 1760 | "url": "https://symfony.com/sponsor", 1761 | "type": "custom" 1762 | }, 1763 | { 1764 | "url": "https://github.com/fabpot", 1765 | "type": "github" 1766 | }, 1767 | { 1768 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1769 | "type": "tidelift" 1770 | } 1771 | ], 1772 | "time": "2023-01-13T09:23:11+00:00" 1773 | }, 1774 | { 1775 | "name": "symfony/translation-contracts", 1776 | "version": "dev-main", 1777 | "source": { 1778 | "type": "git", 1779 | "url": "https://github.com/symfony/translation-contracts.git", 1780 | "reference": "68cce71402305a015f8c1589bfada1280dc64fe7" 1781 | }, 1782 | "dist": { 1783 | "type": "zip", 1784 | "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/68cce71402305a015f8c1589bfada1280dc64fe7", 1785 | "reference": "68cce71402305a015f8c1589bfada1280dc64fe7", 1786 | "shasum": "" 1787 | }, 1788 | "require": { 1789 | "php": ">=8.1" 1790 | }, 1791 | "suggest": { 1792 | "symfony/translation-implementation": "" 1793 | }, 1794 | "default-branch": true, 1795 | "type": "library", 1796 | "extra": { 1797 | "branch-alias": { 1798 | "dev-main": "3.3-dev" 1799 | }, 1800 | "thanks": { 1801 | "name": "symfony/contracts", 1802 | "url": "https://github.com/symfony/contracts" 1803 | } 1804 | }, 1805 | "autoload": { 1806 | "psr-4": { 1807 | "Symfony\\Contracts\\Translation\\": "" 1808 | }, 1809 | "exclude-from-classmap": [ 1810 | "/Test/" 1811 | ] 1812 | }, 1813 | "notification-url": "https://packagist.org/downloads/", 1814 | "license": [ 1815 | "MIT" 1816 | ], 1817 | "authors": [ 1818 | { 1819 | "name": "Nicolas Grekas", 1820 | "email": "p@tchwork.com" 1821 | }, 1822 | { 1823 | "name": "Symfony Community", 1824 | "homepage": "https://symfony.com/contributors" 1825 | } 1826 | ], 1827 | "description": "Generic abstractions related to translation", 1828 | "homepage": "https://symfony.com", 1829 | "keywords": [ 1830 | "abstractions", 1831 | "contracts", 1832 | "decoupling", 1833 | "interfaces", 1834 | "interoperability", 1835 | "standards" 1836 | ], 1837 | "support": { 1838 | "source": "https://github.com/symfony/translation-contracts/tree/v3.2.0" 1839 | }, 1840 | "funding": [ 1841 | { 1842 | "url": "https://symfony.com/sponsor", 1843 | "type": "custom" 1844 | }, 1845 | { 1846 | "url": "https://github.com/fabpot", 1847 | "type": "github" 1848 | }, 1849 | { 1850 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1851 | "type": "tidelift" 1852 | } 1853 | ], 1854 | "time": "2022-11-25T10:21:52+00:00" 1855 | }, 1856 | { 1857 | "name": "voku/portable-ascii", 1858 | "version": "2.0.1", 1859 | "source": { 1860 | "type": "git", 1861 | "url": "https://github.com/voku/portable-ascii.git", 1862 | "reference": "b56450eed252f6801410d810c8e1727224ae0743" 1863 | }, 1864 | "dist": { 1865 | "type": "zip", 1866 | "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", 1867 | "reference": "b56450eed252f6801410d810c8e1727224ae0743", 1868 | "shasum": "" 1869 | }, 1870 | "require": { 1871 | "php": ">=7.0.0" 1872 | }, 1873 | "require-dev": { 1874 | "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" 1875 | }, 1876 | "suggest": { 1877 | "ext-intl": "Use Intl for transliterator_transliterate() support" 1878 | }, 1879 | "type": "library", 1880 | "autoload": { 1881 | "psr-4": { 1882 | "voku\\": "src/voku/" 1883 | } 1884 | }, 1885 | "notification-url": "https://packagist.org/downloads/", 1886 | "license": [ 1887 | "MIT" 1888 | ], 1889 | "authors": [ 1890 | { 1891 | "name": "Lars Moelleken", 1892 | "homepage": "http://www.moelleken.org/" 1893 | } 1894 | ], 1895 | "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", 1896 | "homepage": "https://github.com/voku/portable-ascii", 1897 | "keywords": [ 1898 | "ascii", 1899 | "clean", 1900 | "php" 1901 | ], 1902 | "support": { 1903 | "issues": "https://github.com/voku/portable-ascii/issues", 1904 | "source": "https://github.com/voku/portable-ascii/tree/2.0.1" 1905 | }, 1906 | "funding": [ 1907 | { 1908 | "url": "https://www.paypal.me/moelleken", 1909 | "type": "custom" 1910 | }, 1911 | { 1912 | "url": "https://github.com/voku", 1913 | "type": "github" 1914 | }, 1915 | { 1916 | "url": "https://opencollective.com/portable-ascii", 1917 | "type": "open_collective" 1918 | }, 1919 | { 1920 | "url": "https://www.patreon.com/voku", 1921 | "type": "patreon" 1922 | }, 1923 | { 1924 | "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", 1925 | "type": "tidelift" 1926 | } 1927 | ], 1928 | "time": "2022-03-08T17:03:00+00:00" 1929 | } 1930 | ], 1931 | "packages-dev": [ 1932 | { 1933 | "name": "spatie/laravel-package-tools", 1934 | "version": "1.14.0", 1935 | "source": { 1936 | "type": "git", 1937 | "url": "https://github.com/spatie/laravel-package-tools.git", 1938 | "reference": "9964e65c318c30577ca1b91469f739d2b381359b" 1939 | }, 1940 | "dist": { 1941 | "type": "zip", 1942 | "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/9964e65c318c30577ca1b91469f739d2b381359b", 1943 | "reference": "9964e65c318c30577ca1b91469f739d2b381359b", 1944 | "shasum": "" 1945 | }, 1946 | "require": { 1947 | "illuminate/contracts": "^9.28|^10.0", 1948 | "php": "^8.0" 1949 | }, 1950 | "require-dev": { 1951 | "mockery/mockery": "^1.5", 1952 | "orchestra/testbench": "^7.7|^8.0", 1953 | "pestphp/pest": "^1.22", 1954 | "phpunit/phpunit": "^9.5.24", 1955 | "spatie/pest-plugin-test-time": "^1.1" 1956 | }, 1957 | "type": "library", 1958 | "autoload": { 1959 | "psr-4": { 1960 | "Spatie\\LaravelPackageTools\\": "src" 1961 | } 1962 | }, 1963 | "notification-url": "https://packagist.org/downloads/", 1964 | "license": [ 1965 | "MIT" 1966 | ], 1967 | "authors": [ 1968 | { 1969 | "name": "Freek Van der Herten", 1970 | "email": "freek@spatie.be", 1971 | "role": "Developer" 1972 | } 1973 | ], 1974 | "description": "Tools for creating Laravel packages", 1975 | "homepage": "https://github.com/spatie/laravel-package-tools", 1976 | "keywords": [ 1977 | "laravel-package-tools", 1978 | "spatie" 1979 | ], 1980 | "support": { 1981 | "issues": "https://github.com/spatie/laravel-package-tools/issues", 1982 | "source": "https://github.com/spatie/laravel-package-tools/tree/1.14.0" 1983 | }, 1984 | "funding": [ 1985 | { 1986 | "url": "https://github.com/spatie", 1987 | "type": "github" 1988 | } 1989 | ], 1990 | "time": "2023-01-10T14:09:55+00:00" 1991 | } 1992 | ], 1993 | "aliases": [], 1994 | "minimum-stability": "dev", 1995 | "stability-flags": [], 1996 | "prefer-stable": false, 1997 | "prefer-lowest": false, 1998 | "platform": [], 1999 | "platform-dev": [], 2000 | "plugin-api-version": "2.3.0" 2001 | } 2002 | -------------------------------------------------------------------------------- /config/auto-translate.php: -------------------------------------------------------------------------------- 1 | [ 14 | 'fr', 15 | 'ar' 16 | ], 17 | 18 | /* 19 | * 20 | * The base locale to use when using the command "translate:missing" to 21 | * generate missing translations for other JSON files 22 | * 23 | */ 24 | 'base_locale' => 'fr' 25 | 26 | ]; -------------------------------------------------------------------------------- /src/AutoTranslateProvider.php: -------------------------------------------------------------------------------- 1 | name('auto-translate') 17 | ->hasConfigFile() 18 | ->hasCommands([ 19 | AutoTranslate::class, 20 | TranslateMissing::class 21 | ]); 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /src/Commands/AutoTranslate.php: -------------------------------------------------------------------------------- 1 | info('Translating ' . $locale . ', please wait...'); 40 | $results = []; 41 | $localeFile = File::get($filePath); 42 | $localeFileContent = array_keys(json_decode($localeFile, true)); 43 | $translator = new GoogleTranslate($locale); 44 | $translator->setSource(config('app.fallback_locale')); 45 | foreach ($localeFileContent as $key) { 46 | $results[$key] = $translator->translate($key); 47 | } 48 | File::put($filePath, json_encode($results, JSON_UNESCAPED_UNICODE)); 49 | } 50 | } catch (\Exception $e) { 51 | $this->error('Error: ' . $e->getMessage()); 52 | } 53 | } 54 | return Command::SUCCESS; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/Commands/TranslateMissing.php: -------------------------------------------------------------------------------- 1 | info('Found ' . sizeof($locales) . ' locales. Performing, please wait...'); 41 | $bar = $this->getOutput()->createProgressBar(sizeof($locales)); 42 | $bar->start(); 43 | foreach ($locales as $locale) { 44 | $filePath = lang_path($locale . '.json'); 45 | if (File::exists($filePath)) { 46 | $localeTranslations = json_decode(File::get(lang_path($locale . '.json')), true); 47 | $translator = new GoogleTranslate($locale); 48 | $translator->setSource(config('app.fallback_locale')); 49 | $newLocaleTranslations = []; 50 | foreach ($baseTranslations as $kbt => $baseTranslation) { 51 | try { 52 | if (!array_key_exists($kbt, $localeTranslations)) { 53 | $newLocaleTranslations[$kbt] = $translator->translate($kbt); 54 | } else { 55 | $newLocaleTranslations[$kbt] = $localeTranslations[$kbt]; 56 | } 57 | } catch (\Exception $e) { 58 | $this->error('Error: ' . $e->getMessage()); 59 | $newLocaleTranslations[$kbt] = $kbt; 60 | } 61 | } 62 | File::put($filePath, json_encode($newLocaleTranslations, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT)); 63 | } 64 | $bar->advance(); 65 | } 66 | $bar->finish(); 67 | return Command::SUCCESS; 68 | } 69 | } 70 | --------------------------------------------------------------------------------