Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ab38d33e31 | |||
| 0020f4ede9 | |||
| b470cb63b7 | |||
| 32f2eaef3c | |||
| a7fc3c78eb | |||
| d42b3ecb5e | |||
| 2d4a603d11 | |||
| 7a369328b6 | |||
| 545667e502 | |||
| 8387a81a59 | |||
| 1e3087ccf0 |
@@ -509,7 +509,6 @@ custom_map_tile_server_default_zoom_level = 14
|
|||||||
# "swiss_national_bank": https://www.snb.ch/en/the-snb/mandates-goals/statistics/statistics-pub/current_interest_exchange_rates
|
# "swiss_national_bank": https://www.snb.ch/en/the-snb/mandates-goals/statistics/statistics-pub/current_interest_exchange_rates
|
||||||
# "national_bank_of_ukraine": https://bank.gov.ua/ua/markets/exchangerates
|
# "national_bank_of_ukraine": https://bank.gov.ua/ua/markets/exchangerates
|
||||||
# "central_bank_of_uzbekistan": https://cbu.uz/en/arkhiv-kursov-valyut/
|
# "central_bank_of_uzbekistan": https://cbu.uz/en/arkhiv-kursov-valyut/
|
||||||
# "international_monetary_fund": https://www.imf.org/external/np/fin/data/param_rms_mth.aspx
|
|
||||||
# "user_custom": users set their own exchange rates data in the UI
|
# "user_custom": users set their own exchange rates data in the UI
|
||||||
data_source = euro_central_bank
|
data_source = euro_central_bank
|
||||||
|
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "ezbookkeeping",
|
"name": "ezbookkeeping",
|
||||||
"version": "1.3.1",
|
"version": "1.3.2",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "ezbookkeeping",
|
"name": "ezbookkeeping",
|
||||||
"version": "1.3.1",
|
"version": "1.3.2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@mdi/js": "^7.4.47",
|
"@mdi/js": "^7.4.47",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ezbookkeeping",
|
"name": "ezbookkeeping",
|
||||||
"version": "1.3.1",
|
"version": "1.3.2",
|
||||||
"private": true,
|
"private": true,
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|||||||
@@ -9,11 +9,20 @@ const (
|
|||||||
CAMT_INDICATOR_DEBIT camtCreditDebitIndicator = "DBIT"
|
CAMT_INDICATOR_DEBIT camtCreditDebitIndicator = "DBIT"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type camt052File struct {
|
||||||
|
XMLName xml.Name `xml:"Document"`
|
||||||
|
BankToCustomerAccountReport *camtBankToCustomerAccountReport `xml:"BkToCstmrAcctRpt"`
|
||||||
|
}
|
||||||
|
|
||||||
type camt053File struct {
|
type camt053File struct {
|
||||||
XMLName xml.Name `xml:"Document"`
|
XMLName xml.Name `xml:"Document"`
|
||||||
BankToCustomerStatement *camtBankToCustomerStatement `xml:"BkToCstmrStmt"`
|
BankToCustomerStatement *camtBankToCustomerStatement `xml:"BkToCstmrStmt"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type camtBankToCustomerAccountReport struct {
|
||||||
|
Statements []*camtStatement `xml:"Rpt"`
|
||||||
|
}
|
||||||
|
|
||||||
type camtBankToCustomerStatement struct {
|
type camtBankToCustomerStatement struct {
|
||||||
Statements []*camtStatement `xml:"Stmt"`
|
Statements []*camtStatement `xml:"Stmt"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,11 +10,30 @@ import (
|
|||||||
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// camt052FileReader defines the structure of camt.052 file reader
|
||||||
|
type camt052FileReader struct {
|
||||||
|
xmlDecoder *xml.Decoder
|
||||||
|
}
|
||||||
|
|
||||||
// camt053FileReader defines the structure of camt.053 file reader
|
// camt053FileReader defines the structure of camt.053 file reader
|
||||||
type camt053FileReader struct {
|
type camt053FileReader struct {
|
||||||
xmlDecoder *xml.Decoder
|
xmlDecoder *xml.Decoder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// read returns the imported camt.052 data
|
||||||
|
// Reference: https://www.iso20022.org/message-set/1196/download
|
||||||
|
func (r *camt052FileReader) read(ctx core.Context) (*camt052File, error) {
|
||||||
|
file := &camt052File{}
|
||||||
|
|
||||||
|
err := r.xmlDecoder.Decode(&file)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return file, nil
|
||||||
|
}
|
||||||
|
|
||||||
// read returns the imported camt.053 data
|
// read returns the imported camt.053 data
|
||||||
// Reference: https://www.iso20022.org/message-set/1196/download
|
// Reference: https://www.iso20022.org/message-set/1196/download
|
||||||
func (r *camt053FileReader) read(ctx core.Context) (*camt053File, error) {
|
func (r *camt053FileReader) read(ctx core.Context) (*camt053File, error) {
|
||||||
@@ -29,6 +48,19 @@ func (r *camt053FileReader) read(ctx core.Context) (*camt053File, error) {
|
|||||||
return file, nil
|
return file, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createNewCamt052FileReader(data []byte) (*camt052FileReader, error) {
|
||||||
|
if len(data) > 5 && data[0] == 0x3C && data[1] == 0x3F && data[2] == 0x78 && data[3] == 0x6D && data[4] == 0x6C { // <?xml
|
||||||
|
xmlDecoder := xml.NewDecoder(bytes.NewReader(data))
|
||||||
|
xmlDecoder.CharsetReader = charset.NewReaderLabel
|
||||||
|
|
||||||
|
return &camt052FileReader{
|
||||||
|
xmlDecoder: xmlDecoder,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, errs.ErrInvalidXmlFile
|
||||||
|
}
|
||||||
|
|
||||||
func createNewCamt053FileReader(data []byte) (*camt053FileReader, error) {
|
func createNewCamt053FileReader(data []byte) (*camt053FileReader, error) {
|
||||||
if len(data) > 5 && data[0] == 0x3C && data[1] == 0x3F && data[2] == 0x78 && data[3] == 0x6D && data[4] == 0x6C { // <?xml
|
if len(data) > 5 && data[0] == 0x3C && data[1] == 0x3F && data[2] == 0x78 && data[3] == 0x6D && data[4] == 0x6C { // <?xml
|
||||||
xmlDecoder := xml.NewDecoder(bytes.NewReader(data))
|
xmlDecoder := xml.NewDecoder(bytes.NewReader(data))
|
||||||
|
|||||||
@@ -303,12 +303,12 @@ func (t *camtStatementTransactionDataRowIterator) parseTransaction(ctx core.Cont
|
|||||||
return data, nil
|
return data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createNewCamtStatementTransactionDataTable(file *camt053File) (*camtStatementTransactionDataTable, error) {
|
func createNewCamtStatementTransactionDataTable(camtStatements []*camtStatement) (*camtStatementTransactionDataTable, error) {
|
||||||
if file == nil || file.BankToCustomerStatement == nil || len(file.BankToCustomerStatement.Statements) == 0 {
|
if len(camtStatements) == 0 {
|
||||||
return nil, errs.ErrNotFoundTransactionDataInFile
|
return nil, errs.ErrNotFoundTransactionDataInFile
|
||||||
}
|
}
|
||||||
|
|
||||||
return &camtStatementTransactionDataTable{
|
return &camtStatementTransactionDataTable{
|
||||||
allStatements: file.BankToCustomerStatement.Statements,
|
allStatements: camtStatements,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import (
|
|||||||
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/converters/converter"
|
"github.com/mayswind/ezbookkeeping/pkg/converters/converter"
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/core"
|
"github.com/mayswind/ezbookkeeping/pkg/core"
|
||||||
|
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/models"
|
"github.com/mayswind/ezbookkeeping/pkg/models"
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/utils"
|
"github.com/mayswind/ezbookkeeping/pkg/utils"
|
||||||
)
|
)
|
||||||
@@ -15,15 +16,49 @@ var camtTransactionTypeNameMapping = map[models.TransactionType]string{
|
|||||||
models.TRANSACTION_TYPE_TRANSFER: utils.IntToString(int(models.TRANSACTION_TYPE_TRANSFER)),
|
models.TRANSACTION_TYPE_TRANSFER: utils.IntToString(int(models.TRANSACTION_TYPE_TRANSFER)),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// camt052TransactionDataImporter defines the structure of camt.052 file importer for transaction data
|
||||||
|
type camt052TransactionDataImporter struct {
|
||||||
|
}
|
||||||
|
|
||||||
// camt053TransactionDataImporter defines the structure of camt.053 file importer for transaction data
|
// camt053TransactionDataImporter defines the structure of camt.053 file importer for transaction data
|
||||||
type camt053TransactionDataImporter struct {
|
type camt053TransactionDataImporter struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize a camt.053 transaction data importer singleton instance
|
// Initialize camt.052 and camt.053 transaction data importer singleton instances
|
||||||
var (
|
var (
|
||||||
|
Camt052TransactionDataImporter = &camt052TransactionDataImporter{}
|
||||||
Camt053TransactionDataImporter = &camt053TransactionDataImporter{}
|
Camt053TransactionDataImporter = &camt053TransactionDataImporter{}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ParseImportedData returns the imported data by parsing the camt.052 file transaction data
|
||||||
|
func (c *camt052TransactionDataImporter) ParseImportedData(ctx core.Context, user *models.User, data []byte, defaultTimezone *time.Location, additionalOptions converter.TransactionDataImporterOptions, accountMap map[string]*models.Account, expenseCategoryMap map[string]map[string]*models.TransactionCategory, incomeCategoryMap map[string]map[string]*models.TransactionCategory, transferCategoryMap map[string]map[string]*models.TransactionCategory, tagMap map[string]*models.TransactionTag) (models.ImportedTransactionSlice, []*models.Account, []*models.TransactionCategory, []*models.TransactionCategory, []*models.TransactionCategory, []*models.TransactionTag, error) {
|
||||||
|
camt052DataReader, err := createNewCamt052FileReader(data)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, nil, nil, nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
camt052Data, err := camt052DataReader.read(ctx)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, nil, nil, nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if camt052Data.BankToCustomerAccountReport == nil || camt052Data.BankToCustomerAccountReport.Statements == nil {
|
||||||
|
return nil, nil, nil, nil, nil, nil, errs.ErrNotFoundTransactionDataInFile
|
||||||
|
}
|
||||||
|
|
||||||
|
transactionDataTable, err := createNewCamtStatementTransactionDataTable(camt052Data.BankToCustomerAccountReport.Statements)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, nil, nil, nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
dataTableImporter := converter.CreateNewSimpleImporterWithTypeNameMapping(camtTransactionTypeNameMapping)
|
||||||
|
|
||||||
|
return dataTableImporter.ParseImportedData(ctx, user, transactionDataTable, defaultTimezone, additionalOptions, accountMap, expenseCategoryMap, incomeCategoryMap, transferCategoryMap, tagMap)
|
||||||
|
}
|
||||||
|
|
||||||
// ParseImportedData returns the imported data by parsing the camt.053 file transaction data
|
// ParseImportedData returns the imported data by parsing the camt.053 file transaction data
|
||||||
func (c *camt053TransactionDataImporter) ParseImportedData(ctx core.Context, user *models.User, data []byte, defaultTimezone *time.Location, additionalOptions converter.TransactionDataImporterOptions, accountMap map[string]*models.Account, expenseCategoryMap map[string]map[string]*models.TransactionCategory, incomeCategoryMap map[string]map[string]*models.TransactionCategory, transferCategoryMap map[string]map[string]*models.TransactionCategory, tagMap map[string]*models.TransactionTag) (models.ImportedTransactionSlice, []*models.Account, []*models.TransactionCategory, []*models.TransactionCategory, []*models.TransactionCategory, []*models.TransactionTag, error) {
|
func (c *camt053TransactionDataImporter) ParseImportedData(ctx core.Context, user *models.User, data []byte, defaultTimezone *time.Location, additionalOptions converter.TransactionDataImporterOptions, accountMap map[string]*models.Account, expenseCategoryMap map[string]map[string]*models.TransactionCategory, incomeCategoryMap map[string]map[string]*models.TransactionCategory, transferCategoryMap map[string]map[string]*models.TransactionCategory, tagMap map[string]*models.TransactionTag) (models.ImportedTransactionSlice, []*models.Account, []*models.TransactionCategory, []*models.TransactionCategory, []*models.TransactionCategory, []*models.TransactionTag, error) {
|
||||||
camt053DataReader, err := createNewCamt053FileReader(data)
|
camt053DataReader, err := createNewCamt053FileReader(data)
|
||||||
@@ -38,7 +73,11 @@ func (c *camt053TransactionDataImporter) ParseImportedData(ctx core.Context, use
|
|||||||
return nil, nil, nil, nil, nil, nil, err
|
return nil, nil, nil, nil, nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
transactionDataTable, err := createNewCamtStatementTransactionDataTable(camt053Data)
|
if camt053Data.BankToCustomerStatement == nil || camt053Data.BankToCustomerStatement.Statements == nil {
|
||||||
|
return nil, nil, nil, nil, nil, nil, errs.ErrNotFoundTransactionDataInFile
|
||||||
|
}
|
||||||
|
|
||||||
|
transactionDataTable, err := createNewCamtStatementTransactionDataTable(camt053Data.BankToCustomerStatement.Statements)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, nil, nil, nil, err
|
return nil, nil, nil, nil, nil, nil, err
|
||||||
|
|||||||
@@ -13,6 +13,109 @@ import (
|
|||||||
"github.com/mayswind/ezbookkeeping/pkg/utils"
|
"github.com/mayswind/ezbookkeeping/pkg/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestCamt052TransactionDataFileParseImportedData_MinimumValidData(t *testing.T) {
|
||||||
|
importer := Camt052TransactionDataImporter
|
||||||
|
context := core.NewNullContext()
|
||||||
|
|
||||||
|
user := &models.User{
|
||||||
|
Uid: 1234567890,
|
||||||
|
DefaultCurrency: "CNY",
|
||||||
|
}
|
||||||
|
|
||||||
|
allNewTransactions, allNewAccounts, allNewSubExpenseCategories, allNewSubIncomeCategories, allNewSubTransferCategories, allNewTags, err := importer.ParseImportedData(context, user, []byte(
|
||||||
|
`<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.02">
|
||||||
|
<BkToCstmrAcctRpt>
|
||||||
|
<Rpt>
|
||||||
|
<Acct>
|
||||||
|
<Id>
|
||||||
|
<IBAN>123</IBAN>
|
||||||
|
</Id>
|
||||||
|
<Ccy>CNY</Ccy>
|
||||||
|
</Acct>
|
||||||
|
<Ntry>
|
||||||
|
<BookgDt>
|
||||||
|
<DtTm>2024-09-01T01:23:45+08:00</DtTm>
|
||||||
|
</BookgDt>
|
||||||
|
<CdtDbtInd>CRDT</CdtDbtInd>
|
||||||
|
<Amt Ccy="CNY">123.45</Amt>
|
||||||
|
</Ntry>
|
||||||
|
<Ntry>
|
||||||
|
<BookgDt>
|
||||||
|
<DtTm>2024-09-01T12:34:56+08:00</DtTm>
|
||||||
|
</BookgDt>
|
||||||
|
<CdtDbtInd>DBIT</CdtDbtInd>
|
||||||
|
<Amt Ccy="CNY">0.12</Amt>
|
||||||
|
</Ntry>
|
||||||
|
</Rpt>
|
||||||
|
<Rpt>
|
||||||
|
<Acct>
|
||||||
|
<Id>
|
||||||
|
<Othr>
|
||||||
|
<Id>456</Id>
|
||||||
|
</Othr>
|
||||||
|
</Id>
|
||||||
|
<Ccy>USD</Ccy>
|
||||||
|
</Acct>
|
||||||
|
<Ntry>
|
||||||
|
<BookgDt>
|
||||||
|
<DtTm>2024-09-01T23:59:59+08:00</DtTm>
|
||||||
|
</BookgDt>
|
||||||
|
<CdtDbtInd>CRDT</CdtDbtInd>
|
||||||
|
<Amt Ccy="USD">1.23</Amt>
|
||||||
|
</Ntry>
|
||||||
|
</Rpt>
|
||||||
|
</BkToCstmrAcctRpt>
|
||||||
|
</Document>`), time.UTC, converter.DefaultImporterOptions, nil, nil, nil, nil, nil)
|
||||||
|
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
assert.Equal(t, 3, len(allNewTransactions))
|
||||||
|
assert.Equal(t, 2, len(allNewAccounts))
|
||||||
|
assert.Equal(t, 1, len(allNewSubExpenseCategories))
|
||||||
|
assert.Equal(t, 1, len(allNewSubIncomeCategories))
|
||||||
|
assert.Equal(t, 0, len(allNewSubTransferCategories))
|
||||||
|
assert.Equal(t, 0, len(allNewTags))
|
||||||
|
|
||||||
|
assert.Equal(t, int64(1234567890), allNewTransactions[0].Uid)
|
||||||
|
assert.Equal(t, models.TRANSACTION_DB_TYPE_INCOME, allNewTransactions[0].Type)
|
||||||
|
assert.Equal(t, int64(1725125025), utils.GetUnixTimeFromTransactionTime(allNewTransactions[0].TransactionTime))
|
||||||
|
assert.Equal(t, int64(12345), allNewTransactions[0].Amount)
|
||||||
|
assert.Equal(t, "123", allNewTransactions[0].OriginalSourceAccountName)
|
||||||
|
assert.Equal(t, "CNY", allNewTransactions[0].OriginalSourceAccountCurrency)
|
||||||
|
assert.Equal(t, "", allNewTransactions[0].OriginalCategoryName)
|
||||||
|
|
||||||
|
assert.Equal(t, int64(1234567890), allNewTransactions[1].Uid)
|
||||||
|
assert.Equal(t, models.TRANSACTION_DB_TYPE_EXPENSE, allNewTransactions[1].Type)
|
||||||
|
assert.Equal(t, int64(1725165296), utils.GetUnixTimeFromTransactionTime(allNewTransactions[1].TransactionTime))
|
||||||
|
assert.Equal(t, int64(12), allNewTransactions[1].Amount)
|
||||||
|
assert.Equal(t, "123", allNewTransactions[1].OriginalSourceAccountName)
|
||||||
|
assert.Equal(t, "CNY", allNewTransactions[1].OriginalSourceAccountCurrency)
|
||||||
|
assert.Equal(t, "", allNewTransactions[1].OriginalCategoryName)
|
||||||
|
|
||||||
|
assert.Equal(t, int64(1234567890), allNewTransactions[2].Uid)
|
||||||
|
assert.Equal(t, models.TRANSACTION_DB_TYPE_INCOME, allNewTransactions[2].Type)
|
||||||
|
assert.Equal(t, int64(1725206399), utils.GetUnixTimeFromTransactionTime(allNewTransactions[2].TransactionTime))
|
||||||
|
assert.Equal(t, int64(123), allNewTransactions[2].Amount)
|
||||||
|
assert.Equal(t, "456", allNewTransactions[2].OriginalSourceAccountName)
|
||||||
|
assert.Equal(t, "USD", allNewTransactions[2].OriginalSourceAccountCurrency)
|
||||||
|
assert.Equal(t, "", allNewTransactions[2].OriginalCategoryName)
|
||||||
|
|
||||||
|
assert.Equal(t, int64(1234567890), allNewAccounts[0].Uid)
|
||||||
|
assert.Equal(t, "123", allNewAccounts[0].Name)
|
||||||
|
assert.Equal(t, "CNY", allNewAccounts[0].Currency)
|
||||||
|
|
||||||
|
assert.Equal(t, int64(1234567890), allNewAccounts[1].Uid)
|
||||||
|
assert.Equal(t, "456", allNewAccounts[1].Name)
|
||||||
|
assert.Equal(t, "USD", allNewAccounts[1].Currency)
|
||||||
|
|
||||||
|
assert.Equal(t, int64(1234567890), allNewSubExpenseCategories[0].Uid)
|
||||||
|
assert.Equal(t, "", allNewSubExpenseCategories[0].Name)
|
||||||
|
|
||||||
|
assert.Equal(t, int64(1234567890), allNewSubIncomeCategories[0].Uid)
|
||||||
|
assert.Equal(t, "", allNewSubIncomeCategories[0].Name)
|
||||||
|
}
|
||||||
|
|
||||||
func TestCamt053TransactionDataFileParseImportedData_MinimumValidData(t *testing.T) {
|
func TestCamt053TransactionDataFileParseImportedData_MinimumValidData(t *testing.T) {
|
||||||
importer := Camt053TransactionDataImporter
|
importer := Camt053TransactionDataImporter
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
|
|||||||
@@ -52,6 +52,8 @@ func GetTransactionDataImporter(fileType string) (converter.TransactionDataImpor
|
|||||||
return qif.QifDayMonthYearTransactionDataImporter, nil
|
return qif.QifDayMonthYearTransactionDataImporter, nil
|
||||||
} else if fileType == "iif" {
|
} else if fileType == "iif" {
|
||||||
return iif.IifTransactionDataFileImporter, nil
|
return iif.IifTransactionDataFileImporter, nil
|
||||||
|
} else if fileType == "camt052" {
|
||||||
|
return camt.Camt052TransactionDataImporter, nil
|
||||||
} else if fileType == "camt053" {
|
} else if fileType == "camt053" {
|
||||||
return camt.Camt053TransactionDataImporter, nil
|
return camt.Camt053TransactionDataImporter, nil
|
||||||
} else if fileType == "mt940" {
|
} else if fileType == "mt940" {
|
||||||
|
|||||||
@@ -295,22 +295,6 @@ func TestExchangeRatesApiLatestExchangeRateHandler_CentralBankOfUzbekistanDataSo
|
|||||||
checkExchangeRatesHaveSpecifiedCurrencies(t, exchangeRateResponse.BaseCurrency, supportedCurrencyCodes, exchangeRateResponse.ExchangeRates)
|
checkExchangeRatesHaveSpecifiedCurrencies(t, exchangeRateResponse.BaseCurrency, supportedCurrencyCodes, exchangeRateResponse.ExchangeRates)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestExchangeRatesApiLatestExchangeRateHandler_InternationalMonetaryFundDataSource(t *testing.T) {
|
|
||||||
exchangeRateResponse := executeLatestExchangeRateHandler(t, settings.InternationalMonetaryFundDataSource)
|
|
||||||
|
|
||||||
if exchangeRateResponse == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.Equal(t, "USD", exchangeRateResponse.BaseCurrency)
|
|
||||||
|
|
||||||
supportedCurrencyCodes := []string{"AED", "AUD", "BND", "BRL", "BWP", "CAD", "CHF", "CLP", "CNY", "CZK",
|
|
||||||
"DKK", "DZD", "EUR", "GBP", "ILS", "INR", "JPY", "KRW", "KWD", "MUR", "MXN", "MYR", "NOK", "NZD",
|
|
||||||
"OMR", "PEN", "PHP", "PLN", "QAR", "SAR", "SEK", "SGD", "THB", "TTD", "UYU"}
|
|
||||||
|
|
||||||
checkExchangeRatesHaveSpecifiedCurrencies(t, exchangeRateResponse.BaseCurrency, supportedCurrencyCodes, exchangeRateResponse.ExchangeRates)
|
|
||||||
}
|
|
||||||
|
|
||||||
func executeLatestExchangeRateHandler(t *testing.T, dataSourceType string) *models.LatestExchangeRateResponse {
|
func executeLatestExchangeRateHandler(t *testing.T, dataSourceType string) *models.LatestExchangeRateResponse {
|
||||||
if os.Getenv("BUILD_PIPELINE") == "1" && os.Getenv("CHECK_3RD_API") != "1" {
|
if os.Getenv("BUILD_PIPELINE") == "1" && os.Getenv("CHECK_3RD_API") != "1" {
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -67,9 +67,6 @@ func InitializeExchangeRatesDataSource(config *settings.Config) error {
|
|||||||
} else if config.ExchangeRatesDataSource == settings.CentralBankOfUzbekistanDataSource {
|
} else if config.ExchangeRatesDataSource == settings.CentralBankOfUzbekistanDataSource {
|
||||||
Container.current = newCommonHttpExchangeRatesDataProvider(config, &CentralBankOfUzbekistanDataSource{})
|
Container.current = newCommonHttpExchangeRatesDataProvider(config, &CentralBankOfUzbekistanDataSource{})
|
||||||
return nil
|
return nil
|
||||||
} else if config.ExchangeRatesDataSource == settings.InternationalMonetaryFundDataSource {
|
|
||||||
Container.current = newCommonHttpExchangeRatesDataProvider(config, &InternationalMonetaryFundDataSource{})
|
|
||||||
return nil
|
|
||||||
} else if config.ExchangeRatesDataSource == settings.UserCustomExchangeRatesDataSource {
|
} else if config.ExchangeRatesDataSource == settings.UserCustomExchangeRatesDataSource {
|
||||||
Container.current = newUserCustomExchangeRatesDataProvider()
|
Container.current = newUserCustomExchangeRatesDataProvider()
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -1,238 +0,0 @@
|
|||||||
package exchangerates
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net/http"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
orderedmap "github.com/wk8/go-ordered-map/v2"
|
|
||||||
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/core"
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/log"
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/models"
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/utils"
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/validators"
|
|
||||||
)
|
|
||||||
|
|
||||||
const internationalMonetaryFundExchangeRateUrl = "https://www.imf.org/external/np/fin/data/rms_five.aspx?tsvflag=Y"
|
|
||||||
const internationalMonetaryFundExchangeRateReferenceUrl = "https://www.imf.org/external/np/fin/data/param_rms_mth.aspx"
|
|
||||||
const internationalMonetaryFundDataSource = "International Monetary Fund"
|
|
||||||
const internationalMonetaryFundBaseCurrency = "USD"
|
|
||||||
|
|
||||||
const internationalMonetaryFundDataUpdateDateFormat = "January 02, 2006 15:04"
|
|
||||||
const internationalMonetaryFundDataUpdateDateTimezone = "America/New_York"
|
|
||||||
|
|
||||||
var internationalMonetaryFundCurrencyNameCodeMap map[string]string
|
|
||||||
|
|
||||||
// InternationalMonetaryFundDataSource defines the structure of exchange rates data source of international monetary fund
|
|
||||||
type InternationalMonetaryFundDataSource struct {
|
|
||||||
HttpExchangeRatesDataSource
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap = make(map[string]string, 38)
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Chinese yuan"] = "CNY"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Euro"] = "EUR"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Japanese yen"] = "JPY"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["U.K. pound"] = "GBP"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["U.S. dollar"] = "USD"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Algerian dinar"] = "DZD"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Australian dollar"] = "AUD"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Botswana pula"] = "BWP"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Brazilian real"] = "BRL"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Brunei dollar"] = "BND"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Canadian dollar"] = "CAD"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Chilean peso"] = "CLP"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Czech koruna"] = "CZK"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Danish krone"] = "DKK"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Indian rupee"] = "INR"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Israeli New Shekel"] = "ILS"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Korean won"] = "KRW"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Kuwaiti dinar"] = "KWD"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Malaysian ringgit"] = "MYR"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Mauritian rupee"] = "MUR"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Mexican peso"] = "MXN"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["New Zealand dollar"] = "NZD"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Norwegian krone"] = "NOK"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Omani rial"] = "OMR"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Peruvian sol"] = "PEN"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Philippine peso"] = "PHP"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Polish zloty"] = "PLN"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Qatari riyal"] = "QAR"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Saudi Arabian riyal"] = "SAR"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Singapore dollar"] = "SGD"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Swedish krona"] = "SEK"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Swiss franc"] = "CHF"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Thai baht"] = "THB"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Trinidadian dollar"] = "TTD"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["U.A.E. dirham"] = "AED"
|
|
||||||
internationalMonetaryFundCurrencyNameCodeMap["Uruguayan peso"] = "UYU"
|
|
||||||
}
|
|
||||||
|
|
||||||
// BuildRequests returns the international monetary fund exchange rates http requests
|
|
||||||
func (e *InternationalMonetaryFundDataSource) BuildRequests() ([]*http.Request, error) {
|
|
||||||
req, err := http.NewRequest("GET", internationalMonetaryFundExchangeRateUrl, nil)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
req.Header.Set("User-Agent", "") // Do not set custom user agent
|
|
||||||
|
|
||||||
return []*http.Request{req}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse returns the common response entity according to the international monetary fund data source raw response
|
|
||||||
func (e *InternationalMonetaryFundDataSource) Parse(c core.Context, content []byte) (*models.LatestExchangeRateResponse, error) {
|
|
||||||
lines := strings.Split(string(content), "\n")
|
|
||||||
|
|
||||||
if len(lines) < 1 {
|
|
||||||
log.Errorf(c, "[international_monetary_fund_datasource.Parse] content is invalid, content is %s", string(content))
|
|
||||||
return nil, errs.ErrFailedToRequestRemoteApi
|
|
||||||
}
|
|
||||||
|
|
||||||
exchangeRatesToSDR := orderedmap.New[string, float64]()
|
|
||||||
latestUpdateDate := ""
|
|
||||||
|
|
||||||
findSDRsPerCurrencyUnitLine := false
|
|
||||||
findExchangeRateDataHeader := false
|
|
||||||
|
|
||||||
for i := 0; i < len(lines); i++ {
|
|
||||||
line := lines[i]
|
|
||||||
|
|
||||||
if line == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
line = strings.ReplaceAll(line, "\r", "")
|
|
||||||
|
|
||||||
if strings.Index(line, "Currency units per SDR") == 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
if strings.Index(line, "SDRs per Currency unit") == 0 {
|
|
||||||
findSDRsPerCurrencyUnitLine = true
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if findExchangeRateDataHeader {
|
|
||||||
items := strings.Split(line, "\t")
|
|
||||||
|
|
||||||
if len(items) != 6 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
currencyCode, exchangeRate := e.parseExchangeRate(c, line, items)
|
|
||||||
|
|
||||||
if currencyCode != nil && exchangeRate != nil {
|
|
||||||
exchangeRatesToSDR.Set(*currencyCode, *exchangeRate)
|
|
||||||
}
|
|
||||||
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if findSDRsPerCurrencyUnitLine {
|
|
||||||
items := strings.Split(line, "\t")
|
|
||||||
|
|
||||||
if len(items) != 6 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if items[0] == "Currency" {
|
|
||||||
findExchangeRateDataHeader = true
|
|
||||||
latestUpdateDate = items[1]
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if latestUpdateDate == "" {
|
|
||||||
log.Errorf(c, "[international_monetary_fund_datasource.Parse] latest update date is empty")
|
|
||||||
return nil, errs.ErrFailedToRequestRemoteApi
|
|
||||||
}
|
|
||||||
|
|
||||||
if exchangeRatesToSDR.Len() < 1 {
|
|
||||||
log.Errorf(c, "[international_monetary_fund_datasource.Parse] exchange rates date is empty")
|
|
||||||
return nil, errs.ErrFailedToRequestRemoteApi
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultCurrencyExchangeRateToSDR, exists := exchangeRatesToSDR.Get(internationalMonetaryFundBaseCurrency)
|
|
||||||
|
|
||||||
if !exists {
|
|
||||||
log.Errorf(c, "[international_monetary_fund_datasource.Parse] exchange rates date does not have default currency \"%s\"", internationalMonetaryFundBaseCurrency)
|
|
||||||
return nil, errs.ErrFailedToRequestRemoteApi
|
|
||||||
}
|
|
||||||
|
|
||||||
exchangeRates := make(models.LatestExchangeRateSlice, 0, exchangeRatesToSDR.Len())
|
|
||||||
|
|
||||||
for pair := exchangeRatesToSDR.Oldest(); pair != nil; pair = pair.Next() {
|
|
||||||
exchangeRates = append(exchangeRates, &models.LatestExchangeRate{
|
|
||||||
Currency: pair.Key,
|
|
||||||
Rate: utils.Float64ToString(defaultCurrencyExchangeRateToSDR / pair.Value),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
timezone, err := time.LoadLocation(internationalMonetaryFundDataUpdateDateTimezone)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
log.Errorf(c, "[international_monetary_fund_datasource.Parse] failed to get timezone, timezone name is %s", internationalMonetaryFundDataUpdateDateTimezone)
|
|
||||||
return nil, errs.ErrFailedToRequestRemoteApi
|
|
||||||
}
|
|
||||||
|
|
||||||
updateDateTime := latestUpdateDate + " 11:00" // The IMF posts Representative and SDR exchange rates every 20 minutes from 11:00 AM to 6:00 PM U.S. EST Monday to Friday except for these holidays
|
|
||||||
updateTime, err := time.ParseInLocation(internationalMonetaryFundDataUpdateDateFormat, updateDateTime, timezone)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
log.Errorf(c, "[international_monetary_fund_datasource.Parse] failed to parse update date, datetime is %s", updateDateTime)
|
|
||||||
return nil, errs.ErrFailedToRequestRemoteApi
|
|
||||||
}
|
|
||||||
|
|
||||||
latestExchangeRateResp := &models.LatestExchangeRateResponse{
|
|
||||||
DataSource: internationalMonetaryFundDataSource,
|
|
||||||
ReferenceUrl: internationalMonetaryFundExchangeRateReferenceUrl,
|
|
||||||
UpdateTime: updateTime.Unix(),
|
|
||||||
BaseCurrency: internationalMonetaryFundBaseCurrency,
|
|
||||||
ExchangeRates: exchangeRates,
|
|
||||||
}
|
|
||||||
|
|
||||||
return latestExchangeRateResp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *InternationalMonetaryFundDataSource) parseExchangeRate(c core.Context, line string, lineItems []string) (*string, *float64) {
|
|
||||||
currencyCode, exists := internationalMonetaryFundCurrencyNameCodeMap[lineItems[0]]
|
|
||||||
|
|
||||||
if !exists {
|
|
||||||
log.Warnf(c, "[international_monetary_fund_datasource.parseExchangeRate] unknown currency name %s, line is %s", lineItems[0], line)
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, exists := validators.AllCurrencyNames[currencyCode]; !exists {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := 1; i < 6; i++ {
|
|
||||||
item := lineItems[i]
|
|
||||||
|
|
||||||
if item == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
rate, err := utils.StringToFloat64(item)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
log.Warnf(c, "[international_monetary_fund_datasource.parseExchangeRate] failed to parse rate, line is %s", line)
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if rate <= 0 {
|
|
||||||
log.Warnf(c, "[international_monetary_fund_datasource.parseExchangeRate] rate is invalid, line is %s", line)
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return ¤cyCode, &rate
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Warnf(c, "[international_monetary_fund_datasource.parseExchangeRate] no exchange rate data exists for currency \"%s\", line is %s", currencyCode, line)
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
@@ -1,188 +0,0 @@
|
|||||||
package exchangerates
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/core"
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/models"
|
|
||||||
)
|
|
||||||
|
|
||||||
const internationalMonetaryFundMinimumRequiredContent = "SDRs per Currency unit and Currency units per SDR (1)\n" +
|
|
||||||
"last five days\n" +
|
|
||||||
"SDRs per Currency unit (2)\n" +
|
|
||||||
"\n" +
|
|
||||||
"Currency\tAugust 28, 2024\tAugust 27, 2024\tAugust 26, 2024\tAugust 23, 2024\tAugust 22, 2024\n" +
|
|
||||||
"Chinese yuan\t0.1040520000\t0.1039250000\t0.1040370000\t0.1040850000\t0.1040570000\n" +
|
|
||||||
"U.S. dollar\t0.7417320000\t0.7410250000\t0.7408270000\t0.7429280000\t0.7423020000\n"
|
|
||||||
|
|
||||||
func TestInternationalMonetaryFundDataSource_StandardDataExtractBaseCurrency(t *testing.T) {
|
|
||||||
dataSource := &InternationalMonetaryFundDataSource{}
|
|
||||||
context := core.NewNullContext()
|
|
||||||
|
|
||||||
actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte(internationalMonetaryFundMinimumRequiredContent))
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
assert.Equal(t, "USD", actualLatestExchangeRateResponse.BaseCurrency)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestInternationalMonetaryFundDataSource_StandardDataExtractUpdateTime(t *testing.T) {
|
|
||||||
dataSource := &InternationalMonetaryFundDataSource{}
|
|
||||||
context := core.NewNullContext()
|
|
||||||
|
|
||||||
actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte(internationalMonetaryFundMinimumRequiredContent))
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
assert.Equal(t, int64(1724857200), actualLatestExchangeRateResponse.UpdateTime)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestInternationalMonetaryFundDataSource_StandardDataExtractExchangeRates(t *testing.T) {
|
|
||||||
dataSource := &InternationalMonetaryFundDataSource{}
|
|
||||||
context := core.NewNullContext()
|
|
||||||
|
|
||||||
actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte(internationalMonetaryFundMinimumRequiredContent))
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
assert.Contains(t, actualLatestExchangeRateResponse.ExchangeRates, &models.LatestExchangeRate{
|
|
||||||
Currency: "USD",
|
|
||||||
Rate: "1",
|
|
||||||
})
|
|
||||||
assert.Contains(t, actualLatestExchangeRateResponse.ExchangeRates, &models.LatestExchangeRate{
|
|
||||||
Currency: "CNY",
|
|
||||||
Rate: "7.128474224426247",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestInternationalMonetaryFundDataSource_BlankContent(t *testing.T) {
|
|
||||||
dataSource := &InternationalMonetaryFundDataSource{}
|
|
||||||
context := core.NewNullContext()
|
|
||||||
|
|
||||||
_, err := dataSource.Parse(context, []byte(""))
|
|
||||||
assert.NotEqual(t, nil, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestInternationalMonetaryFundDataSource_OnlyHeader(t *testing.T) {
|
|
||||||
dataSource := &InternationalMonetaryFundDataSource{}
|
|
||||||
context := core.NewNullContext()
|
|
||||||
|
|
||||||
_, err := dataSource.Parse(context, []byte("SDRs per Currency unit and Currency units per SDR (1)\n"+
|
|
||||||
"last five days\n"+
|
|
||||||
"SDRs per Currency unit (2)"))
|
|
||||||
assert.NotEqual(t, nil, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestInternationalMonetaryFundDataSource_OnlyHeaderAndTitle(t *testing.T) {
|
|
||||||
dataSource := &InternationalMonetaryFundDataSource{}
|
|
||||||
context := core.NewNullContext()
|
|
||||||
|
|
||||||
_, err := dataSource.Parse(context, []byte("SDRs per Currency unit and Currency units per SDR (1)\n"+
|
|
||||||
"last five days\n"+
|
|
||||||
"SDRs per Currency unit (2)\n"+
|
|
||||||
"\n"+
|
|
||||||
"Currency\tAugust 28, 2024\tAugust 27, 2024\tAugust 26, 2024\tAugust 23, 2024\tAugust 22, 2024\n"))
|
|
||||||
assert.NotEqual(t, nil, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestInternationalMonetaryFundDataSource_MissingHeader(t *testing.T) {
|
|
||||||
dataSource := &InternationalMonetaryFundDataSource{}
|
|
||||||
context := core.NewNullContext()
|
|
||||||
|
|
||||||
_, err := dataSource.Parse(context, []byte("Currency\tAugust 28, 2024\tAugust 27, 2024\tAugust 26, 2024\tAugust 23, 2024\tAugust 22, 2024\n"+
|
|
||||||
"Chinese yuan\t0.1040520000\t0.1039250000\t0.1040370000\t0.1040850000\t0.1040570000\n"+
|
|
||||||
"U.S. dollar\t0.7417320000\t0.7410250000\t0.7408270000\t0.7429280000\t0.7423020000\n"))
|
|
||||||
assert.NotEqual(t, nil, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestInternationalMonetaryFundDataSource_MissingDefaultCurrencyData(t *testing.T) {
|
|
||||||
dataSource := &InternationalMonetaryFundDataSource{}
|
|
||||||
context := core.NewNullContext()
|
|
||||||
|
|
||||||
_, err := dataSource.Parse(context, []byte("SDRs per Currency unit and Currency units per SDR (1)\n"+
|
|
||||||
"last five days\n"+
|
|
||||||
"SDRs per Currency unit (2)\n"+
|
|
||||||
"\n"+
|
|
||||||
"Currency\tAugust 28, 2024\tAugust 27, 2024\tAugust 26, 2024\tAugust 23, 2024\tAugust 22, 2024\n"+
|
|
||||||
"Chinese yuan\t0.1040520000\t0.1039250000\t0.1040370000\t0.1040850000\t0.1040570000\n"))
|
|
||||||
assert.NotEqual(t, nil, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestInternationalMonetaryFundDataSource_DefaultCurrencyDataInvalid(t *testing.T) {
|
|
||||||
dataSource := &InternationalMonetaryFundDataSource{}
|
|
||||||
context := core.NewNullContext()
|
|
||||||
|
|
||||||
_, err := dataSource.Parse(context, []byte("SDRs per Currency unit and Currency units per SDR (1)\n"+
|
|
||||||
"last five days\n"+
|
|
||||||
"SDRs per Currency unit (2)\n"+
|
|
||||||
"\n"+
|
|
||||||
"Currency\tAugust 28, 2024\tAugust 27, 2024\tAugust 26, 2024\tAugust 23, 2024\tAugust 22, 2024\n"+
|
|
||||||
"Chinese yuan\t0.1040520000\t0.1039250000\t0.1040370000\t0.1040850000\t0.1040570000\n"+
|
|
||||||
"U.S. dollar\t0\t0\t0\t0\t0\n"))
|
|
||||||
assert.NotEqual(t, nil, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestInternationalMonetaryFundDataSource_InvalidCurrency(t *testing.T) {
|
|
||||||
dataSource := &InternationalMonetaryFundDataSource{}
|
|
||||||
context := core.NewNullContext()
|
|
||||||
|
|
||||||
actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte("SDRs per Currency unit and Currency units per SDR (1)\n"+
|
|
||||||
"last five days\n"+
|
|
||||||
"SDRs per Currency unit (2)\n"+
|
|
||||||
"\n"+
|
|
||||||
"Currency\tAugust 28, 2024\tAugust 27, 2024\tAugust 26, 2024\tAugust 23, 2024\tAugust 22, 2024\n"+
|
|
||||||
"Foo bar\t0.1040520000\t0.1039250000\t0.1040370000\t0.1040850000\t0.1040570000\n"+
|
|
||||||
"U.S. dollar\t0.7417320000\t0.7410250000\t0.7408270000\t0.7429280000\t0.7423020000\n"))
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestInternationalMonetaryFundDataSource_InvalidRate(t *testing.T) {
|
|
||||||
dataSource := &InternationalMonetaryFundDataSource{}
|
|
||||||
context := core.NewNullContext()
|
|
||||||
|
|
||||||
actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte("SDRs per Currency unit and Currency units per SDR (1)\n"+
|
|
||||||
"last five days\n"+
|
|
||||||
"SDRs per Currency unit (2)\n"+
|
|
||||||
"\n"+
|
|
||||||
"Currency\tAugust 28, 2024\tAugust 27, 2024\tAugust 26, 2024\tAugust 23, 2024\tAugust 22, 2024\n"+
|
|
||||||
"Chinese yuan\tnull\tnull\tnull\tnull\tnull\n"+
|
|
||||||
"U.S. dollar\t0.7417320000\t0.7410250000\t0.7408270000\t0.7429280000\t0.7423020000\n"))
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 1)
|
|
||||||
|
|
||||||
actualLatestExchangeRateResponse, err = dataSource.Parse(context, []byte("SDRs per Currency unit and Currency units per SDR (1)\n"+
|
|
||||||
"last five days\n"+
|
|
||||||
"SDRs per Currency unit (2)\n"+
|
|
||||||
"\n"+
|
|
||||||
"Currency\tAugust 28, 2024\tAugust 27, 2024\tAugust 26, 2024\tAugust 23, 2024\tAugust 22, 2024\n"+
|
|
||||||
"Chinese yuan\t0\t0\t0\t0\t0\n"+
|
|
||||||
"U.S. dollar\t0.7417320000\t0.7410250000\t0.7408270000\t0.7429280000\t0.7423020000\n"))
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 1)
|
|
||||||
|
|
||||||
actualLatestExchangeRateResponse, err = dataSource.Parse(context, []byte("SDRs per Currency unit and Currency units per SDR (1)\n"+
|
|
||||||
"last five days\n"+
|
|
||||||
"SDRs per Currency unit (2)\n"+
|
|
||||||
"\n"+
|
|
||||||
"Currency\tAugust 28, 2024\tAugust 27, 2024\tAugust 26, 2024\tAugust 23, 2024\tAugust 22, 2024\n"+
|
|
||||||
"Chinese yuan\t\t\t\t\t\n"+
|
|
||||||
"U.S. dollar\t0.7417320000\t0.7410250000\t0.7408270000\t0.7429280000\t0.7423020000\n"))
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
assert.Len(t, actualLatestExchangeRateResponse.ExchangeRates, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestInternationalMonetaryFundDataSource_LatestDateNotHasRate(t *testing.T) {
|
|
||||||
dataSource := &InternationalMonetaryFundDataSource{}
|
|
||||||
context := core.NewNullContext()
|
|
||||||
|
|
||||||
actualLatestExchangeRateResponse, err := dataSource.Parse(context, []byte("SDRs per Currency unit and Currency units per SDR (1)\n"+
|
|
||||||
"last five days\n"+
|
|
||||||
"SDRs per Currency unit (2)\n"+
|
|
||||||
"\n"+
|
|
||||||
"Currency\tAugust 28, 2024\tAugust 27, 2024\tAugust 26, 2024\tAugust 23, 2024\tAugust 22, 2024\n"+
|
|
||||||
"U.S. dollar\t0.7417320000\t0.7410250000\t0.7408270000\t0.7429280000\t0.7423020000\n"+
|
|
||||||
"U.A.E. dirham\t\t0.2017770000\t0.2017230000\t\t0.2021240000\n"))
|
|
||||||
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
assert.Contains(t, actualLatestExchangeRateResponse.ExchangeRates, &models.LatestExchangeRate{
|
|
||||||
Currency: "AED",
|
|
||||||
Rate: "3.675998751096507",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
+17
-19
@@ -125,24 +125,23 @@ const (
|
|||||||
|
|
||||||
// Exchange rates data source types
|
// Exchange rates data source types
|
||||||
const (
|
const (
|
||||||
ReserveBankOfAustraliaDataSource string = "reserve_bank_of_australia"
|
ReserveBankOfAustraliaDataSource string = "reserve_bank_of_australia"
|
||||||
BankOfCanadaDataSource string = "bank_of_canada"
|
BankOfCanadaDataSource string = "bank_of_canada"
|
||||||
CzechNationalBankDataSource string = "czech_national_bank"
|
CzechNationalBankDataSource string = "czech_national_bank"
|
||||||
DanmarksNationalbankDataSource string = "danmarks_national_bank"
|
DanmarksNationalbankDataSource string = "danmarks_national_bank"
|
||||||
EuroCentralBankDataSource string = "euro_central_bank"
|
EuroCentralBankDataSource string = "euro_central_bank"
|
||||||
NationalBankOfGeorgiaDataSource string = "national_bank_of_georgia"
|
NationalBankOfGeorgiaDataSource string = "national_bank_of_georgia"
|
||||||
CentralBankOfHungaryDataSource string = "central_bank_of_hungary"
|
CentralBankOfHungaryDataSource string = "central_bank_of_hungary"
|
||||||
BankOfIsraelDataSource string = "bank_of_israel"
|
BankOfIsraelDataSource string = "bank_of_israel"
|
||||||
CentralBankOfMyanmarDataSource string = "central_bank_of_myanmar"
|
CentralBankOfMyanmarDataSource string = "central_bank_of_myanmar"
|
||||||
NorgesBankDataSource string = "norges_bank"
|
NorgesBankDataSource string = "norges_bank"
|
||||||
NationalBankOfPolandDataSource string = "national_bank_of_poland"
|
NationalBankOfPolandDataSource string = "national_bank_of_poland"
|
||||||
NationalBankOfRomaniaDataSource string = "national_bank_of_romania"
|
NationalBankOfRomaniaDataSource string = "national_bank_of_romania"
|
||||||
BankOfRussiaDataSource string = "bank_of_russia"
|
BankOfRussiaDataSource string = "bank_of_russia"
|
||||||
SwissNationalBankDataSource string = "swiss_national_bank"
|
SwissNationalBankDataSource string = "swiss_national_bank"
|
||||||
NationalBankOfUkraineDataSource string = "national_bank_of_ukraine"
|
NationalBankOfUkraineDataSource string = "national_bank_of_ukraine"
|
||||||
CentralBankOfUzbekistanDataSource string = "central_bank_of_uzbekistan"
|
CentralBankOfUzbekistanDataSource string = "central_bank_of_uzbekistan"
|
||||||
InternationalMonetaryFundDataSource string = "international_monetary_fund"
|
UserCustomExchangeRatesDataSource string = "user_custom"
|
||||||
UserCustomExchangeRatesDataSource string = "user_custom"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -1180,7 +1179,6 @@ func loadExchangeRatesConfiguration(config *Config, configFile *ini.File, sectio
|
|||||||
dataSource == SwissNationalBankDataSource ||
|
dataSource == SwissNationalBankDataSource ||
|
||||||
dataSource == NationalBankOfUkraineDataSource ||
|
dataSource == NationalBankOfUkraineDataSource ||
|
||||||
dataSource == CentralBankOfUzbekistanDataSource ||
|
dataSource == CentralBankOfUzbekistanDataSource ||
|
||||||
dataSource == InternationalMonetaryFundDataSource ||
|
|
||||||
dataSource == UserCustomExchangeRatesDataSource {
|
dataSource == UserCustomExchangeRatesDataSource {
|
||||||
config.ExchangeRatesDataSource = dataSource
|
config.ExchangeRatesDataSource = dataSource
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ import { ThemeType } from '@/core/theme.ts';
|
|||||||
import { NumeralSystem } from '@/core/numeral.ts';
|
import { NumeralSystem } from '@/core/numeral.ts';
|
||||||
import {
|
import {
|
||||||
type DateTime,
|
type DateTime,
|
||||||
|
type DateFormatOrder,
|
||||||
MeridiemIndicator,
|
MeridiemIndicator,
|
||||||
KnownDateTimeFormat
|
KnownDateTimeFormat
|
||||||
} from '@/core/datetime.ts';
|
} from '@/core/datetime.ts';
|
||||||
@@ -120,6 +121,8 @@ const theme = useTheme();
|
|||||||
const {
|
const {
|
||||||
tt,
|
tt,
|
||||||
getCurrentNumeralSystemType,
|
getCurrentNumeralSystemType,
|
||||||
|
getLongDateFormatOrder,
|
||||||
|
getShortDateFormatOrder,
|
||||||
parseDateTimeFromLongDateTime,
|
parseDateTimeFromLongDateTime,
|
||||||
parseDateTimeFromShortDateTime,
|
parseDateTimeFromShortDateTime,
|
||||||
formatDateTimeToLongDateTime
|
formatDateTimeToLongDateTime
|
||||||
@@ -144,6 +147,8 @@ const secondInput = useTemplateRef<VAutocomplete>('secondInput');
|
|||||||
|
|
||||||
const isDarkMode = computed<boolean>(() => theme.global.name.value === ThemeType.Dark);
|
const isDarkMode = computed<boolean>(() => theme.global.name.value === ThemeType.Dark);
|
||||||
const numeralSystem = computed<NumeralSystem>(() => getCurrentNumeralSystemType());
|
const numeralSystem = computed<NumeralSystem>(() => getCurrentNumeralSystemType());
|
||||||
|
const longDateFormatOrder = computed<DateFormatOrder>(() => getLongDateFormatOrder());
|
||||||
|
const shortDateFormatOrder = computed<DateFormatOrder>(() => getShortDateFormatOrder());
|
||||||
|
|
||||||
const dateTime = computed<Date>({
|
const dateTime = computed<Date>({
|
||||||
get: () => {
|
get: () => {
|
||||||
@@ -245,10 +250,10 @@ function onPaste(event: ClipboardEvent): void {
|
|||||||
|
|
||||||
text = text.trim();
|
text = text.trim();
|
||||||
|
|
||||||
const formats = KnownDateTimeFormat.detect(text);
|
const formats = KnownDateTimeFormat.detect(text, longDateFormatOrder.value, shortDateFormatOrder.value);
|
||||||
let dt: DateTime | undefined = undefined;
|
let dt: DateTime | undefined = undefined;
|
||||||
|
|
||||||
if (formats && formats.length === 1) {
|
if (formats && (formats.length === 1 || (formats.length > 1 && formats[0]!.type === longDateFormatOrder.value && formats[0]!.type === shortDateFormatOrder.value))) {
|
||||||
dt = parseDateTimeFromKnownDateTimeFormat(text, formats[0] as KnownDateTimeFormat);
|
dt = parseDateTimeFromKnownDateTimeFormat(text, formats[0] as KnownDateTimeFormat);
|
||||||
|
|
||||||
if (dt) {
|
if (dt) {
|
||||||
|
|||||||
@@ -229,6 +229,11 @@ export const SUPPORTED_IMPORT_FILE_CATEGORY_AND_TYPES: ImportFileCategoryAndType
|
|||||||
{
|
{
|
||||||
categoryName: 'General Bank Statement Format',
|
categoryName: 'General Bank Statement Format',
|
||||||
fileTypes: [
|
fileTypes: [
|
||||||
|
{
|
||||||
|
type: 'camt052',
|
||||||
|
name: 'Camt.052 Bank to Customer Statement File',
|
||||||
|
extensions: '.xml'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
type: 'camt053',
|
type: 'camt053',
|
||||||
name: 'Camt.053 Bank to Customer Statement File',
|
name: 'Camt.053 Bank to Customer Statement File',
|
||||||
|
|||||||
+193
-117
@@ -345,116 +345,41 @@ export class MeridiemIndicator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class KnownDateTimeFormat {
|
|
||||||
private static readonly allInstances: KnownDateTimeFormat[] = [];
|
|
||||||
|
|
||||||
public static readonly DefaultDateTime = new KnownDateTimeFormat('YYYY-MM-DD HH:mm:ss', /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/);
|
|
||||||
public static readonly DefaultDateTimeWithTimezone = new KnownDateTimeFormat('YYYY-MM-DD HH:mm:ssZ', /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](Z|[+-](0[0-9]|1[0-4]):[0-5][0-9])$/);
|
|
||||||
public static readonly DefaultDateTimeWithoutSecond = new KnownDateTimeFormat('YYYY-MM-DD HH:mm', /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) ([0-1][0-9]|2[0-3]):[0-5][0-9]$/);
|
|
||||||
public static readonly DefaultDate = new KnownDateTimeFormat('YYYY-MM-DD', /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/);
|
|
||||||
public static readonly RFC3339 = new KnownDateTimeFormat('YYYY-MM-DDTHH:mm:ssZ', /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](Z|[+-](0[0-9]|1[0-4]):[0-5][0-9])$/);
|
|
||||||
public static readonly YYYYMMDDSlashWithTime = new KnownDateTimeFormat('YYYY/MM/DD HH:mm:ss', /^\d{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1]) ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/);
|
|
||||||
public static readonly MMDDYYSlashWithTime = new KnownDateTimeFormat('MM/DD/YYYY HH:mm:ss', /^(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])\/\d{4} ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/);
|
|
||||||
public static readonly DDMMYYSlashWithTime = new KnownDateTimeFormat('DD/MM/YYYY HH:mm:ss', /^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/\d{4} ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/);
|
|
||||||
public static readonly YYYYMMDDDotWithTime = new KnownDateTimeFormat('YYYY.MM.DD HH:mm:ss', /^\d{4}\.(0[1-9]|1[0-2])\.(0[1-9]|[1-2][0-9]|3[0-1]) ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/);
|
|
||||||
public static readonly MMDDYYDotWithTime = new KnownDateTimeFormat('MM.DD.YYYY HH:mm:ss', /^(0[1-9]|1[0-2])\.(0[1-9]|[1-2][0-9]|3[0-1])\.\d{4} ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/);
|
|
||||||
public static readonly DDMMYYDotWithTime = new KnownDateTimeFormat('DD.MM.YYYY HH:mm:ss', /^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.\d{4} ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/);
|
|
||||||
public static readonly YYYYMMDDSlash = new KnownDateTimeFormat('YYYY/MM/DD', /^\d{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])$/);
|
|
||||||
public static readonly MMDDYYSlash = new KnownDateTimeFormat('MM/DD/YYYY', /^(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])\/\d{4}$/);
|
|
||||||
public static readonly DDMMYYSlash = new KnownDateTimeFormat('DD/MM/YYYY', /^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/\d{4}$/);
|
|
||||||
public static readonly YYYYMMDDDot = new KnownDateTimeFormat('YYYY.MM.DD', /^\d{4}\.(0[1-9]|1[0-2])\.(0[1-9]|[1-2][0-9]|3[0-1])$/);
|
|
||||||
public static readonly MMDDYYDot = new KnownDateTimeFormat('MM.DD.YYYY', /^(0[1-9]|1[0-2])\.(0[1-9]|[1-2][0-9]|3[0-1])\.\d{4}$/);
|
|
||||||
public static readonly DDMMYYDot = new KnownDateTimeFormat('DD.MM.YYYY', /^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.\d{4}$/);
|
|
||||||
public static readonly YYYYMMDD = new KnownDateTimeFormat('YYYYMMDD', /^\d{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$/);
|
|
||||||
|
|
||||||
public readonly format: string;
|
|
||||||
private readonly regex: RegExp;
|
|
||||||
|
|
||||||
private constructor(format: string, regex: RegExp) {
|
|
||||||
this.format = format;
|
|
||||||
this.regex = regex;
|
|
||||||
|
|
||||||
KnownDateTimeFormat.allInstances.push(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public isValid(dateTime: string): boolean {
|
|
||||||
return this.regex.test(dateTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static values(): KnownDateTimeFormat[] {
|
|
||||||
return KnownDateTimeFormat.allInstances;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static detect(dateTime: string): KnownDateTimeFormat[] | undefined {
|
|
||||||
const result: KnownDateTimeFormat[] = [];
|
|
||||||
|
|
||||||
for (const format of KnownDateTimeFormat.allInstances) {
|
|
||||||
if (format.isValid(dateTime)) {
|
|
||||||
result.push(format);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result.length > 0 ? result : undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static detectMulti(dateTimes: string[]): KnownDateTimeFormat[] | undefined {
|
|
||||||
const detectedCounts: Record<string, number> = {};
|
|
||||||
|
|
||||||
for (const dateTime of dateTimes) {
|
|
||||||
const detectedFormats = KnownDateTimeFormat.detect(dateTime);
|
|
||||||
|
|
||||||
if (detectedFormats) {
|
|
||||||
for (const format of detectedFormats) {
|
|
||||||
detectedCounts[format.format] = (detectedCounts[format.format] || 0) + 1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const result: KnownDateTimeFormat[] = [];
|
|
||||||
|
|
||||||
for (const format of KnownDateTimeFormat.allInstances) {
|
|
||||||
if (detectedCounts[format.format] === dateTimes.length) {
|
|
||||||
result.push(format);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result.length > 0 ? result : undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const LANGUAGE_DEFAULT_DATE_TIME_FORMAT_VALUE: number = 0;
|
export const LANGUAGE_DEFAULT_DATE_TIME_FORMAT_VALUE: number = 0;
|
||||||
|
|
||||||
|
export enum DateFormatOrder {
|
||||||
|
YMD = 1,
|
||||||
|
MDY = 2,
|
||||||
|
DMY = 3
|
||||||
|
}
|
||||||
|
|
||||||
export interface DateFormat {
|
export interface DateFormat {
|
||||||
readonly type: number;
|
readonly type: number;
|
||||||
readonly key: string;
|
readonly typeName: string;
|
||||||
readonly isMonthAfterYear: boolean;
|
readonly order: DateFormatOrder;
|
||||||
}
|
}
|
||||||
|
|
||||||
type DateFormatTypeName = 'YYYYMMDD' | 'MMDDYYYY' | 'DDMMYYYY';
|
type DateFormatTypeName = 'YearMonthDay' | 'MonthDayYear' | 'DayMonthYear';
|
||||||
|
|
||||||
export class LongDateFormat implements DateFormat {
|
export class LongDateFormat implements DateFormat {
|
||||||
private static readonly allInstances: LongDateFormat[] = [];
|
private static readonly allInstances: LongDateFormat[] = [];
|
||||||
private static readonly allInstancesByType: Record<number, LongDateFormat> = {};
|
private static readonly allInstancesByType: Record<number, LongDateFormat> = {};
|
||||||
private static readonly allInstancesByTypeName: Record<string, LongDateFormat> = {};
|
private static readonly allInstancesByTypeName: Record<string, LongDateFormat> = {};
|
||||||
|
|
||||||
public static readonly YYYYMMDD = new LongDateFormat(1, 'YYYYMMDD', 'yyyy_mm_dd', true);
|
public static readonly YearMonthDay = new LongDateFormat(1, 'YearMonthDay', DateFormatOrder.YMD);
|
||||||
public static readonly MMDDYYYY = new LongDateFormat(2, 'MMDDYYYY', 'mm_dd_yyyy', false);
|
public static readonly MonthDayYear = new LongDateFormat(2, 'MonthDayYear', DateFormatOrder.MDY);
|
||||||
public static readonly DDMMYYYY = new LongDateFormat(3, 'DDMMYYYY', 'dd_mm_yyyy', false);
|
public static readonly DayMonthYear = new LongDateFormat(3, 'DayMonthYear', DateFormatOrder.DMY);
|
||||||
|
|
||||||
public static readonly Default = LongDateFormat.YYYYMMDD;
|
public static readonly Default = LongDateFormat.YearMonthDay;
|
||||||
|
|
||||||
public readonly type: number;
|
public readonly type: number;
|
||||||
public readonly typeName: string;
|
public readonly typeName: string;
|
||||||
public readonly key: string;
|
public readonly order: DateFormatOrder;
|
||||||
public readonly isMonthAfterYear: boolean;
|
|
||||||
|
|
||||||
private constructor(type: number, typeName: DateFormatTypeName, key: string, isMonthAfterYear: boolean) {
|
private constructor(type: number, typeName: DateFormatTypeName, order: DateFormatOrder) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.typeName = typeName;
|
this.typeName = typeName;
|
||||||
this.key = key;
|
this.order = order;
|
||||||
this.isMonthAfterYear = isMonthAfterYear;
|
|
||||||
|
|
||||||
LongDateFormat.allInstances.push(this);
|
LongDateFormat.allInstances.push(this);
|
||||||
LongDateFormat.allInstancesByType[type] = this;
|
LongDateFormat.allInstancesByType[type] = this;
|
||||||
@@ -479,22 +404,20 @@ export class ShortDateFormat implements DateFormat {
|
|||||||
private static readonly allInstancesByType: Record<number, ShortDateFormat> = {};
|
private static readonly allInstancesByType: Record<number, ShortDateFormat> = {};
|
||||||
private static readonly allInstancesByTypeName: Record<string, ShortDateFormat> = {};
|
private static readonly allInstancesByTypeName: Record<string, ShortDateFormat> = {};
|
||||||
|
|
||||||
public static readonly YYYYMMDD = new ShortDateFormat(1, 'YYYYMMDD', 'yyyy_mm_dd', true);
|
public static readonly YearMonthDay = new ShortDateFormat(1, 'YearMonthDay', DateFormatOrder.YMD);
|
||||||
public static readonly MMDDYYYY = new ShortDateFormat(2, 'MMDDYYYY', 'mm_dd_yyyy', false);
|
public static readonly MonthDayYear = new ShortDateFormat(2, 'MonthDayYear', DateFormatOrder.MDY);
|
||||||
public static readonly DDMMYYYY = new ShortDateFormat(3, 'DDMMYYYY', 'dd_mm_yyyy', false);
|
public static readonly DayMonthYear = new ShortDateFormat(3, 'DayMonthYear', DateFormatOrder.DMY);
|
||||||
|
|
||||||
public static readonly Default = ShortDateFormat.YYYYMMDD;
|
public static readonly Default = ShortDateFormat.YearMonthDay;
|
||||||
|
|
||||||
public readonly type: number;
|
public readonly type: number;
|
||||||
public readonly typeName: string;
|
public readonly typeName: string;
|
||||||
public readonly key: string;
|
public readonly order: DateFormatOrder;
|
||||||
public readonly isMonthAfterYear: boolean;
|
|
||||||
|
|
||||||
private constructor(type: number, typeName: DateFormatTypeName, key: string, isMonthAfterYear: boolean) {
|
private constructor(type: number, typeName: DateFormatTypeName, order: DateFormatOrder) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.typeName = typeName;
|
this.typeName = typeName;
|
||||||
this.key = key;
|
this.order = order;
|
||||||
this.isMonthAfterYear = isMonthAfterYear;
|
|
||||||
|
|
||||||
ShortDateFormat.allInstances.push(this);
|
ShortDateFormat.allInstances.push(this);
|
||||||
ShortDateFormat.allInstancesByType[type] = this;
|
ShortDateFormat.allInstancesByType[type] = this;
|
||||||
@@ -516,34 +439,32 @@ export class ShortDateFormat implements DateFormat {
|
|||||||
|
|
||||||
export interface TimeFormat {
|
export interface TimeFormat {
|
||||||
readonly type: number;
|
readonly type: number;
|
||||||
readonly key: string;
|
readonly typeName: string;
|
||||||
readonly is24HourFormat: boolean;
|
readonly is24HourFormat: boolean;
|
||||||
readonly isMeridiemIndicatorFirst: boolean | null;
|
readonly isMeridiemIndicatorFirst: boolean | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type LongTimeFormatTypeName = 'HHMMSS' | 'AHHMMSS' | 'HHMMSSA';
|
export type LongTimeFormatTypeName = 'HourMinuteSecond' | 'MeridiemIndicatorHourMinuteSecond' | 'HourMinuteSecondMeridiemIndicator';
|
||||||
|
|
||||||
export class LongTimeFormat implements TimeFormat {
|
export class LongTimeFormat implements TimeFormat {
|
||||||
private static readonly allInstances: LongTimeFormat[] = [];
|
private static readonly allInstances: LongTimeFormat[] = [];
|
||||||
private static readonly allInstancesByType: Record<number, LongTimeFormat> = {};
|
private static readonly allInstancesByType: Record<number, LongTimeFormat> = {};
|
||||||
private static readonly allInstancesByTypeName: Record<string, LongTimeFormat> = {};
|
private static readonly allInstancesByTypeName: Record<string, LongTimeFormat> = {};
|
||||||
|
|
||||||
public static readonly HHMMSS = new LongTimeFormat(1, 'HHMMSS', 'hh_mm_ss', true, null);
|
public static readonly HourMinuteSecond = new LongTimeFormat(1, 'HourMinuteSecond', true, null);
|
||||||
public static readonly AHHMMSS = new LongTimeFormat(2, 'AHHMMSS', 'a_hh_mm_ss', false, true);
|
public static readonly MeridiemIndicatorHourMinuteSecond = new LongTimeFormat(2, 'MeridiemIndicatorHourMinuteSecond', false, true);
|
||||||
public static readonly HHMMSSA = new LongTimeFormat(3, 'HHMMSSA', 'hh_mm_ss_a', false, false);
|
public static readonly HourMinuteSecondMeridiemIndicator = new LongTimeFormat(3, 'HourMinuteSecondMeridiemIndicator', false, false);
|
||||||
|
|
||||||
public static readonly Default = LongTimeFormat.HHMMSS;
|
public static readonly Default = LongTimeFormat.HourMinuteSecond;
|
||||||
|
|
||||||
public readonly type: number;
|
public readonly type: number;
|
||||||
public readonly typeName: string;
|
public readonly typeName: string;
|
||||||
public readonly key: string;
|
|
||||||
public readonly is24HourFormat: boolean;
|
public readonly is24HourFormat: boolean;
|
||||||
public readonly isMeridiemIndicatorFirst: boolean | null;
|
public readonly isMeridiemIndicatorFirst: boolean | null;
|
||||||
|
|
||||||
private constructor(type: number, typeName: LongTimeFormatTypeName, key: string, is24HourFormat: boolean, isMeridiemIndicatorFirst: boolean | null) {
|
private constructor(type: number, typeName: LongTimeFormatTypeName, is24HourFormat: boolean, isMeridiemIndicatorFirst: boolean | null) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.typeName = typeName;
|
this.typeName = typeName;
|
||||||
this.key = key;
|
|
||||||
this.is24HourFormat = is24HourFormat;
|
this.is24HourFormat = is24HourFormat;
|
||||||
this.isMeridiemIndicatorFirst = isMeridiemIndicatorFirst;
|
this.isMeridiemIndicatorFirst = isMeridiemIndicatorFirst;
|
||||||
|
|
||||||
@@ -565,29 +486,27 @@ export class LongTimeFormat implements TimeFormat {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ShortTimeFormatTypeName = 'HHMM' | 'AHHMM' | 'HHMMA';
|
export type ShortTimeFormatTypeName = 'HourMinute' | 'MeridiemIndicatorHourMinute' | 'HourMinuteMeridiemIndicator';
|
||||||
|
|
||||||
export class ShortTimeFormat implements TimeFormat {
|
export class ShortTimeFormat implements TimeFormat {
|
||||||
private static readonly allInstances: ShortTimeFormat[] = [];
|
private static readonly allInstances: ShortTimeFormat[] = [];
|
||||||
private static readonly allInstancesByType: Record<number, ShortTimeFormat> = {};
|
private static readonly allInstancesByType: Record<number, ShortTimeFormat> = {};
|
||||||
private static readonly allInstancesByTypeName: Record<string, ShortTimeFormat> = {};
|
private static readonly allInstancesByTypeName: Record<string, ShortTimeFormat> = {};
|
||||||
|
|
||||||
public static readonly HHMM = new ShortTimeFormat(1, 'HHMM', 'hh_mm', true, null);
|
public static readonly HourMinute = new ShortTimeFormat(1, 'HourMinute', true, null);
|
||||||
public static readonly AHHMM = new ShortTimeFormat(2, 'AHHMM', 'a_hh_mm', false, true);
|
public static readonly MeridiemIndicatorHourMinute = new ShortTimeFormat(2, 'MeridiemIndicatorHourMinute', false, true);
|
||||||
public static readonly HHMMA = new ShortTimeFormat(3, 'HHMMA', 'hh_mm_a', false, false);
|
public static readonly HourMinuteMeridiemIndicator = new ShortTimeFormat(3, 'HourMinuteMeridiemIndicator', false, false);
|
||||||
|
|
||||||
public static readonly Default = ShortTimeFormat.HHMM;
|
public static readonly Default = ShortTimeFormat.HourMinute;
|
||||||
|
|
||||||
public readonly type: number;
|
public readonly type: number;
|
||||||
public readonly typeName: string;
|
public readonly typeName: string;
|
||||||
public readonly key: string;
|
|
||||||
public readonly is24HourFormat: boolean;
|
public readonly is24HourFormat: boolean;
|
||||||
public readonly isMeridiemIndicatorFirst: boolean | null;
|
public readonly isMeridiemIndicatorFirst: boolean | null;
|
||||||
|
|
||||||
private constructor(type: number, typeName: ShortTimeFormatTypeName, key: string, is24HourFormat: boolean, isMeridiemIndicatorFirst: boolean | null) {
|
private constructor(type: number, typeName: ShortTimeFormatTypeName, is24HourFormat: boolean, isMeridiemIndicatorFirst: boolean | null) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.typeName = typeName;
|
this.typeName = typeName;
|
||||||
this.key = key;
|
|
||||||
this.is24HourFormat = is24HourFormat;
|
this.is24HourFormat = is24HourFormat;
|
||||||
this.isMeridiemIndicatorFirst = isMeridiemIndicatorFirst;
|
this.isMeridiemIndicatorFirst = isMeridiemIndicatorFirst;
|
||||||
|
|
||||||
@@ -609,6 +528,163 @@ export class ShortTimeFormat implements TimeFormat {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class KnownDateTimeFormat {
|
||||||
|
private static readonly allInstances: KnownDateTimeFormat[] = [];
|
||||||
|
private static readonly allYMDInstances: KnownDateTimeFormat[] = [];
|
||||||
|
private static readonly allMDYInstances: KnownDateTimeFormat[] = [];
|
||||||
|
private static readonly allDMYInstances: KnownDateTimeFormat[] = [];
|
||||||
|
|
||||||
|
public static readonly DefaultDateTime = new KnownDateTimeFormat('YYYY-MM-DD HH:mm:ss', DateFormatOrder.YMD, /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/);
|
||||||
|
public static readonly DefaultDateTimeWithTimezone = new KnownDateTimeFormat('YYYY-MM-DD HH:mm:ssZ', DateFormatOrder.YMD, /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](Z|[+-](0[0-9]|1[0-4]):[0-5][0-9])$/);
|
||||||
|
public static readonly DefaultDateTimeWithoutSecond = new KnownDateTimeFormat('YYYY-MM-DD HH:mm', DateFormatOrder.YMD, /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) ([0-1][0-9]|2[0-3]):[0-5][0-9]$/);
|
||||||
|
public static readonly DefaultDate = new KnownDateTimeFormat('YYYY-MM-DD', DateFormatOrder.YMD, /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/);
|
||||||
|
|
||||||
|
public static readonly RFC3339 = new KnownDateTimeFormat('YYYY-MM-DDTHH:mm:ssZ', DateFormatOrder.YMD, /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](Z|[+-](0[0-9]|1[0-4]):[0-5][0-9])$/);
|
||||||
|
|
||||||
|
public static readonly YYYYMMDDSlashWithTime = new KnownDateTimeFormat('YYYY/MM/DD HH:mm:ss', DateFormatOrder.YMD, /^\d{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1]) ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/);
|
||||||
|
public static readonly MMDDYYYYSlashWithTime = new KnownDateTimeFormat('MM/DD/YYYY HH:mm:ss', DateFormatOrder.MDY, /^(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])\/\d{4} ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/);
|
||||||
|
public static readonly DDMMYYYYSlashWithTime = new KnownDateTimeFormat('DD/MM/YYYY HH:mm:ss', DateFormatOrder.DMY, /^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/\d{4} ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/);
|
||||||
|
|
||||||
|
public static readonly YYYYMMDDDotWithTime = new KnownDateTimeFormat('YYYY.MM.DD HH:mm:ss', DateFormatOrder.YMD, /^\d{4}\.(0[1-9]|1[0-2])\.(0[1-9]|[1-2][0-9]|3[0-1]) ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/);
|
||||||
|
public static readonly MMDDYYYYDotWithTime = new KnownDateTimeFormat('MM.DD.YYYY HH:mm:ss', DateFormatOrder.MDY, /^(0[1-9]|1[0-2])\.(0[1-9]|[1-2][0-9]|3[0-1])\.\d{4} ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/);
|
||||||
|
public static readonly DDMMYYYYDotWithTime = new KnownDateTimeFormat('DD.MM.YYYY HH:mm:ss', DateFormatOrder.DMY, /^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.\d{4} ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/);
|
||||||
|
|
||||||
|
public static readonly MMDDYYYYDash = new KnownDateTimeFormat('MM-DD-YYYY', DateFormatOrder.MDY, /^(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])-\d{4}$/);
|
||||||
|
public static readonly DDMMYYYYDash = new KnownDateTimeFormat('DD-MM-YYYY', DateFormatOrder.DMY, /^(0[1-9]|[1-2][0-9]|3[0-1])-(0[1-9]|1[0-2])-\d{4}$/);
|
||||||
|
|
||||||
|
public static readonly YYYYMMDDSlash = new KnownDateTimeFormat('YYYY/MM/DD', DateFormatOrder.YMD, /^\d{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])$/);
|
||||||
|
public static readonly MMDDYYYYSlash = new KnownDateTimeFormat('MM/DD/YYYY', DateFormatOrder.MDY, /^(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])\/\d{4}$/);
|
||||||
|
public static readonly DDMMYYYYSlash = new KnownDateTimeFormat('DD/MM/YYYY', DateFormatOrder.DMY, /^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/\d{4}$/);
|
||||||
|
|
||||||
|
public static readonly YYYYMDSlash = new KnownDateTimeFormat('YYYY/M/D', DateFormatOrder.YMD, /^\d{4}\/([1-9]|1[0-2])\/([1-9]|[1-2][0-9]|3[0-1])$/);
|
||||||
|
public static readonly MDYYYYSlash = new KnownDateTimeFormat('M/D/YYYY', DateFormatOrder.MDY, /^([1-9]|1[0-2])\/([1-9]|[1-2][0-9]|3[0-1])\/\d{4}$/);
|
||||||
|
public static readonly DMYYYYSlash = new KnownDateTimeFormat('D/M/YYYY', DateFormatOrder.DMY, /^([1-9]|[1-2][0-9]|3[0-1])\/([1-9]|1[0-2])\/\d{4}$/);
|
||||||
|
|
||||||
|
public static readonly YYYYMMDDDot = new KnownDateTimeFormat('YYYY.MM.DD', DateFormatOrder.YMD, /^\d{4}\.(0[1-9]|1[0-2])\.(0[1-9]|[1-2][0-9]|3[0-1])$/);
|
||||||
|
public static readonly MMDDYYYYDot = new KnownDateTimeFormat('MM.DD.YYYY', DateFormatOrder.MDY, /^(0[1-9]|1[0-2])\.(0[1-9]|[1-2][0-9]|3[0-1])\.\d{4}$/);
|
||||||
|
public static readonly DDMMYYYYDot = new KnownDateTimeFormat('DD.MM.YYYY', DateFormatOrder.DMY, /^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.\d{4}$/);
|
||||||
|
|
||||||
|
public static readonly YYYYMDDot = new KnownDateTimeFormat('YYYY.M.D', DateFormatOrder.YMD, /^\d{4}\.([1-9]|1[0-2])\.([1-9]|[1-2][0-9]|3[0-1])$/);
|
||||||
|
public static readonly MDYYYYDot = new KnownDateTimeFormat('M.D.YYYY', DateFormatOrder.MDY, /^([1-9]|1[0-2])\.([1-9]|[1-2][0-9]|3[0-1])\.\d{4}$/);
|
||||||
|
public static readonly DMYYYYDot = new KnownDateTimeFormat('D.M.YYYY', DateFormatOrder.DMY, /^([1-9]|[1-2][0-9]|3[0-1])\.([1-9]|1[0-2])\.\d{4}$/);
|
||||||
|
|
||||||
|
public static readonly YYYYMMDD = new KnownDateTimeFormat('YYYYMMDD', DateFormatOrder.YMD, /^\d{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$/);
|
||||||
|
|
||||||
|
public readonly format: string;
|
||||||
|
public readonly type: DateFormatOrder;
|
||||||
|
private readonly regex: RegExp;
|
||||||
|
|
||||||
|
private constructor(format: string, type: DateFormatOrder, regex: RegExp) {
|
||||||
|
this.format = format;
|
||||||
|
this.type = type;
|
||||||
|
this.regex = regex;
|
||||||
|
|
||||||
|
if (type === DateFormatOrder.YMD) {
|
||||||
|
KnownDateTimeFormat.allYMDInstances.push(this);
|
||||||
|
} else if (type === DateFormatOrder.MDY) {
|
||||||
|
KnownDateTimeFormat.allMDYInstances.push(this);
|
||||||
|
} else if (type === DateFormatOrder.DMY) {
|
||||||
|
KnownDateTimeFormat.allDMYInstances.push(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
KnownDateTimeFormat.allInstances.push(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public isValid(dateTime: string): boolean {
|
||||||
|
return this.regex.test(dateTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static values(): KnownDateTimeFormat[] {
|
||||||
|
return KnownDateTimeFormat.allInstances;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static detect(dateTime: string, longDateTimeFormatOrder: DateFormatOrder, shortDateTimeFormatOrder: DateFormatOrder): KnownDateTimeFormat[] | undefined {
|
||||||
|
const allFormats: KnownDateTimeFormat[] = KnownDateTimeFormat.getAllFormatsByOrder(longDateTimeFormatOrder, shortDateTimeFormatOrder);
|
||||||
|
return KnownDateTimeFormat.detectSingle(dateTime, allFormats);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static detectMulti(dateTimes: string[], longDateTimeFormatOrder: DateFormatOrder, shortDateTimeFormatOrder: DateFormatOrder): KnownDateTimeFormat[] | undefined {
|
||||||
|
const detectedCounts: Record<string, number> = {};
|
||||||
|
const allFormats: KnownDateTimeFormat[] = KnownDateTimeFormat.getAllFormatsByOrder(longDateTimeFormatOrder, shortDateTimeFormatOrder);
|
||||||
|
|
||||||
|
for (const dateTime of dateTimes) {
|
||||||
|
const detectedFormats = KnownDateTimeFormat.detectSingle(dateTime, allFormats);
|
||||||
|
|
||||||
|
if (detectedFormats) {
|
||||||
|
for (const format of detectedFormats) {
|
||||||
|
detectedCounts[format.format] = (detectedCounts[format.format] || 0) + 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const result: KnownDateTimeFormat[] = [];
|
||||||
|
|
||||||
|
for (const format of KnownDateTimeFormat.allInstances) {
|
||||||
|
if (detectedCounts[format.format] === dateTimes.length) {
|
||||||
|
result.push(format);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.length > 0 ? result : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static detectSingle(dateTime: string, allFormats: KnownDateTimeFormat[]): KnownDateTimeFormat[] | undefined {
|
||||||
|
const result: KnownDateTimeFormat[] = [];
|
||||||
|
|
||||||
|
for (const format of allFormats) {
|
||||||
|
if (format.isValid(dateTime)) {
|
||||||
|
result.push(format);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.length > 0 ? result : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static getAllFormatsByOrder(longDateTimeFormatOrder: DateFormatOrder, shortDateTimeFormatOrder: DateFormatOrder): KnownDateTimeFormat[] {
|
||||||
|
if (longDateTimeFormatOrder === DateFormatOrder.YMD && (shortDateTimeFormatOrder === DateFormatOrder.YMD || shortDateTimeFormatOrder === DateFormatOrder.MDY)) {
|
||||||
|
return [
|
||||||
|
...KnownDateTimeFormat.allYMDInstances,
|
||||||
|
...KnownDateTimeFormat.allMDYInstances,
|
||||||
|
...KnownDateTimeFormat.allDMYInstances
|
||||||
|
];
|
||||||
|
} else if (longDateTimeFormatOrder === DateFormatOrder.YMD && shortDateTimeFormatOrder === DateFormatOrder.DMY) {
|
||||||
|
return [
|
||||||
|
...KnownDateTimeFormat.allYMDInstances,
|
||||||
|
...KnownDateTimeFormat.allDMYInstances,
|
||||||
|
...KnownDateTimeFormat.allMDYInstances
|
||||||
|
];
|
||||||
|
} else if (longDateTimeFormatOrder === DateFormatOrder.MDY && (shortDateTimeFormatOrder === DateFormatOrder.MDY || shortDateTimeFormatOrder === DateFormatOrder.YMD)) {
|
||||||
|
return [
|
||||||
|
...KnownDateTimeFormat.allMDYInstances,
|
||||||
|
...KnownDateTimeFormat.allYMDInstances,
|
||||||
|
...KnownDateTimeFormat.allDMYInstances
|
||||||
|
];
|
||||||
|
} else if (longDateTimeFormatOrder === DateFormatOrder.MDY && shortDateTimeFormatOrder === DateFormatOrder.DMY) {
|
||||||
|
return [
|
||||||
|
...KnownDateTimeFormat.allMDYInstances,
|
||||||
|
...KnownDateTimeFormat.allDMYInstances,
|
||||||
|
...KnownDateTimeFormat.allYMDInstances
|
||||||
|
];
|
||||||
|
} else if (longDateTimeFormatOrder === DateFormatOrder.DMY && (shortDateTimeFormatOrder === DateFormatOrder.DMY || shortDateTimeFormatOrder === DateFormatOrder.YMD)) {
|
||||||
|
return [
|
||||||
|
...KnownDateTimeFormat.allDMYInstances,
|
||||||
|
...KnownDateTimeFormat.allYMDInstances,
|
||||||
|
...KnownDateTimeFormat.allMDYInstances
|
||||||
|
];
|
||||||
|
} else if (longDateTimeFormatOrder === DateFormatOrder.DMY && shortDateTimeFormatOrder === DateFormatOrder.MDY) {
|
||||||
|
return [
|
||||||
|
...KnownDateTimeFormat.allDMYInstances,
|
||||||
|
...KnownDateTimeFormat.allMDYInstances,
|
||||||
|
...KnownDateTimeFormat.allYMDInstances
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
return KnownDateTimeFormat.allInstances;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export enum DateRangeScene {
|
export enum DateRangeScene {
|
||||||
Normal = 0,
|
Normal = 0,
|
||||||
TrendAnalysis = 1,
|
TrendAnalysis = 1,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { type TypeAndName, type TypeAndDisplayName, entries, keys } from './base.ts';
|
import { type TypeAndName, type TypeAndDisplayName, entries, keys } from './base.ts';
|
||||||
import { KnownAmountFormat } from './numeral.ts';
|
import { KnownAmountFormat } from './numeral.ts';
|
||||||
import { KnownDateTimeFormat } from './datetime.ts';
|
import { type DateFormatOrder, KnownDateTimeFormat } from './datetime.ts';
|
||||||
import { KnownDateTimezoneFormat } from './timezone.ts';
|
import { KnownDateTimezoneFormat } from './timezone.ts';
|
||||||
import { TransactionType } from './transaction.ts';
|
import { TransactionType } from './transaction.ts';
|
||||||
|
|
||||||
@@ -165,7 +165,7 @@ export class ImportTransactionDataMapping {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public parseFileAutoDetectedTimeFormat(fileData: string[][] | undefined): string | undefined {
|
public parseFileAutoDetectedTimeFormat(fileData: string[][] | undefined, longDateTimeFormatOrder: DateFormatOrder, shortDateTimeFormatOrder: DateFormatOrder): string | undefined {
|
||||||
if (!fileData || !fileData.length || !this.isColumnMappingSet(ImportTransactionColumnType.TransactionTime)) {
|
if (!fileData || !fileData.length || !this.isColumnMappingSet(ImportTransactionColumnType.TransactionTime)) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
@@ -193,7 +193,7 @@ export class ImportTransactionDataMapping {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const detectedFormats = KnownDateTimeFormat.detectMulti(allDateTimes);
|
const detectedFormats = KnownDateTimeFormat.detectMulti(allDateTimes, longDateTimeFormatOrder, shortDateTimeFormatOrder);
|
||||||
|
|
||||||
if (!detectedFormats || !detectedFormats.length || detectedFormats.length > 1) {
|
if (!detectedFormats || !detectedFormats.length || detectedFormats.length > 1) {
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|||||||
+4
-4
@@ -654,7 +654,7 @@ export function parseDateTimeFromUnixTimeWithTimezoneOffset(unixTime: number, ut
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function parseDateTimeFromKnownDateTimeFormat(dateTime: string, format: KnownDateTimeFormat): DateTime | undefined {
|
export function parseDateTimeFromKnownDateTimeFormat(dateTime: string, format: KnownDateTimeFormat): DateTime | undefined {
|
||||||
const m = moment(dateTime, format.format);
|
const m = moment(dateTime, format.format, true);
|
||||||
|
|
||||||
if (!m.isValid()) {
|
if (!m.isValid()) {
|
||||||
return undefined;
|
return undefined;
|
||||||
@@ -664,7 +664,7 @@ export function parseDateTimeFromKnownDateTimeFormat(dateTime: string, format: K
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function parseDateTimeFromString(dateTime: string, format: string): DateTime | undefined {
|
export function parseDateTimeFromString(dateTime: string, format: string): DateTime | undefined {
|
||||||
const m = moment(dateTime, format);
|
const m = moment(dateTime, format, true);
|
||||||
|
|
||||||
if (!m.isValid()) {
|
if (!m.isValid()) {
|
||||||
return undefined;
|
return undefined;
|
||||||
@@ -1128,9 +1128,9 @@ export function getAllDaysStartAndEndUnixTimes(startUnixTime: number, endUnixTim
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getDateTimeFormatType<T extends DateFormat | TimeFormat>(allFormatMap: Record<string, T>, allFormatArray: T[], formatTypeValue: number, languageDefaultTypeName: string, systemDefaultFormatType: T): T {
|
export function getDateTimeFormatType<T extends DateFormat | TimeFormat>(allFormatMap: Record<string, T>, allFormatArray: T[], formatTypeValue: number, languageDefaultTypeName: string, systemDefaultFormatType: T): T {
|
||||||
if (formatTypeValue > LANGUAGE_DEFAULT_DATE_TIME_FORMAT_VALUE && allFormatArray[formatTypeValue - 1] && allFormatArray[formatTypeValue - 1]!.key) {
|
if (formatTypeValue > LANGUAGE_DEFAULT_DATE_TIME_FORMAT_VALUE && allFormatArray[formatTypeValue - 1] && allFormatArray[formatTypeValue - 1]!.typeName) {
|
||||||
return allFormatArray[formatTypeValue - 1] as T;
|
return allFormatArray[formatTypeValue - 1] as T;
|
||||||
} else if (formatTypeValue === LANGUAGE_DEFAULT_DATE_TIME_FORMAT_VALUE && allFormatMap[languageDefaultTypeName] && allFormatMap[languageDefaultTypeName].key) {
|
} else if (formatTypeValue === LANGUAGE_DEFAULT_DATE_TIME_FORMAT_VALUE && allFormatMap[languageDefaultTypeName] && allFormatMap[languageDefaultTypeName].typeName) {
|
||||||
return allFormatMap[languageDefaultTypeName];
|
return allFormatMap[languageDefaultTypeName];
|
||||||
} else {
|
} else {
|
||||||
return systemDefaultFormatType;
|
return systemDefaultFormatType;
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "DDMMYYYY",
|
"longDateFormat": "DayMonthYear",
|
||||||
"shortDateFormat": "DDMMYYYY",
|
"shortDateFormat": "DayMonthYear",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Comma",
|
"decimalSeparator": "Comma",
|
||||||
"digitGroupingSymbol": "Dot",
|
"digitGroupingSymbol": "Dot",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D, YYYY",
|
"MonthDayYear": "MMMM D, YYYY",
|
||||||
"dd_mm_yyyy": "D. MMMM YYYY"
|
"DayMonthYear": "D. MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-MM-DD",
|
"YearMonthDay": "YYYY-MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD/YYYY",
|
"MonthDayYear": "MM/DD/YYYY",
|
||||||
"dd_mm_yyyy": "DD.MM.YYYY"
|
"DayMonthYear": "DD.MM.YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM, YYYY",
|
"MonthDayYear": "MMMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMMM YYYY"
|
"DayMonthYear": "MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-MM",
|
"YearMonthDay": "YYYY-MM",
|
||||||
"mm_dd_yyyy": "MMM, YYYY",
|
"MonthDayYear": "MMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMM YYYY"
|
"DayMonthYear": "MMM YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D",
|
"MonthDayYear": "MMMM D",
|
||||||
"dd_mm_yyyy": "D. MMMM"
|
"DayMonthYear": "D. MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "MM-DD",
|
"YearMonthDay": "MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD",
|
"MonthDayYear": "MM/DD",
|
||||||
"dd_mm_yyyy": "DD.MM"
|
"DayMonthYear": "DD.MM"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{quarter} {year}"
|
"content": "{quarter} {year}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "Monat-Tag-Jahr-Format",
|
"Month-day-year format": "Monat-Tag-Jahr-Format",
|
||||||
"Day-month-year format": "Tag-Monat-Jahr-Format",
|
"Day-month-year format": "Tag-Monat-Jahr-Format",
|
||||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF)-Datei",
|
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF)-Datei",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank to Customer Statement File",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
||||||
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
||||||
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) File",
|
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) File",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "MMDDYYYY",
|
"longDateFormat": "MonthDayYear",
|
||||||
"shortDateFormat": "MMDDYYYY",
|
"shortDateFormat": "MonthDayYear",
|
||||||
"longTimeFormat": "HHMMSSA",
|
"longTimeFormat": "HourMinuteSecondMeridiemIndicator",
|
||||||
"shortTimeFormat": "HHMMA",
|
"shortTimeFormat": "HourMinuteMeridiemIndicator",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Dot",
|
"decimalSeparator": "Dot",
|
||||||
"digitGroupingSymbol": "Comma",
|
"digitGroupingSymbol": "Comma",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D, YYYY",
|
"MonthDayYear": "MMMM D, YYYY",
|
||||||
"dd_mm_yyyy": "D MMMM, YYYY"
|
"DayMonthYear": "D MMMM, YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-M-D",
|
"YearMonthDay": "YYYY-M-D",
|
||||||
"mm_dd_yyyy": "M/D/YYYY",
|
"MonthDayYear": "M/D/YYYY",
|
||||||
"dd_mm_yyyy": "D/M/YYYY"
|
"DayMonthYear": "D/M/YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM, YYYY",
|
"MonthDayYear": "MMMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMMM, YYYY"
|
"DayMonthYear": "MMMM, YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-M",
|
"YearMonthDay": "YYYY-M",
|
||||||
"mm_dd_yyyy": "MMM, YYYY",
|
"MonthDayYear": "MMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMM, YYYY"
|
"DayMonthYear": "MMM, YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D",
|
"MonthDayYear": "MMMM D",
|
||||||
"dd_mm_yyyy": "D MMMM"
|
"DayMonthYear": "D MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "M-D",
|
"YearMonthDay": "M-D",
|
||||||
"mm_dd_yyyy": "M/D",
|
"MonthDayYear": "M/D",
|
||||||
"dd_mm_yyyy": "D/M"
|
"DayMonthYear": "D/M"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{quarter} {year}"
|
"content": "{quarter} {year}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "Month-day-year format",
|
"Month-day-year format": "Month-day-year format",
|
||||||
"Day-month-year format": "Day-month-year format",
|
"Day-month-year format": "Day-month-year format",
|
||||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) File",
|
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) File",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank to Customer Statement File",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
||||||
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
||||||
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) File",
|
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) File",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "DDMMYYYY",
|
"longDateFormat": "DayMonthYear",
|
||||||
"shortDateFormat": "DDMMYYYY",
|
"shortDateFormat": "DayMonthYear",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Comma",
|
"decimalSeparator": "Comma",
|
||||||
"digitGroupingSymbol": "Dot",
|
"digitGroupingSymbol": "Dot",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D, YYYY",
|
"MonthDayYear": "MMMM D, YYYY",
|
||||||
"dd_mm_yyyy": "D de MMMM de YYYY"
|
"DayMonthYear": "D de MMMM de YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY/MM/DD",
|
"YearMonthDay": "YYYY/MM/DD",
|
||||||
"mm_dd_yyyy": "MM/DD/YYYY",
|
"MonthDayYear": "MM/DD/YYYY",
|
||||||
"dd_mm_yyyy": "DD/MM/YYYY"
|
"DayMonthYear": "DD/MM/YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM, YYYY",
|
"MonthDayYear": "MMMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMMM de YYYY"
|
"DayMonthYear": "MMMM de YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY/MM",
|
"YearMonthDay": "YYYY/MM",
|
||||||
"mm_dd_yyyy": "MMM, YYYY",
|
"MonthDayYear": "MMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMM, YYYY"
|
"DayMonthYear": "MMM, YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D",
|
"MonthDayYear": "MMMM D",
|
||||||
"dd_mm_yyyy": "D de MMMM"
|
"DayMonthYear": "D de MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "MM/DD",
|
"YearMonthDay": "MM/DD",
|
||||||
"mm_dd_yyyy": "MM/DD",
|
"MonthDayYear": "MM/DD",
|
||||||
"dd_mm_yyyy": "DD/MM"
|
"DayMonthYear": "DD/MM"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "H:mm:ss",
|
"HourMinuteSecond": "H:mm:ss",
|
||||||
"a_hh_mm_ss": "A h:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A h:mm:ss",
|
||||||
"hh_mm_ss_a": "h:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "h:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "H:mm",
|
"HourMinute": "H:mm",
|
||||||
"a_hh_mm": "A h:mm",
|
"MeridiemIndicatorHourMinute": "A h:mm",
|
||||||
"hh_mm_a": "h:mm A"
|
"HourMinuteMeridiemIndicator": "h:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{quarter} {year}"
|
"content": "{quarter} {year}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "Formato mes-día-año",
|
"Month-day-year format": "Formato mes-día-año",
|
||||||
"Day-month-year format": "Formato día-mes-año",
|
"Day-month-year format": "Formato día-mes-año",
|
||||||
"Intuit Interchange Format (IIF) File": "Archivo IIF (Intuit Interchange Format)",
|
"Intuit Interchange Format (IIF) File": "Archivo IIF (Intuit Interchange Format)",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Extracto Camt.052 (Extracto de cuenta del cliente)",
|
||||||
"Camt.053 Bank to Customer Statement File": "Extracto Camt.053 (Extracto de cuenta del cliente)",
|
"Camt.053 Bank to Customer Statement File": "Extracto Camt.053 (Extracto de cuenta del cliente)",
|
||||||
"MT940 Consumer Statement Message File": "Extracto MT940 (Extracto de cuenta del cliente)",
|
"MT940 Consumer Statement Message File": "Extracto MT940 (Extracto de cuenta del cliente)",
|
||||||
"Delimiter-separated Values (DSV) File": "Archivo DSV (valores separados por delimirtadores)",
|
"Delimiter-separated Values (DSV) File": "Archivo DSV (valores separados por delimirtadores)",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "DDMMYYYY",
|
"longDateFormat": "DayMonthYear",
|
||||||
"shortDateFormat": "DDMMYYYY",
|
"shortDateFormat": "DayMonthYear",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Comma",
|
"decimalSeparator": "Comma",
|
||||||
"digitGroupingSymbol": "Space",
|
"digitGroupingSymbol": "Space",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D, YYYY",
|
"MonthDayYear": "MMMM D, YYYY",
|
||||||
"dd_mm_yyyy": "D MMMM YYYY"
|
"DayMonthYear": "D MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-MM-DD",
|
"YearMonthDay": "YYYY-MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD/YYYY",
|
"MonthDayYear": "MM/DD/YYYY",
|
||||||
"dd_mm_yyyy": "DD/MM/YYYY"
|
"DayMonthYear": "DD/MM/YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM, YYYY",
|
"MonthDayYear": "MMMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMMM YYYY"
|
"DayMonthYear": "MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-MM",
|
"YearMonthDay": "YYYY-MM",
|
||||||
"mm_dd_yyyy": "MMM, YYYY",
|
"MonthDayYear": "MMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMM YYYY"
|
"DayMonthYear": "MMM YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D",
|
"MonthDayYear": "MMMM D",
|
||||||
"dd_mm_yyyy": "D MMMM"
|
"DayMonthYear": "D MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "MM-DD",
|
"YearMonthDay": "MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD",
|
"MonthDayYear": "MM/DD",
|
||||||
"dd_mm_yyyy": "DD/MM"
|
"DayMonthYear": "DD/MM"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{quarter} {year}"
|
"content": "{quarter} {year}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "Format mois-jour-année",
|
"Month-day-year format": "Format mois-jour-année",
|
||||||
"Day-month-year format": "Format jour-mois-année",
|
"Day-month-year format": "Format jour-mois-année",
|
||||||
"Intuit Interchange Format (IIF) File": "Fichier Intuit Interchange Format (IIF)",
|
"Intuit Interchange Format (IIF) File": "Fichier Intuit Interchange Format (IIF)",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Fichier de relevé bancaire Camt.052",
|
||||||
"Camt.053 Bank to Customer Statement File": "Fichier de relevé bancaire Camt.053",
|
"Camt.053 Bank to Customer Statement File": "Fichier de relevé bancaire Camt.053",
|
||||||
"MT940 Consumer Statement Message File": "Fichier de message de relevé consommateur MT940",
|
"MT940 Consumer Statement Message File": "Fichier de message de relevé consommateur MT940",
|
||||||
"Delimiter-separated Values (DSV) File": "Fichier de valeurs séparées par délimiteur (DSV)",
|
"Delimiter-separated Values (DSV) File": "Fichier de valeurs séparées par délimiteur (DSV)",
|
||||||
|
|||||||
+17
-4
@@ -61,6 +61,7 @@ import {
|
|||||||
ShortDateFormat,
|
ShortDateFormat,
|
||||||
LongTimeFormat,
|
LongTimeFormat,
|
||||||
ShortTimeFormat,
|
ShortTimeFormat,
|
||||||
|
DateFormatOrder,
|
||||||
DateRange,
|
DateRange,
|
||||||
DateRangeScene,
|
DateRangeScene,
|
||||||
LANGUAGE_DEFAULT_DATE_TIME_FORMAT_VALUE
|
LANGUAGE_DEFAULT_DATE_TIME_FORMAT_VALUE
|
||||||
@@ -661,7 +662,7 @@ export function useI18n() {
|
|||||||
|
|
||||||
function getLocalizedDateTimeFormat<T extends DateFormat | TimeFormat>(type: string, allFormatMap: Record<string, T>, allFormatArray: T[], formatTypeValue: number, languageDefaultTypeNameKey: string, systemDefaultFormatType: T): string {
|
function getLocalizedDateTimeFormat<T extends DateFormat | TimeFormat>(type: string, allFormatMap: Record<string, T>, allFormatArray: T[], formatTypeValue: number, languageDefaultTypeNameKey: string, systemDefaultFormatType: T): string {
|
||||||
const formatType = getLocalizedDateTimeType(allFormatMap, allFormatArray, formatTypeValue, languageDefaultTypeNameKey, systemDefaultFormatType);
|
const formatType = getLocalizedDateTimeType(allFormatMap, allFormatArray, formatTypeValue, languageDefaultTypeNameKey, systemDefaultFormatType);
|
||||||
return t(`format.${type}.${formatType.key}`);
|
return t(`format.${type}.${formatType.typeName}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getLocalizedLongDateFormat(): string {
|
function getLocalizedLongDateFormat(): string {
|
||||||
@@ -1078,7 +1079,7 @@ export function useI18n() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
for (const formatType of allFormatArray) {
|
for (const formatType of allFormatArray) {
|
||||||
const format = t(`format.${type}.${formatType.key}`);
|
const format = t(`format.${type}.${formatType.typeName}`);
|
||||||
|
|
||||||
ret.push({
|
ret.push({
|
||||||
type: formatType.type,
|
type: formatType.type,
|
||||||
@@ -1760,12 +1761,22 @@ export function useI18n() {
|
|||||||
return t(`currency.name.${currencyCode}`);
|
return t(`currency.name.${currencyCode}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getLongDateFormatOrder(): DateFormatOrder {
|
||||||
|
return getLocalizedDateTimeType(LongDateFormat.all(), LongDateFormat.values(), userStore.currentUserLongDateFormat, 'longDateFormat', LongDateFormat.Default).order;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getShortDateFormatOrder(): DateFormatOrder {
|
||||||
|
return getLocalizedDateTimeType(ShortDateFormat.all(), ShortDateFormat.values(), userStore.currentUserShortDateFormat, 'shortDateFormat', ShortDateFormat.Default).order;
|
||||||
|
}
|
||||||
|
|
||||||
function isLongDateMonthAfterYear(): boolean {
|
function isLongDateMonthAfterYear(): boolean {
|
||||||
return getLocalizedDateTimeType(LongDateFormat.all(), LongDateFormat.values(), userStore.currentUserLongDateFormat, 'longDateFormat', LongDateFormat.Default).isMonthAfterYear;
|
const order: DateFormatOrder = getLongDateFormatOrder();
|
||||||
|
return order === DateFormatOrder.YMD;
|
||||||
}
|
}
|
||||||
|
|
||||||
function isShortDateMonthAfterYear(): boolean {
|
function isShortDateMonthAfterYear(): boolean {
|
||||||
return getLocalizedDateTimeType(ShortDateFormat.all(), ShortDateFormat.values(), userStore.currentUserShortDateFormat, 'shortDateFormat', ShortDateFormat.Default).isMonthAfterYear;
|
const order: DateFormatOrder = getShortDateFormatOrder();
|
||||||
|
return order === DateFormatOrder.YMD;
|
||||||
}
|
}
|
||||||
|
|
||||||
function isLongTime24HourFormat(): boolean {
|
function isLongTime24HourFormat(): boolean {
|
||||||
@@ -2422,6 +2433,8 @@ export function useI18n() {
|
|||||||
getCurrentDigitGroupingType,
|
getCurrentDigitGroupingType,
|
||||||
getCurrentFiscalYearFormatType,
|
getCurrentFiscalYearFormatType,
|
||||||
getCurrencyName,
|
getCurrencyName,
|
||||||
|
getLongDateFormatOrder,
|
||||||
|
getShortDateFormatOrder,
|
||||||
isLongDateMonthAfterYear,
|
isLongDateMonthAfterYear,
|
||||||
isShortDateMonthAfterYear,
|
isShortDateMonthAfterYear,
|
||||||
isLongTime24HourFormat,
|
isLongTime24HourFormat,
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "DDMMYYYY",
|
"longDateFormat": "DayMonthYear",
|
||||||
"shortDateFormat": "DDMMYYYY",
|
"shortDateFormat": "DayMonthYear",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Comma",
|
"decimalSeparator": "Comma",
|
||||||
"digitGroupingSymbol": "Dot",
|
"digitGroupingSymbol": "Dot",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D YYYY",
|
"MonthDayYear": "MMMM D YYYY",
|
||||||
"dd_mm_yyyy": "D MMMM YYYY"
|
"DayMonthYear": "D MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-MM-DD",
|
"YearMonthDay": "YYYY-MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD/YYYY",
|
"MonthDayYear": "MM/DD/YYYY",
|
||||||
"dd_mm_yyyy": "DD/MM/YYYY"
|
"DayMonthYear": "DD/MM/YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM YYYY",
|
"MonthDayYear": "MMMM YYYY",
|
||||||
"dd_mm_yyyy": "MMMM YYYY"
|
"DayMonthYear": "MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-MM",
|
"YearMonthDay": "YYYY-MM",
|
||||||
"mm_dd_yyyy": "MMM YYYY",
|
"MonthDayYear": "MMM YYYY",
|
||||||
"dd_mm_yyyy": "MMM YYYY"
|
"DayMonthYear": "MMM YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D",
|
"MonthDayYear": "MMMM D",
|
||||||
"dd_mm_yyyy": "D MMMM"
|
"DayMonthYear": "D MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "MM-DD",
|
"YearMonthDay": "MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD",
|
"MonthDayYear": "MM/DD",
|
||||||
"dd_mm_yyyy": "DD/MM"
|
"DayMonthYear": "DD/MM"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{quarter} {year}"
|
"content": "{quarter} {year}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "Formato mese-giorno-anno",
|
"Month-day-year format": "Formato mese-giorno-anno",
|
||||||
"Day-month-year format": "Formato giorno-mese-anno",
|
"Day-month-year format": "Formato giorno-mese-anno",
|
||||||
"Intuit Interchange Format (IIF) File": "File Intuit Interchange Format (IIF)",
|
"Intuit Interchange Format (IIF) File": "File Intuit Interchange Format (IIF)",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank to Customer Statement File",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
||||||
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
||||||
"Delimiter-separated Values (DSV) File": "File valori separati da delimitatore (DSV)",
|
"Delimiter-separated Values (DSV) File": "File valori separati da delimitatore (DSV)",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "YYYYMMDD",
|
"longDateFormat": "YearMonthDay",
|
||||||
"shortDateFormat": "YYYYMMDD",
|
"shortDateFormat": "YearMonthDay",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Dot",
|
"decimalSeparator": "Dot",
|
||||||
"digitGroupingSymbol": "Comma",
|
"digitGroupingSymbol": "Comma",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY年M月D日",
|
"YearMonthDay": "YYYY年M月D日",
|
||||||
"mm_dd_yyyy": "M月D日YYYY年",
|
"MonthDayYear": "M月D日YYYY年",
|
||||||
"dd_mm_yyyy": "D日M月YYYY年"
|
"DayMonthYear": "D日M月YYYY年"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY/M/D",
|
"YearMonthDay": "YYYY/M/D",
|
||||||
"mm_dd_yyyy": "M/D/YYYY",
|
"MonthDayYear": "M/D/YYYY",
|
||||||
"dd_mm_yyyy": "D/M/YYYY"
|
"DayMonthYear": "D/M/YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY年",
|
"YearMonthDay": "YYYY年",
|
||||||
"mm_dd_yyyy": "YYYY年",
|
"MonthDayYear": "YYYY年",
|
||||||
"dd_mm_yyyy": "YYYY年"
|
"DayMonthYear": "YYYY年"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY年M月",
|
"YearMonthDay": "YYYY年M月",
|
||||||
"mm_dd_yyyy": "M月YYYY年",
|
"MonthDayYear": "M月YYYY年",
|
||||||
"dd_mm_yyyy": "M月YYYY年"
|
"DayMonthYear": "M月YYYY年"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY/M",
|
"YearMonthDay": "YYYY/M",
|
||||||
"mm_dd_yyyy": "M/YYYY",
|
"MonthDayYear": "M/YYYY",
|
||||||
"dd_mm_yyyy": "M/YYYY"
|
"DayMonthYear": "M/YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "M月D日",
|
"YearMonthDay": "M月D日",
|
||||||
"mm_dd_yyyy": "M月D日",
|
"MonthDayYear": "M月D日",
|
||||||
"dd_mm_yyyy": "D日M月"
|
"DayMonthYear": "D日M月"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "M/D",
|
"YearMonthDay": "M/D",
|
||||||
"mm_dd_yyyy": "M/D",
|
"MonthDayYear": "M/D",
|
||||||
"dd_mm_yyyy": "D/M"
|
"DayMonthYear": "D/M"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{year}年{quarter}"
|
"content": "{year}年{quarter}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "月-日-年 形式",
|
"Month-day-year format": "月-日-年 形式",
|
||||||
"Day-month-year format": "日-月-年 形式",
|
"Day-month-year format": "日-月-年 形式",
|
||||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) ファイル",
|
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) ファイル",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank to Customer Statement File",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
||||||
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
||||||
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) ファイル",
|
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) ファイル",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "DDMMYYYY",
|
"longDateFormat": "DayMonthYear",
|
||||||
"shortDateFormat": "DDMMYYYY",
|
"shortDateFormat": "DayMonthYear",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Dot",
|
"decimalSeparator": "Dot",
|
||||||
"digitGroupingSymbol": "Comma",
|
"digitGroupingSymbol": "Comma",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM DD YYYY",
|
"MonthDayYear": "MMMM DD YYYY",
|
||||||
"dd_mm_yyyy": "DD MMMM YYYY"
|
"DayMonthYear": "DD MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-MM-DD",
|
"YearMonthDay": "YYYY-MM-DD",
|
||||||
"mm_dd_yyyy": "MM-DD-YYYY",
|
"MonthDayYear": "MM-DD-YYYY",
|
||||||
"dd_mm_yyyy": "DD-MM-YYYY"
|
"DayMonthYear": "DD-MM-YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM YYYY",
|
"MonthDayYear": "MMMM YYYY",
|
||||||
"dd_mm_yyyy": "MMMM YYYY"
|
"DayMonthYear": "MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-MM",
|
"YearMonthDay": "YYYY-MM",
|
||||||
"mm_dd_yyyy": "MMM YYYY",
|
"MonthDayYear": "MMM YYYY",
|
||||||
"dd_mm_yyyy": "MMM YYYY"
|
"DayMonthYear": "MMM YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM DD",
|
"MonthDayYear": "MMMM DD",
|
||||||
"dd_mm_yyyy": "DD MMMM"
|
"DayMonthYear": "DD MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "MM-DD",
|
"YearMonthDay": "MM-DD",
|
||||||
"mm_dd_yyyy": "MM-DD",
|
"MonthDayYear": "MM-DD",
|
||||||
"dd_mm_yyyy": "DD-MM"
|
"DayMonthYear": "DD-MM"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "DD",
|
"YearMonthDay": "DD",
|
||||||
"mm_dd_yyyy": "DD",
|
"MonthDayYear": "DD",
|
||||||
"dd_mm_yyyy": "DD"
|
"DayMonthYear": "DD"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{quarter} {year}"
|
"content": "{quarter} {year}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "ತಿಂಗಳು-ದಿನ-ವರ್ಷ ರೂಪ",
|
"Month-day-year format": "ತಿಂಗಳು-ದಿನ-ವರ್ಷ ರೂಪ",
|
||||||
"Day-month-year format": "ದಿನ-ತಿಂಗಳು-ವರ್ಷ ರೂಪ",
|
"Day-month-year format": "ದಿನ-ತಿಂಗಳು-ವರ್ಷ ರೂಪ",
|
||||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) ಫೈಲ್",
|
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) ಫೈಲ್",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 ಬ್ಯಾಂಕ್ ಸ್ಟೇಟ್ಮೆಂಟ್ ಫೈಲ್",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 ಬ್ಯಾಂಕ್ ಸ್ಟೇಟ್ಮೆಂಟ್ ಫೈಲ್",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 ಬ್ಯಾಂಕ್ ಸ್ಟೇಟ್ಮೆಂಟ್ ಫೈಲ್",
|
||||||
"MT940 Consumer Statement Message File": "MT940 ಗ್ರಾಹಕ ಸ್ಟೇಟ್ಮೆಂಟ್ ಫೈಲ್",
|
"MT940 Consumer Statement Message File": "MT940 ಗ್ರಾಹಕ ಸ್ಟೇಟ್ಮೆಂಟ್ ಫೈಲ್",
|
||||||
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) ಫೈಲ್",
|
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) ಫೈಲ್",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "YYYYMMDD",
|
"longDateFormat": "YearMonthDay",
|
||||||
"shortDateFormat": "YYYYMMDD",
|
"shortDateFormat": "YearMonthDay",
|
||||||
"longTimeFormat": "AHHMMSS",
|
"longTimeFormat": "MeridiemIndicatorHourMinuteSecond",
|
||||||
"shortTimeFormat": "AHHMM",
|
"shortTimeFormat": "MeridiemIndicatorHourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Dot",
|
"decimalSeparator": "Dot",
|
||||||
"digitGroupingSymbol": "Comma",
|
"digitGroupingSymbol": "Comma",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY년 M월 D일",
|
"YearMonthDay": "YYYY년 M월 D일",
|
||||||
"mm_dd_yyyy": "M월 D일 YYYY년",
|
"MonthDayYear": "M월 D일 YYYY년",
|
||||||
"dd_mm_yyyy": "D일 M월 YYYY년"
|
"DayMonthYear": "D일 M월 YYYY년"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-MM-DD",
|
"YearMonthDay": "YYYY-MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD/YYYY",
|
"MonthDayYear": "MM/DD/YYYY",
|
||||||
"dd_mm_yyyy": "DD/MM/YYYY"
|
"DayMonthYear": "DD/MM/YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY년",
|
"YearMonthDay": "YYYY년",
|
||||||
"mm_dd_yyyy": "YYYY년",
|
"MonthDayYear": "YYYY년",
|
||||||
"dd_mm_yyyy": "YYYY년"
|
"DayMonthYear": "YYYY년"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY년 M월",
|
"YearMonthDay": "YYYY년 M월",
|
||||||
"mm_dd_yyyy": "M월 YYYY년",
|
"MonthDayYear": "M월 YYYY년",
|
||||||
"dd_mm_yyyy": "M월 YYYY년"
|
"DayMonthYear": "M월 YYYY년"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-MM",
|
"YearMonthDay": "YYYY-MM",
|
||||||
"mm_dd_yyyy": "MM/YYYY",
|
"MonthDayYear": "MM/YYYY",
|
||||||
"dd_mm_yyyy": "MM/YYYY"
|
"DayMonthYear": "MM/YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "M월 D일",
|
"YearMonthDay": "M월 D일",
|
||||||
"mm_dd_yyyy": "M월 D일",
|
"MonthDayYear": "M월 D일",
|
||||||
"dd_mm_yyyy": "D일 M월"
|
"DayMonthYear": "D일 M월"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "MM-DD",
|
"YearMonthDay": "MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD",
|
"MonthDayYear": "MM/DD",
|
||||||
"dd_mm_yyyy": "DD/MM"
|
"DayMonthYear": "DD/MM"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{year}년 {quarter}"
|
"content": "{year}년 {quarter}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "월-일-연 형식",
|
"Month-day-year format": "월-일-연 형식",
|
||||||
"Day-month-year format": "일-월-연 형식",
|
"Day-month-year format": "일-월-연 형식",
|
||||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) 파일",
|
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) 파일",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 은행 고객 명세서 파일",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 은행 고객 명세서 파일",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 은행 고객 명세서 파일",
|
||||||
"MT940 Consumer Statement Message File": "MT940 소비자 명세서 메시지 파일",
|
"MT940 Consumer Statement Message File": "MT940 소비자 명세서 메시지 파일",
|
||||||
"Delimiter-separated Values (DSV) File": "구분 기호로 구분된 값 (DSV) 파일",
|
"Delimiter-separated Values (DSV) File": "구분 기호로 구분된 값 (DSV) 파일",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "DDMMYYYY",
|
"longDateFormat": "DayMonthYear",
|
||||||
"shortDateFormat": "DDMMYYYY",
|
"shortDateFormat": "DayMonthYear",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Comma",
|
"decimalSeparator": "Comma",
|
||||||
"digitGroupingSymbol": "Dot",
|
"digitGroupingSymbol": "Dot",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D YYYY",
|
"MonthDayYear": "MMMM D YYYY",
|
||||||
"dd_mm_yyyy": "D MMMM YYYY"
|
"DayMonthYear": "D MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-M-D",
|
"YearMonthDay": "YYYY-M-D",
|
||||||
"mm_dd_yyyy": "M/D/YYYY",
|
"MonthDayYear": "M/D/YYYY",
|
||||||
"dd_mm_yyyy": "D-M-YYYY"
|
"DayMonthYear": "D-M-YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM, YYYY",
|
"MonthDayYear": "MMMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMMM, YYYY"
|
"DayMonthYear": "MMMM, YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-M",
|
"YearMonthDay": "YYYY-M",
|
||||||
"mm_dd_yyyy": "MMM, YYYY",
|
"MonthDayYear": "MMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMM, YYYY"
|
"DayMonthYear": "MMM, YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D",
|
"MonthDayYear": "MMMM D",
|
||||||
"dd_mm_yyyy": "D MMMM"
|
"DayMonthYear": "D MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "M-D",
|
"YearMonthDay": "M-D",
|
||||||
"mm_dd_yyyy": "M/D",
|
"MonthDayYear": "M/D",
|
||||||
"dd_mm_yyyy": "D/M"
|
"DayMonthYear": "D/M"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{quarter} {year}"
|
"content": "{quarter} {year}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "Maand-dag-jaar-formaat",
|
"Month-day-year format": "Maand-dag-jaar-formaat",
|
||||||
"Day-month-year format": "Dag-maand-jaar-formaat",
|
"Day-month-year format": "Dag-maand-jaar-formaat",
|
||||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF)-bestand",
|
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF)-bestand",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank-naar-klant afschriftbestand",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank-naar-klant afschriftbestand",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank-naar-klant afschriftbestand",
|
||||||
"MT940 Consumer Statement Message File": "MT940 Rekeningafschriftbestand",
|
"MT940 Consumer Statement Message File": "MT940 Rekeningafschriftbestand",
|
||||||
"Delimiter-separated Values (DSV) File": "Delimiter-gescheiden waarden (DSV)-bestand",
|
"Delimiter-separated Values (DSV) File": "Delimiter-gescheiden waarden (DSV)-bestand",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "DDMMYYYY",
|
"longDateFormat": "DayMonthYear",
|
||||||
"shortDateFormat": "DDMMYYYY",
|
"shortDateFormat": "DayMonthYear",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Comma",
|
"decimalSeparator": "Comma",
|
||||||
"digitGroupingSymbol": "Space",
|
"digitGroupingSymbol": "Space",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D, YYYY",
|
"MonthDayYear": "MMMM D, YYYY",
|
||||||
"dd_mm_yyyy": "D de MMMM de YYYY"
|
"DayMonthYear": "D de MMMM de YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY/MM/DD",
|
"YearMonthDay": "YYYY/MM/DD",
|
||||||
"mm_dd_yyyy": "MM/DD/YYYY",
|
"MonthDayYear": "MM/DD/YYYY",
|
||||||
"dd_mm_yyyy": "DD/MM/YYYY"
|
"DayMonthYear": "DD/MM/YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM, YYYY",
|
"MonthDayYear": "MMMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMMM de YYYY"
|
"DayMonthYear": "MMMM de YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY/MM",
|
"YearMonthDay": "YYYY/MM",
|
||||||
"mm_dd_yyyy": "MMM, YYYY",
|
"MonthDayYear": "MMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMM, YYYY"
|
"DayMonthYear": "MMM, YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D",
|
"MonthDayYear": "MMMM D",
|
||||||
"dd_mm_yyyy": "D de MMMM"
|
"DayMonthYear": "D de MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "MM/DD",
|
"YearMonthDay": "MM/DD",
|
||||||
"mm_dd_yyyy": "MM/DD",
|
"MonthDayYear": "MM/DD",
|
||||||
"dd_mm_yyyy": "DD/MM"
|
"DayMonthYear": "DD/MM"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{quarter} {year}"
|
"content": "{quarter} {year}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "Formato mês-dia-ano",
|
"Month-day-year format": "Formato mês-dia-ano",
|
||||||
"Day-month-year format": "Formato dia-mês-ano",
|
"Day-month-year format": "Formato dia-mês-ano",
|
||||||
"Intuit Interchange Format (IIF) File": "Arquivo Intuit Interchange Format (IIF)",
|
"Intuit Interchange Format (IIF) File": "Arquivo Intuit Interchange Format (IIF)",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Arquivo, de Extrato Bancário Camt.052",
|
||||||
"Camt.053 Bank to Customer Statement File": "Arquivo, de Extrato Bancário Camt.053",
|
"Camt.053 Bank to Customer Statement File": "Arquivo, de Extrato Bancário Camt.053",
|
||||||
"MT940 Consumer Statement Message File": "Arquivo de Mensagem de Extrato Consumidor MT940",
|
"MT940 Consumer Statement Message File": "Arquivo de Mensagem de Extrato Consumidor MT940",
|
||||||
"Delimiter-separated Values (DSV) File": "Arquivo de Valores Separados por Delimitador (DSV)",
|
"Delimiter-separated Values (DSV) File": "Arquivo de Valores Separados por Delimitador (DSV)",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "DDMMYYYY",
|
"longDateFormat": "DayMonthYear",
|
||||||
"shortDateFormat": "DDMMYYYY",
|
"shortDateFormat": "DayMonthYear",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Comma",
|
"decimalSeparator": "Comma",
|
||||||
"digitGroupingSymbol": "Space",
|
"digitGroupingSymbol": "Space",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D, YYYY",
|
"MonthDayYear": "MMMM D, YYYY",
|
||||||
"dd_mm_yyyy": "D MMMM YYYY г."
|
"DayMonthYear": "D MMMM YYYY г."
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-MM-DD",
|
"YearMonthDay": "YYYY-MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD/YYYY",
|
"MonthDayYear": "MM/DD/YYYY",
|
||||||
"dd_mm_yyyy": "DD.MM.YYYY"
|
"DayMonthYear": "DD.MM.YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY г.",
|
"YearMonthDay": "YYYY г.",
|
||||||
"mm_dd_yyyy": "YYYY г.",
|
"MonthDayYear": "YYYY г.",
|
||||||
"dd_mm_yyyy": "YYYY г."
|
"DayMonthYear": "YYYY г."
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM, YYYY",
|
"MonthDayYear": "MMMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMMM, YYYY"
|
"DayMonthYear": "MMMM, YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-MM",
|
"YearMonthDay": "YYYY-MM",
|
||||||
"mm_dd_yyyy": "MMM, YYYY",
|
"MonthDayYear": "MMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMM, YYYY"
|
"DayMonthYear": "MMM, YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D",
|
"MonthDayYear": "MMMM D",
|
||||||
"dd_mm_yyyy": "D MMMM"
|
"DayMonthYear": "D MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "MM-DD",
|
"YearMonthDay": "MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD",
|
"MonthDayYear": "MM/DD",
|
||||||
"dd_mm_yyyy": "DD.MM"
|
"DayMonthYear": "DD.MM"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "H:mm:ss",
|
"HourMinuteSecond": "H:mm:ss",
|
||||||
"a_hh_mm_ss": "A h:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A h:mm:ss",
|
||||||
"hh_mm_ss_a": "h:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "h:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "H:mm",
|
"HourMinute": "H:mm",
|
||||||
"a_hh_mm": "A h:mm",
|
"MeridiemIndicatorHourMinute": "A h:mm",
|
||||||
"hh_mm_a": "h:mm A"
|
"HourMinuteMeridiemIndicator": "h:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{quarter} {year} г."
|
"content": "{quarter} {year} г."
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "Формат месяц-день-год",
|
"Month-day-year format": "Формат месяц-день-год",
|
||||||
"Day-month-year format": "Формат день-месяц-год",
|
"Day-month-year format": "Формат день-месяц-год",
|
||||||
"Intuit Interchange Format (IIF) File": "Файл Intuit Interchange Format (IIF)",
|
"Intuit Interchange Format (IIF) File": "Файл Intuit Interchange Format (IIF)",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank to Customer Statement File",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
||||||
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
||||||
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) File",
|
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) File",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "DDMMYYYY",
|
"longDateFormat": "DayMonthYear",
|
||||||
"shortDateFormat": "DDMMYYYY",
|
"shortDateFormat": "DayMonthYear",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Comma",
|
"decimalSeparator": "Comma",
|
||||||
"digitGroupingSymbol": "Dot",
|
"digitGroupingSymbol": "Dot",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D, YYYY",
|
"MonthDayYear": "MMMM D, YYYY",
|
||||||
"dd_mm_yyyy": "D. MMMM YYYY"
|
"DayMonthYear": "D. MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-MM-DD",
|
"YearMonthDay": "YYYY-MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD/YYYY",
|
"MonthDayYear": "MM/DD/YYYY",
|
||||||
"dd_mm_yyyy": "DD.MM.YYYY"
|
"DayMonthYear": "DD.MM.YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM, YYYY",
|
"MonthDayYear": "MMMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMMM YYYY"
|
"DayMonthYear": "MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-MM",
|
"YearMonthDay": "YYYY-MM",
|
||||||
"mm_dd_yyyy": "MMM, YYYY",
|
"MonthDayYear": "MMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMM YYYY"
|
"DayMonthYear": "MMM YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D",
|
"MonthDayYear": "MMMM D",
|
||||||
"dd_mm_yyyy": "D. MMMM"
|
"DayMonthYear": "D. MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "MM-DD",
|
"YearMonthDay": "MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD",
|
"MonthDayYear": "MM/DD",
|
||||||
"dd_mm_yyyy": "DD.MM"
|
"DayMonthYear": "DD.MM"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{quarter} {year}"
|
"content": "{quarter} {year}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "Format mesec-dan-leto",
|
"Month-day-year format": "Format mesec-dan-leto",
|
||||||
"Day-month-year format": "Format dan-mesec-leto",
|
"Day-month-year format": "Format dan-mesec-leto",
|
||||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) datoteka",
|
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) datoteka",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 bančni izpisek",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 bančni izpisek",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 bančni izpisek",
|
||||||
"MT940 Consumer Statement Message File": "MT940 bančni izpisek",
|
"MT940 Consumer Statement Message File": "MT940 bančni izpisek",
|
||||||
"Delimiter-separated Values (DSV) File": "Datoteka z vrednostmi ločenimi z ločilom (DSV)",
|
"Delimiter-separated Values (DSV) File": "Datoteka z vrednostmi ločenimi z ločilom (DSV)",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "DDMMYYYY",
|
"longDateFormat": "DayMonthYear",
|
||||||
"shortDateFormat": "DDMMYYYY",
|
"shortDateFormat": "DayMonthYear",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Dot",
|
"decimalSeparator": "Dot",
|
||||||
"digitGroupingSymbol": "Comma",
|
"digitGroupingSymbol": "Comma",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM DD YYYY",
|
"MonthDayYear": "MMMM DD YYYY",
|
||||||
"dd_mm_yyyy": "DD MMMM YYYY"
|
"DayMonthYear": "DD MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-MM-DD",
|
"YearMonthDay": "YYYY-MM-DD",
|
||||||
"mm_dd_yyyy": "MM-DD-YYYY",
|
"MonthDayYear": "MM-DD-YYYY",
|
||||||
"dd_mm_yyyy": "DD-MM-YYYY"
|
"DayMonthYear": "DD-MM-YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM YYYY",
|
"MonthDayYear": "MMMM YYYY",
|
||||||
"dd_mm_yyyy": "MMMM YYYY"
|
"DayMonthYear": "MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-MM",
|
"YearMonthDay": "YYYY-MM",
|
||||||
"mm_dd_yyyy": "MMM YYYY",
|
"MonthDayYear": "MMM YYYY",
|
||||||
"dd_mm_yyyy": "MMM YYYY"
|
"DayMonthYear": "MMM YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM DD",
|
"MonthDayYear": "MMMM DD",
|
||||||
"dd_mm_yyyy": "DD MMMM"
|
"DayMonthYear": "DD MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "MM-DD",
|
"YearMonthDay": "MM-DD",
|
||||||
"mm_dd_yyyy": "MM-DD",
|
"MonthDayYear": "MM-DD",
|
||||||
"dd_mm_yyyy": "DD-MM"
|
"DayMonthYear": "DD-MM"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "DD",
|
"YearMonthDay": "DD",
|
||||||
"mm_dd_yyyy": "DD",
|
"MonthDayYear": "DD",
|
||||||
"dd_mm_yyyy": "DD"
|
"DayMonthYear": "DD"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{quarter} {year}"
|
"content": "{quarter} {year}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "மாதம்-நாள்-ஆண்டு வடிவம்",
|
"Month-day-year format": "மாதம்-நாள்-ஆண்டு வடிவம்",
|
||||||
"Day-month-year format": "நாள்-மாதம்-ஆண்டு வடிவம்",
|
"Day-month-year format": "நாள்-மாதம்-ஆண்டு வடிவம்",
|
||||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) கோப்பு",
|
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) கோப்பு",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 வங்கி அறிக்கை கோப்பு",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 வங்கி அறிக்கை கோப்பு",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 வங்கி அறிக்கை கோப்பு",
|
||||||
"MT940 Consumer Statement Message File": "MT940 வாடிக்கையாளர் அறிக்கை கோப்பு",
|
"MT940 Consumer Statement Message File": "MT940 வாடிக்கையாளர் அறிக்கை கோப்பு",
|
||||||
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) கோப்பு",
|
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) கோப்பு",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Buddhist",
|
"calendarDisplayType": "Buddhist",
|
||||||
"dateDisplayType": "Buddhist",
|
"dateDisplayType": "Buddhist",
|
||||||
"longDateFormat": "DDMMYYYY",
|
"longDateFormat": "DayMonthYear",
|
||||||
"shortDateFormat": "DDMMYYYY",
|
"shortDateFormat": "DayMonthYear",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Dot",
|
"decimalSeparator": "Dot",
|
||||||
"digitGroupingSymbol": "Comma",
|
"digitGroupingSymbol": "Comma",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D, YYYY",
|
"MonthDayYear": "MMMM D, YYYY",
|
||||||
"dd_mm_yyyy": "D MMMM YYYY"
|
"DayMonthYear": "D MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-M-D",
|
"YearMonthDay": "YYYY-M-D",
|
||||||
"mm_dd_yyyy": "M/D/YYYY",
|
"MonthDayYear": "M/D/YYYY",
|
||||||
"dd_mm_yyyy": "D/M/YYYY"
|
"DayMonthYear": "D/M/YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM, YYYY",
|
"MonthDayYear": "MMMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMMM YYYY"
|
"DayMonthYear": "MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-M",
|
"YearMonthDay": "YYYY-M",
|
||||||
"mm_dd_yyyy": "MMM, YYYY",
|
"MonthDayYear": "MMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMM YYYY"
|
"DayMonthYear": "MMM YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D",
|
"MonthDayYear": "MMMM D",
|
||||||
"dd_mm_yyyy": "D MMMM"
|
"DayMonthYear": "D MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "M-D",
|
"YearMonthDay": "M-D",
|
||||||
"mm_dd_yyyy": "M/D",
|
"MonthDayYear": "M/D",
|
||||||
"dd_mm_yyyy": "D/M"
|
"DayMonthYear": "D/M"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "H:mm:ss",
|
"HourMinuteSecond": "H:mm:ss",
|
||||||
"a_hh_mm_ss": "A h:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A h:mm:ss",
|
||||||
"hh_mm_ss_a": "h:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "h:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "H:mm",
|
"HourMinute": "H:mm",
|
||||||
"a_hh_mm": "A h:mm",
|
"MeridiemIndicatorHourMinute": "A h:mm",
|
||||||
"hh_mm_a": "h:mm A"
|
"HourMinuteMeridiemIndicator": "h:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{quarter} {year}"
|
"content": "{quarter} {year}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "รูปแบบ เดือน-วัน-ปี",
|
"Month-day-year format": "รูปแบบ เดือน-วัน-ปี",
|
||||||
"Day-month-year format": "รูปแบบ วัน-เดือน-ปี",
|
"Day-month-year format": "รูปแบบ วัน-เดือน-ปี",
|
||||||
"Intuit Interchange Format (IIF) File": "ไฟล์ Intuit Interchange Format (IIF)",
|
"Intuit Interchange Format (IIF) File": "ไฟล์ Intuit Interchange Format (IIF)",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "ไฟล์ Camt.052 รายงานธนาคารถึงลูกค้า",
|
||||||
"Camt.053 Bank to Customer Statement File": "ไฟล์ Camt.053 รายงานธนาคารถึงลูกค้า",
|
"Camt.053 Bank to Customer Statement File": "ไฟล์ Camt.053 รายงานธนาคารถึงลูกค้า",
|
||||||
"MT940 Consumer Statement Message File": "ไฟล์ MT940 ข้อความรายการลูกค้า",
|
"MT940 Consumer Statement Message File": "ไฟล์ MT940 ข้อความรายการลูกค้า",
|
||||||
"Delimiter-separated Values (DSV) File": "ไฟล์ DSV (ค่าแยกด้วยตัวคั่น)",
|
"Delimiter-separated Values (DSV) File": "ไฟล์ DSV (ค่าแยกด้วยตัวคั่น)",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "DDMMYYYY",
|
"longDateFormat": "DayMonthYear",
|
||||||
"shortDateFormat": "DDMMYYYY",
|
"shortDateFormat": "DayMonthYear",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Comma",
|
"decimalSeparator": "Comma",
|
||||||
"digitGroupingSymbol": "Dot",
|
"digitGroupingSymbol": "Dot",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D YYYY",
|
"MonthDayYear": "MMMM D YYYY",
|
||||||
"dd_mm_yyyy": "D MMMM YYYY"
|
"DayMonthYear": "D MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-MM-DD",
|
"YearMonthDay": "YYYY-MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD/YYYY",
|
"MonthDayYear": "MM/DD/YYYY",
|
||||||
"dd_mm_yyyy": "DD.MM.YYYY"
|
"DayMonthYear": "DD.MM.YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM YYYY",
|
"MonthDayYear": "MMMM YYYY",
|
||||||
"dd_mm_yyyy": "MMMM YYYY"
|
"DayMonthYear": "MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-MM",
|
"YearMonthDay": "YYYY-MM",
|
||||||
"mm_dd_yyyy": "MMM YYYY",
|
"MonthDayYear": "MMM YYYY",
|
||||||
"dd_mm_yyyy": "MMM YYYY"
|
"DayMonthYear": "MMM YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "D MMMM",
|
"MonthDayYear": "D MMMM",
|
||||||
"dd_mm_yyyy": "D MMMM"
|
"DayMonthYear": "D MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "MM-DD",
|
"YearMonthDay": "MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD",
|
"MonthDayYear": "MM/DD",
|
||||||
"dd_mm_yyyy": "DD.MM"
|
"DayMonthYear": "DD.MM"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{year} {quarter}"
|
"content": "{year} {quarter}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "Ay-gün-yıl formatı",
|
"Month-day-year format": "Ay-gün-yıl formatı",
|
||||||
"Day-month-year format": "Gün-ay-yıl formatı",
|
"Day-month-year format": "Gün-ay-yıl formatı",
|
||||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) Dosyası",
|
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) Dosyası",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 Banka Müşteri Ekstresi Dosyası",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Banka Müşteri Ekstresi Dosyası",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 Banka Müşteri Ekstresi Dosyası",
|
||||||
"MT940 Consumer Statement Message File": "MT940 Müşteri Ekstre Mesajı Dosyası",
|
"MT940 Consumer Statement Message File": "MT940 Müşteri Ekstre Mesajı Dosyası",
|
||||||
"Delimiter-separated Values (DSV) File": "Ayırıcı ile Ayrılmış Değerler (DSV) Dosyası",
|
"Delimiter-separated Values (DSV) File": "Ayırıcı ile Ayrılmış Değerler (DSV) Dosyası",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "DDMMYYYY",
|
"longDateFormat": "DayMonthYear",
|
||||||
"shortDateFormat": "DDMMYYYY",
|
"shortDateFormat": "DayMonthYear",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Comma",
|
"decimalSeparator": "Comma",
|
||||||
"digitGroupingSymbol": "Space",
|
"digitGroupingSymbol": "Space",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D, YYYY",
|
"MonthDayYear": "MMMM D, YYYY",
|
||||||
"dd_mm_yyyy": "D MMMM YYYY р."
|
"DayMonthYear": "D MMMM YYYY р."
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-MM-DD",
|
"YearMonthDay": "YYYY-MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD/YYYY",
|
"MonthDayYear": "MM/DD/YYYY",
|
||||||
"dd_mm_yyyy": "DD.MM.YYYY"
|
"DayMonthYear": "DD.MM.YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY р.",
|
"YearMonthDay": "YYYY р.",
|
||||||
"mm_dd_yyyy": "YYYY р.",
|
"MonthDayYear": "YYYY р.",
|
||||||
"dd_mm_yyyy": "YYYY р."
|
"DayMonthYear": "YYYY р."
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM, YYYY",
|
"MonthDayYear": "MMMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMMM, YYYY"
|
"DayMonthYear": "MMMM, YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-MM",
|
"YearMonthDay": "YYYY-MM",
|
||||||
"mm_dd_yyyy": "MMM, YYYY",
|
"MonthDayYear": "MMM, YYYY",
|
||||||
"dd_mm_yyyy": "MMM, YYYY"
|
"DayMonthYear": "MMM, YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM D",
|
"MonthDayYear": "MMMM D",
|
||||||
"dd_mm_yyyy": "D MMMM"
|
"DayMonthYear": "D MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "MM-DD",
|
"YearMonthDay": "MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD",
|
"MonthDayYear": "MM/DD",
|
||||||
"dd_mm_yyyy": "DD.MM"
|
"DayMonthYear": "DD.MM"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{quarter} {year} р."
|
"content": "{quarter} {year} р."
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "Формат місяць-день-рік",
|
"Month-day-year format": "Формат місяць-день-рік",
|
||||||
"Day-month-year format": "Формат день-місяць-рік",
|
"Day-month-year format": "Формат день-місяць-рік",
|
||||||
"Intuit Interchange Format (IIF) File": "Файл Intuit Interchange Format (IIF)",
|
"Intuit Interchange Format (IIF) File": "Файл Intuit Interchange Format (IIF)",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank to Customer Statement File",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
||||||
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
||||||
"Delimiter-separated Values (DSV) File": "Файл із розділювачами значень (DSV)",
|
"Delimiter-separated Values (DSV) File": "Файл із розділювачами значень (DSV)",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "Gregorian",
|
"calendarDisplayType": "Gregorian",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "DDMMYYYY",
|
"longDateFormat": "DayMonthYear",
|
||||||
"shortDateFormat": "DDMMYYYY",
|
"shortDateFormat": "DayMonthYear",
|
||||||
"longTimeFormat": "HHMMSSA",
|
"longTimeFormat": "HourMinuteSecondMeridiemIndicator",
|
||||||
"shortTimeFormat": "HHMMA",
|
"shortTimeFormat": "HourMinuteMeridiemIndicator",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Comma",
|
"decimalSeparator": "Comma",
|
||||||
"digitGroupingSymbol": "Dot",
|
"digitGroupingSymbol": "Dot",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM DD",
|
"YearMonthDay": "YYYY MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM DD YYYY",
|
"MonthDayYear": "MMMM DD YYYY",
|
||||||
"dd_mm_yyyy": "DD MMMM YYYY"
|
"DayMonthYear": "DD MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-MM-DD",
|
"YearMonthDay": "YYYY-MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD/YYYY",
|
"MonthDayYear": "MM/DD/YYYY",
|
||||||
"dd_mm_yyyy": "DD/MM/YYYY"
|
"DayMonthYear": "DD/MM/YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY MMMM",
|
"YearMonthDay": "YYYY MMMM",
|
||||||
"mm_dd_yyyy": "MMMM YYYY",
|
"MonthDayYear": "MMMM YYYY",
|
||||||
"dd_mm_yyyy": "MMMM YYYY"
|
"DayMonthYear": "MMMM YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-MM",
|
"YearMonthDay": "YYYY-MM",
|
||||||
"mm_dd_yyyy": "MMM YYYY",
|
"MonthDayYear": "MMM YYYY",
|
||||||
"dd_mm_yyyy": "MMM YYYY"
|
"DayMonthYear": "MMM YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "MMMM DD",
|
"YearMonthDay": "MMMM DD",
|
||||||
"mm_dd_yyyy": "MMMM DD",
|
"MonthDayYear": "MMMM DD",
|
||||||
"dd_mm_yyyy": "DD MMMM"
|
"DayMonthYear": "DD MMMM"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "MM-DD",
|
"YearMonthDay": "MM-DD",
|
||||||
"mm_dd_yyyy": "MM/DD",
|
"MonthDayYear": "MM/DD",
|
||||||
"dd_mm_yyyy": "DD/MM"
|
"DayMonthYear": "DD/MM"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "DD",
|
"YearMonthDay": "DD",
|
||||||
"mm_dd_yyyy": "DD",
|
"MonthDayYear": "DD",
|
||||||
"dd_mm_yyyy": "DD"
|
"DayMonthYear": "DD"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{quarter} năm {year}"
|
"content": "{quarter} năm {year}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "Định dạng tháng-ngày-năm",
|
"Month-day-year format": "Định dạng tháng-ngày-năm",
|
||||||
"Day-month-year format": "Định dạng ngày-tháng-năm",
|
"Day-month-year format": "Định dạng ngày-tháng-năm",
|
||||||
"Intuit Interchange Format (IIF) File": "Tệp Intuit Interchange Format (IIF)",
|
"Intuit Interchange Format (IIF) File": "Tệp Intuit Interchange Format (IIF)",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank to Customer Statement File",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
||||||
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
||||||
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) File",
|
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) File",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "GregorianWithChinese",
|
"calendarDisplayType": "GregorianWithChinese",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "YYYYMMDD",
|
"longDateFormat": "YearMonthDay",
|
||||||
"shortDateFormat": "YYYYMMDD",
|
"shortDateFormat": "YearMonthDay",
|
||||||
"longTimeFormat": "HHMMSS",
|
"longTimeFormat": "HourMinuteSecond",
|
||||||
"shortTimeFormat": "HHMM",
|
"shortTimeFormat": "HourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Dot",
|
"decimalSeparator": "Dot",
|
||||||
"digitGroupingSymbol": "Comma",
|
"digitGroupingSymbol": "Comma",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY年M月D日",
|
"YearMonthDay": "YYYY年M月D日",
|
||||||
"mm_dd_yyyy": "M/D/YYYY",
|
"MonthDayYear": "M/D/YYYY",
|
||||||
"dd_mm_yyyy": "D/M/YYYY"
|
"DayMonthYear": "D/M/YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-M-D",
|
"YearMonthDay": "YYYY-M-D",
|
||||||
"mm_dd_yyyy": "M/D/YYYY",
|
"MonthDayYear": "M/D/YYYY",
|
||||||
"dd_mm_yyyy": "D/M/YYYY"
|
"DayMonthYear": "D/M/YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY年",
|
"YearMonthDay": "YYYY年",
|
||||||
"mm_dd_yyyy": "YYYY年",
|
"MonthDayYear": "YYYY年",
|
||||||
"dd_mm_yyyy": "YYYY年"
|
"DayMonthYear": "YYYY年"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY年M月",
|
"YearMonthDay": "YYYY年M月",
|
||||||
"mm_dd_yyyy": "M/YYYY",
|
"MonthDayYear": "M/YYYY",
|
||||||
"dd_mm_yyyy": "M/YYYY"
|
"DayMonthYear": "M/YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-M",
|
"YearMonthDay": "YYYY-M",
|
||||||
"mm_dd_yyyy": "M/YYYY",
|
"MonthDayYear": "M/YYYY",
|
||||||
"dd_mm_yyyy": "M/YYYY"
|
"DayMonthYear": "M/YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "M月D日",
|
"YearMonthDay": "M月D日",
|
||||||
"mm_dd_yyyy": "M/D",
|
"MonthDayYear": "M/D",
|
||||||
"dd_mm_yyyy": "D/M"
|
"DayMonthYear": "D/M"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "M-D",
|
"YearMonthDay": "M-D",
|
||||||
"mm_dd_yyyy": "M/D",
|
"MonthDayYear": "M/D",
|
||||||
"dd_mm_yyyy": "D/M"
|
"DayMonthYear": "D/M"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{year}{quarter}"
|
"content": "{year}{quarter}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "月-日-年 格式",
|
"Month-day-year format": "月-日-年 格式",
|
||||||
"Day-month-year format": "日-月-年 格式",
|
"Day-month-year format": "日-月-年 格式",
|
||||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) 文件",
|
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) 文件",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 银行对账单文件",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 银行对账单文件",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 银行对账单文件",
|
||||||
"MT940 Consumer Statement Message File": "MT940 客户对账消息文件",
|
"MT940 Consumer Statement Message File": "MT940 客户对账消息文件",
|
||||||
"Delimiter-separated Values (DSV) File": "分隔符分隔值 (DSV) 文件",
|
"Delimiter-separated Values (DSV) File": "分隔符分隔值 (DSV) 文件",
|
||||||
|
|||||||
+38
-37
@@ -31,10 +31,10 @@
|
|||||||
"fiscalYearFormat": "EndYYYY",
|
"fiscalYearFormat": "EndYYYY",
|
||||||
"calendarDisplayType": "GregorianWithChinese",
|
"calendarDisplayType": "GregorianWithChinese",
|
||||||
"dateDisplayType": "Gregorian",
|
"dateDisplayType": "Gregorian",
|
||||||
"longDateFormat": "YYYYMMDD",
|
"longDateFormat": "YearMonthDay",
|
||||||
"shortDateFormat": "YYYYMMDD",
|
"shortDateFormat": "YearMonthDay",
|
||||||
"longTimeFormat": "AHHMMSS",
|
"longTimeFormat": "MeridiemIndicatorHourMinuteSecond",
|
||||||
"shortTimeFormat": "AHHMM",
|
"shortTimeFormat": "MeridiemIndicatorHourMinute",
|
||||||
"numeralSystem": "WesternArabicNumerals",
|
"numeralSystem": "WesternArabicNumerals",
|
||||||
"decimalSeparator": "Dot",
|
"decimalSeparator": "Dot",
|
||||||
"digitGroupingSymbol": "Comma",
|
"digitGroupingSymbol": "Comma",
|
||||||
@@ -43,59 +43,59 @@
|
|||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"longDate": {
|
"longDate": {
|
||||||
"yyyy_mm_dd": "YYYY年M月D日",
|
"YearMonthDay": "YYYY年M月D日",
|
||||||
"mm_dd_yyyy": "M/D/YYYY",
|
"MonthDayYear": "M/D/YYYY",
|
||||||
"dd_mm_yyyy": "D/M/YYYY"
|
"DayMonthYear": "D/M/YYYY"
|
||||||
},
|
},
|
||||||
"shortDate": {
|
"shortDate": {
|
||||||
"yyyy_mm_dd": "YYYY-M-D",
|
"YearMonthDay": "YYYY-M-D",
|
||||||
"mm_dd_yyyy": "M/D/YYYY",
|
"MonthDayYear": "M/D/YYYY",
|
||||||
"dd_mm_yyyy": "D/M/YYYY"
|
"DayMonthYear": "D/M/YYYY"
|
||||||
},
|
},
|
||||||
"longYear": {
|
"longYear": {
|
||||||
"yyyy_mm_dd": "YYYY年",
|
"YearMonthDay": "YYYY年",
|
||||||
"mm_dd_yyyy": "YYYY年",
|
"MonthDayYear": "YYYY年",
|
||||||
"dd_mm_yyyy": "YYYY年"
|
"DayMonthYear": "YYYY年"
|
||||||
},
|
},
|
||||||
"shortYear": {
|
"shortYear": {
|
||||||
"yyyy_mm_dd": "YYYY",
|
"YearMonthDay": "YYYY",
|
||||||
"mm_dd_yyyy": "YYYY",
|
"MonthDayYear": "YYYY",
|
||||||
"dd_mm_yyyy": "YYYY"
|
"DayMonthYear": "YYYY"
|
||||||
},
|
},
|
||||||
"longYearMonth": {
|
"longYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY年M月",
|
"YearMonthDay": "YYYY年M月",
|
||||||
"mm_dd_yyyy": "M/YYYY",
|
"MonthDayYear": "M/YYYY",
|
||||||
"dd_mm_yyyy": "M/YYYY"
|
"DayMonthYear": "M/YYYY"
|
||||||
},
|
},
|
||||||
"shortYearMonth": {
|
"shortYearMonth": {
|
||||||
"yyyy_mm_dd": "YYYY-M",
|
"YearMonthDay": "YYYY-M",
|
||||||
"mm_dd_yyyy": "M/YYYY",
|
"MonthDayYear": "M/YYYY",
|
||||||
"dd_mm_yyyy": "M/YYYY"
|
"DayMonthYear": "M/YYYY"
|
||||||
},
|
},
|
||||||
"longMonthDay": {
|
"longMonthDay": {
|
||||||
"yyyy_mm_dd": "M月D日",
|
"YearMonthDay": "M月D日",
|
||||||
"mm_dd_yyyy": "M/D",
|
"MonthDayYear": "M/D",
|
||||||
"dd_mm_yyyy": "D/M"
|
"DayMonthYear": "D/M"
|
||||||
},
|
},
|
||||||
"shortMonthDay": {
|
"shortMonthDay": {
|
||||||
"yyyy_mm_dd": "M-D",
|
"YearMonthDay": "M-D",
|
||||||
"mm_dd_yyyy": "M/D",
|
"MonthDayYear": "M/D",
|
||||||
"dd_mm_yyyy": "D/M"
|
"DayMonthYear": "D/M"
|
||||||
},
|
},
|
||||||
"shortDay": {
|
"shortDay": {
|
||||||
"yyyy_mm_dd": "D",
|
"YearMonthDay": "D",
|
||||||
"mm_dd_yyyy": "D",
|
"MonthDayYear": "D",
|
||||||
"dd_mm_yyyy": "D"
|
"DayMonthYear": "D"
|
||||||
},
|
},
|
||||||
"longTime": {
|
"longTime": {
|
||||||
"hh_mm_ss": "HH:mm:ss",
|
"HourMinuteSecond": "HH:mm:ss",
|
||||||
"a_hh_mm_ss": "A hh:mm:ss",
|
"MeridiemIndicatorHourMinuteSecond": "A hh:mm:ss",
|
||||||
"hh_mm_ss_a": "hh:mm:ss A"
|
"HourMinuteSecondMeridiemIndicator": "hh:mm:ss A"
|
||||||
},
|
},
|
||||||
"shortTime": {
|
"shortTime": {
|
||||||
"hh_mm": "HH:mm",
|
"HourMinute": "HH:mm",
|
||||||
"a_hh_mm": "A hh:mm",
|
"MeridiemIndicatorHourMinute": "A hh:mm",
|
||||||
"hh_mm_a": "hh:mm A"
|
"HourMinuteMeridiemIndicator": "hh:mm A"
|
||||||
},
|
},
|
||||||
"yearQuarter": {
|
"yearQuarter": {
|
||||||
"content": "{year}{quarter}"
|
"content": "{year}{quarter}"
|
||||||
@@ -1981,6 +1981,7 @@
|
|||||||
"Month-day-year format": "月-日-年 格式",
|
"Month-day-year format": "月-日-年 格式",
|
||||||
"Day-month-year format": "日-月-年 格式",
|
"Day-month-year format": "日-月-年 格式",
|
||||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) 檔案",
|
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) 檔案",
|
||||||
|
"Camt.052 Bank to Customer Statement File": "Camt.052 銀行對帳單檔案",
|
||||||
"Camt.053 Bank to Customer Statement File": "Camt.053 銀行對帳單檔案",
|
"Camt.053 Bank to Customer Statement File": "Camt.053 銀行對帳單檔案",
|
||||||
"MT940 Consumer Statement Message File": "MT940 客戶對帳訊息檔案",
|
"MT940 Consumer Statement Message File": "MT940 客戶對帳訊息檔案",
|
||||||
"Delimiter-separated Values (DSV) File": "分隔符分隔值 (DSV) 檔案",
|
"Delimiter-separated Values (DSV) File": "分隔符分隔值 (DSV) 檔案",
|
||||||
|
|||||||
@@ -107,23 +107,23 @@
|
|||||||
{{ tt('Log In') }}
|
{{ tt('Log In') }}
|
||||||
<v-progress-circular indeterminate size="22" class="ms-2" v-if="loggingInByPassword"></v-progress-circular>
|
<v-progress-circular indeterminate size="22" class="ms-2" v-if="loggingInByPassword"></v-progress-circular>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
|
<v-btn block :disabled="twoFAInputIsEmpty || loggingInByPassword || loggingInByOAuth2 || verifying"
|
||||||
|
@click="verify" v-else-if="isInternalAuthEnabled() && show2faInput">
|
||||||
|
{{ tt('Continue') }}
|
||||||
|
<v-progress-circular indeterminate size="22" class="ms-2" v-if="verifying"></v-progress-circular>
|
||||||
|
</v-btn>
|
||||||
|
|
||||||
<v-col cols="12" class="d-flex align-center px-0" v-if="isInternalAuthEnabled() && isOAuth2Enabled()">
|
<v-col cols="12" class="d-flex align-center px-0 text-no-wrap" v-if="isInternalAuthEnabled() && isOAuth2Enabled()">
|
||||||
<v-divider class="me-3" />
|
<v-divider class="me-3" />
|
||||||
{{ tt('or') }}
|
{{ tt('or') }}
|
||||||
<v-divider class="ms-3" />
|
<v-divider class="ms-3" />
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|
||||||
<v-btn block :disabled="loggingInByPassword || loggingInByOAuth2 || verifying" :href="oauth2LoginUrl"
|
<v-btn block :disabled="show2faInput || loggingInByPassword || loggingInByOAuth2 || verifying" :href="oauth2LoginUrl"
|
||||||
@click="loggingInByOAuth2 = true" v-if="isOAuth2Enabled()">
|
@click="loggingInByOAuth2 = true" v-if="isOAuth2Enabled()">
|
||||||
{{ oauth2LoginDisplayName }}
|
{{ oauth2LoginDisplayName }}
|
||||||
<v-progress-circular indeterminate size="22" class="ms-2" v-if="loggingInByOAuth2"></v-progress-circular>
|
<v-progress-circular indeterminate size="22" class="ms-2" v-if="loggingInByOAuth2"></v-progress-circular>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
<v-btn block :disabled="twoFAInputIsEmpty || loggingInByPassword || loggingInByOAuth2 || verifying"
|
|
||||||
@click="verify" v-else-if="show2faInput">
|
|
||||||
{{ tt('Continue') }}
|
|
||||||
<v-progress-circular indeterminate size="22" class="ms-2" v-if="verifying"></v-progress-circular>
|
|
||||||
</v-btn>
|
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|
||||||
<v-col cols="12" class="text-center text-base" v-if="isInternalAuthEnabled()">
|
<v-col cols="12" class="text-center text-base" v-if="isInternalAuthEnabled()">
|
||||||
|
|||||||
@@ -108,9 +108,10 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { VTextField } from 'vuetify/components/VTextField';
|
||||||
import SnackBar from '@/components/desktop/SnackBar.vue';
|
import SnackBar from '@/components/desktop/SnackBar.vue';
|
||||||
|
|
||||||
import { ref, computed, useTemplateRef } from 'vue';
|
import { ref, computed, useTemplateRef, nextTick } from 'vue';
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
import { useTheme } from 'vuetify';
|
import { useTheme } from 'vuetify';
|
||||||
|
|
||||||
@@ -164,6 +165,7 @@ const {
|
|||||||
doAfterLogin
|
doAfterLogin
|
||||||
} = useLoginPageBase('desktop');
|
} = useLoginPageBase('desktop');
|
||||||
|
|
||||||
|
const passcodeInput = useTemplateRef<VTextField>('passcodeInput');
|
||||||
const snackbar = useTemplateRef<SnackBarType>('snackbar');
|
const snackbar = useTemplateRef<SnackBarType>('snackbar');
|
||||||
|
|
||||||
const passcode = ref<string>('');
|
const passcode = ref<string>('');
|
||||||
@@ -225,6 +227,14 @@ function verifyAndLogin(): void {
|
|||||||
return;
|
return;
|
||||||
} else if (error.error && error.error.errorCode === KnownErrorCode.TwoFactorAuthorizationPasscodeEmpty) {
|
} else if (error.error && error.error.errorCode === KnownErrorCode.TwoFactorAuthorizationPasscodeEmpty) {
|
||||||
show2faInput.value = true;
|
show2faInput.value = true;
|
||||||
|
|
||||||
|
nextTick(() => {
|
||||||
|
if (passcodeInput.value) {
|
||||||
|
passcodeInput.value.focus();
|
||||||
|
passcodeInput.value.select();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ import { useI18n } from '@/locales/helpers.ts';
|
|||||||
|
|
||||||
import { type NameValue, type NameNumeralValue, type TypeAndDisplayName, itemAndIndex, entries } from '@/core/base.ts';
|
import { type NameValue, type NameNumeralValue, type TypeAndDisplayName, itemAndIndex, entries } from '@/core/base.ts';
|
||||||
import { type NumeralSystem, KnownAmountFormat } from '@/core/numeral.ts';
|
import { type NumeralSystem, KnownAmountFormat } from '@/core/numeral.ts';
|
||||||
import { KnownDateTimeFormat } from '@/core/datetime.ts';
|
import { type DateFormatOrder, KnownDateTimeFormat } from '@/core/datetime.ts';
|
||||||
import { KnownDateTimezoneFormat } from '@/core/timezone.ts';
|
import { KnownDateTimezoneFormat } from '@/core/timezone.ts';
|
||||||
import { TransactionType } from '@/core/transaction.ts';
|
import { TransactionType } from '@/core/transaction.ts';
|
||||||
import { ImportTransactionColumnType, ImportTransactionDataMapping } from '@/core/import_transaction.ts';
|
import { ImportTransactionColumnType, ImportTransactionDataMapping } from '@/core/import_transaction.ts';
|
||||||
@@ -286,6 +286,8 @@ const {
|
|||||||
tt,
|
tt,
|
||||||
ti,
|
ti,
|
||||||
getCurrentNumeralSystemType,
|
getCurrentNumeralSystemType,
|
||||||
|
getLongDateFormatOrder,
|
||||||
|
getShortDateFormatOrder,
|
||||||
getAllImportTransactionColumnTypes
|
getAllImportTransactionColumnTypes
|
||||||
} = useI18n();
|
} = useI18n();
|
||||||
|
|
||||||
@@ -296,6 +298,8 @@ const countPerPage = ref<number>(10);
|
|||||||
const parsedFileDataColumnMapping = ref<ImportTransactionDataMapping>(ImportTransactionDataMapping.createEmpty());
|
const parsedFileDataColumnMapping = ref<ImportTransactionDataMapping>(ImportTransactionDataMapping.createEmpty());
|
||||||
|
|
||||||
const numeralSystem = computed<NumeralSystem>(() => getCurrentNumeralSystemType());
|
const numeralSystem = computed<NumeralSystem>(() => getCurrentNumeralSystemType());
|
||||||
|
const longDateFormatOrder = computed<DateFormatOrder>(() => getLongDateFormatOrder());
|
||||||
|
const shortDateFormatOrder = computed<DateFormatOrder>(() => getShortDateFormatOrder());
|
||||||
const allImportTransactionColumnTypes = computed<TypeAndDisplayName[]>(() => getAllImportTransactionColumnTypes());
|
const allImportTransactionColumnTypes = computed<TypeAndDisplayName[]>(() => getAllImportTransactionColumnTypes());
|
||||||
|
|
||||||
const menus = computed<ImportTransactionDefineColumnMenu[]>(() => [
|
const menus = computed<ImportTransactionDefineColumnMenu[]>(() => [
|
||||||
@@ -402,7 +406,7 @@ const parsedFileLinesTablePageOptions = computed<NameNumeralValue[]>(() => getTa
|
|||||||
|
|
||||||
const parsedFileAllTransactionTypes = computed<string[]>(() => parsedFileDataColumnMapping.value.parseFileAllTransactionTypes(props.parsedFileData));
|
const parsedFileAllTransactionTypes = computed<string[]>(() => parsedFileDataColumnMapping.value.parseFileAllTransactionTypes(props.parsedFileData));
|
||||||
const parsedFileValidMappedTransactionTypes = computed<Record<string, TransactionType>>(() => parsedFileDataColumnMapping.value.parseFileValidMappedTransactionTypes(props.parsedFileData));
|
const parsedFileValidMappedTransactionTypes = computed<Record<string, TransactionType>>(() => parsedFileDataColumnMapping.value.parseFileValidMappedTransactionTypes(props.parsedFileData));
|
||||||
const parsedFileAutoDetectedTimeFormat = computed<string | undefined>(() => parsedFileDataColumnMapping.value.parseFileAutoDetectedTimeFormat(props.parsedFileData));
|
const parsedFileAutoDetectedTimeFormat = computed<string | undefined>(() => parsedFileDataColumnMapping.value.parseFileAutoDetectedTimeFormat(props.parsedFileData, longDateFormatOrder.value, shortDateFormatOrder.value));
|
||||||
const parsedFileAutoDetectedTimezoneFormat = computed<string | undefined>(() => parsedFileDataColumnMapping.value.parseFileAutoDetectedTimezoneFormat(props.parsedFileData));
|
const parsedFileAutoDetectedTimezoneFormat = computed<string | undefined>(() => parsedFileDataColumnMapping.value.parseFileAutoDetectedTimezoneFormat(props.parsedFileData));
|
||||||
const parsedFileAutoDetectedAmountFormat = computed<string | undefined>(() => parsedFileDataColumnMapping.value.parseFileAutoDetectedAmountFormat(props.parsedFileData));
|
const parsedFileAutoDetectedAmountFormat = computed<string | undefined>(() => parsedFileDataColumnMapping.value.parseFileAutoDetectedAmountFormat(props.parsedFileData));
|
||||||
|
|
||||||
|
|||||||
@@ -12,14 +12,14 @@
|
|||||||
@dragleave.prevent="onDragLeave"
|
@dragleave.prevent="onDragLeave"
|
||||||
@drop.prevent="onDrop">
|
@drop.prevent="onDrop">
|
||||||
<div class="d-flex w-100 h-100 justify-center align-center justify-content-center text-center px-4"
|
<div class="d-flex w-100 h-100 justify-center align-center justify-content-center text-center px-4"
|
||||||
:class="{ 'dropzone': true, 'dropzone-dragover': isDragOver }">
|
:class="{ 'dropzone': true, 'dropzone-dark': isDarkMode, 'dropzone-blurry-bg': loading || isDragOver || recognizing, 'dropzone-dragover': isDragOver }">
|
||||||
<div class="d-inline-flex flex-column" v-if="!loading && !imageFile && !isDragOver">
|
<div class="d-inline-flex flex-column" v-if="!loading && !imageFile && !isDragOver">
|
||||||
<h3 :class="{ 'pa-2': true, 'bg-grey-200': !isDarkMode, 'bg-grey-100': isDarkMode }">{{ tt('You can drag and drop, paste or click to select a receipt or transaction image') }}</h3>
|
<h3 class="pa-2">{{ tt('You can drag and drop, paste or click to select a receipt or transaction image') }}</h3>
|
||||||
<span :class="{ 'pa-2': true, 'bg-grey-200': !isDarkMode, 'bg-grey-100': isDarkMode }">{{ tt('Uploaded image and personal data will be sent to the large language model, please be aware of potential privacy risks.') }}</span>
|
<span class="pa-2">{{ tt('Uploaded image and personal data will be sent to the large language model, please be aware of potential privacy risks.') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<h3 :class="{ 'pa-2': true, 'bg-grey-200': !isDarkMode, 'bg-grey-100': isDarkMode }" v-else-if="!loading && isDragOver">{{ tt('Release to load image') }}</h3>
|
<h3 class="pa-2" v-else-if="!loading && isDragOver">{{ tt('Release to load image') }}</h3>
|
||||||
<h3 class="pa-2" v-else-if="loading">{{ tt('Loading image...') }}</h3>
|
<h3 class="pa-2" v-else-if="loading">{{ tt('Loading image...') }}</h3>
|
||||||
<h3 :class="{ 'pa-2': true, 'bg-grey-200': !isDarkMode, 'bg-grey-100': isDarkMode }" v-else-if="recognizing">{{ tt('AI can make mistakes. Check important info.') }}</h3>
|
<h3 class="pa-2" v-else-if="recognizing">{{ tt('AI can make mistakes. Check important info.') }}</h3>
|
||||||
</div>
|
</div>
|
||||||
<v-img :class="{ 'cursor-pointer': !loading && !recognizing && !isDragOver, 'h-100': true }"
|
<v-img :class="{ 'cursor-pointer': !loading && !recognizing && !isDragOver, 'h-100': true }"
|
||||||
:src="imageSrc" @click="showOpenImageDialog">
|
:src="imageSrc" @click="showOpenImageDialog">
|
||||||
@@ -262,6 +262,24 @@ defineExpose({
|
|||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
|
|
||||||
|
h3, span {
|
||||||
|
color: rgb(var(--v-theme-on-grey-200)) !important;
|
||||||
|
text-shadow: -1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff, 1px 1px 0 #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.dropzone-dark {
|
||||||
|
h3, span {
|
||||||
|
color: rgb(var(--v-theme-on-grey-100)) !important;
|
||||||
|
text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropzone-blurry-bg {
|
||||||
|
/* stylelint-disable property-no-vendor-prefix */
|
||||||
|
-webkit-backdrop-filter: blur(6px);
|
||||||
|
backdrop-filter: blur(6px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropzone-dragover {
|
.dropzone-dragover {
|
||||||
|
|||||||
@@ -93,31 +93,27 @@
|
|||||||
:opened="show2faSheet" @sheet:closed="show2faSheet = false"
|
:opened="show2faSheet" @sheet:closed="show2faSheet = false"
|
||||||
>
|
>
|
||||||
<f7-page-content>
|
<f7-page-content>
|
||||||
<div class="display-flex padding justify-content-space-between align-items-center">
|
<div class="display-flex padding-horizontal padding-top justify-content-space-between align-items-center">
|
||||||
<div class="ebk-sheet-title"><b>{{ tt('Two-Factor Authentication') }}</b></div>
|
<div class="ebk-sheet-title"><b>{{ tt('Two-Factor Authentication') }}</b></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="padding-horizontal padding-bottom">
|
<div class="padding-horizontal padding-bottom">
|
||||||
<f7-list strong class="no-margin">
|
<f7-list class="no-margin">
|
||||||
<f7-list-input
|
<f7-list-input
|
||||||
type="number"
|
type="number"
|
||||||
autocomplete="one-time-code"
|
autocomplete="one-time-code"
|
||||||
outline
|
outline
|
||||||
floating-label
|
|
||||||
clear-button
|
clear-button
|
||||||
class="no-margin no-padding-bottom"
|
class="no-margin no-padding-bottom"
|
||||||
v-if="twoFAVerifyType === 'passcode'"
|
v-if="twoFAVerifyType === 'passcode'"
|
||||||
:label="tt('Passcode')"
|
|
||||||
:placeholder="tt('Passcode')"
|
:placeholder="tt('Passcode')"
|
||||||
v-model:value="passcode"
|
v-model:value="passcode"
|
||||||
@keyup.enter="verify"
|
@keyup.enter="verify"
|
||||||
></f7-list-input>
|
></f7-list-input>
|
||||||
<f7-list-input
|
<f7-list-input
|
||||||
outline
|
outline
|
||||||
floating-label
|
|
||||||
clear-button
|
clear-button
|
||||||
class="no-margin no-padding-bottom"
|
class="no-margin no-padding-bottom"
|
||||||
v-if="twoFAVerifyType === 'backupcode'"
|
v-if="twoFAVerifyType === 'backupcode'"
|
||||||
:label="tt('Backup Code')"
|
|
||||||
:placeholder="tt('Backup Code')"
|
:placeholder="tt('Backup Code')"
|
||||||
v-model:value="backupCode"
|
v-model:value="backupCode"
|
||||||
@keyup.enter="verify"
|
@keyup.enter="verify"
|
||||||
@@ -144,15 +140,13 @@
|
|||||||
<p class="no-margin">
|
<p class="no-margin">
|
||||||
<span>{{ tt('Please enter your email address used for registration and we\'ll send you an email with a reset password link') }}</span>
|
<span>{{ tt('Please enter your email address used for registration and we\'ll send you an email with a reset password link') }}</span>
|
||||||
</p>
|
</p>
|
||||||
<f7-list strong class="no-margin">
|
<f7-list class="no-margin">
|
||||||
<f7-list-input
|
<f7-list-input
|
||||||
type="email"
|
type="email"
|
||||||
autocomplete="email"
|
autocomplete="email"
|
||||||
outline
|
outline
|
||||||
floating-label
|
|
||||||
clear-button
|
clear-button
|
||||||
class="no-margin no-padding-bottom"
|
class="no-margin no-padding-bottom"
|
||||||
:label="tt('E-mail')"
|
|
||||||
:placeholder="tt('Your email address')"
|
:placeholder="tt('Your email address')"
|
||||||
v-model:value="forgetPasswordEmail"
|
v-model:value="forgetPasswordEmail"
|
||||||
@keyup.enter="requestResetPassword"
|
@keyup.enter="requestResetPassword"
|
||||||
@@ -432,6 +426,7 @@ oauth2ClientSessionId.value = generateRandomUUID();
|
|||||||
.login-divider > .item-content {
|
.login-divider > .item-content {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
> .item-inner {
|
> .item-inner {
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user