opilo/farsi

日期、数字和字符串的波斯语工具(支持Laravel验证)

0.3.0 2020-03-04 15:08 UTC

This package is auto-updated.

Last update: 2024-09-10 17:29:41 UTC


README

Build Status Latest Stable Version Total Downloads Latest Unstable Version License

此软件包为PHP开发者提供波斯语工具。它还引入了专门为Laravel开发者设计的验证设施。

贾拉利(希吉历)日期

JalaliDate类表示伊朗日历。它根据此维基页面中引用的数据计算闰年。根据在tests/SallarJdatetimeTest.php中进行的测试,对于1343年至1473年之间的年份,此日历中的闰年与基于提出的计算规则计算出的闰年完美匹配。但应考虑伊朗日历是基于天文观测的,与格鲁吉亚不同,它不是一个基于规则的日历。

以下代码演示了如何将DateTime对象转换为JalaliDate对象,然后按所需格式打印。您只需使用JalaliDate::fromDateTime()方法,并查看JalaliFormatter::$conversionFunctions数组,以了解应将什么传递给JalaliDate::format()函数作为格式字符串。

use Opilo\Farsi\JalaliDate;

$dateTime = \DateTime::createFromFormat('Y-m-d', '2015-09-03');

$jalaliDate = JalaliDate::fromDateTime($dateTime);

print ($jalaliDate->format('D S M ماه سال X'));

输出结果为: 星期五,十二月初二,一千九百九十四年

以下示例代码演示了如何将表示贾拉利日期的数字输入转换为JalaliDate,然后将其转换为DateTime。如果您想验证用户的贾拉利日期输入,然后保存适当的标准时间戳到数据库中,这可能很有帮助。

use Opilo\Farsi\JalaliDate;

$jalaliDate = new JalaliDate(1394, 6, 12);

$dateTime = $jalaliDate->toDateTime();

print($dateTime->format('Y-m-d'));

输出结果为: 2015-09-03

方便的是,您还可以直接将具有已知格式的字符串直接转换为JalaliDate

use Opilo\Farsi\JalaliDate;

$jalaliDate = JalaliDate::fromFormat('Y/m/d', '1394/6/20');

print($jalaliDate->format('D، d M y'));

上述代码的输出为: 星期五,九月二十,94

请注意,如果您尝试构造一个无效的JalaliDate,将抛出InvalidArgumentException异常。

JDateTime类

JDateTime类是具有时间(小时、分钟、秒)支持的JalaliDate类的扩展。

数字到字符串转换器

如果您应用需要打印财务文件,您可能非常喜欢这个

use Opilo\Farsi\NumberToStringConverter;

print NumberToStringConverter::toString(21034510);

因为,这是输出结果: 二十一百万三千四百五十

以下是第二个注意事项 (第二个注意事项)

print ('نکته‌ی ' . NumberToStringConverter::toOrdinalString(2));

字符串清洁器

使用StringCleanser类,您可以在与用户交互时处理波斯数字。StringCleanser::arabicToFarsi()函数清除输入波斯字符串中的阿拉伯字符,这些字符通常出现在标准关键词中。

use Opilo\Farsi\StringCleaner;

print(StringCleaner::digitsToFarsi('1394'));
print("\n");

print(StringCleaner::digitsToEnglish('۱۳۹۴'));
print("\n");

print(StringCleaner::arabicToFarsi('كيك پي اچ پي چيست؟'));
print("\n");

这将(大约)输出

۱۳۹۴
1394
کیک پی اچ پی چیز خاصی نیست

Jalali Validator For Laravel 4.2 和 Laravel 5

安装

步骤 1:添加服务提供程序

将提供程序类添加到config/app.php文件中的提供程序数组中

	'providers' => [
	    ...
        Opilo\Farsi\Laravel\FarsiServiceProvider::class,
	]

步骤 2:定义错误信息

您需要在lang文件夹中的validation.php中定义jalalijalali_afterjalali_before规则的错误信息。此软件包sample-lang目录下提供了可复制粘贴的示例。例如,如果您的项目使用Laravel 5,并且您的波斯语翻译位于resources/lang/fa目录下,请将这些行复制到resources/lang/fa/validation.php

    'jalali'        => ':attribute وارد شده تاریخ شمسی معتبری طبق فرمت :format نیست (مثال معتبر: :fa-sample).',
    'jalali_after'  => ':attribute وارد شده باید یک تاریخ شمسی معتبر بعد از :date باشد.',
    'jalali_before' => ':attribute وارد شده باید یک تاریخ شمسی معتبر قبل از :date باشد.',
    ...
    //the rest of Farsi translations for validation rules.

    'attributes' => [
        'birth_date' => 'تاریخ تولد',
        ...
        //the rest of Farsi translations for attributes
    ],
    ...

验证规则

jalali:Y/m/d

确定输入是否为指定格式的有效贾拉利日期。默认格式为Y/m/d

jalali_after:1380/1/1,Y/m/d

确定输入是否为指定格式的有效贾拉利日期,并且它晚于给定日期。默认格式为Y/m/d,默认日期为今天。

jalali_before:1395-01-01,Y-m-d

判断输入的日期是否符合指定的贾拉利日期格式,并且是否在给定的日期之前。默认格式为 Y/m/d,默认日期为今天。

jdatetime:"Y/m/d h:i:s"

判断输入的日期时间是否符合指定的贾拉利日期时间格式。默认格式为 Y/m/d h:i:s

jdatetime_after:"1380/1/1 12:00:00","Y/m/d h:i:s"

判断输入的日期时间是否符合指定的贾拉利日期时间格式,并且是否在给定的日期时间之后。默认格式为 Y/m/d h:i:s,默认时间为现在。

jdatetime_before:"1395-01-01 h:i","Y-m-d h:i"

判断输入的日期时间是否符合指定的贾拉利日期时间格式,并且是否在给定的日期时间之前。默认格式为 Y/m/d h:i:s,默认时间为现在。

示例

感谢 Laravel 5,您可以在您特定领域的请求对象的 rule() 函数中使用提到的验证规则。如果这不是一个选项,您可以使用这些规则,就像使用其他 Laravel 规则一样,代码如下

    $v = Validator::make([
            'birth_date' => '1380/01/32',
            'start_time' => '1395/02/16 12:10:00',
        ],
        [
            'birth_date' => 'required|jalali|jalali_before:1381/01/01|jalali_after:1300/01/01,Y/m/d',
            'start_time' => 'required|jdatetime_after:"1395/01/01 00:00:00"|jdatetime_before:"1396/01/01 00:00:00"',
        ]);

    if ($v->fails()) {
        var_dump($v->messages()->toArray());
    }

以上代码的输出将是

array(1) {
  ["birth_date"]=>
  array(3) {
    [0]=>
    string(140) "تاریخ تولد وارد شده تاریخ شمسی معتبری طبق فرمت Y/m/d نیست (مثال معتبر: ۱۳۹۴/۹/۱۳)."
    [1]=>
    string(113) "تاریخ تولد وارد شده باید یک تاریخ شمسی معتبر قبل از 1381/01/01 باشد."
    [2]=>
    string(113) "تاریخ تولد وارد شده باید یک تاریخ شمسی معتبر بعد از 1300/01/01 باشد."
  }
}

许可证

Opilo Farsi 软件包是开源软件,根据 MIT 许可协议 许可。