module RouteTranslator::Translator
def available_locales
def available_locales locales = RouteTranslator.available_locales # Make sure the default locale is translated in last place to avoid # problems with wildcards when default locale is omitted in paths. The # default routes will catch all paths like wildcard if it is translated first. locales.delete I18n.default_locale locales.push I18n.default_locale end
def locale_from_args(args)
def locale_from_args(args) args_hash = args.find { |arg| arg.is_a?(Hash) } args_hash&.fetch(:locale, nil) end
def route_name_for(args, old_name, suffix, kaller)
def route_name_for(args, old_name, suffix, kaller) args_locale = locale_from_args(args) current_locale_name = I18n.locale.to_s.underscore locale = if args_locale args_locale.to_s.underscore elsif kaller.respond_to?(:"#{old_name}_#{current_locale_name}_#{suffix}") current_locale_name else I18n.default_locale.to_s.underscore end "#{old_name}_#{locale}_#{suffix}" end
def translate_name(name, locale, named_routes_names)
def translate_name(name, locale, named_routes_names) return if name.blank? translated_name = "#{name}_#{locale.to_s.underscore}" translated_name if named_routes_names.exclude?(translated_name.to_sym) end
def translate_options(options, locale)
def translate_options(options, locale) translated_options = options.dup if translated_options.exclude?(RouteTranslator.locale_param_key) translated_options[RouteTranslator.locale_param_key] = locale.to_s end translated_options end
def translate_options_constraints(options_constraints, locale)
def translate_options_constraints(options_constraints, locale) translated_options_constraints = options_constraints.dup if translated_options_constraints.respond_to?(:[]=) translated_options_constraints[RouteTranslator.locale_param_key] = locale.to_s end translated_options_constraints end
def translate_path(path, locale, scope)
def translate_path(path, locale, scope) RouteTranslator::Translator::Path.translate(path, locale, scope) rescue I18n::MissingTranslationData => e raise e unless RouteTranslator.config.disable_fallback end
def translations_for(route)
def translations_for(route) RouteTranslator::Translator::RouteHelpers.add route.name, route.route_set.named_routes available_locales.each do |locale| translated_path = translate_path(route.path, locale, route.scope) next unless translated_path translated_name = translate_name(route.name, locale, route.route_set.named_routes.names) translated_options_constraints = translate_options_constraints(route.options_constraints, locale) translated_options = translate_options(route.options, locale) yield locale, translated_name, translated_path, translated_options_constraints, translated_options end end