rnr-starter
Version:
A comprehensive React Native Expo boilerplate with 50+ modern UI components, dark/light themes, i18n, state management, and production-ready architecture
48 lines (40 loc) • 1.12 kB
text/typescript
import i18n from '~/lib/i18n';
/**
* Check if a string is a valid i18n key
*/
export const isI18nKey = (text: string): boolean => {
// Check if the text looks like an i18n key (contains dots and no spaces)
const looksLikeKey = /^[a-zA-Z0-9._-]+$/.test(text) && text.includes('.');
// If it looks like a key, check if it exists in i18n
if (looksLikeKey) {
return i18n.exists(text);
}
return false;
};
/**
* Get translated message, fallback to original if not a key
*/
export const getToastMessage = (text: string): string => {
if (isI18nKey(text)) {
return i18n.t(text);
}
return text;
};
/**
* Get default toast messages for different types
*/
export const getDefaultToastMessage = (type: string): string => {
const key = `toast.${type}.default`;
if (i18n.exists(key)) {
return i18n.t(key);
}
// Fallback messages if i18n keys don't exist
const fallbacks: Record<string, string> = {
success: 'Success!',
error: 'Something went wrong',
info: 'Information',
warning: 'Warning',
loading: 'Loading...',
};
return fallbacks[type] || 'Notification';
};