/** * 중앙 포맷팅 규칙 정의. * 모든 날짜/숫자/통화 포맷은 이 파일의 규칙을 따른다. * 변경이 필요하면 이 파일만 수정하면 전체 적용된다. */ export interface DateFormatRules { /** 날짜만 표시 (예: "2025-01-01") */ display: string; /** 날짜+시간 표시 (예: "2025-01-01 14:30:00") */ datetime: string; /** 입력 필드용 (예: "YYYY-MM-DD") */ input: string; /** 시간만 표시 (예: "14:30") */ time: string; } export interface NumberFormatRules { /** 숫자 로케일 (천단위 구분자 등) */ locale: string; /** 기본 소수점 자릿수 */ decimals: number; } export interface CurrencyFormatRules { /** 통화 코드 (예: "KRW", "USD") */ code: string; /** 통화 로케일 */ locale: string; } export interface FormatRules { date: DateFormatRules; number: NumberFormatRules; currency: CurrencyFormatRules; } /** 기본 포맷 규칙 (한국어 기준) */ export const DEFAULT_FORMAT_RULES: FormatRules = { date: { display: "YYYY-MM-DD", datetime: "YYYY-MM-DD HH:mm:ss", input: "YYYY-MM-DD", time: "HH:mm", }, number: { locale: "ko-KR", decimals: 0, }, currency: { code: "KRW", locale: "ko-KR", }, }; /** 현재 적용 중인 포맷 규칙 (런타임에 변경 가능) */ let currentRules: FormatRules = { ...DEFAULT_FORMAT_RULES }; export function getFormatRules(): FormatRules { return currentRules; } export function setFormatRules(rules: Partial): void { currentRules = { ...currentRules, ...rules, date: { ...currentRules.date, ...rules.date }, number: { ...currentRules.number, ...rules.number }, currency: { ...currentRules.currency, ...rules.currency }, }; }