diff --git a/violet/lib/component/hitomi/tag_translate.dart b/violet/lib/component/hitomi/tag_translate.dart index e729f3441..c4940509a 100644 --- a/violet/lib/component/hitomi/tag_translate.dart +++ b/violet/lib/component/hitomi/tag_translate.dart @@ -49,14 +49,22 @@ class TagTranslate { return null; } - if (translateMap.containsKey(key)) { + late final String nomalizedKey; + if (key.startsWith('tag:female:') || key.startsWith('tag:male:')) { + nomalizedKey = key.substring('tag:'.length); + } else { + nomalizedKey = key; + } + + if (translateMap.containsKey(nomalizedKey)) { return null; } - translateMap[key] = value; - reverseAndroMap[disassembly(value) - .replaceAll('female:', '') - .replaceAll('male:', '')] = key; + late final String nomalizedValue = + value.replaceAll('female:', '').replaceAll('male:', ''); + + translateMap[nomalizedKey] = nomalizedValue; + reverseAndroMap[disassembly(nomalizedValue)] = nomalizedKey; return null; }, @@ -87,11 +95,11 @@ class TagTranslate { if (_translateMap.containsKey('character:$key')) { return _translateMap['character:$key']!.split('|').first; } - if (_translateMap.containsKey('tag:female:$key')) { - return _translateMap['tag:female:$key']!.split('|').first; + if (_translateMap.containsKey('female:$key')) { + return _translateMap['female:$key']!.split('|').first; } - if (_translateMap.containsKey('tag:male:$key')) { - return _translateMap['tag:male:$key']!.split('|').first; + if (_translateMap.containsKey('male:$key')) { + return _translateMap['male:$key']!.split('|').first; } if (_translateMap.containsKey('tag:$key')) { return _translateMap['tag:$key']!.split('|').first; diff --git a/violet/test/translate_test.dart b/violet/test/translate_test.dart new file mode 100644 index 000000000..a5374647c --- /dev/null +++ b/violet/test/translate_test.dart @@ -0,0 +1,19 @@ +// This source code is a part of Project Violet. +// Copyright (C) 2020-2024. violet-team. Licensed under the Apache-2.0 License. + +import 'package:flutter_test/flutter_test.dart'; +import 'package:violet/component/hitomi/tag_translate.dart'; + +void main() { + group('Query Test', () { + setUp(() async { + await TagTranslate.init(); + }); + + test('Translate Korean Simple', () { + expect(TagTranslate.ofAny('sole female'), '단독여성'); + expect(TagTranslate.ofAny('pokemon'), '포켓몬'); + expect(TagTranslate.ofAny('teitoku'), '제독'); + }); + }); +}