translate method

String translate(
  1. String key, [
  2. Map<String, String>? arguments
])

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);
}