diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..dd9a2b5 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..c09f81e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,20 @@ +# Path-based git attributes +# https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html + +# Ignore all test and documentation with "export-ignore". +/.github export-ignore +/.gitattributes export-ignore +/.gitignore export-ignore +/phpunit.xml.dist export-ignore +/art export-ignore +/docs export-ignore +/tests export-ignore +/workbench export-ignore +/.editorconfig export-ignore +/.php_cs.dist.php export-ignore +/psalm.xml export-ignore +/psalm.xml.dist export-ignore +/testbench.yaml export-ignore +/UPGRADING.md export-ignore +/phpstan.neon.dist export-ignore +/phpstan-baseline.neon export-ignore diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 0000000..fe4cfe6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,66 @@ +name: Bug Report +description: Report an Issue or Bug with the Package +title: "[Bug]: " +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + We're sorry to hear you have a problem. Can you help us solve it by providing the following details. + - type: textarea + id: what-happened + attributes: + label: What happened? + description: What did you expect to happen? + placeholder: I cannot currently do X thing because when I do, it breaks X thing. + validations: + required: true + - type: textarea + id: how-to-reproduce + attributes: + label: How to reproduce the bug + description: How did this occur, please add any config values used and provide a set of reliable steps if possible. + placeholder: When I do X I see Y. + validations: + required: true + - type: input + id: package-version + attributes: + label: Package Version + description: What version of our Package are you running? Please be as specific as possible + placeholder: 2.0.0 + validations: + required: true + - type: input + id: php-version + attributes: + label: PHP Version + description: What version of PHP are you running? Please be as specific as possible + placeholder: 8.2.0 + validations: + required: true + - type: input + id: laravel-version + attributes: + label: Laravel Version + description: What version of Laravel are you running? Please be as specific as possible + placeholder: 9.0.0 + validations: + required: true + - type: dropdown + id: operating-systems + attributes: + label: Which operating systems does with happen with? + description: You may select more than one. + multiple: true + options: + - macOS + - Windows + - Linux + - type: textarea + id: notes + attributes: + label: Notes + description: Use this field to provide any other notes that you feel might be relevant to the issue. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..a494e16 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,11 @@ +blank_issues_enabled: false +contact_links: + - name: Ask a question + url: https://github.com/omar-haris/filament-timezone-field/discussions/new?category=q-a + about: Ask the community for help + - name: Request a feature + url: https://github.com/omar-haris/filament-timezone-field/discussions/new?category=ideas + about: Share ideas for new features + - name: Report a security issue + url: https://github.com/omar-haris/filament-timezone-field/security/policy + about: Learn how to notify us for sensitive bugs diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml new file mode 100644 index 0000000..ccfa9d9 --- /dev/null +++ b/.github/workflows/phpstan.yml @@ -0,0 +1,26 @@ +name: PHPStan + +on: + push: + paths: + - '**.php' + - 'phpstan.neon.dist' + +jobs: + phpstan: + name: phpstan + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.1' + coverage: none + + - name: Install composer dependencies + uses: ramsey/composer-install@v2 + + - name: Run PHPStan + run: ./vendor/bin/phpstan --error-format=github diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml new file mode 100644 index 0000000..3761563 --- /dev/null +++ b/.github/workflows/run-tests.yml @@ -0,0 +1,51 @@ +name: run-tests + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + test: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: true + matrix: + os: [ubuntu-latest, windows-latest] + php: [8.3, 8.2, 8.1] + laravel: [10.*] + stability: [prefer-lowest, prefer-stable] + include: + - laravel: 10.* + testbench: 8.* + carbon: ^2.63 + + name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.stability }} - ${{ matrix.os }} + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, imagick, fileinfo + coverage: none + + - name: Setup problem matchers + run: | + echo "::add-matcher::${{ runner.tool_cache }}/php.json" + echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" + + - name: Install dependencies + run: | + composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" "nesbot/carbon:${{ matrix.carbon }}" --no-interaction --no-update + composer update --${{ matrix.stability }} --prefer-dist --no-interaction + + - name: List Installed Dependencies + run: composer show -D + + - name: Execute tests + run: vendor/bin/pest --ci diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml new file mode 100644 index 0000000..ec40921 --- /dev/null +++ b/.github/workflows/update-changelog.yml @@ -0,0 +1,31 @@ +name: "Update Changelog" + +on: + release: + types: [released] + +permissions: + contents: write + +jobs: + update: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: main + + - name: Update Changelog + uses: stefanzweifel/changelog-updater-action@v1 + with: + latest-version: ${{ github.event.release.name }} + release-notes: ${{ github.event.release.body }} + + - name: Commit updated CHANGELOG + uses: stefanzweifel/git-auto-commit-action@v5 + with: + branch: main + commit_message: Update CHANGELOG + file_pattern: CHANGELOG.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..94b4ec7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +.idea +.phpunit.cache +build +composer.lock +coverage +phpunit.xml +phpstan.neon +testbench.yaml +vendor +node_modules +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..0e83935 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,3 @@ +# Changelog + +All notable changes to `filament-timezone-field` will be documented in this file. diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..4ca8424 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) omar-haris + +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. diff --git a/README.md b/README.md new file mode 100644 index 0000000..40b7ff7 --- /dev/null +++ b/README.md @@ -0,0 +1,107 @@ +# Laravel Filament Timezone Field + +[![Latest Version on Packagist](https://img.shields.io/packagist/v/omar-haris/filament-timezone-field.svg?style=flat-square)](https://packagist.org/packages/omar-haris/filament-timezone-field) +[![GitHub Tests Action Status](https://img.shields.io/github/actions/workflow/status/omar-haris/filament-timezone-field/run-tests.yml?branch=main&label=tests&style=flat-square)](https://github.com/omar-haris/filament-timezone-field/actions?query=workflow%3Arun-tests+branch%3Amain) +[![GitHub Code Style Action Status](https://img.shields.io/github/actions/workflow/status/omar-haris/filament-timezone-field/fix-php-code-style-issues.yml?branch=main&label=code%20style&style=flat-square)](https://github.com/omar-haris/filament-timezone-field/actions?query=workflow%3A"Fix+PHP+code+style+issues"+branch%3Amain) +[![Total Downloads](https://img.shields.io/packagist/dt/omar-haris/filament-timezone-field.svg?style=flat-square)](https://packagist.org/packages/omar-haris/filament-timezone-field) + +A Laravel Filament component that enables users to choose a specific timezone grouped by regions, with support for multiple languages. + +![Filament Timezone Field](./docs/timezone.png) + +## Installation + +You can install the package via composer: + +```bash +composer require omar-haris/filament-timezone-field +``` +You can publish the translation languages files with: + +```bash +php artisan vendor:publish --tag="filament-timezone-field-translations" +``` +Supported languages + +- Arabic +- English + +## Usage + +#### Add to your filament form resource: + +```php +use OmarHaris\FilamentTimezoneField\Forms\Components\Timezone; + +public static function form(Form $form): Form +{ + return $form + ->schema([ + // ... + Timezone::make('timezone') + ->searchable() + ->required(), + // ... + ]); +} +``` + +#### Add to your filament table resource: + +```php +use OmarHaris\FilamentTimezoneField\Tables\Columns\Timezone; + +public static function form(Form $form): Form +{ + return $form + ->columns([ + // ... + Timezone::make('timezone') + ->sortable() + ->toggleable(), + // ... + ]); +} +``` + +#### You can use it as a table filter +```php +use OmarHaris\FilamentTimezoneField\Tables\Filters\Timezone; + +public static function table(Table $table): Table +{ + return $table + //... + ->filters([ + Timezone::make('timezone'), + // ... + ]) +} +``` + +## Testing + +```bash +composer test +``` + +## Changelog + +Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently. + +## Contributing + +Please see [CONTRIBUTING](CONTRIBUTING.md) for details. + +## Security Vulnerabilities + +Please review [our security policy](../../security/policy) on how to report security vulnerabilities. + +## Credits + +- [Omar Haris](https://github.com/omar-haris) +- [All Contributors](../../contributors) + +## License + +The MIT License (MIT). Please see [License File](LICENSE.md) for more information. diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..ea40408 --- /dev/null +++ b/composer.json @@ -0,0 +1,88 @@ +{ + "name": "omar-haris/filament-timezone-field", + "description": "A Laravel Filament component that enables users to choose a specific time zone.", + "keywords": [ + "omar-haris", + "laravel", + "filament-timezone-field", + "filament", + "filamentphp", + "timezone" + ], + "homepage": "https://github.com/omar-haris/filament-timezone-field", + "license": "MIT", + "authors": [ + { + "name": "Omar Haris", + "email": "omar@haris.family", + "role": "Developer" + } + ], + "require": { + "php": "^8.1", + "filament/filament": "^3.0-stable", + "spatie/laravel-package-tools": "^1.14.0", + "illuminate/contracts": "^10.0" + }, + "require-dev": { + "laravel/pint": "^1.0", + "nunomaduro/collision": "^7.8", + "larastan/larastan": "^2.0.1", + "orchestra/testbench": "^8.8", + "pestphp/pest": "^2.20", + "pestphp/pest-plugin-arch": "^2.0", + "pestphp/pest-plugin-laravel": "^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0" + }, + "autoload": { + "psr-4": { + "OmarHaris\\FilamentTimezoneField\\": "src/", + "OmarHaris\\FilamentTimezoneField\\Database\\Factories\\": "database/factories/" + } + }, + "autoload-dev": { + "psr-4": { + "OmarHaris\\FilamentTimezoneField\\Tests\\": "tests/", + "Workbench\\App\\": "workbench/app/" + } + }, + "scripts": { + "post-autoload-dump": "@composer run prepare", + "clear": "@php vendor/bin/testbench package:purge-filament-timezone-field --ansi", + "prepare": "@php vendor/bin/testbench package:discover --ansi", + "build": [ + "@composer run prepare", + "@php vendor/bin/testbench workbench:build --ansi" + ], + "start": [ + "Composer\\Config::disableProcessTimeout", + "@composer run build", + "@php vendor/bin/testbench serve" + ], + "analyse": "vendor/bin/phpstan analyse", + "test": "vendor/bin/pest", + "test-coverage": "vendor/bin/pest --coverage", + "format": "vendor/bin/pint" + }, + "config": { + "sort-packages": true, + "allow-plugins": { + "pestphp/pest-plugin": true, + "phpstan/extension-installer": true + } + }, + "extra": { + "laravel": { + "providers": [ + "OmarHaris\\FilamentTimezoneField\\FilamentTimezoneFieldServiceProvider" + ], + "aliases": { + "FilamentTimezoneField": "OmarHaris\\FilamentTimezoneField\\Facades\\FilamentTimezoneField" + } + } + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/docs/timezone.png b/docs/timezone.png new file mode 100644 index 0000000..babe81b Binary files /dev/null and b/docs/timezone.png differ diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon new file mode 100644 index 0000000..e69de29 diff --git a/phpstan.neon.dist b/phpstan.neon.dist new file mode 100644 index 0000000..a91953b --- /dev/null +++ b/phpstan.neon.dist @@ -0,0 +1,14 @@ +includes: + - phpstan-baseline.neon + +parameters: + level: 4 + paths: + - src + - config + - database + tmpDir: build/phpstan + checkOctaneCompatibility: true + checkModelProperties: true + checkMissingIterableValueType: false + diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 0000000..9568939 --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,38 @@ + + + + + tests + + + + + + + + + + + + + + + ./src + + + diff --git a/resources/lang/ar/label.php b/resources/lang/ar/label.php new file mode 100644 index 0000000..170739f --- /dev/null +++ b/resources/lang/ar/label.php @@ -0,0 +1,15 @@ + "المنطقة الزمنية" +]; diff --git a/resources/lang/ar/timezone.php b/resources/lang/ar/timezone.php new file mode 100644 index 0000000..6bca12b --- /dev/null +++ b/resources/lang/ar/timezone.php @@ -0,0 +1,455 @@ + [ + "Africa/Abidjan" => "(جرينتش+00:00) أفريقيا/أبيدجان", + "Africa/Accra" => "(جرينتش+00:00) أفريقيا/أكرا", + "Africa/Addis Ababa" => "(جرينتش+03:00) أفريقيا/أديس أبابا", + "Africa/Algiers" => "(جرينتش+01:00) أفريقيا/الجزائر", + "Africa/Asmara" => "(جرينتش+03:00) أفريقيا/أسمرة", + "Africa/Bamako" => "(جرينتش+00:00) أفريقيا/باماكو", + "Africa/Bangui" => "(جرينتش+01:00) أفريقيا/بانغي", + "Africa/Banjul" => "(جرينتش+00:00) أفريقيا/بانجول", + "Africa/Bissau" => "(جرينتش+00:00) أفريقيا/بيساو", + "Africa/Blantyre" => "(جرينتش+02:00) أفريقيا/بلانتير", + "Africa/Brazzaville" => "(جرينتش+01:00) أفريقيا/برازافيل", + "Africa/Bujumbura" => "(جرينتش+02:00) أفريقيا/بوجومبورا", + "Africa/Cairo" => "(جرينتش+02:00) أفريقيا/القاهرة", + "Africa/Casablanca" => "(جرينتش+01:00) أفريقيا/الدار البيضاء", + "Africa/Ceuta" => "(جرينتش+01:00) أفريقيا/سيوتا", + "Africa/Conakry" => "(جرينتش+00:00) أفريقيا/كوناكري", + "Africa/Dakar" => "(جرينتش+00:00) أفريقيا/داكار", + "Africa/Dar es Salaam" => "(جرينتش+03:00) أفريقيا/دار السلام", + "Africa/Djibouti" => "(جرينتش+03:00) أفريقيا/جيبوتي", + "Africa/Douala" => "(جرينتش+01:00) أفريقيا/دوالا", + "Africa/El Aaiun" => "(جرينتش+01:00) أفريقيا/العيون", + "Africa/Freetown" => "(جرينتش+00:00) أفريقيا/فريتاون", + "Africa/Gaborone" => "(جرينتش+02:00) أفريقيا/غابورون", + "Africa/Harare" => "(جرينتش+02:00) أفريقيا/هراري", + "Africa/Johannesburg" => "(جرينتش+02:00) أفريقيا/جوهانسبرغ", + "Africa/Juba" => "(جرينتش+02:00) أفريقيا/جوبا", + "Africa/Kampala" => "(جرينتش+03:00) أفريقيا/كامبالا", + "Africa/Khartoum" => "(جرينتش+02:00) أفريقيا/الخرطوم", + "Africa/Kigali" => "(جرينتش+02:00) أفريقيا/كيغالي", + "Africa/Kinshasa" => "(جرينتش+01:00) أفريقيا/كينشاسا", + "Africa/Lagos" => "(جرينتش+01:00) أفريقيا/لاجوس", + "Africa/Libreville" => "(جرينتش+01:00) أفريقيا/ليبرفيل", + "Africa/Lome" => "(جرينتش+00:00) أفريقيا/لومي", + "Africa/Luanda" => "(جرينتش+01:00) أفريقيا/لواندا", + "Africa/Lubumbashi" => "(جرينتش+02:00) أفريقيا/لوبومباشي", + "Africa/Lusaka" => "(جرينتش+02:00) أفريقيا/لوساكا", + "Africa/Malabo" => "(جرينتش+01:00) أفريقيا/ملابو", + "Africa/Maputo" => "(جرينتش+02:00) أفريقيا/مابوتو", + "Africa/Maseru" => "(جرينتش+02:00) أفريقيا/ماسيرو", + "Africa/Mbabane" => "(جرينتش+02:00) أفريقيا/مباباني", + "Africa/Mogadishu" => "(جرينتش+03:00) أفريقيا/مقديشو", + "Africa/Monrovia" => "(جرينتش+00:00) أفريقيا/مونروفيا", + "Africa/Nairobi" => "(جرينتش+03:00) أفريقيا/نيروبي", + "Africa/Ndjamena" => "(جرينتش+01:00) أفريقيا/نجامينا", + "Africa/Niamey" => "(جرينتش+01:00) أفريقيا/نيامي", + "Africa/Nouakchott" => "(جرينتش+00:00) أفريقيا/نواكشوط", + "Africa/Ouagadougou" => "(جرينتش+00:00) أفريقيا/واغادوغو", + "Africa/Porto-Novo" => "(جرينتش+01:00) أفريقيا/بورتو نوفو", + "Africa/Sao Tome" => "(جرينتش+00:00) أفريقيا/ساو تومي", + "Africa/Tripoli" => "(جرينتش+02:00) أفريقيا/طرابلس", + "Africa/Tunis" => "(جرينتش+01:00) أفريقيا/تونس", + "Africa/Windhoek" => "(جرينتش+02:00) أفريقيا/ويندهوك", + ], + "أمريكا" => [ + "America/Adak" => "(GMT-10:00) أمريكا/أداك", + "America/Anchorage" => "(GMT-09:00) أمريكا/أنكوراج", + "America/Anguilla" => "(GMT-04:00) أمريكا/أنغويلا", + "America/Antigua" => "(GMT-04:00) أمريكا/أنتيغوا", + "America/Araguaina" => "(GMT-03:00) أمريكا/أراجوينا", + "America/Argentina/Buenos Aires" => "(GMT-03:00) أمريكا/الأرجنتين/بوينس آيرس", + "America/Argentina/Catamarca" => "(GMT-03:00) أمريكا/الأرجنتين/كاتاماركا", + "America/Argentina/Cordoba" => "(GMT-03:00) أمريكا/الأرجنتين/كوردوبا", + "America/Argentina/Jujuy" => "(GMT-03:00) أمريكا/الأرجنتين/خوخوي", + "America/Argentina/La Rioja" => "(GMT-03:00) أمريكا/الأرجنتين/لا ريوخا", + "America/Argentina/Mendoza" => "(GMT-03:00) أمريكا/الأرجنتين/ميندوزا", + "America/Argentina/Rio Gallegos" => "(GMT-03:00) أمريكا/الأرجنتين/ريو غاليغوس", + "America/Argentina/Salta" => "(GMT-03:00) أمريكا/الأرجنتين/سالتا", + "America/Argentina/San Juan" => "(GMT-03:00) أمريكا/الأرجنتين/سان خوان", + "America/Argentina/San Luis" => "(GMT-03:00) أمريكا/الأرجنتين/سان لويس", + "America/Argentina/Tucuman" => "(GMT-03:00) أمريكا/الأرجنتين/توكومان", + "America/Argentina/Ushuaia" => "(GMT-03:00) أمريكا/الأرجنتين/أوشوايا", + "America/Aruba" => "(GMT-04:00) أمريكا/أروبا", + "America/Asuncion" => "(GMT-03:00) أمريكا/أسونسيون", + "America/Atikokan" => "(GMT-05:00) أمريكا/أتيكوكان", + "America/Bahia" => "(GMT-03:00) أمريكا/باهيا", + "America/Bahia Banderas" => "(GMT-06:00) أمريكا/باهيا بانديراس", + "America/Barbados" => "(GMT-04:00) أمريكا/بربادوس", + "America/Belem" => "(GMT-03:00) أمريكا/بيليم", + "America/Belize" => "(GMT-06:00) أمريكا/بليز", + "America/Blanc-Sablon" => "(GMT-04:00) أمريكا/بلانك-سابلون", + "America/Boa Vista" => "(GMT-04:00) أمريكا/بوا فيستا", + "America/Bogota" => "(GMT-05:00) أمريكا/بوغوتا", + "America/Boise" => "(GMT-07:00) أمريكا/بويزي", + "America/Cambridge Bay" => "(GMT-07:00) أمريكا/كامبريدج باي", + "America/Campo Grande" => "(GMT-04:00) أمريكا/كامبو جراندي", + "America/Cancun" => "(GMT-05:00) أمريكا/كانكون", + "America/Caracas" => "(GMT-04:00) أمريكا/كراكاس", + "America/Cayenne" => "(GMT-03:00) أمريكا/كايين", + "America/Cayman" => "(GMT-05:00) أمريكا/كايمان", + "America/Chicago" => "(GMT-06:00) أمريكا/شيكاغو", + "America/Chihuahua" => "(GMT-06:00) أمريكا/تشيواوا", + "America/Ciudad Juarez" => "(GMT-07:00) أمريكا/سيوداد خواريز", + "America/Costa Rica" => "(GMT-06:00) أمريكا/كوستاريكا", + "America/Creston" => "(GMT-07:00) أمريكا/كريستون", + "America/Cuiaba" => "(GMT-04:00) أمريكا/كويابا", + "America/Curacao" => "(GMT-04:00) أمريكا/كوراساو", + "America/Danmarkshavn" => "(GMT+00:00) أمريكا/دانمارك شافن", + "America/Dawson" => "(GMT-07:00) أمريكا/داوسون", + "America/Dawson Creek" => "(GMT-07:00) أمريكا/داوسون كريك", + "America/Denver" => "(GMT-07:00) أمريكا/دينفر", + "America/Detroit" => "(GMT-05:00) أمريكا/ديترويت", + "America/Dominica" => "(GMT-04:00) أمريكا/دومينيكا", + "America/Edmonton" => "(GMT-07:00) أمريكا/إدمونتون", + "America/Eirunepe" => "(GMT-05:00) أمريكا/إيرونيبي", + "America/El Salvador" => "(GMT-06:00) أمريكا/السلفادور", + "America/Fort Nelson" => "(GMT-07:00) أمريكا/فورت نيلسون", + "America/Fortaleza" => "(GMT-03:00) أمريكا/فورتاليزا", + "America/Glace Bay" => "(GMT-04:00) أمريكا/جلاس باي", + "America/Goose Bay" => "(GMT-04:00) أمريكا/غوس باي", + "America/Grand Turk" => "(GMT-05:00) أمريكا/غراند تورك", + "America/Grenada" => "(GMT-04:00) أمريكا/غرينادا", + "America/Guadeloupe" => "(GMT-04:00) أمريكا/غوادلوب", + "America/Guatemala" => "(GMT-06:00) أمريكا/غواتيمالا", + "America/Guayaquil" => "(GMT-05:00) أمريكا/غواياكويل", + "America/Guyana" => "(GMT-04:00) أمريكا/غيانا", + "America/Halifax" => "(GMT-04:00) أمريكا/هاليفاكس", + "America/Havana" => "(GMT-05:00) أمريكا/هافانا", + "America/Hermosillo" => "(GMT-07:00) أمريكا/هيرموسيلو", + "America/Indiana/Indianapolis" => "(GMT-05:00) أمريكا/إنديانابوليس", + "America/Indiana/Knox" => "(GMT-06:00) أمريكا/إنديانا/نوكس", + "America/Indiana/Marengo" => "(GMT-05:00) أمريكا/إنديانا/مارينغو", + "America/Indiana/Petersburg" => "(GMT-05:00) أمريكا/إنديانا/بيترسبورغ", + "America/Indiana/Tell City" => "(GMT-06:00) أمريكا/إنديانا/تل سيتي", + "America/Indiana/Vevay" => "(GMT-05:00) أمريكا/إنديانا/فيفاي", + "America/Indiana/Vincennes" => "(GMT-05:00) أمريكا/إنديانا/فنسينس", + "America/Indiana/Winamac" => "(GMT-05:00) أمريكا/إنديانا/ويناماك", + "America/Inuvik" => "(GMT-07:00) أمريكا/إنوفيك", + "America/Iqaluit" => "(GMT-05:00) أمريكا/إيكالويت", + "America/Jamaica" => "(GMT-05:00) أمريكا/جامايكا", + "America/Juneau" => "(GMT-09:00) أمريكا/جونو", + "America/Kentucky/Louisville" => "(GMT-05:00) أمريكا/كنتاكي/لويفيل", + "America/Kentucky/Monticello" => "(GMT-05:00) أمريكا/كنتاكي/مونتيسيلو", + "America/Kralendijk" => "(GMT-04:00) أمريكا/كرالينديك", + "America/La Paz" => "(GMT-04:00) أمريكا/لا باز", + "America/Lima" => "(GMT-05:00) أمريكا/ليما", + "America/Los Angeles" => "(GMT-08:00) أمريكا/لوس أنجلوس", + "America/Lower Princes" => "(GMT-04:00) أمريكا/لور برنسز", + "America/Maceio" => "(GMT-03:00) أمريكا/ماسيو", + "America/Managua" => "(GMT-06:00) أمريكا/ماناغوا", + "America/Manaus" => "(GMT-04:00) أمريكا/ماناوس", + "America/Marigot" => "(GMT-04:00) أمريكا/ماريجوت", + "America/Martinique" => "(GMT-04:00) أمريكا/مارتينيك", + "America/Matamoros" => "(GMT-06:00) أمريكا/ماتاموروس", + "America/Mazatlan" => "(GMT-07:00) أمريكا/مازاتلان", + "America/Menominee" => "(GMT-06:00) أمريكا/مينوميني", + "America/Merida" => "(GMT-06:00) أمريكا/ميريدا", + "America/Metlakatla" => "(GMT-09:00) أمريكا/ميتلاكاتلا", + "America/Mexico City" => "(GMT-06:00) أمريكا/مدينة المكسيك", + "America/Miquelon" => "(GMT-03:00) أمريكا/ميكيلون", + "America/Moncton" => "(GMT-04:00) أمريكا/مونكتون", + "America/Monterrey" => "(GMT-06:00) أمريكا/مونتيري", + "America/Montevideo" => "(GMT-03:00) أمريكا/مونتيفيديو", + "America/Montserrat" => "(GMT-04:00) أمريكا/مونتسيرات", + "America/Nassau" => "(GMT-05:00) أمريكا/ناسو", + "America/New York" => "(GMT-05:00) أمريكا/نيويورك", + "America/Nome" => "(GMT-09:00) أمريكا/نوم", + "America/Noronha" => "(GMT-02:00) أمريكا/نورونها", + "America/North Dakota/Beulah" => "(GMT-06:00) أمريكا/داكوتا الشمالية/بيولا", + "America/North Dakota/Center" => "(GMT-06:00) أمريكا/داكوتا الشمالية/سنتر", + "America/North Dakota/New Salem" => "(GMT-06:00) أمريكا/داكوتا الشمالية/نيو سالم", + "America/Nuuk" => "(GMT-02:00) أمريكا/نوك", + "America/Ojinaga" => "(GMT-06:00) أمريكا/أوجيناجا", + "America/Panama" => "(GMT-05:00) أمريكا/بنما", + "America/Paramaribo" => "(GMT-03:00) أمريكا/باراماريبو", + "America/Phoenix" => "(GMT-07:00) أمريكا/فينيكس", + "America/Port-au-Prince" => "(GMT-05:00) أمريكا/بورت أو برنس", + "America/Port of Spain" => "(GMT-04:00) أمريكا/بورت أوف سبين", + "America/Porto Velho" => "(GMT-04:00) أمريكا/بورتو فيلهو", + "America/Puerto Rico" => "(GMT-04:00) أمريكا/بورتو ريكو", + "America/Punta Arenas" => "(GMT-03:00) أمريكا/بونتا آريناس", + "America/Rankin Inlet" => "(GMT-06:00) أمريكا/رانكين إنليت", + "America/Recife" => "(GMT-03:00) أمريكا/ريسيف", + "America/Regina" => "(GMT-06:00) أمريكا/ريجينا", + "America/Resolute" => "(GMT-06:00) أمريكا/ريزوليوت", + "America/Rio Branco" => "(GMT-05:00) أمريكا/ريو برانكو", + "America/Santarem" => "(GMT-03:00) أمريكا/سانتاريم", + "America/Santiago" => "(GMT-03:00) أمريكا/سانتياغو", + "America/Santo Domingo" => "(GMT-04:00) أمريكا/سانتو دومينغو", + "America/Sao Paulo" => "(GMT-03:00) أمريكا/ساو باولو", + "America/Scoresbysund" => "(GMT-01:00) أمريكا/سكوريزبيسوند", + "America/Sitka" => "(GMT-09:00) أمريكا/سيتكا", + "America/St Barthelemy" => "(GMT-04:00) أمريكا/سانت بارثيليمي", + "America/St Johns" => "(GMT-03:00) أمريكا/سانت جونز", + "America/St Kitts" => "(GMT-04:00) أمريكا/سانت كيتس", + "America/St Lucia" => "(GMT-04:00) أمريكا/سانت لوسيا", + "America/St Thomas" => "(GMT-04:00) أمريكا/سانت توماس", + "America/St Vincent" => "(GMT-04:00) أمريكا/سانت فنسنت", + "America/Swift Current" => "(GMT-06:00) أمريكا/سويفت كارنت", + "America/Tegucigalpa" => "(GMT-06:00) أمريكا/تيغوسيغالبا", + "America/Thule" => "(GMT-04:00) أمريكا/تولي", + "America/Tijuana" => "(GMT-08:00) أمريكا/تيجوانا", + "America/Toronto" => "(GMT-05:00) أمريكا/تورونتو", + "America/Tortola" => "(GMT-04:00) أمريكا/تورتولا", + "America/Vancouver" => "(GMT-08:00) أمريكا/فانكوفر", + "America/Whitehorse" => "(GMT-07:00) أمريكا/وايت هورس", + "America/Winnipeg" => "(GMT-06:00) أمريكا/وينيبيج", + "America/Yakutat" => "(GMT-09:00) أمريكا/ياكوتات", + ], + "القارة القطبية" => [ + "Antarctica/Casey" => "(جرينتش+11:00) القارة القطبية/كيسي", + "Antarctica/Davis" => "(جرينتش+07:00) القارة القطبية/ديفيس", + "Antarctica/DumontDUrville" => "(جرينتش+10:00) القارة القطبية/ديورفيل", + "Antarctica/Macquarie" => "(جرينتش+11:00) القارة القطبية/ماكواري", + "Antarctica/Mawson" => "(جرينتش+05:00) القارة القطبية/ماوسون", + "Antarctica/McMurdo" => "(جرينتش+13:00) القارة القطبية/مكميردو", + "Antarctica/Palmer" => "(جرينتش-03:00) القارة القطبية/بالمر", + "Antarctica/Rothera" => "(جرينتش-03:00) القارة القطبية/روثيرا", + "Antarctica/Syowa" => "(جرينتش+03:00) القارة القطبية/سيوا", + "Antarctica/Troll" => "(جرينتش+00:00) القارة القطبية/ترول", + "Antarctica/Vostok" => "(جرينتش+06:00) القارة القطبية/فوستوك", + ], + "القطب الشمالي" => [ + "Arctic/Longyearbyen" => "(جرينتش+01:00) القطب الشمالي/لونغيربين", + ], + "آسيا" => [ + "Asia/Aden" => "(GMT+03:00) آسيا/عدن", + "Asia/Almaty" => "(GMT+06:00) آسيا/ألماتي", + "Asia/Amman" => "(GMT+03:00) آسيا/عمان", + "Asia/Anadyr" => "(GMT+12:00) آسيا/أنادير", + "Asia/Aqtau" => "(GMT+05:00) آسيا/أكتاو", + "Asia/Aqtobe" => "(GMT+05:00) آسيا/أقتوب", + "Asia/Ashgabat" => "(GMT+05:00) آسيا/عشق آباد", + "Asia/Atyrau" => "(GMT+05:00) آسيا/آتيراو", + "Asia/Baghdad" => "(GMT+03:00) آسيا/بغداد", + "Asia/Bahrain" => "(GMT+03:00) آسيا/البحرين", + "Asia/Baku" => "(GMT+04:00) آسيا/باكو", + "Asia/Bangkok" => "(GMT+07:00) آسيا/بانكوك", + "Asia/Barnaul" => "(GMT+07:00) آسيا/برناول", + "Asia/Beirut" => "(GMT+02:00) آسيا/بيروت", + "Asia/Bishkek" => "(GMT+06:00) آسيا/بيشكيك", + "Asia/Brunei" => "(GMT+08:00) آسيا/بروناي", + "Asia/Chita" => "(GMT+09:00) آسيا/تشيتا", + "Asia/Choibalsan" => "(GMT+08:00) آسيا/تشويبالسان", + "Asia/Colombo" => "(GMT+05:00) آسيا/كولومبو", + "Asia/Damascus" => "(GMT+03:00) آسيا/دمشق", + "Asia/Dhaka" => "(GMT+06:00) آسيا/دهاكا", + "Asia/Dili" => "(GMT+09:00) آسيا/ديلي", + "Asia/Dubai" => "(GMT+04:00) آسيا/دبي", + "Asia/Dushanbe" => "(GMT+05:00) آسيا/دوشانبي", + "Asia/Famagusta" => "(GMT+02:00) آسيا/فاماغوستا", + "Asia/Gaza" => "(GMT+02:00) آسيا/غزة", + "Asia/Hebron" => "(GMT+02:00) آسيا/الخليل", + "Asia/Ho Chi Minh" => "(GMT+07:00) آسيا/هو تشي منه", + "Asia/Hong Kong" => "(GMT+08:00) آسيا/هونغ كونغ", + "Asia/Hovd" => "(GMT+07:00) آسيا/هوفد", + "Asia/Irkutsk" => "(GMT+08:00) آسيا/إيركوتسك", + "Asia/Jakarta" => "(GMT+07:00) آسيا/جاكرتا", + "Asia/Jayapura" => "(GMT+09:00) آسيا/جايابورا", + "Asia/Jerusalem" => "(GMT+02:00) آسيا/القدس", + "Asia/Kabul" => "(GMT+04:00) آسيا/كابول", + "Asia/Kamchatka" => "(GMT+12:00) آسيا/كامتشاتكا", + "Asia/Karachi" => "(GMT+05:00) آسيا/كراتشي", + "Asia/Kathmandu" => "(GMT+05:00) آسيا/كاتماندو", + "Asia/Khandyga" => "(GMT+09:00) آسيا/خاندايغا", + "Asia/Kolkata" => "(GMT+05:00) آسيا/كولكاتا", + "Asia/Krasnoyarsk" => "(GMT+07:00) آسيا/كراسنويارسك", + "Asia/Kuala Lumpur" => "(GMT+08:00) آسيا/كوالالمبور", + "Asia/Kuching" => "(GMT+08:00) آسيا/كوتشينغ", + "Asia/Kuwait" => "(GMT+03:00) آسيا/الكويت", + "Asia/Macau" => "(GMT+08:00) آسيا/ماكاو", + "Asia/Magadan" => "(GMT+11:00) آسيا/ماغادان", + "Asia/Makassar" => "(GMT+08:00) آسيا/ماكاسار", + "Asia/Manila" => "(GMT+08:00) آسيا/مانيلا", + "Asia/Muscat" => "(GMT+04:00) آسيا/مسقط", + "Asia/Nicosia" => "(GMT+02:00) آسيا/نيقوسيا", + "Asia/Novokuznetsk" => "(GMT+07:00) آسيا/نوفوكوزنتسك", + "Asia/Novosibirsk" => "(GMT+07:00) آسيا/نوفوسيبيرسك", + "Asia/Omsk" => "(GMT+06:00) آسيا/أومسك", + "Asia/Oral" => "(GMT+05:00) آسيا/أورال", + "Asia/Phnom Penh" => "(GMT+07:00) آسيا/نوم بنه", + "Asia/Pontianak" => "(GMT+07:00) آسيا/بونتياناك", + "Asia/Pyongyang" => "(GMT+09:00) آسيا/بيونغ يانغ", + "Asia/Qatar" => "(GMT+03:00) آسيا/قطر", + "Asia/Qostanay" => "(GMT+06:00) آسيا/قوستناي", + "Asia/Qyzylorda" => "(GMT+05:00) آسيا/قيزيلوردا", + "Asia/Riyadh" => "(GMT+03:00) آسيا/الرياض", + "Asia/Sakhalin" => "(GMT+11:00) آسيا/سخالين", + "Asia/Samarkand" => "(GMT+05:00) آسيا/سمرقند", + "Asia/Seoul" => "(GMT+09:00) آسيا/سيول", + "Asia/Shanghai" => "(GMT+08:00) آسيا/شانغهاي", + "Asia/Singapore" => "(GMT+08:00) آسيا/سنغافورة", + "Asia/Srednekolymsk" => "(GMT+11:00) آسيا/سريدنكوليمسك", + "Asia/Taipei" => "(GMT+08:00) آسيا/تايبيه", + "Asia/Tashkent" => "(GMT+05:00) آسيا/طشقند", + "Asia/Tbilisi" => "(GMT+04:00) آسيا/تبليسي", + "Asia/Tehran" => "(GMT+03:00) آسيا/طهران", + "Asia/Thimphu" => "(GMT+06:00) آسيا/تيمفو", + "Asia/Tokyo" => "(GMT+09:00) آسيا/طوكيو", + "Asia/Tomsk" => "(GMT+07:00) آسيا/تومسك", + "Asia/Ulaanbaatar" => "(GMT+08:00) آسيا/أولان باتور", + "Asia/Urumqi" => "(GMT+06:00) آسيا/أورومتشي", + "Asia/Ust-Nera" => "(GMT+10:00) آسيا/أوست نيرا", + "Asia/Vientiane" => "(GMT+07:00) آسيا/فيانتيان", + "Asia/Vladivostok" => "(GMT+10:00) آسيا/فلاديفوستوك", + "Asia/Yakutsk" => "(GMT+09:00) آسيا/ياكوتسك", + "Asia/Yangon" => "(GMT+06:00) آسيا/يانغون", + "Asia/Yekaterinburg" => "(GMT+05:00) آسيا/يكاتيرينبورغ", + "Asia/Yerevan" => "(GMT+04:00) آسيا/يريفان", + ], + "الأطلسي" => [ + "Atlantic/Azores" => "(جرينتش-01:00) الأزور/الأطلسي", + "Atlantic/Bermuda" => "(جرينتش-04:00) برمودا/الأطلسي", + "Atlantic/Canary" => "(جرينتش+00:00) الكناري/الأطلسي", + "Atlantic/Cape Verde" => "(جرينتش-01:00) الرأس الأخضر/الأطلسي", + "Atlantic/Faroe" => "(جرينتش+00:00) جزر فارو/الأطلسي", + "Atlantic/Madeira" => "(جرينتش+00:00) ماديرا/الأطلسي", + "Atlantic/Reykjavik" => "(جرينتش+00:00) ريكيافيك/الأطلسي", + "Atlantic/South Georgia" => "(جرينتش-02:00) جنوب جورجيا/الأطلسي", + "Atlantic/St Helena" => "(جرينتش+00:00) سانت هيلينا/الأطلسي", + "Atlantic/Stanley" => "(جرينتش-03:00) ستانلي/الأطلسي", + ], + "أستراليا" => [ + "Australia/Adelaide" => "(جرينتش+10:00) أستراليا/أديليد", + "Australia/Brisbane" => "(جرينتش+10:00) أستراليا/بريسبين", + "Australia/Broken Hill" => "(جرينتش+10:00) أستراليا/بروكن هيل", + "Australia/Darwin" => "(جرينتش+09:00) أستراليا/داروين", + "Australia/Eucla" => "(جرينتش+08:00) أستراليا/يوكلا", + "Australia/Hobart" => "(جرينتش+11:00) أستراليا/هوبارت", + "Australia/Lindeman" => "(جرينتش+10:00) أستراليا/ليندمان", + "Australia/Lord Howe" => "(جرينتش+11:00) أستراليا/لورد هاو", + "Australia/Melbourne" => "(جرينتش+11:00) أستراليا/ملبورن", + "Australia/Perth" => "(جرينتش+08:00) أستراليا/برث", + "Australia/Sydney" => "(جرينتش+11:00) أستراليا/سيدني", + ], + "أوروبا" => [ + "Europe/Amsterdam" => "(جرينتش+01:00) أوروبا/أمستردام", + "Europe/Andorra" => "(جرينتش+01:00) أوروبا/أندورا", + "Europe/Astrakhan" => "(جرينتش+04:00) أوروبا/أستراخان", + "Europe/Athens" => "(جرينتش+02:00) أوروبا/أثينا", + "Europe/Belgrade" => "(جرينتش+01:00) أوروبا/بلغراد", + "Europe/Berlin" => "(جرينتش+01:00) أوروبا/برلين", + "Europe/Bratislava" => "(جرينتش+01:00) أوروبا/براتيسلافا", + "Europe/Brussels" => "(جرينتش+01:00) أوروبا/بروكسل", + "Europe/Bucharest" => "(جرينتش+02:00) أوروبا/بوخارست", + "Europe/Budapest" => "(جرينتش+01:00) أوروبا/بودابست", + "Europe/Busingen" => "(جرينتش+01:00) أوروبا/بوسينغن", + "Europe/Chisinau" => "(جرينتش+02:00) أوروبا/كيشيناو", + "Europe/Copenhagen" => "(جرينتش+01:00) أوروبا/كوبنهاغن", + "Europe/Dublin" => "(جرينتش+00:00) أوروبا/دبلن", + "Europe/Gibraltar" => "(جرينتش+01:00) أوروبا/جبل طارق", + "Europe/Guernsey" => "(جرينتش+00:00) أوروبا/غيرنزي", + "Europe/Helsinki" => "(جرينتش+02:00) أوروبا/هلسنكي", + "Europe/Isle of Man" => "(جرينتش+00:00) أوروبا/جزيرة مان", + "Europe/Istanbul" => "(جرينتش+03:00) أوروبا/اسطنبول", + "Europe/Jersey" => "(جرينتش+00:00) أوروبا/جيرزي", + "Europe/Kaliningrad" => "(جرينتش+02:00) أوروبا/كالينينغراد", + "Europe/Kirov" => "(جرينتش+03:00) أوروبا/كيروف", + "Europe/Kyiv" => "(جرينتش+02:00) أوروبا/كييف", + "Europe/Lisbon" => "(جرينتش+00:00) أوروبا/لشبونة", + "Europe/Ljubljana" => "(جرينتش+01:00) أوروبا/ليوبليانا", + "Europe/London" => "(جرينتش+00:00) أوروبا/لندن", + "Europe/Luxembourg" => "(جرينتش+01:00) أوروبا/لوكسمبورغ", + "Europe/Madrid" => "(جرينتش+01:00) أوروبا/مدريد", + "Europe/Malta" => "(جرينتش+01:00) أوروبا/مالطا", + "Europe/Mariehamn" => "(جرينتش+02:00) أوروبا/ماريهامن", + "Europe/Minsk" => "(جرينتش+03:00) أوروبا/مينسك", + "Europe/Monaco" => "(جرينتش+01:00) أوروبا/موناكو", + "Europe/Moscow" => "(جرينتش+03:00) أوروبا/موسكو", + "Europe/Oslo" => "(جرينتش+01:00) أوروبا/أوسلو", + "Europe/Paris" => "(جرينتش+01:00) أوروبا/باريس", + "Europe/Podgorica" => "(جرينتش+01:00) أوروبا/بودغوريتشا", + "Europe/Prague" => "(جرينتش+01:00) أوروبا/براغ", + "Europe/Riga" => "(جرينتش+02:00) أوروبا/ريغا", + "Europe/Rome" => "(جرينتش+01:00) أوروبا/روما", + "Europe/Samara" => "(جرينتش+04:00) أوروبا/سمارا", + "Europe/San Marino" => "(جرينتش+01:00) أوروبا/سان مارينو", + "Europe/Sarajevo" => "(جرينتش+01:00) أوروبا/سراييفو", + "Europe/Saratov" => "(جرينتش+04:00) أوروبا/ساراتوف", + "Europe/Simferopol" => "(جرينتش+03:00) أوروبا/سيمفيروبول", + "Europe/Skopje" => "(جرينتش+01:00) أوروبا/سكوبيه", + "Europe/Sofia" => "(جرينتش+02:00) أوروبا/صوفيا", + "Europe/Stockholm" => "(جرينتش+01:00) أوروبا/ستوكهولم", + "Europe/Tallinn" => "(جرينتش+02:00) أوروبا/تالين", + "Europe/Tirane" => "(جرينتش+01:00) أوروبا/تيرانا", + "Europe/Ulyanovsk" => "(جرينتش+04:00) أوروبا/أوليانوفسك", + "Europe/Vaduz" => "(جرينتش+01:00) أوروبا/فادوز", + "Europe/Vatican" => "(جرينتش+01:00) أوروبا/الفاتيكان", + "Europe/Vienna" => "(جرينتش+01:00) أوروبا/فيينا", + "Europe/Vilnius" => "(جرينتش+02:00) أوروبا/فيلنيوس", + "Europe/Volgograd" => "(جرينتش+03:00) أوروبا/فولغوغراد", + "Europe/Warsaw" => "(جرينتش+01:00) أوروبا/وارسو", + "Europe/Zagreb" => "(جرينتش+01:00) أوروبا/زغرب", + "Europe/Zurich" => "(جرينتش+01:00) أوروبا/زيورخ", + ], + "الهند" => [ + "Indian/Antananarivo" => "(GMT+03:00) الهند/أنتاناناريفو", + "Indian/Chagos" => "(GMT+06:00) الهند/تشاغوس", + "Indian/Christmas" => "(GMT+07:00) الهند/كريسماس", + "Indian/Cocos" => "(GMT+06:00) الهند/كوكوس", + "Indian/Comoro" => "(GMT+03:00) الهند/جزر القمر", + "Indian/Kerguelen" => "(GMT+05:00) الهند/كيرغويلين", + "Indian/Mahe" => "(GMT+04:00) الهند/ماهي", + "Indian/Maldives" => "(GMT+05:00) الهند/المالديف", + "Indian/Mauritius" => "(GMT+04:00) الهند/موريشيوس", + "Indian/Mayotte" => "(GMT+03:00) الهند/مايوت", + "Indian/Reunion" => "(GMT+04:00) الهند/ريونيون", + ], + "المحيط الهادئ" => [ + "Pacific/Apia" => "(GMT+13:00) المحيط الهادئ/آبيا", + "Pacific/Auckland" => "(GMT+13:00) المحيط الهادئ/أوكلاند", + "Pacific/Bougainville" => "(GMT+11:00) المحيط الهادئ/بوغانفيل", + "Pacific/Chatham" => "(GMT+13:00) المحيط الهادئ/تشاثام", + "Pacific/Chuuk" => "(GMT+10:00) المحيط الهادئ/تشوك", + "Pacific/Easter" => "(GMT-05:00) المحيط الهادئ/جزيرة إيستر", + "Pacific/Efate" => "(GMT+11:00) المحيط الهادئ/إفاتي", + "Pacific/Fakaofo" => "(GMT+13:00) المحيط الهادئ/فاكاوفو", + "Pacific/Fiji" => "(GMT+12:00) المحيط الهادئ/فيجي", + "Pacific/Funafuti" => "(GMT+12:00) المحيط الهادئ/فونافوتي", + "Pacific/Galapagos" => "(GMT-06:00) المحيط الهادئ/جالاباغوس", + "Pacific/Gambier" => "(GMT-09:00) المحيط الهادئ/جامبيير", + "Pacific/Guadalcanal" => "(GMT+11:00) المحيط الهادئ/غوادالكانال", + "Pacific/Guam" => "(GMT+10:00) المحيط الهادئ/غوام", + "Pacific/Honolulu" => "(GMT-10:00) المحيط الهادئ/هونولولو", + "Pacific/Kanton" => "(GMT+13:00) المحيط الهادئ/كانتون", + "Pacific/Kiritimati" => "(GMT+14:00) المحيط الهادئ/كيريتيماتي", + "Pacific/Kosrae" => "(GMT+11:00) المحيط الهادئ/كوسراي", + "Pacific/Kwajalein" => "(GMT+12:00) المحيط الهادئ/كواجالين", + "Pacific/Majuro" => "(GMT+12:00) المحيط الهادئ/ماجورو", + "Pacific/Marquesas" => "(GMT-09:00) المحيط الهادئ/ماركيز", + "Pacific/Midway" => "(GMT-11:00) المحيط الهادئ/ميدواي", + "Pacific/Nauru" => "(GMT+12:00) المحيط الهادئ/ناورو", + "Pacific/Niue" => "(GMT-11:00) المحيط الهادئ/نيوي", + "Pacific/Norfolk" => "(GMT+12:00) المحيط الهادئ/نورفولك", + "Pacific/Noumea" => "(GMT+11:00) المحيط الهادئ/نوميا", + "Pacific/Pago Pago" => "(GMT-11:00) المحيط الهادئ/باغو باغو", + "Pacific/Palau" => "(GMT+09:00) المحيط الهادئ/بالاو", + "Pacific/Pitcairn" => "(GMT-08:00) المحيط الهادئ/بيتكيرن", + "Pacific/Pohnpei" => "(GMT+11:00) المحيط الهادئ/بونابي", + "Pacific/Port Moresby" => "(GMT+10:00) المحيط الهادئ/بورت موريسبي", + "Pacific/Rarotonga" => "(GMT-10:00) المحيط الهادئ/راروتونغا", + "Pacific/Saipan" => "(GMT+10:00) المحيط الهادئ/سايبان", + "Pacific/Tahiti" => "(GMT-10:00) المحيط الهادئ/تاهيتي", + "Pacific/Tarawa" => "(GMT+12:00) المحيط الهادئ/تاراوا", + "Pacific/Tongatapu" => "(GMT+13:00) المحيط الهادئ/تونغاتابو", + "Pacific/Wake" => "(GMT+12:00) المحيط الهادئ/ويك", + "Pacific/Wallis" => "(GMT+12:00) المحيط الهادئ/واليس", + ], + "توقيت عالمي" => [ + "UTC" => "(جرينتش+00:00) توقيت عالمي UTC", + ] +]; diff --git a/resources/lang/en/label.php b/resources/lang/en/label.php new file mode 100644 index 0000000..4e7505a --- /dev/null +++ b/resources/lang/en/label.php @@ -0,0 +1,15 @@ + "Timezone" +]; diff --git a/resources/lang/en/timezone.php b/resources/lang/en/timezone.php new file mode 100644 index 0000000..6f48a34 --- /dev/null +++ b/resources/lang/en/timezone.php @@ -0,0 +1,455 @@ + [ + "Africa/Abidjan" => "(GMT+00:00) Africa/Abidjan", + "Africa/Accra" => "(GMT+00:00) Africa/Accra", + "Africa/Addis Ababa" => "(GMT+03:00) Africa/Addis Ababa", + "Africa/Algiers" => "(GMT+01:00) Africa/Algiers", + "Africa/Asmara" => "(GMT+03:00) Africa/Asmara", + "Africa/Bamako" => "(GMT+00:00) Africa/Bamako", + "Africa/Bangui" => "(GMT+01:00) Africa/Bangui", + "Africa/Banjul" => "(GMT+00:00) Africa/Banjul", + "Africa/Bissau" => "(GMT+00:00) Africa/Bissau", + "Africa/Blantyre" => "(GMT+02:00) Africa/Blantyre", + "Africa/Brazzaville" => "(GMT+01:00) Africa/Brazzaville", + "Africa/Bujumbura" => "(GMT+02:00) Africa/Bujumbura", + "Africa/Cairo" => "(GMT+02:00) Africa/Cairo", + "Africa/Casablanca" => "(GMT+01:00) Africa/Casablanca", + "Africa/Ceuta" => "(GMT+01:00) Africa/Ceuta", + "Africa/Conakry" => "(GMT+00:00) Africa/Conakry", + "Africa/Dakar" => "(GMT+00:00) Africa/Dakar", + "Africa/Dar es Salaam" => "(GMT+03:00) Africa/Dar es Salaam", + "Africa/Djibouti" => "(GMT+03:00) Africa/Djibouti", + "Africa/Douala" => "(GMT+01:00) Africa/Douala", + "Africa/El Aaiun" => "(GMT+01:00) Africa/El Aaiun", + "Africa/Freetown" => "(GMT+00:00) Africa/Freetown", + "Africa/Gaborone" => "(GMT+02:00) Africa/Gaborone", + "Africa/Harare" => "(GMT+02:00) Africa/Harare", + "Africa/Johannesburg" => "(GMT+02:00) Africa/Johannesburg", + "Africa/Juba" => "(GMT+02:00) Africa/Juba", + "Africa/Kampala" => "(GMT+03:00) Africa/Kampala", + "Africa/Khartoum" => "(GMT+02:00) Africa/Khartoum", + "Africa/Kigali" => "(GMT+02:00) Africa/Kigali", + "Africa/Kinshasa" => "(GMT+01:00) Africa/Kinshasa", + "Africa/Lagos" => "(GMT+01:00) Africa/Lagos", + "Africa/Libreville" => "(GMT+01:00) Africa/Libreville", + "Africa/Lome" => "(GMT+00:00) Africa/Lome", + "Africa/Luanda" => "(GMT+01:00) Africa/Luanda", + "Africa/Lubumbashi" => "(GMT+02:00) Africa/Lubumbashi", + "Africa/Lusaka" => "(GMT+02:00) Africa/Lusaka", + "Africa/Malabo" => "(GMT+01:00) Africa/Malabo", + "Africa/Maputo" => "(GMT+02:00) Africa/Maputo", + "Africa/Maseru" => "(GMT+02:00) Africa/Maseru", + "Africa/Mbabane" => "(GMT+02:00) Africa/Mbabane", + "Africa/Mogadishu" => "(GMT+03:00) Africa/Mogadishu", + "Africa/Monrovia" => "(GMT+00:00) Africa/Monrovia", + "Africa/Nairobi" => "(GMT+03:00) Africa/Nairobi", + "Africa/Ndjamena" => "(GMT+01:00) Africa/Ndjamena", + "Africa/Niamey" => "(GMT+01:00) Africa/Niamey", + "Africa/Nouakchott" => "(GMT+00:00) Africa/Nouakchott", + "Africa/Ouagadougou" => "(GMT+00:00) Africa/Ouagadougou", + "Africa/Porto-Novo" => "(GMT+01:00) Africa/Porto-Novo", + "Africa/Sao Tome" => "(GMT+00:00) Africa/Sao Tome", + "Africa/Tripoli" => "(GMT+02:00) Africa/Tripoli", + "Africa/Tunis" => "(GMT+01:00) Africa/Tunis", + "Africa/Windhoek" => "(GMT+02:00) Africa/Windhoek", + ], + "America" => [ + "America/Adak" => "(GMT-10:00) America/Adak", + "America/Anchorage" => "(GMT-09:00) America/Anchorage", + "America/Anguilla" => "(GMT-04:00) America/Anguilla", + "America/Antigua" => "(GMT-04:00) America/Antigua", + "America/Araguaina" => "(GMT-03:00) America/Araguaina", + "America/Argentina/Buenos Aires" => "(GMT-03:00) America/Argentina/Buenos Aires", + "America/Argentina/Catamarca" => "(GMT-03:00) America/Argentina/Catamarca", + "America/Argentina/Cordoba" => "(GMT-03:00) America/Argentina/Cordoba", + "America/Argentina/Jujuy" => "(GMT-03:00) America/Argentina/Jujuy", + "America/Argentina/La Rioja" => "(GMT-03:00) America/Argentina/La Rioja", + "America/Argentina/Mendoza" => "(GMT-03:00) America/Argentina/Mendoza", + "America/Argentina/Rio Gallegos" => "(GMT-03:00) America/Argentina/Rio Gallegos", + "America/Argentina/Salta" => "(GMT-03:00) America/Argentina/Salta", + "America/Argentina/San Juan" => "(GMT-03:00) America/Argentina/San Juan", + "America/Argentina/San Luis" => "(GMT-03:00) America/Argentina/San Luis", + "America/Argentina/Tucuman" => "(GMT-03:00) America/Argentina/Tucuman", + "America/Argentina/Ushuaia" => "(GMT-03:00) America/Argentina/Ushuaia", + "America/Aruba" => "(GMT-04:00) America/Aruba", + "America/Asuncion" => "(GMT-03:00) America/Asuncion", + "America/Atikokan" => "(GMT-05:00) America/Atikokan", + "America/Bahia" => "(GMT-03:00) America/Bahia", + "America/Bahia Banderas" => "(GMT-06:00) America/Bahia Banderas", + "America/Barbados" => "(GMT-04:00) America/Barbados", + "America/Belem" => "(GMT-03:00) America/Belem", + "America/Belize" => "(GMT-06:00) America/Belize", + "America/Blanc-Sablon" => "(GMT-04:00) America/Blanc-Sablon", + "America/Boa Vista" => "(GMT-04:00) America/Boa Vista", + "America/Bogota" => "(GMT-05:00) America/Bogota", + "America/Boise" => "(GMT-07:00) America/Boise", + "America/Cambridge Bay" => "(GMT-07:00) America/Cambridge Bay", + "America/Campo Grande" => "(GMT-04:00) America/Campo Grande", + "America/Cancun" => "(GMT-05:00) America/Cancun", + "America/Caracas" => "(GMT-04:00) America/Caracas", + "America/Cayenne" => "(GMT-03:00) America/Cayenne", + "America/Cayman" => "(GMT-05:00) America/Cayman", + "America/Chicago" => "(GMT-06:00) America/Chicago", + "America/Chihuahua" => "(GMT-06:00) America/Chihuahua", + "America/Ciudad Juarez" => "(GMT-07:00) America/Ciudad Juarez", + "America/Costa Rica" => "(GMT-06:00) America/Costa Rica", + "America/Creston" => "(GMT-07:00) America/Creston", + "America/Cuiaba" => "(GMT-04:00) America/Cuiaba", + "America/Curacao" => "(GMT-04:00) America/Curacao", + "America/Danmarkshavn" => "(GMT+00:00) America/Danmarkshavn", + "America/Dawson" => "(GMT-07:00) America/Dawson", + "America/Dawson Creek" => "(GMT-07:00) America/Dawson Creek", + "America/Denver" => "(GMT-07:00) America/Denver", + "America/Detroit" => "(GMT-05:00) America/Detroit", + "America/Dominica" => "(GMT-04:00) America/Dominica", + "America/Edmonton" => "(GMT-07:00) America/Edmonton", + "America/Eirunepe" => "(GMT-05:00) America/Eirunepe", + "America/El Salvador" => "(GMT-06:00) America/El Salvador", + "America/Fort Nelson" => "(GMT-07:00) America/Fort Nelson", + "America/Fortaleza" => "(GMT-03:00) America/Fortaleza", + "America/Glace Bay" => "(GMT-04:00) America/Glace Bay", + "America/Goose Bay" => "(GMT-04:00) America/Goose Bay", + "America/Grand Turk" => "(GMT-05:00) America/Grand Turk", + "America/Grenada" => "(GMT-04:00) America/Grenada", + "America/Guadeloupe" => "(GMT-04:00) America/Guadeloupe", + "America/Guatemala" => "(GMT-06:00) America/Guatemala", + "America/Guayaquil" => "(GMT-05:00) America/Guayaquil", + "America/Guyana" => "(GMT-04:00) America/Guyana", + "America/Halifax" => "(GMT-04:00) America/Halifax", + "America/Havana" => "(GMT-05:00) America/Havana", + "America/Hermosillo" => "(GMT-07:00) America/Hermosillo", + "America/Indiana/Indianapolis" => "(GMT-05:00) America/Indiana/Indianapolis", + "America/Indiana/Knox" => "(GMT-06:00) America/Indiana/Knox", + "America/Indiana/Marengo" => "(GMT-05:00) America/Indiana/Marengo", + "America/Indiana/Petersburg" => "(GMT-05:00) America/Indiana/Petersburg", + "America/Indiana/Tell City" => "(GMT-06:00) America/Indiana/Tell City", + "America/Indiana/Vevay" => "(GMT-05:00) America/Indiana/Vevay", + "America/Indiana/Vincennes" => "(GMT-05:00) America/Indiana/Vincennes", + "America/Indiana/Winamac" => "(GMT-05:00) America/Indiana/Winamac", + "America/Inuvik" => "(GMT-07:00) America/Inuvik", + "America/Iqaluit" => "(GMT-05:00) America/Iqaluit", + "America/Jamaica" => "(GMT-05:00) America/Jamaica", + "America/Juneau" => "(GMT-09:00) America/Juneau", + "America/Kentucky/Louisville" => "(GMT-05:00) America/Kentucky/Louisville", + "America/Kentucky/Monticello" => "(GMT-05:00) America/Kentucky/Monticello", + "America/Kralendijk" => "(GMT-04:00) America/Kralendijk", + "America/La Paz" => "(GMT-04:00) America/La Paz", + "America/Lima" => "(GMT-05:00) America/Lima", + "America/Los Angeles" => "(GMT-08:00) America/Los Angeles", + "America/Lower Princes" => "(GMT-04:00) America/Lower Princes", + "America/Maceio" => "(GMT-03:00) America/Maceio", + "America/Managua" => "(GMT-06:00) America/Managua", + "America/Manaus" => "(GMT-04:00) America/Manaus", + "America/Marigot" => "(GMT-04:00) America/Marigot", + "America/Martinique" => "(GMT-04:00) America/Martinique", + "America/Matamoros" => "(GMT-06:00) America/Matamoros", + "America/Mazatlan" => "(GMT-07:00) America/Mazatlan", + "America/Menominee" => "(GMT-06:00) America/Menominee", + "America/Merida" => "(GMT-06:00) America/Merida", + "America/Metlakatla" => "(GMT-09:00) America/Metlakatla", + "America/Mexico City" => "(GMT-06:00) America/Mexico City", + "America/Miquelon" => "(GMT-03:00) America/Miquelon", + "America/Moncton" => "(GMT-04:00) America/Moncton", + "America/Monterrey" => "(GMT-06:00) America/Monterrey", + "America/Montevideo" => "(GMT-03:00) America/Montevideo", + "America/Montserrat" => "(GMT-04:00) America/Montserrat", + "America/Nassau" => "(GMT-05:00) America/Nassau", + "America/New York" => "(GMT-05:00) America/New York", + "America/Nome" => "(GMT-09:00) America/Nome", + "America/Noronha" => "(GMT-02:00) America/Noronha", + "America/North Dakota/Beulah" => "(GMT-06:00) America/North Dakota/Beulah", + "America/North Dakota/Center" => "(GMT-06:00) America/North Dakota/Center", + "America/North Dakota/New Salem" => "(GMT-06:00) America/North Dakota/New Salem", + "America/Nuuk" => "(GMT-02:00) America/Nuuk", + "America/Ojinaga" => "(GMT-06:00) America/Ojinaga", + "America/Panama" => "(GMT-05:00) America/Panama", + "America/Paramaribo" => "(GMT-03:00) America/Paramaribo", + "America/Phoenix" => "(GMT-07:00) America/Phoenix", + "America/Port-au-Prince" => "(GMT-05:00) America/Port-au-Prince", + "America/Port of Spain" => "(GMT-04:00) America/Port of Spain", + "America/Porto Velho" => "(GMT-04:00) America/Porto Velho", + "America/Puerto Rico" => "(GMT-04:00) America/Puerto Rico", + "America/Punta Arenas" => "(GMT-03:00) America/Punta Arenas", + "America/Rankin Inlet" => "(GMT-06:00) America/Rankin Inlet", + "America/Recife" => "(GMT-03:00) America/Recife", + "America/Regina" => "(GMT-06:00) America/Regina", + "America/Resolute" => "(GMT-06:00) America/Resolute", + "America/Rio Branco" => "(GMT-05:00) America/Rio Branco", + "America/Santarem" => "(GMT-03:00) America/Santarem", + "America/Santiago" => "(GMT-03:00) America/Santiago", + "America/Santo Domingo" => "(GMT-04:00) America/Santo Domingo", + "America/Sao Paulo" => "(GMT-03:00) America/Sao Paulo", + "America/Scoresbysund" => "(GMT-01:00) America/Scoresbysund", + "America/Sitka" => "(GMT-09:00) America/Sitka", + "America/St Barthelemy" => "(GMT-04:00) America/St Barthelemy", + "America/St Johns" => "(GMT-03:00) America/St Johns", + "America/St Kitts" => "(GMT-04:00) America/St Kitts", + "America/St Lucia" => "(GMT-04:00) America/St Lucia", + "America/St Thomas" => "(GMT-04:00) America/St Thomas", + "America/St Vincent" => "(GMT-04:00) America/St Vincent", + "America/Swift Current" => "(GMT-06:00) America/Swift Current", + "America/Tegucigalpa" => "(GMT-06:00) America/Tegucigalpa", + "America/Thule" => "(GMT-04:00) America/Thule", + "America/Tijuana" => "(GMT-08:00) America/Tijuana", + "America/Toronto" => "(GMT-05:00) America/Toronto", + "America/Tortola" => "(GMT-04:00) America/Tortola", + "America/Vancouver" => "(GMT-08:00) America/Vancouver", + "America/Whitehorse" => "(GMT-07:00) America/Whitehorse", + "America/Winnipeg" => "(GMT-06:00) America/Winnipeg", + "America/Yakutat" => "(GMT-09:00) America/Yakutat", + ], + "Antarctica" => [ + "Antarctica/Casey" => "(GMT+11:00) Antarctica/Casey", + "Antarctica/Davis" => "(GMT+07:00) Antarctica/Davis", + "Antarctica/DumontDUrville" => "(GMT+10:00) Antarctica/DumontDUrville", + "Antarctica/Macquarie" => "(GMT+11:00) Antarctica/Macquarie", + "Antarctica/Mawson" => "(GMT+05:00) Antarctica/Mawson", + "Antarctica/McMurdo" => "(GMT+13:00) Antarctica/McMurdo", + "Antarctica/Palmer" => "(GMT-03:00) Antarctica/Palmer", + "Antarctica/Rothera" => "(GMT-03:00) Antarctica/Rothera", + "Antarctica/Syowa" => "(GMT+03:00) Antarctica/Syowa", + "Antarctica/Troll" => "(GMT+00:00) Antarctica/Troll", + "Antarctica/Vostok" => "(GMT+06:00) Antarctica/Vostok", + ], + "Arctic" => [ + "Arctic/Longyearbyen" => "(GMT+01:00) Arctic/Longyearbyen", + ], + "Asia" => [ + "Asia/Aden" => "(GMT+03:00) Asia/Aden", + "Asia/Almaty" => "(GMT+06:00) Asia/Almaty", + "Asia/Amman" => "(GMT+03:00) Asia/Amman", + "Asia/Anadyr" => "(GMT+12:00) Asia/Anadyr", + "Asia/Aqtau" => "(GMT+05:00) Asia/Aqtau", + "Asia/Aqtobe" => "(GMT+05:00) Asia/Aqtobe", + "Asia/Ashgabat" => "(GMT+05:00) Asia/Ashgabat", + "Asia/Atyrau" => "(GMT+05:00) Asia/Atyrau", + "Asia/Baghdad" => "(GMT+03:00) Asia/Baghdad", + "Asia/Bahrain" => "(GMT+03:00) Asia/Bahrain", + "Asia/Baku" => "(GMT+04:00) Asia/Baku", + "Asia/Bangkok" => "(GMT+07:00) Asia/Bangkok", + "Asia/Barnaul" => "(GMT+07:00) Asia/Barnaul", + "Asia/Beirut" => "(GMT+02:00) Asia/Beirut", + "Asia/Bishkek" => "(GMT+06:00) Asia/Bishkek", + "Asia/Brunei" => "(GMT+08:00) Asia/Brunei", + "Asia/Chita" => "(GMT+09:00) Asia/Chita", + "Asia/Choibalsan" => "(GMT+08:00) Asia/Choibalsan", + "Asia/Colombo" => "(GMT+05:00) Asia/Colombo", + "Asia/Damascus" => "(GMT+03:00) Asia/Damascus", + "Asia/Dhaka" => "(GMT+06:00) Asia/Dhaka", + "Asia/Dili" => "(GMT+09:00) Asia/Dili", + "Asia/Dubai" => "(GMT+04:00) Asia/Dubai", + "Asia/Dushanbe" => "(GMT+05:00) Asia/Dushanbe", + "Asia/Famagusta" => "(GMT+02:00) Asia/Famagusta", + "Asia/Gaza" => "(GMT+02:00) Asia/Gaza", + "Asia/Hebron" => "(GMT+02:00) Asia/Hebron", + "Asia/Ho Chi Minh" => "(GMT+07:00) Asia/Ho Chi Minh", + "Asia/Hong Kong" => "(GMT+08:00) Asia/Hong Kong", + "Asia/Hovd" => "(GMT+07:00) Asia/Hovd", + "Asia/Irkutsk" => "(GMT+08:00) Asia/Irkutsk", + "Asia/Jakarta" => "(GMT+07:00) Asia/Jakarta", + "Asia/Jayapura" => "(GMT+09:00) Asia/Jayapura", + "Asia/Jerusalem" => "(GMT+02:00) Asia/Jerusalem", + "Asia/Kabul" => "(GMT+04:00) Asia/Kabul", + "Asia/Kamchatka" => "(GMT+12:00) Asia/Kamchatka", + "Asia/Karachi" => "(GMT+05:00) Asia/Karachi", + "Asia/Kathmandu" => "(GMT+05:00) Asia/Kathmandu", + "Asia/Khandyga" => "(GMT+09:00) Asia/Khandyga", + "Asia/Kolkata" => "(GMT+05:00) Asia/Kolkata", + "Asia/Krasnoyarsk" => "(GMT+07:00) Asia/Krasnoyarsk", + "Asia/Kuala Lumpur" => "(GMT+08:00) Asia/Kuala Lumpur", + "Asia/Kuching" => "(GMT+08:00) Asia/Kuching", + "Asia/Kuwait" => "(GMT+03:00) Asia/Kuwait", + "Asia/Macau" => "(GMT+08:00) Asia/Macau", + "Asia/Magadan" => "(GMT+11:00) Asia/Magadan", + "Asia/Makassar" => "(GMT+08:00) Asia/Makassar", + "Asia/Manila" => "(GMT+08:00) Asia/Manila", + "Asia/Muscat" => "(GMT+04:00) Asia/Muscat", + "Asia/Nicosia" => "(GMT+02:00) Asia/Nicosia", + "Asia/Novokuznetsk" => "(GMT+07:00) Asia/Novokuznetsk", + "Asia/Novosibirsk" => "(GMT+07:00) Asia/Novosibirsk", + "Asia/Omsk" => "(GMT+06:00) Asia/Omsk", + "Asia/Oral" => "(GMT+05:00) Asia/Oral", + "Asia/Phnom Penh" => "(GMT+07:00) Asia/Phnom Penh", + "Asia/Pontianak" => "(GMT+07:00) Asia/Pontianak", + "Asia/Pyongyang" => "(GMT+09:00) Asia/Pyongyang", + "Asia/Qatar" => "(GMT+03:00) Asia/Qatar", + "Asia/Qostanay" => "(GMT+06:00) Asia/Qostanay", + "Asia/Qyzylorda" => "(GMT+05:00) Asia/Qyzylorda", + "Asia/Riyadh" => "(GMT+03:00) Asia/Riyadh", + "Asia/Sakhalin" => "(GMT+11:00) Asia/Sakhalin", + "Asia/Samarkand" => "(GMT+05:00) Asia/Samarkand", + "Asia/Seoul" => "(GMT+09:00) Asia/Seoul", + "Asia/Shanghai" => "(GMT+08:00) Asia/Shanghai", + "Asia/Singapore" => "(GMT+08:00) Asia/Singapore", + "Asia/Srednekolymsk" => "(GMT+11:00) Asia/Srednekolymsk", + "Asia/Taipei" => "(GMT+08:00) Asia/Taipei", + "Asia/Tashkent" => "(GMT+05:00) Asia/Tashkent", + "Asia/Tbilisi" => "(GMT+04:00) Asia/Tbilisi", + "Asia/Tehran" => "(GMT+03:00) Asia/Tehran", + "Asia/Thimphu" => "(GMT+06:00) Asia/Thimphu", + "Asia/Tokyo" => "(GMT+09:00) Asia/Tokyo", + "Asia/Tomsk" => "(GMT+07:00) Asia/Tomsk", + "Asia/Ulaanbaatar" => "(GMT+08:00) Asia/Ulaanbaatar", + "Asia/Urumqi" => "(GMT+06:00) Asia/Urumqi", + "Asia/Ust-Nera" => "(GMT+10:00) Asia/Ust-Nera", + "Asia/Vientiane" => "(GMT+07:00) Asia/Vientiane", + "Asia/Vladivostok" => "(GMT+10:00) Asia/Vladivostok", + "Asia/Yakutsk" => "(GMT+09:00) Asia/Yakutsk", + "Asia/Yangon" => "(GMT+06:00) Asia/Yangon", + "Asia/Yekaterinburg" => "(GMT+05:00) Asia/Yekaterinburg", + "Asia/Yerevan" => "(GMT+04:00) Asia/Yerevan", + ], + "Atlantic" => [ + "Atlantic/Azores" => "(GMT-01:00) Atlantic/Azores", + "Atlantic/Bermuda" => "(GMT-04:00) Atlantic/Bermuda", + "Atlantic/Canary" => "(GMT+00:00) Atlantic/Canary", + "Atlantic/Cape Verde" => "(GMT-01:00) Atlantic/Cape Verde", + "Atlantic/Faroe" => "(GMT+00:00) Atlantic/Faroe", + "Atlantic/Madeira" => "(GMT+00:00) Atlantic/Madeira", + "Atlantic/Reykjavik" => "(GMT+00:00) Atlantic/Reykjavik", + "Atlantic/South Georgia" => "(GMT-02:00) Atlantic/South Georgia", + "Atlantic/St Helena" => "(GMT+00:00) Atlantic/St Helena", + "Atlantic/Stanley" => "(GMT-03:00) Atlantic/Stanley", + ], + "Australia" => [ + "Australia/Adelaide" => "(GMT+10:00) Australia/Adelaide", + "Australia/Brisbane" => "(GMT+10:00) Australia/Brisbane", + "Australia/Broken Hill" => "(GMT+10:00) Australia/Broken Hill", + "Australia/Darwin" => "(GMT+09:00) Australia/Darwin", + "Australia/Eucla" => "(GMT+08:00) Australia/Eucla", + "Australia/Hobart" => "(GMT+11:00) Australia/Hobart", + "Australia/Lindeman" => "(GMT+10:00) Australia/Lindeman", + "Australia/Lord Howe" => "(GMT+11:00) Australia/Lord Howe", + "Australia/Melbourne" => "(GMT+11:00) Australia/Melbourne", + "Australia/Perth" => "(GMT+08:00) Australia/Perth", + "Australia/Sydney" => "(GMT+11:00) Australia/Sydney", + ], + "Europe" => [ + "Europe/Amsterdam" => "(GMT+01:00) Europe/Amsterdam", + "Europe/Andorra" => "(GMT+01:00) Europe/Andorra", + "Europe/Astrakhan" => "(GMT+04:00) Europe/Astrakhan", + "Europe/Athens" => "(GMT+02:00) Europe/Athens", + "Europe/Belgrade" => "(GMT+01:00) Europe/Belgrade", + "Europe/Berlin" => "(GMT+01:00) Europe/Berlin", + "Europe/Bratislava" => "(GMT+01:00) Europe/Bratislava", + "Europe/Brussels" => "(GMT+01:00) Europe/Brussels", + "Europe/Bucharest" => "(GMT+02:00) Europe/Bucharest", + "Europe/Budapest" => "(GMT+01:00) Europe/Budapest", + "Europe/Busingen" => "(GMT+01:00) Europe/Busingen", + "Europe/Chisinau" => "(GMT+02:00) Europe/Chisinau", + "Europe/Copenhagen" => "(GMT+01:00) Europe/Copenhagen", + "Europe/Dublin" => "(GMT+00:00) Europe/Dublin", + "Europe/Gibraltar" => "(GMT+01:00) Europe/Gibraltar", + "Europe/Guernsey" => "(GMT+00:00) Europe/Guernsey", + "Europe/Helsinki" => "(GMT+02:00) Europe/Helsinki", + "Europe/Isle of Man" => "(GMT+00:00) Europe/Isle of Man", + "Europe/Istanbul" => "(GMT+03:00) Europe/Istanbul", + "Europe/Jersey" => "(GMT+00:00) Europe/Jersey", + "Europe/Kaliningrad" => "(GMT+02:00) Europe/Kaliningrad", + "Europe/Kirov" => "(GMT+03:00) Europe/Kirov", + "Europe/Kyiv" => "(GMT+02:00) Europe/Kyiv", + "Europe/Lisbon" => "(GMT+00:00) Europe/Lisbon", + "Europe/Ljubljana" => "(GMT+01:00) Europe/Ljubljana", + "Europe/London" => "(GMT+00:00) Europe/London", + "Europe/Luxembourg" => "(GMT+01:00) Europe/Luxembourg", + "Europe/Madrid" => "(GMT+01:00) Europe/Madrid", + "Europe/Malta" => "(GMT+01:00) Europe/Malta", + "Europe/Mariehamn" => "(GMT+02:00) Europe/Mariehamn", + "Europe/Minsk" => "(GMT+03:00) Europe/Minsk", + "Europe/Monaco" => "(GMT+01:00) Europe/Monaco", + "Europe/Moscow" => "(GMT+03:00) Europe/Moscow", + "Europe/Oslo" => "(GMT+01:00) Europe/Oslo", + "Europe/Paris" => "(GMT+01:00) Europe/Paris", + "Europe/Podgorica" => "(GMT+01:00) Europe/Podgorica", + "Europe/Prague" => "(GMT+01:00) Europe/Prague", + "Europe/Riga" => "(GMT+02:00) Europe/Riga", + "Europe/Rome" => "(GMT+01:00) Europe/Rome", + "Europe/Samara" => "(GMT+04:00) Europe/Samara", + "Europe/San Marino" => "(GMT+01:00) Europe/San Marino", + "Europe/Sarajevo" => "(GMT+01:00) Europe/Sarajevo", + "Europe/Saratov" => "(GMT+04:00) Europe/Saratov", + "Europe/Simferopol" => "(GMT+03:00) Europe/Simferopol", + "Europe/Skopje" => "(GMT+01:00) Europe/Skopje", + "Europe/Sofia" => "(GMT+02:00) Europe/Sofia", + "Europe/Stockholm" => "(GMT+01:00) Europe/Stockholm", + "Europe/Tallinn" => "(GMT+02:00) Europe/Tallinn", + "Europe/Tirane" => "(GMT+01:00) Europe/Tirane", + "Europe/Ulyanovsk" => "(GMT+04:00) Europe/Ulyanovsk", + "Europe/Vaduz" => "(GMT+01:00) Europe/Vaduz", + "Europe/Vatican" => "(GMT+01:00) Europe/Vatican", + "Europe/Vienna" => "(GMT+01:00) Europe/Vienna", + "Europe/Vilnius" => "(GMT+02:00) Europe/Vilnius", + "Europe/Volgograd" => "(GMT+03:00) Europe/Volgograd", + "Europe/Warsaw" => "(GMT+01:00) Europe/Warsaw", + "Europe/Zagreb" => "(GMT+01:00) Europe/Zagreb", + "Europe/Zurich" => "(GMT+01:00) Europe/Zurich", + ], + "Indian" => [ + "Indian/Antananarivo" => "(GMT+03:00) Indian/Antananarivo", + "Indian/Chagos" => "(GMT+06:00) Indian/Chagos", + "Indian/Christmas" => "(GMT+07:00) Indian/Christmas", + "Indian/Cocos" => "(GMT+06:00) Indian/Cocos", + "Indian/Comoro" => "(GMT+03:00) Indian/Comoro", + "Indian/Kerguelen" => "(GMT+05:00) Indian/Kerguelen", + "Indian/Mahe" => "(GMT+04:00) Indian/Mahe", + "Indian/Maldives" => "(GMT+05:00) Indian/Maldives", + "Indian/Mauritius" => "(GMT+04:00) Indian/Mauritius", + "Indian/Mayotte" => "(GMT+03:00) Indian/Mayotte", + "Indian/Reunion" => "(GMT+04:00) Indian/Reunion", + ], + "Pacific" => [ + "Pacific/Apia" => "(GMT+13:00) Pacific/Apia", + "Pacific/Auckland" => "(GMT+13:00) Pacific/Auckland", + "Pacific/Bougainville" => "(GMT+11:00) Pacific/Bougainville", + "Pacific/Chatham" => "(GMT+13:00) Pacific/Chatham", + "Pacific/Chuuk" => "(GMT+10:00) Pacific/Chuuk", + "Pacific/Easter" => "(GMT-05:00) Pacific/Easter", + "Pacific/Efate" => "(GMT+11:00) Pacific/Efate", + "Pacific/Fakaofo" => "(GMT+13:00) Pacific/Fakaofo", + "Pacific/Fiji" => "(GMT+12:00) Pacific/Fiji", + "Pacific/Funafuti" => "(GMT+12:00) Pacific/Funafuti", + "Pacific/Galapagos" => "(GMT-06:00) Pacific/Galapagos", + "Pacific/Gambier" => "(GMT-09:00) Pacific/Gambier", + "Pacific/Guadalcanal" => "(GMT+11:00) Pacific/Guadalcanal", + "Pacific/Guam" => "(GMT+10:00) Pacific/Guam", + "Pacific/Honolulu" => "(GMT-10:00) Pacific/Honolulu", + "Pacific/Kanton" => "(GMT+13:00) Pacific/Kanton", + "Pacific/Kiritimati" => "(GMT+14:00) Pacific/Kiritimati", + "Pacific/Kosrae" => "(GMT+11:00) Pacific/Kosrae", + "Pacific/Kwajalein" => "(GMT+12:00) Pacific/Kwajalein", + "Pacific/Majuro" => "(GMT+12:00) Pacific/Majuro", + "Pacific/Marquesas" => "(GMT-09:00) Pacific/Marquesas", + "Pacific/Midway" => "(GMT-11:00) Pacific/Midway", + "Pacific/Nauru" => "(GMT+12:00) Pacific/Nauru", + "Pacific/Niue" => "(GMT-11:00) Pacific/Niue", + "Pacific/Norfolk" => "(GMT+12:00) Pacific/Norfolk", + "Pacific/Noumea" => "(GMT+11:00) Pacific/Noumea", + "Pacific/Pago Pago" => "(GMT-11:00) Pacific/Pago Pago", + "Pacific/Palau" => "(GMT+09:00) Pacific/Palau", + "Pacific/Pitcairn" => "(GMT-08:00) Pacific/Pitcairn", + "Pacific/Pohnpei" => "(GMT+11:00) Pacific/Pohnpei", + "Pacific/Port Moresby" => "(GMT+10:00) Pacific/Port Moresby", + "Pacific/Rarotonga" => "(GMT-10:00) Pacific/Rarotonga", + "Pacific/Saipan" => "(GMT+10:00) Pacific/Saipan", + "Pacific/Tahiti" => "(GMT-10:00) Pacific/Tahiti", + "Pacific/Tarawa" => "(GMT+12:00) Pacific/Tarawa", + "Pacific/Tongatapu" => "(GMT+13:00) Pacific/Tongatapu", + "Pacific/Wake" => "(GMT+12:00) Pacific/Wake", + "Pacific/Wallis" => "(GMT+12:00) Pacific/Wallis", + ], + "UTC" => [ + "UTC" => "(GMT+00:00) UTC", + ] +]; diff --git a/src/FilamentTimezoneFieldServiceProvider.php b/src/FilamentTimezoneFieldServiceProvider.php new file mode 100644 index 0000000..ea557e3 --- /dev/null +++ b/src/FilamentTimezoneFieldServiceProvider.php @@ -0,0 +1,21 @@ +name('filament-timezone-field') + ->hasTranslations(); + } +} diff --git a/src/Forms/Components/Timezone.php b/src/Forms/Components/Timezone.php new file mode 100644 index 0000000..fce73ef --- /dev/null +++ b/src/Forms/Components/Timezone.php @@ -0,0 +1,18 @@ +getRecord(); + + $state = Arr::get($record, $this->getName()); + + if ($state !== null) { + foreach (trans('filament-timezone-field::timezone') as $regions) { + foreach ($regions as $timezone=>$offset) { + if ($timezone === $state) { + return $offset; + } + } + } + return $state; + } + + if (! $this->queriesRelationships($record)) { + return null; + } + + $relationship = $this->getRelationship($record); + + if (! $relationship) { + return null; + } + + $relationshipAttribute = $this->getRelationshipAttribute(); + + $state = collect($this->getRelationshipResults($record)) + ->filter(fn (Model $record): bool => array_key_exists($relationshipAttribute, $record->attributesToArray())) + ->pluck($relationshipAttribute) + ->when($this->isDistinctList(), fn (Collection $state) => $state->unique()) + ->values(); + + if (! $state->count()) { + return null; + } + + return $state->all(); + } +} diff --git a/src/Tables/Filters/Timezone.php b/src/Tables/Filters/Timezone.php new file mode 100644 index 0000000..8f54a18 --- /dev/null +++ b/src/Tables/Filters/Timezone.php @@ -0,0 +1,19 @@ +expect(['dd', 'dump', 'ray']) + ->each->not->toBeUsed(); diff --git a/tests/ExampleTest.php b/tests/ExampleTest.php new file mode 100644 index 0000000..5d36321 --- /dev/null +++ b/tests/ExampleTest.php @@ -0,0 +1,5 @@ +toBeTrue(); +}); diff --git a/tests/Pest.php b/tests/Pest.php new file mode 100644 index 0000000..57c8167 --- /dev/null +++ b/tests/Pest.php @@ -0,0 +1,5 @@ +in(__DIR__); diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000..d23e716 --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,36 @@ + 'OmarHaris\\FilamentTimezoneField\\Database\\Factories\\'.class_basename($modelName).'Factory' + ); + } + + protected function getPackageProviders($app) + { + return [ + FilamentTimezoneFieldServiceProvider::class, + ]; + } + + public function getEnvironmentSetUp($app) + { + config()->set('database.default', 'testing'); + + /* + $migration = include __DIR__.'/../database/migrations/create_filament-timezone-field_table.php.stub'; + $migration->up(); + */ + } +} diff --git a/workbench/app/Providers/WorkbenchServiceProvider.php b/workbench/app/Providers/WorkbenchServiceProvider.php new file mode 100644 index 0000000..001d06d --- /dev/null +++ b/workbench/app/Providers/WorkbenchServiceProvider.php @@ -0,0 +1,25 @@ +