31 lines
796 B
TypeScript
31 lines
796 B
TypeScript
import { useFluent } from 'fluent-vue';
|
|
import { ApiError } from './api/client';
|
|
|
|
export function useErrorTranslator() {
|
|
const { $t } = useFluent();
|
|
|
|
function translateError(err: unknown): string {
|
|
if (err instanceof ApiError) {
|
|
// Convert "AUTH_INVALID_CREDENTIALS" -> "error-auth-invalid-credentials"
|
|
const key = `error-${err.code.toLowerCase().replace(/_/g, '-')}`;
|
|
|
|
const translated = $t(key);
|
|
|
|
// Fallback to the message provided by backend.
|
|
if (translated === key) {
|
|
return err.message;
|
|
}
|
|
|
|
return translated;
|
|
}
|
|
|
|
if (err instanceof Error) {
|
|
return err.message;
|
|
}
|
|
|
|
return $t('shared-error');
|
|
}
|
|
|
|
return { translateError };
|
|
}
|