当前位置: 首页 > 知识库问答 >
问题:

使用Carbon in React/Laravel项目进行本地化(更改日期语言)

黄弘深
2023-03-14

尝试在我的项目中使用碳进行本地化。碳纤维很好,我已经测试过了。我已尝试将下面的代码块添加到我的模型文件中:

use DateTimeInterface;

protected function serializeDate(DateTimeInterface $date)
{
    return $date->translatedFormat('A B M');
}

所以我的模型文件看起来像这样(文件-

<?php

namespace App\Models;

use App\Events\TransferRecordSaved;
use App\Helpers\CoinFormatter;
use Illuminate\Database\Eloquent\Model;
use DateTimeInterface;

class TransferRecord extends Model
{
    /**
     * The attributes that aren't mass assignable.
     *
     * @var array
     */
    protected $guarded = [];

    /**
     * The event map for the model.
     *
     * @var array
     */
    protected $dispatchesEvents = [
        'saved' => TransferRecordSaved::class,
    ];

    protected $appends = [
        'value_price',
        'hash',
        'formatted_value_price',
        'coin',
        'confirmed',
    ];

    /**
     * The relationships that should always be loaded.
     *
     * @var array
     */
    protected $with = [
        'walletAccount',
    ];

    /**
     * @return bool
     */
    public function getConfirmedAttribute()
    {
        return $this->confirmations >= $this->required_confirmations;
    }

    /**
     * @return mixed|string
     */
    public function getCoinAttribute()
    {
        return $this->walletAccount->wallet->coin->name;
    }

    /**
     * @param $value
     */
    public function setValueAttribute($value)
    {
        if ($value instanceof CoinFormatter) {
            $this->attributes['value'] = $value->getAmount();
        } else {
            $this->attributes['value'] = (float) $value;
        }
    }

    /**
     * @return CoinFormatter|mixed
     */
    public function getValueObject()
    {
        return coin($this->getOriginal('value'), $this->walletAccount->wallet->coin);
    }

    /**
     * Get value converted from base unit
     *
     * @param $value
     * @return float
     */
    public function getValueAttribute()
    {
        return $this->getValueObject()->getValue();
    }

    /**
     * Get the price of the value
     *
     * @return \HolluwaTosin360\Currency\Currency|string
     */
    public function getValuePriceAttribute()
    {
        return $this->getValueObject()
            ->getPrice($this->walletAccount->user->currency, $this->dollar_price);
    }

    /**
     * Get formatted price of the value
     *
     * @return \HolluwaTosin360\Currency\Currency|string
     */
    public function getFormattedValuePriceAttribute()
    {
        return $this->getValueObject()
            ->getFormattedPrice($this->walletAccount->user->currency, $this->dollar_price);
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo|WalletAddress
     */
    public function receiverWalletAddress()
    {
        return $this->belongsTo('App\Models\WalletAddress', 'receiver_wallet_address_id', 'id');
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo|WalletTransaction
     */
    public function walletTransaction()
    {
        return $this->belongsTo('App\Models\WalletTransaction', 'wallet_transaction_id', 'id');
    }

    /**
     * Get transaction hash
     *
     * @return mixed
     */
    public function getHashAttribute()
    {
        return $this->walletTransaction()->value('hash');
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo|WalletAccount
     */
    public function walletAccount()
    {
        return $this->belongsTo('App\Models\WalletAccount', 'wallet_account_id', 'id');
    }



protected function serializeDate(DateTimeInterface $date)
{
    return $date->translatedFormat('A B M');
}
}

然后在resources/routes/wallet/components/RecorsTable/index.js文件中,我试图使用translatedFormat()函数以转换后的格式获取日期。所需的值是{formatUTC(text)}

dataIndex : 'created_at',
            sorter    : (a, b) => sortDate(a.created_at, b.created_at),
            render    : text => (
                <div style={{whiteSpace : 'nowrap'}}>
                    {formatUTC(text)}
                </div>

resources/routes/wallet/components/RecorsTable/index.js的完整版本文件:

import React, {Component} from 'react';
import {Tag} from "antd";
import Widget from "components/Widget";
import {FormattedMessage, injectIntl} from "react-intl";
import AsyncTable from "components/AsyncTable";
import {route} from "support/Services/Api";
import Auth from "support/Auth";
import {formatUTCDate, pipe, sortDate} from "support/utils/common";
import {connect} from "react-redux";
import {mapValues, values} from "lodash";

class RecordsTable extends Component {
    columns = () => {
        const {accounts} = this.props;

        return [
            {
                title     : (
                    <FormattedMessage
                        defaultMessage="Amount"
                        id="common.amount"/>
                ),
                dataIndex : 'formatted_value_price',
                render    : (text, record) => (
                    <span>
                        {record.type === 'receive' ?
                            <span className="cp-text-success">
                                {text}
                            </span> :
                            <span className="cp-text-danger">
                                {text}
                            </span>
                        }
                    </span>
                )
            },
            {
                title     : (
                    <FormattedMessage
                        defaultMessage="Date"
                        id="widget.marketplace_earnings_chart.date"/>
                ),
                dataIndex : 'created_at',
                sorter    : (a, b) => sortDate(a.created_at, b.created_at),
                render    : text => (
                    <div style={{whiteSpace : 'nowrap'}}>
                        {translatedFormat(text)}
                    </div>
                ),
            },
            {
                title     : 'Status',
                dataIndex : 'confirmed',
                render    : (text) => {
                    const isConfirmed = text === "true" ||
                        (typeof text === "boolean" && text);

                    return (
                        <span>
                            {isConfirmed ?
                                <Tag color="green">
                                    <FormattedMessage
                                        defaultMessage="confirmed"
                                        id="wallet.transaction_confirmed"/>
                                </Tag> :
                                <Tag color="red">
                                    <FormattedMessage
                                        defaultMessage="unconfirmed"
                                        id="wallet.transaction_unconfirmed"/>
                                </Tag>
                            }
                        </span>
                    )
                },
            },
            {
            title     : (
                    <FormattedMessage
                        defaultMessage="Amount"
                        id="common.amount"/>
                ),
                dataIndex : 'value',
            },
            {
                title     : 'Hash',
                dataIndex : 'hash',
            },
            {
                title     : 'Coin',
                dataIndex : 'coin',
                fixed     : 'right',
                onFilter  : (value, record) => {
                    return record.coin.includes(value)
                },
                filters   : values(mapValues(accounts, (o) => {
                    return {
                        text  : o.wallet.coin.name,
                        value : o.wallet.coin.name
                    }
                })),
            },
        ];
    };

    render() {
        const endpoint = route("user.transfer-records-table");

        return (
            <Widget styleName="cp-card-table"
                    title={
                        <FormattedMessage
                            defaultMessage="Transfer Records"
                            id="wallet.transfer_records"/>
                    }>
                <AsyncTable
                    route={endpoint.url()}
                    columns={this.columns()}
                    className="mt-1"
                    scroll={{x : true, y : false}}
                    size="middle"/>
            </Widget>
        );
    }
}

const mapStateToProps = ({
    wallet : {accounts},
    auth
}) => ({
    accounts,
    auth : new Auth(auth)
});

export default pipe(
    injectIntl,
    connect(
        mapStateToProps
    )
)(RecordsTable);

{translatedFormat(text)}-这是formatUtc(text)之前和工作正常。成功编译后打开网页时出错。已经一周了,我一直在努力解决这个问题,但到目前为止还没有成功。任何帮助将高度赞赏。


共有1个答案

冯招
2023-03-14

任何拥有reactjs/laravel项目的人都可以通过使用utcDateCalendarTime()更改方法来解决本地化问题。因此,如果我像下面这样更改代码块,它的效果非常好:

dataIndex : 'created_at',
                sorter    : (a, b) => sortDate(a.created_at, b.created_at),
                render    : text => (
                    <div style={{whiteSpace : 'nowrap'}}>
                        {utcDateCalendarTime(text)}
                    </div>
                ),

并且需要确保您正在调用文件顶部的方法:import{formatUTCDate,pipe,sortDate,utcDateCalendarTime}from“support/utils/common”

 类似资料:
  • 我怎么能那样做 直接使用JDK日志记录(我看到可以使用ResourceBundle,但我没有设法使其工作,而且我也不知道该文件中的内容) 使用SLF4 facade(我想这将意味着调整SLF4J的函数,它是我用来获取记录器的函数)

  • 问题内容: 我一直在使用Sails.js一段时间,想知道是否有一种方法可以根据URL从控制器手动更改本地化。 示例:将返回英语版本,并将返回德语版本。 谢谢你的帮助!! 问题答案: 您始终可以通过使用或通过设置的值来更改控制器操作中的语言环境。您还可以使用以下策略更全局地处理此问题:

  • 我在我的应用程序中使用日期格式化程序来显示一些日期。但我希望这个日期以阿拉伯语显示。所以我试图像这样改变格式化程序的区域设置: 但它不起作用。。 如果我改成这样: 会工作正常...但我希望日期显示在阿拉伯语... 如何做到这一点?我希望日期是例如١١ يناير ٢٠١٨..怎么办?

  • 问题内容: 我的页面上有一个CalendarExtender控件,有时必须将日期更改为下一个发生的星期日。我当前正在使用控件的OnClientDateSelectionChanged属性来调用一个函数,该函数将在日期中增加几天,直到其星期日为止。 我遇到的问题是,如果我在日历中选择了星期二,则文本框将显示下一个星期日,但是日历中的选定日期仍然是星期二。 如何更新CalendarExtender使其

  • 我有一个来自数据库的对象,这个对象有属性创建日期,它是日期-时间格式,我想将此属性的语言从英语更改为阿拉伯语,格式为“j-F,Y” 当我使用这个代码的错误是 在非对象上调用成员函数createFromDate() 函数setLocale('ar')返回空值

  • 在Craft CMS中使用这个细枝代码,我得到如下所示的错误。Craft CMS的制造商告诉我,小枝“date”不支持像“janvier 2016”这样的本地化月份名称,但英文“janvier 2016”也可以。 这是真的吗? 我的小枝:{%set queryStartDate=date([month,year]| join(“”))%} 错误:DateTime::_construct():无法分