포그라운드 Push 표시 · 퀘스트 알림 다국어 제목 · 약관 미동의 계정의 행성 가입·성운 생성 차단
This commit is contained in:
@@ -11,3 +11,20 @@ export function publicNameOf(user: { get(field: string): unknown } | null | unde
|
||||
const v = typeof raw === 'string' ? raw.trim() : '';
|
||||
return v.length === 0 || v.includes('@') ? PUBLIC_NAME_FALLBACK : v;
|
||||
}
|
||||
|
||||
/**
|
||||
* 다국어 값 — 문자열이거나 언어별 지도(`{ko, en, …}`, 운영 Quest 제목 등 설계서 §2.8).
|
||||
* 지도면 `locale`(`users/{uid}.locale`, 예 `zh-CN`) → 그 언어 코드 → ko → en → 아무 값.
|
||||
* 앱 `SnapshotReader.textOr` 와 같은 계산. 알림 문구에 지도를 그대로 넣으면 「[object Object]」가 된다.
|
||||
*/
|
||||
export function localizedText(value: unknown, locale?: unknown): string {
|
||||
if (typeof value === 'string') return value;
|
||||
if (!value || typeof value !== 'object') return '';
|
||||
const map = value as Record<string, unknown>;
|
||||
const tag = typeof locale === 'string' ? locale : '';
|
||||
for (const k of [tag, tag.split('-')[0], 'ko', 'en']) {
|
||||
const v = k ? map[k] : undefined;
|
||||
if (typeof v === 'string' && v) return v;
|
||||
}
|
||||
return Object.values(map).find((v): v is string => typeof v === 'string' && v.length > 0) ?? '';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user