translate method
Translates a key to its localized string value.
Supports nested keys using dot notation (e.g., "section.greeting").
Supports argument interpolation using {{argName}} syntax.
Nylo's own nylo.* keys fall back to their English defaults when the
language files do not define them.
Implementation
String translate(String key, [Map<String, String>? arguments]) {
// Without loaded values, only the built-in defaults can answer
if (_values == null) {
if (_debugMissingKeys) {
NyLogger.debug("Missing translation key (not initialized): $key");
}
final String? defaultValue = _getDefault(key);
if (defaultValue == null) return key;
return _replaceArguments(defaultValue, arguments);
}
String? translatedValue;
bool isMissing = false;
if (_isNestedKey(key)) {
translatedValue = _getNested(key);
isMissing = translatedValue == null;
} else {
translatedValue = _values![key];
isMissing = translatedValue == null;
}
// Try fallback locale if key is missing
if (translatedValue == null && _fallbackValues != null) {
if (_isNestedKeyIn(key, _fallbackValues!)) {
translatedValue = _getNestedFrom(key, _fallbackValues!);
} else {
translatedValue = _fallbackValues![key];
}
isMissing = translatedValue == null;
}
// Log missing key in debug mode
if (_debugMissingKeys && isMissing) {
NyLogger.debug("Missing translation key: $key");
}
// Nylo's own keys fall back to their built-in English defaults
translatedValue ??= _getDefault(key);
if (translatedValue == null) {
return key;
}
return _replaceArguments(translatedValue, arguments);
}