61 lines
2.1 KiB
Dart
61 lines
2.1 KiB
Dart
import '../data/service_data_repository.dart';
|
|
|
|
/// 서비스명 관련 기능을 제공하는 서비스 클래스
|
|
class ServiceNameResolver {
|
|
final ServiceDataRepository _dataRepository;
|
|
|
|
ServiceNameResolver(this._dataRepository);
|
|
|
|
/// 현재 로케일에 따라 서비스 표시명 가져오기
|
|
Future<String> getServiceDisplayName({
|
|
required String serviceName,
|
|
required String locale,
|
|
}) async {
|
|
final servicesData = _dataRepository.getServicesData();
|
|
if (servicesData == null) {
|
|
return serviceName;
|
|
}
|
|
|
|
final lowerName = serviceName.toLowerCase().trim();
|
|
final categories = servicesData['categories'] as Map<String, dynamic>;
|
|
|
|
// JSON에서 서비스 찾기
|
|
for (final categoryData in categories.values) {
|
|
final services = (categoryData as Map<String, dynamic>)['services'] as Map<String, dynamic>;
|
|
|
|
for (final serviceData in services.values) {
|
|
final data = serviceData as Map<String, dynamic>;
|
|
final names = List<String>.from(data['names'] ?? []);
|
|
|
|
// names 배열에 있는지 확인
|
|
for (final name in names) {
|
|
if (lowerName == name.toLowerCase() ||
|
|
lowerName.contains(name.toLowerCase()) ||
|
|
name.toLowerCase().contains(lowerName)) {
|
|
// 로케일에 따라 적절한 이름 반환
|
|
if (locale == 'ko' || locale == 'kr') {
|
|
return data['nameKr'] ?? serviceName;
|
|
} else {
|
|
return data['nameEn'] ?? serviceName;
|
|
}
|
|
}
|
|
}
|
|
|
|
// nameKr/nameEn에 직접 매칭 확인
|
|
final nameKr = (data['nameKr'] ?? '').toString().toLowerCase();
|
|
final nameEn = (data['nameEn'] ?? '').toString().toLowerCase();
|
|
|
|
if (lowerName == nameKr || lowerName == nameEn) {
|
|
if (locale == 'ko' || locale == 'kr') {
|
|
return data['nameKr'] ?? serviceName;
|
|
} else {
|
|
return data['nameEn'] ?? serviceName;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// 찾지 못한 경우 원래 이름 반환
|
|
return serviceName;
|
|
}
|
|
} |