diff --git a/web/public/locales/vi/audio.json b/web/public/locales/vi/audio.json
index 4a55da6aa..07561cc51 100644
--- a/web/public/locales/vi/audio.json
+++ b/web/public/locales/vi/audio.json
@@ -41,27 +41,27 @@
"burping": "Ợ",
"hiccup": "Nấc cụt",
"fart": "Đánh rắm",
- "artillery_fire": "tiếng pháo kích",
- "cap_gun": "tiếng súng giấy",
- "fireworks": "tiếng pháo hoa",
- "firecracker": "tiếng pháo nổ",
- "burst": "tiếng nổ bung",
- "eruption": "tiếng phun trào",
- "boom": "tiếng bùm",
- "wood": "tiếng gỗ",
- "chop": "tiếng chặt",
- "splinter": "tiếng gỗ vỡ",
- "crack": "tiếng nứt",
- "glass": "tiếng thủy tinh",
- "chink": "tiếng leng keng",
- "shatter": "tiếng vỡ vụn",
- "silence": "sự im lặng",
- "sound_effect": "hiệu ứng âm thanh",
- "environmental_noise": "tiếng ồn môi trường",
- "static": "tiếng nhiễu",
- "white_noise": "tiếng trắng",
- "pink_noise": "tiếng hồng",
- "television": "tiếng tivi",
+ "artillery_fire": "Tiếng pháo kích",
+ "cap_gun": "Tiếng súng giấy",
+ "fireworks": "Tiếng pháo hoa",
+ "firecracker": "Tiếng pháo nổ",
+ "burst": "Tiếng nổ bung",
+ "eruption": "Tiếng phun trào",
+ "boom": "Tiếng bùm",
+ "wood": "Tiếng gỗ",
+ "chop": "Tiếng chặt",
+ "splinter": "Tiếng gỗ vỡ",
+ "crack": "Tiếng nứt",
+ "glass": "Tiếng thủy tinh",
+ "chink": "Tiếng leng keng",
+ "shatter": "Tiếng vỡ vụn",
+ "silence": "Sự im lặng",
+ "sound_effect": "Hiệu ứng âm thanh",
+ "environmental_noise": "Tiếng ồn môi trường",
+ "static": "Tiếng nhiễu",
+ "white_noise": "Tiếng trắng",
+ "pink_noise": "Tiếng hồng",
+ "television": "Tiếng tivi",
"hands": "Tay",
"finger_snapping": "Búng tay",
"clapping": "Vỗ tay",
@@ -135,295 +135,295 @@
"snake": "Rắn",
"rattle": "Lắc lư / lách cách",
"whale_vocalization": "Tiếng cá voi",
- "music": "âm nhạc",
- "musical_instrument": "nhạc cụ",
- "plucked_string_instrument": "nhạc cụ dây gảy",
- "guitar": "đàn guitar",
- "electric_guitar": "đàn guitar điện",
- "bass_guitar": "đàn guitar bass",
- "acoustic_guitar": "đàn guitar acoustic",
- "steel_guitar": "đàn steel guitar",
- "tapping": "kỹ thuật tapping",
- "strum": "gảy đàn",
- "banjo": "đàn banjo",
- "sitar": "đàn sitar",
- "mandolin": "đàn mandolin",
- "zither": "đàn tranh",
- "ukulele": "đàn ukulele",
- "keyboard": "bàn phím nhạc",
- "piano": "đàn piano",
+ "music": "Âm nhạc",
+ "musical_instrument": "Nhạc cụ",
+ "plucked_string_instrument": "Nhạc cụ dây gảy",
+ "guitar": "Đàn guitar",
+ "electric_guitar": "Đàn guitar điện",
+ "bass_guitar": "Đàn guitar bass",
+ "acoustic_guitar": "Đàn guitar acoustic",
+ "steel_guitar": "Đàn steel guitar",
+ "tapping": "Kỹ thuật tapping",
+ "strum": "Gảy đàn",
+ "banjo": "Đàn banjo",
+ "sitar": "Đàn sitar",
+ "mandolin": "Đàn mandolin",
+ "zither": "Đàn tranh",
+ "ukulele": "Đàn ukulele",
+ "keyboard": "Bàn phím nhạc",
+ "piano": "Đàn piano",
"electric_piano": "đàn piano điện",
- "organ": "đàn organ",
- "electronic_organ": "đàn organ điện tử",
- "hammond_organ": "đàn organ Hammond",
- "synthesizer": "bộ tổng hợp âm",
- "sampler": "thiết bị lấy mẫu âm thanh",
- "harpsichord": "đàn harpsichord",
- "percussion": "bộ gõ",
- "drum_kit": "bộ trống",
- "drum_machine": "máy trống",
- "drum": "trống",
- "snare_drum": "trống snare",
- "rimshot": "gõ vành trống",
- "drum_roll": "cuộn trống",
- "bass_drum": "trống bass",
- "timpani": "trống timpani",
- "tabla": "trống tabla",
- "cymbal": "tiếng chũm chọe",
- "hi_hat": "tiếng hi-hat",
- "wood_block": "khối gỗ gõ",
- "tambourine": "trống lắc",
- "maraca": "tiếng lắc maraca",
- "gong": "tiếng chiêng",
- "tubular_bells": "chuông ống",
- "mallet_percussion": "nhạc cụ gõ bằng dùi",
- "marimba": "đàn marimba",
- "glockenspiel": "chuông gõ glockenspiel",
- "vibraphone": "đàn vibraphone",
- "steelpan": "trống thép",
- "orchestra": "dàn nhạc giao hưởng",
- "brass_instrument": "nhạc cụ đồng",
- "french_horn": "kèn Pháp",
- "trumpet": "kèn trumpet",
- "trombone": "kèn trombone",
- "bowed_string_instrument": "nhạc cụ dây kéo",
- "string_section": "dàn dây",
- "violin": "đàn violin",
- "pizzicato": "gảy dây pizzicato",
- "cello": "đàn cello",
- "double_bass": "đàn contrabass",
- "wind_instrument": "nhạc cụ hơi",
- "flute": "tiếng sáo",
- "saxophone": "kèn saxophone",
- "clarinet": "kèn clarinet",
- "harp": "đàn harp",
- "bell": "chuông",
- "church_bell": "chuông nhà thờ",
- "jingle_bell": "chuông leng keng",
- "bicycle_bell": "chuông xe đạp",
- "tuning_fork": "âm thoa",
- "chime": "tiếng chuỗi chuông",
- "wind_chime": "tiếng chuông gió",
- "harmonica": "tiếng kèn harmonica",
- "accordion": "tiếng đàn accordion",
- "bagpipes": "tiếng kèn túi",
- "didgeridoo": "tiếng kèn didgeridoo",
- "theremin": "tiếng nhạc cụ theremin",
- "singing_bowl": "tiếng chuông xoay Tây Tạng",
- "scratching": "scratch nhạc (xoay đĩa)",
- "pop_music": "nhạc pop",
- "hip_hop_music": "nhạc hip hop",
- "beatboxing": "beatbox",
- "rock_music": "nhạc rock",
- "heavy_metal": "nhạc heavy metal",
- "punk_rock": "nhạc punk rock",
- "grunge": "nhạc grunge",
- "progressive_rock": "nhạc rock tiến bộ",
- "rock_and_roll": "nhạc rock and roll",
- "psychedelic_rock": "nhạc rock ảo giác",
- "rhythm_and_blues": "nhạc R&B",
- "soul_music": "nhạc soul",
- "reggae": "nhạc reggae",
- "country": "nhạc đồng quê",
- "swing_music": "nhạc swing",
- "bluegrass": "nhạc bluegrass",
- "funk": "nhạc funk",
- "folk_music": "nhạc dân gian",
- "middle_eastern_music": "nhạc Trung Đông",
- "jazz": "nhạc jazz",
- "disco": "nhạc disco",
- "classical_music": "nhạc cổ điển",
- "opera": "nhạc opera",
- "electronic_music": "nhạc điện tử",
- "house_music": "nhạc house",
- "techno": "nhạc techno",
- "dubstep": "nhạc dubstep",
- "drum_and_bass": "nhạc trống và bass",
- "electronica": "nhạc electronica",
- "electronic_dance_music": "nhạc nhảy điện tử",
- "ambient_music": "nhạc nền",
- "trance_music": "nhạc trance",
- "music_of_latin_america": "nhạc Mỹ Latinh",
- "salsa_music": "nhạc salsa",
- "flamenco": "nhạc flamenco",
- "blues": "nhạc blues",
- "music_for_children": "nhạc thiếu nhi",
- "new-age_music": "nhạc thời đại mới",
- "vocal_music": "nhạc thanh nhạc",
- "a_capella": "nhạc a cappella",
- "music_of_africa": "nhạc châu Phi",
- "afrobeat": "nhạc afrobeat",
- "christian_music": "nhạc Cơ Đốc",
- "gospel_music": "nhạc phúc âm",
- "music_of_asia": "nhạc châu Á",
- "carnatic_music": "nhạc Carnatic",
- "music_of_bollywood": "nhạc Bollywood",
- "ska": "nhạc ska",
- "traditional_music": "nhạc truyền thống",
- "independent_music": "nhạc indie",
- "song": "bài hát",
- "background_music": "nhạc nền",
- "theme_music": "nhạc chủ đề",
- "jingle": "nhạc quảng cáo",
- "soundtrack_music": "nhạc phim",
- "lullaby": "tiếng ru",
- "video_game_music": "nhạc trò chơi",
- "christmas_music": "nhạc Giáng Sinh",
- "dance_music": "nhạc khiêu vũ",
- "wedding_music": "nhạc đám cưới",
- "happy_music": "nhạc vui",
- "sad_music": "nhạc buồn",
- "tender_music": "nhạc nhẹ nhàng",
- "exciting_music": "nhạc sôi động",
- "angry_music": "nhạc tức giận",
- "scary_music": "nhạc rùng rợn",
- "wind": "tiếng gió",
- "rustling_leaves": "tiếng lá xào xạc",
- "wind_noise": "tiếng gió rít",
- "thunderstorm": "tiếng giông bão",
- "water": "tiếng nước",
- "thunder": "tiếng sấm",
- "rain": "tiếng mưa",
- "raindrop": "tiếng giọt mưa",
- "rain_on_surface": "tiếng mưa rơi",
- "stream": "tiếng suối",
- "waterfall": "tiếng thác nước",
- "ocean": "tiếng biển",
- "waves": "tiếng sóng",
- "steam": "tiếng hơi nước",
- "gurgling": "tiếng róc rách",
- "fire": "tiếng lửa",
- "crackle": "tiếng tí tách",
- "vehicle": "tiếng phương tiện",
- "boat": "tiếng thuyền",
- "sailboat": "tiếng thuyền buồm",
- "rowboat": "tiếng chèo thuyền",
- "motorboat": "tiếng xuồng máy",
- "ship": "tiếng tàu",
- "motor_vehicle": "tiếng xe cơ giới",
- "car": "tiếng xe ô tô",
- "toot": "tiếng bấm còi",
- "car_alarm": "tiếng báo động ô tô",
- "power_windows": "tiếng cửa kính xe",
- "skidding": "tiếng trượt bánh",
- "tire_squeal": "tiếng lốp rít",
- "car_passing_by": "tiếng xe chạy qua",
- "race_car": "tiếng xe đua",
- "truck": "tiếng xe tải",
- "ice_cream_truck": "tiếng xe kem",
- "air_brake": "tiếng phanh hơi",
- "air_horn": "tiếng còi hơi",
- "reversing_beeps": "tiếng kêu lùi xe",
- "bus": "tiếng xe buýt",
- "emergency_vehicle": "tiếng xe khẩn cấp",
- "police_car": "tiếng xe cảnh sát",
- "ambulance": "tiếng xe cứu thương",
- "fire_engine": "tiếng xe cứu hỏa",
- "motorcycle": "tiếng xe máy",
- "traffic_noise": "tiếng giao thông",
- "rail_transport": "tiếng đường sắt",
- "train_horn": "tiếng còi tàu hỏa",
- "railroad_car": "tiếng toa tàu",
- "train": "tiếng tàu hỏa",
- "train_whistle": "tiếng còi tàu",
- "train_wheels_squealing": "tiếng bánh tàu rít",
- "subway": "tiếng tàu điện ngầm",
- "aircraft": "tiếng máy bay",
- "aircraft_engine": "tiếng động cơ máy bay",
- "jet_engine": "tiếng động cơ phản lực",
- "propeller": "tiếng cánh quạt",
- "helicopter": "tiếng trực thăng",
- "fixed-wing_aircraft": "tiếng máy bay cánh cố định",
- "bicycle": "tiếng xe đạp",
- "skateboard": "tiếng ván trượt",
- "engine": "tiếng động cơ",
- "light_engine": "tiếng động cơ nhẹ",
- "dental_drill's_drill": "tiếng khoan nha khoa",
- "lawn_mower": "tiếng máy cắt cỏ",
- "chainsaw": "tiếng cưa máy",
- "medium_engine": "tiếng động cơ vừa",
- "heavy_engine": "tiếng động cơ nặng",
- "engine_knocking": "tiếng gõ máy",
- "engine_starting": "tiếng khởi động động cơ",
- "ding-dong": "tiếng ding-dong",
- "idling": "tiếng nổ không tải",
- "accelerating": "tiếng tăng tốc",
- "door": "tiếng cửa",
- "doorbell": "tiếng chuông cửa",
- "sliding_door": "tiếng cửa trượt",
- "slam": "tiếng đóng sầm",
- "knock": "tiếng gõ cửa",
- "tap": "tiếng gõ nhẹ",
- "squeak": "tiếng kêu cót két",
- "cupboard_open_or_close": "tiếng mở/đóng tủ",
- "drawer_open_or_close": "tiếng mở/đóng ngăn kéo",
- "dishes": "tiếng bát đĩa",
- "cutlery": "tiếng dao nĩa",
- "chopping": "tiếng băm chặt",
- "frying": "tiếng chiên xào",
- "microwave_oven": "tiếng lò vi sóng",
- "blender": "tiếng máy xay",
- "water_tap": "tiếng vòi nước",
- "sink": "tiếng bồn rửa",
- "bathtub": "tiếng bồn tắm",
- "coin": "tiếng đồng xu",
- "hair_dryer": "tiếng máy sấy tóc",
- "toilet_flush": "tiếng xả nước",
- "toothbrush": "tiếng bàn chải",
- "electric_toothbrush": "tiếng bàn chải điện",
- "vacuum_cleaner": "tiếng máy hút bụi",
- "zipper": "tiếng dây kéo",
- "keys_jangling": "tiếng chìa khóa leng keng",
- "scissors": "tiếng kéo cắt",
- "electric_shaver": "tiếng máy cạo râu",
- "shuffling_cards": "tiếng xào bài",
- "typing": "tiếng gõ phím",
- "typewriter": "tiếng máy đánh chữ",
- "computer_keyboard": "tiếng bàn phím",
- "writing": "tiếng viết",
- "alarm": "tiếng báo động",
- "telephone": "tiếng điện thoại",
- "telephone_bell_ringing": "tiếng chuông điện thoại",
- "ringtone": "tiếng nhạc chuông",
- "telephone_dialing": "tiếng quay số",
- "dial_tone": "tiếng âm quay số",
- "busy_signal": "tiếng tín hiệu bận",
- "alarm_clock": "tiếng đồng hồ báo thức",
- "siren": "tiếng còi báo động",
- "civil_defense_siren": "tiếng còi phòng không",
- "buzzer": "tiếng chuông báo",
- "smoke_detector": "tiếng báo khói",
- "fire_alarm": "tiếng báo cháy",
- "foghorn": "tiếng còi sương",
- "whistle": "tiếng còi",
- "steam_whistle": "tiếng còi hơi",
- "mechanisms": "tiếng cơ khí",
- "ratchet": "tiếng cơ cấu bánh cóc",
- "clock": "tiếng đồng hồ",
- "tick": "tiếng tích",
- "tick-tock": "tiếng tích tắc",
- "gears": "tiếng bánh răng",
- "pulleys": "tiếng ròng rọc",
- "sewing_machine": "tiếng máy may",
- "camera": "tiếng máy ảnh",
- "single-lens_reflex_camera": "tiếng máy ảnh DSLR",
- "mechanical_fan": "tiếng quạt máy",
- "air_conditioning": "tiếng máy lạnh",
- "cash_register": "tiếng máy tính tiền",
- "printer": "tiếng máy in",
- "tools": "tiếng dụng cụ",
- "hammer": "tiếng búa",
- "jackhammer": "tiếng khoan bê tông",
- "sawing": "tiếng cưa",
- "filing": "tiếng giũa",
- "sanding": "tiếng chà nhám",
- "power_tool": "tiếng dụng cụ điện",
- "drill": "tiếng máy khoan",
- "explosion": "tiếng nổ",
- "gunshot": "tiếng súng",
- "machine_gun": "tiếng súng máy",
- "fusillade": "tiếng loạt súng",
- "radio": "tiếng radio",
- "field_recording": "ghi âm hiện trường",
- "scream": "tiếng hét"
+ "organ": "Đàn organ",
+ "electronic_organ": "Đàn organ điện tử",
+ "hammond_organ": "Đàn organ Hammond",
+ "synthesizer": "Bộ tổng hợp âm",
+ "sampler": "Thiết bị lấy mẫu âm thanh",
+ "harpsichord": "Đàn harpsichord",
+ "percussion": "Bộ gõ",
+ "drum_kit": "Bộ trống",
+ "drum_machine": "Máy trống",
+ "drum": "Tiếng trống",
+ "snare_drum": "Trống snare",
+ "rimshot": "Gõ vành trống",
+ "drum_roll": "Cuộn trống",
+ "bass_drum": "Trống bass",
+ "timpani": "Trống timpani",
+ "tabla": "Trống tabla",
+ "cymbal": "Tiếng chũm chọe",
+ "hi_hat": "Tiếng hi-hat",
+ "wood_block": "Khối gỗ gõ",
+ "tambourine": "Trống lắc",
+ "maraca": "Tiếng lắc maraca",
+ "gong": "Tiếng chiêng",
+ "tubular_bells": "Chuông ống",
+ "mallet_percussion": "Nhạc cụ gõ bằng dùi",
+ "marimba": "Đàn marimba",
+ "glockenspiel": "Chuông gõ glockenspiel",
+ "vibraphone": "Đàn vibraphone",
+ "steelpan": "Trống thép",
+ "orchestra": "Dàn nhạc giao hưởng",
+ "brass_instrument": "Nhạc cụ đồng",
+ "french_horn": "Kèn Pháp",
+ "trumpet": "Kèn trumpet",
+ "trombone": "Kèn trombone",
+ "bowed_string_instrument": "Nhạc cụ dây kéo",
+ "string_section": "Dàn dây",
+ "violin": "Đàn violin",
+ "pizzicato": "Gảy dây pizzicato",
+ "cello": "Đàn cello",
+ "double_bass": "Đàn contrabass",
+ "wind_instrument": "Nhạc cụ hơi",
+ "flute": "Tiếng sáo",
+ "saxophone": "Kèn saxophone",
+ "clarinet": "Kèn clarinet",
+ "harp": "Đàn harp",
+ "bell": "Chuông",
+ "church_bell": "Chuông nhà thờ",
+ "jingle_bell": "Chuông leng keng",
+ "bicycle_bell": "Chuông xe đạp",
+ "tuning_fork": "Âm thoa",
+ "chime": "Tiếng chuỗi chuông",
+ "wind_chime": "Tiếng chuông gió",
+ "harmonica": "Tiếng kèn harmonica",
+ "accordion": "Tiếng đàn accordion",
+ "bagpipes": "Tiếng kèn túi",
+ "didgeridoo": "Tiếng kèn didgeridoo",
+ "theremin": "Tiếng nhạc cụ theremin",
+ "singing_bowl": "Tiếng chuông xoay Tây Tạng",
+ "scratching": "Scratch nhạc (xoay đĩa)",
+ "pop_music": "Nhạc pop",
+ "hip_hop_music": "Nhạc hip hop",
+ "beatboxing": "Beatbox",
+ "rock_music": "Nhạc rock",
+ "heavy_metal": "Nhạc heavy metal",
+ "punk_rock": "Nhạc punk rock",
+ "grunge": "Nhạc grunge",
+ "progressive_rock": "Nhạc rock tiến bộ",
+ "rock_and_roll": "Nhạc rock and roll",
+ "psychedelic_rock": "Nhạc rock ảo giác",
+ "rhythm_and_blues": "Nhạc R&B",
+ "soul_music": "Nhạc soul",
+ "reggae": "Nhạc reggae",
+ "country": "Nhạc đồng quê",
+ "swing_music": "Nhạc swing",
+ "bluegrass": "Nhạc bluegrass",
+ "funk": "Nhạc funk",
+ "folk_music": "Nhạc dân gian",
+ "middle_eastern_music": "Nhạc Trung Đông",
+ "jazz": "Nhạc jazz",
+ "disco": "Nhạc disco",
+ "classical_music": "Nhạc cổ điển",
+ "opera": "Nhạc opera",
+ "electronic_music": "Nhạc điện tử",
+ "house_music": "Nhạc house",
+ "techno": "Nhạc techno",
+ "dubstep": "Nhạc dubstep",
+ "drum_and_bass": "Nhạc trống và bass",
+ "electronica": "Nhạc electronica",
+ "electronic_dance_music": "Nhạc nhảy điện tử",
+ "ambient_music": "Nhạc nền",
+ "trance_music": "Nhạc trance",
+ "music_of_latin_america": "Nhạc Mỹ Latinh",
+ "salsa_music": "Nhạc salsa",
+ "flamenco": "Nhạc flamenco",
+ "blues": "Nhạc blues",
+ "music_for_children": "Nhạc thiếu nhi",
+ "new-age_music": "Nhạc thời đại mới",
+ "vocal_music": "Nhạc thanh nhạc",
+ "a_capella": "Nhạc a cappella",
+ "music_of_africa": "Nhạc châu Phi",
+ "afrobeat": "Nhạc afrobeat",
+ "christian_music": "Nhạc Cơ Đốc",
+ "gospel_music": "Nhạc phúc âm",
+ "music_of_asia": "Nhạc châu Á",
+ "carnatic_music": "Nhạc Carnatic",
+ "music_of_bollywood": "Nhạc Bollywood",
+ "ska": "Nhạc ska",
+ "traditional_music": "Nhạc truyền thống",
+ "independent_music": "Nhạc indie",
+ "song": "Bài hát",
+ "background_music": "Nhạc nền",
+ "theme_music": "Nhạc chủ đề",
+ "jingle": "Nhạc quảng cáo",
+ "soundtrack_music": "Nhạc phim",
+ "lullaby": "Tiếng ru",
+ "video_game_music": "Nhạc trò chơi",
+ "christmas_music": "Nhạc Giáng Sinh",
+ "dance_music": "Nhạc khiêu vũ",
+ "wedding_music": "Nhạc đám cưới",
+ "happy_music": "Nhạc vui",
+ "sad_music": "Nhạc buồn",
+ "tender_music": "Nhạc nhẹ nhàng",
+ "exciting_music": "Nhạc sôi động",
+ "angry_music": "Nhạc tức giận",
+ "scary_music": "Nhạc rùng rợn",
+ "wind": "Tiếng gió",
+ "rustling_leaves": "Tiếng lá xào xạc",
+ "wind_noise": "Tiếng gió rít",
+ "thunderstorm": "Tiếng giông bão",
+ "water": "Tiếng nước",
+ "thunder": "Tiếng sấm",
+ "rain": "Tiếng mưa",
+ "raindrop": "Tiếng giọt mưa",
+ "rain_on_surface": "Tiếng mưa rơi",
+ "stream": "Tiếng suối",
+ "waterfall": "Tiếng thác nước",
+ "ocean": "Tiếng biển",
+ "waves": "Tiếng sóng",
+ "steam": "Tiếng hơi nước",
+ "gurgling": "Tiếng róc rách",
+ "fire": "Tiếng lửa",
+ "crackle": "Tiếng tí tách",
+ "vehicle": "Tiếng phương tiện",
+ "boat": "Tiếng thuyền",
+ "sailboat": "Tiếng thuyền buồm",
+ "rowboat": "Tiếng chèo thuyền",
+ "motorboat": "Tiếng xuồng máy",
+ "ship": "Tiếng tàu",
+ "motor_vehicle": "Tiếng xe cơ giới",
+ "car": "Tiếng xe ô tô",
+ "toot": "Tiếng bấm còi",
+ "car_alarm": "Tiếng báo động ô tô",
+ "power_windows": "Tiếng cửa kính xe",
+ "skidding": "Tiếng trượt bánh",
+ "tire_squeal": "Tiếng lốp rít",
+ "car_passing_by": "Tiếng xe chạy qua",
+ "race_car": "Tiếng xe đua",
+ "truck": "Tiếng xe tải",
+ "ice_cream_truck": "Tiếng xe kem",
+ "air_brake": "Tiếng phanh hơi",
+ "air_horn": "Tiếng còi hơi",
+ "reversing_beeps": "Tiếng kêu lùi xe",
+ "bus": "Tiếng xe buýt",
+ "emergency_vehicle": "Tiếng xe khẩn cấp",
+ "police_car": "Tiếng xe cảnh sát",
+ "ambulance": "Tiếng xe cứu thương",
+ "fire_engine": "Tiếng xe cứu hỏa",
+ "motorcycle": "Tiếng xe máy",
+ "traffic_noise": "Tiếng giao thông",
+ "rail_transport": "Tiếng đường sắt",
+ "train_horn": "Tiếng còi tàu hỏa",
+ "railroad_car": "Tiếng toa tàu",
+ "train": "Tiếng tàu hỏa",
+ "train_whistle": "Tiếng còi tàu",
+ "train_wheels_squealing": "Tiếng bánh tàu rít",
+ "subway": "Tiếng tàu điện ngầm",
+ "aircraft": "Tiếng máy bay",
+ "aircraft_engine": "Tiếng động cơ máy bay",
+ "jet_engine": "Tiếng động cơ phản lực",
+ "propeller": "Tiếng cánh quạt",
+ "helicopter": "Tiếng trực thăng",
+ "fixed-wing_aircraft": "Tiếng máy bay cánh cố định",
+ "bicycle": "Tiếng xe đạp",
+ "skateboard": "Tiếng ván trượt",
+ "engine": "Tiếng động cơ",
+ "light_engine": "Tiếng động cơ nhẹ",
+ "dental_drill's_drill": "Tiếng khoan nha khoa",
+ "lawn_mower": "Tiếng máy cắt cỏ",
+ "chainsaw": "Tiếng cưa máy",
+ "medium_engine": "Tiếng động cơ vừa",
+ "heavy_engine": "Tiếng động cơ nặng",
+ "engine_knocking": "Tiếng gõ máy",
+ "engine_starting": "Tiếng khởi động động cơ",
+ "ding-dong": "Tiếng ding-dong",
+ "idling": "Tiếng nổ không tải",
+ "accelerating": "Tiếng tăng tốc",
+ "door": "Tiếng cửa",
+ "doorbell": "Tiếng chuông cửa",
+ "sliding_door": "Tiếng cửa trượt",
+ "slam": "Tiếng đóng sầm",
+ "knock": "Tiếng gõ cửa",
+ "tap": "Tiếng gõ nhẹ",
+ "squeak": "Tiếng kêu cót két",
+ "cupboard_open_or_close": "Tiếng mở/đóng tủ",
+ "drawer_open_or_close": "Tiếng mở/đóng ngăn kéo",
+ "dishes": "Tiếng bát đĩa",
+ "cutlery": "Tiếng dao nĩa",
+ "chopping": "Tiếng băm chặt",
+ "frying": "Tiếng chiên xào",
+ "microwave_oven": "Tiếng lò vi sóng",
+ "blender": "Tiếng máy xay",
+ "water_tap": "Tiếng vòi nước",
+ "sink": "Tiếng bồn rửa",
+ "bathtub": "Tiếng bồn tắm",
+ "coin": "Tiếng đồng xu",
+ "hair_dryer": "Tiếng máy sấy tóc",
+ "toilet_flush": "Tiếng xả nước",
+ "toothbrush": "Tiếng bàn chải",
+ "electric_toothbrush": "Tiếng bàn chải điện",
+ "vacuum_cleaner": "Tiếng máy hút bụi",
+ "zipper": "Tiếng dây kéo",
+ "keys_jangling": "Tiếng chìa khóa leng keng",
+ "scissors": "Tiếng kéo cắt",
+ "electric_shaver": "Tiếng máy cạo râu",
+ "shuffling_cards": "Tiếng xào bài",
+ "typing": "Tiếng gõ phím",
+ "typewriter": "Tiếng máy đánh chữ",
+ "computer_keyboard": "Tiếng bàn phím",
+ "writing": "Tiếng viết",
+ "alarm": "Tiếng báo động",
+ "telephone": "Tiếng điện thoại",
+ "telephone_bell_ringing": "Tiếng chuông điện thoại",
+ "ringtone": "Tiếng nhạc chuông",
+ "telephone_dialing": "Tiếng quay số",
+ "dial_tone": "Tiếng âm quay số",
+ "busy_signal": "Tiếng tín hiệu bận",
+ "alarm_clock": "Tiếng đồng hồ báo thức",
+ "siren": "Tiếng còi báo động",
+ "civil_defense_siren": "Tiếng còi phòng không",
+ "buzzer": "Tiếng chuông báo",
+ "smoke_detector": "Tiếng báo khói",
+ "fire_alarm": "Tiếng báo cháy",
+ "foghorn": "Tiếng còi sương",
+ "whistle": "Tiếng còi",
+ "steam_whistle": "Tiếng còi hơi",
+ "mechanisms": "Tiếng cơ khí",
+ "ratchet": "Tiếng cơ cấu bánh cóc",
+ "clock": "Tiếng đồng hồ",
+ "tick": "Tiếng tích",
+ "tick-tock": "Tiếng tích tắc",
+ "gears": "Tiếng bánh răng",
+ "pulleys": "Tiếng ròng rọc",
+ "sewing_machine": "Tiếng máy may",
+ "camera": "Tiếng máy ảnh",
+ "single-lens_reflex_camera": "Tiếng máy ảnh DSLR",
+ "mechanical_fan": "Tiếng quạt máy",
+ "air_conditioning": "Tiếng máy lạnh",
+ "cash_register": "Tiếng máy tính tiền",
+ "printer": "Tiếng máy in",
+ "tools": "Tiếng dụng cụ",
+ "hammer": "Tiếng búa",
+ "jackhammer": "Tiếng khoan bê tông",
+ "sawing": "Tiếng cưa",
+ "filing": "Tiếng giũa",
+ "sanding": "Tiếng chà nhám",
+ "power_tool": "Tiếng dụng cụ điện",
+ "drill": "Tiếng máy khoan",
+ "explosion": "Tiếng nổ",
+ "gunshot": "Tiếng súng",
+ "machine_gun": "Tiếng súng máy",
+ "fusillade": "Tiếng loạt súng",
+ "radio": "Tiếng radio",
+ "field_recording": "Ghi âm hiện trường",
+ "scream": "Tiếng hét"
}
diff --git a/web/public/locales/vi/common.json b/web/public/locales/vi/common.json
index 97b5d2b75..6a0b803a7 100644
--- a/web/public/locales/vi/common.json
+++ b/web/public/locales/vi/common.json
@@ -1,12 +1,12 @@
{
"time": {
- "untilRestart": "còn lại đến khi khởi động lại",
+ "untilRestart": "Đến khi khởi động lại",
"untilForTime": "Cho đến khi {{time}}",
"untilForRestart": "Cho đến khi Frigate khởi động lại.",
"ago": "{{timeAgo}} trước",
"formattedTimestamp": {
- "12hour": "định dạng thời gian 12 giờ",
- "24hour": "định dạng thời gian 24 giờ"
+ "12hour": "d MMM, h:mm:ss aaa",
+ "24hour": "d MMM, HH:mm:ss"
},
"year_other": "{{time}} năm",
"month_other": "{{time}} tháng",
@@ -14,31 +14,31 @@
"hour_other": "{{time}} giờ",
"minute_other": "{{time}} phút",
"second_other": "{{time}} giây",
- "justNow": "vừa xong",
- "today": "hôm nay",
- "yesterday": "hôm qua",
+ "justNow": "Vừa xong",
+ "today": "Hôm nay",
+ "yesterday": "Hôm qua",
"last7": "7 ngày qua",
"last14": "14 ngày qua",
"last30": "30 ngày qua",
- "thisWeek": "tuần này",
- "lastWeek": "tuần trước",
- "thisMonth": "tháng này",
- "lastMonth": "tháng trước",
+ "thisWeek": "Tuần này",
+ "lastWeek": "Tuần trước",
+ "thisMonth": "Tháng này",
+ "lastMonth": "Tháng trước",
"5minutes": "5 phút",
"10minutes": "10 phút",
"30minutes": "30 phút",
"1hour": "1 giờ",
"12hours": "12 giờ",
"24hours": "24 giờ",
- "pm": "chiều",
- "am": "sáng",
- "mo": "{{time}}tháng",
- "d": "{{time}}ngày",
- "m": "{{time}}phút",
- "s": "{{time}}giây",
+ "pm": "pm",
+ "am": "am",
+ "mo": "{{time}} tháng",
+ "d": "{{time}} ngày",
+ "m": "{{time}} phút",
+ "s": "{{time}} giây",
"formattedTimestamp2": {
- "12hour": "định dạng thời gian 12 giờ (2)",
- "24hour": "định dạng thời gian 24 giờ (2)"
+ "12hour": "dd/MM h:mm:ssa",
+ "24hour": "d MMM HH:mm:ss"
},
"formattedTimestampExcludeSeconds": {
"12hour": "thời gian 12 giờ (không giây)",
@@ -49,18 +49,43 @@
"24hour": "thời gian 24 giờ kèm năm"
},
"formattedTimestampOnlyMonthAndDay": "chỉ tháng và ngày",
- "yr": "{{time}}năm",
- "h": "{{time}}giờ"
+ "yr": "{{time}} năm",
+ "h": "{{time}} giờ",
+ "formattedTimestampMonthDayYear": {
+ "12hour": "d MMM, yyyy",
+ "24hour": "d MMM, yyyy"
+ },
+ "formattedTimestampHourMinute": {
+ "12hour": "h:mm aaa",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "h:mm:ss aaa",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "d MMM, h:mm aaa",
+ "24hour": "d MMM, HH:mm"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "d MMM yyyy, h:mm aaa",
+ "24hour": "d MMM yyyy, HH:mm"
+ },
+ "formattedTimestampMonthDay": "d MMM",
+ "formattedTimestampFilename": {
+ "12hour": "dd-MM-yy-h-mm-ss-a",
+ "24hour": "dd-MM-yy-HH-mm-s"
+ }
},
"menu": {
- "systemLogs": "nhật ký hệ thống",
+ "systemLogs": "Nhật ký hệ thống",
"user": {
- "account": "tài khoản",
- "anonymous": "ẩn danh",
- "logout": "đăng xuất",
- "setPassword": "đặt mật khẩu",
+ "account": "Tài khoản",
+ "anonymous": "Ẩn danh",
+ "logout": "Đăng xuất",
+ "setPassword": "Đặt mật khẩu",
"current": "Người dùng hiện tại: {{user}}",
- "title": "người dùng"
+ "title": "Người dùng"
},
"language": {
"en": "Tiếng Anh",
@@ -93,136 +118,144 @@
"sk": "Tiếng Slovakia",
"withSystem": {
"label": "Theo hệ thống"
- }
+ },
+ "yue": "Tiếng Quảng Đông",
+ "ca": "Tiếng Catalan",
+ "th": "Tiếng Thái Lan"
},
- "system": "hệ thống",
- "systemMetrics": "thông số hệ thống",
- "configuration": "cấu hình",
- "settings": "cài đặt",
- "configurationEditor": "trình chỉnh sửa cấu hình",
- "languages": "ngôn ngữ",
- "appearance": "giao diện",
+ "system": "Hệ thống",
+ "systemMetrics": "Thông số hệ thống",
+ "configuration": "Cấu hình",
+ "settings": "Cài đặt",
+ "configurationEditor": "Trình chỉnh sửa cấu hình",
+ "languages": "Ngôn ngữ",
+ "appearance": "Giao diện",
"darkMode": {
- "label": "chế độ tối",
- "light": "sáng",
- "dark": "tối",
+ "label": "Chế độ tối",
+ "light": "Sáng",
+ "dark": "Tối",
"withSystem": {
- "label": "theo hệ thống"
+ "label": "Theo hệ thống"
}
},
- "withSystem": "theo hệ thống",
+ "withSystem": "Hệ thống",
"theme": {
- "label": "giao diện",
- "red": "đỏ",
+ "label": "Giao diện",
+ "red": "Đỏ",
"contrast": "tương phản",
- "blue": "xanh dương",
- "green": "xanh lá",
- "nord": "nord",
- "default": "mặc định"
+ "blue": "Xanh dương",
+ "green": "Xanh lá",
+ "nord": "Nord",
+ "default": "Mặc định",
+ "highcontrast": "Độ tương phản cao"
},
- "help": "trợ giúp",
+ "help": "Trợ giúp",
"documentation": {
- "title": "tài liệu",
- "label": "hướng dẫn"
+ "title": "Tài liệu",
+ "label": "Hướng dẫn"
},
- "restart": "khởi động lại",
+ "restart": "Khởi động lại",
"live": {
- "title": "trực tiếp",
- "allCameras": "tất cả camera",
+ "title": "Trực tiếp",
+ "allCameras": "Tất cả Camera",
"cameras": {
- "title": "camera",
+ "title": "Camera",
"count_other": "{{count}} Camera"
}
},
- "review": "xem lại",
- "explore": "khám phá",
- "export": "xuất",
+ "review": "Xem lại",
+ "explore": "Khám phá",
+ "export": "Xuất",
"uiPlayground": "UI Playground",
- "faceLibrary": "thư viện khuôn mặt"
+ "faceLibrary": "Thư viện khuôn mặt"
},
"unit": {
"speed": {
"mph": "mph (dặm/giờ)",
"kph": "km/h (kilômét/giờ)"
+ },
+ "length": {
+ "meters": "mét (m)",
+ "feet": "feet (ft)"
}
},
"label": {
- "back": "quay lại"
+ "back": "Quay lại"
},
"button": {
- "apply": "áp dụng",
- "reset": "đặt lại",
- "done": "xong",
- "enabled": "đã bật",
- "enable": "bật",
- "disabled": "đã tắt",
- "disable": "tắt",
+ "apply": "Áp dụng",
+ "reset": "Đặt lại",
+ "done": "Xong",
+ "enabled": "Đã bật",
+ "enable": "Bật",
+ "disabled": "Đã tắt",
+ "disable": "Tắt",
"save": "Lưu",
- "cancel": "hủy",
- "close": "đóng",
- "copy": "sao chép",
- "back": "quay lại",
- "history": "lịch sử",
- "fullscreen": "toàn màn hình",
- "on": "bật",
- "exitFullscreen": "thoát toàn màn hình",
- "pictureInPicture": "hình trong hình",
- "twoWayTalk": "đàm thoại hai chiều",
- "cameraAudio": "âm thanh camera",
- "off": "tắt",
- "edit": "chỉnh sửa",
- "copyCoordinates": "sao chép tọa độ",
+ "cancel": "Hủy",
+ "close": "Đóng",
+ "copy": "Sao chép",
+ "back": "Quay lại",
+ "history": "Lịch sử",
+ "fullscreen": "Toàn màn hình",
+ "on": "Bật",
+ "exitFullscreen": "Thoát toàn màn hình",
+ "pictureInPicture": "Hình trong hình",
+ "twoWayTalk": "Đàm thoại hai chiều",
+ "cameraAudio": "Âm thanh Camera",
+ "off": "Tắt",
+ "edit": "Chỉnh sửa",
+ "copyCoordinates": "Sao chép tọa độ",
"delete": "Xóa",
- "yes": "có",
- "no": "không",
- "download": "tải xuống",
- "info": "thông tin",
- "suspended": "tạm dừng",
- "unsuspended": "khôi phục",
- "play": "phát",
- "unselect": "bỏ chọn",
- "export": "xuất",
- "deleteNow": "xóa ngay",
- "next": "tiếp theo",
+ "yes": "Có",
+ "no": "Không",
+ "download": "Tải xuống",
+ "info": "Thông tin",
+ "suspended": "Đã tạm dừng",
+ "unsuspended": "Khôi phục",
+ "play": "Phát",
+ "unselect": "Bỏ chọn",
+ "export": "Xuất",
+ "deleteNow": "Xóa ngay",
+ "next": "Tiếp theo",
"saving": "Đang lưu…"
},
"toast": {
"copyUrlToClipboard": "Đã sao chép liên kết.",
"save": {
- "title": "lưu thành công",
+ "title": "Lưu thành công",
"error": {
- "noMessage": "không có thông báo lỗi",
+ "noMessage": "Không thể lưu thay đổi cấu hình",
"title": "Lỗi khi lưu thay đổi cấu hình: {{errorMessage}}"
}
}
},
"role": {
- "title": "vai trò",
- "admin": "quản trị viên",
- "viewer": "người xem",
+ "title": "Vai trò",
+ "admin": "Quản trị viên",
+ "viewer": "Người xem",
"desc": "Quản trị viên có toàn quyền truy cập tất cả các tính năng trong giao diện Frigate. Người xem chỉ được phép xem camera, mục đã ghi lại và các đoạn video lịch sử trong giao diện."
},
"pagination": {
- "label": "trang",
+ "label": "Trang",
"previous": {
- "title": "trước đó",
- "label": "trước"
+ "title": "Trước đó",
+ "label": "Trước"
},
"next": {
- "title": "kế tiếp",
- "label": "tiếp"
+ "title": "Kế tiếp",
+ "label": "Tiếp"
},
- "more": "xem thêm"
+ "more": "Xem thêm"
},
"accessDenied": {
- "documentTitle": "từ chối truy cập",
- "title": "truy cập bị từ chối",
+ "documentTitle": "Từ chối truy cập",
+ "title": "Truy cập bị từ chối",
"desc": "Bạn không có quyền truy cập vào trang này."
},
"notFound": {
- "documentTitle": "không tìm thấy",
- "title": "không tìm thấy",
- "desc": "trang bạn đang tìm không tồn tại"
+ "documentTitle": "Không tìm thấy",
+ "title": "Không tìm thấy",
+ "desc": "Trang bạn đang tìm không tồn tại"
},
"selectItem": "Chọn mục {{item}}"
}
diff --git a/web/public/locales/vi/components/camera.json b/web/public/locales/vi/components/camera.json
index 2e74eeb29..07617eb47 100644
--- a/web/public/locales/vi/components/camera.json
+++ b/web/public/locales/vi/components/camera.json
@@ -1,12 +1,86 @@
{
"group": {
"delete": {
- "label": "Xóa nhóm camera",
+ "label": "Xóa nhóm Camera",
"confirm": {
- "title": "Xác nhận xóa"
+ "title": "Xác nhận xóa",
+ "desc": "Bạn có chắc chắn muốn xóa nhóm camera {{name}} không?"
}
},
"label": "Các nhóm Camera",
- "add": "Thêm nhóm Camera"
+ "add": "Thêm nhóm Camera",
+ "camera": {
+ "setting": {
+ "stream": "Trực tiếp",
+ "audio": {
+ "tips": {
+ "title": "Âm thanh phải được xuất từ camera của bạn và được định cấu hình trong go2rtc cho luồng này.",
+ "document": "Đọc tài liệu "
+ }
+ },
+ "desc": "Thay đổi các tùy chọn truyền phát trực tiếp cho bảng điều khiển của nhóm camera này.Các cài đặt này dành riêng cho thiết bị/trình duyệt..",
+ "streamMethod": {
+ "method": {
+ "noStreaming": {
+ "desc": "Hình ảnh camera sẽ chỉ cập nhật mỗi phút một lần và không có truyền phát nào xảy ra.",
+ "label": "Không truyền phát"
+ },
+ "continuousStreaming": {
+ "desc": {
+ "title": "Hình ảnh camera sẽ luôn là luồng trực tiếp khi hiển thị trên bảng điều khiển, ngay cả khi không có hoạt động nào được phát hiện.",
+ "warning": "Truyền phát liên tục có thể gây ra sử dụng băng thông cao và các vấn đề về hiệu suất. Sử dụng một cách thận trọng."
+ },
+ "label": "Truyền phát liên tục"
+ },
+ "smartStreaming": {
+ "label": "Truyền phát Thông minh (khuyến nghị)",
+ "desc": "Truyền phát thông minh sẽ cập nhật hình ảnh camera của bạn mỗi phút một lần khi không có hoạt động nào được phát hiện để tiết kiệm băng thông và tài nguyên. Khi phát hiện hoạt động, hình ảnh sẽ chuyển đổi liền mạch sang luồng trực tiếp."
+ }
+ },
+ "placeholder": "Chọn phương thức truyền phát",
+ "label": "Phương thức truyền phát"
+ },
+ "placeholder": "Chọn phát trực tiếp",
+ "compatibilityMode": {
+ "label": "Chế độ tương thích",
+ "desc": "Chỉ bật tùy chọn này nếu luồng trực tiếp của camera của bạn hiển thị các hiện vật màu và có một đường chéo ở phía bên phải của hình ảnh."
+ },
+ "title": "Cài đặt trực tiếp {{cameraName}}",
+ "audioIsAvailable": "Âm thanh có sẵn cho luồng này",
+ "audioIsUnavailable": "Âm thanh không có sẵn cho luồng này",
+ "label": "Cài đặt trực tiếp Camera"
+ }
+ },
+ "name": {
+ "label": "Tên",
+ "errorMessage": {
+ "mustLeastCharacters": "Tên nhóm Camera phải có ít nhất 2 ký tự.",
+ "nameMustNotPeriod": "Tên nhóm camera không được chứa dấu chấm.",
+ "exists": "Tên nhóm Camera đã tồn tại.",
+ "invalid": "Tên nhóm camera không hợp lệ."
+ },
+ "placeholder": "Nhập tên…"
+ },
+ "icon": "Biểu tượng",
+ "success": "Nhóm camera ({{name}}) đã được lưu.",
+ "cameras": {
+ "desc": "Chọn camera cho nhóm này.",
+ "label": "Camera"
+ },
+ "edit": "Sửa nhóm Camera"
+ },
+ "debug": {
+ "boundingBox": "Hộp giới hạn",
+ "options": {
+ "hideOptions": "Ẩn tùy chọn",
+ "label": "Cài đặt",
+ "title": "Tùy chọn",
+ "showOptions": "Hiện thị tùy chọn"
+ },
+ "timestamp": "Dấu thời gian",
+ "zones": "Khu vực",
+ "mask": "Mặt nạ",
+ "motion": "Chuyển động",
+ "regions": "Vùng"
}
}
diff --git a/web/public/locales/vi/components/dialog.json b/web/public/locales/vi/components/dialog.json
index 49edf5f85..53b1226b1 100644
--- a/web/public/locales/vi/components/dialog.json
+++ b/web/public/locales/vi/components/dialog.json
@@ -4,17 +4,18 @@
"button": "Khởi động lại",
"restarting": {
"title": "Đang khởi động lại Frigate",
- "content": "Trang này sẽ tải lại sau {{countdown}} giây."
+ "content": "Trang này sẽ tải lại sau {{countdown}} giây.",
+ "button": "Tải lại ngay"
}
},
"explore": {
"plus": {
"review": {
"question": {
- "ask_a": "Đây có phải là {{label}} không?",
- "ask_an": "Đây có phải là {{label}} không?",
+ "ask_a": "Đối tượng này có phải là một {{label}} không?",
+ "ask_an": "Đối tượng này có phải là một {{label}} không?",
"label": "Xác nhận nhãn này cho Frigate Plus",
- "ask_full": "Đây có phải là {{untranslatedLabel}} ({{translatedLabel}}) không?"
+ "ask_full": "Đối tượng này có phải là một {{untranslatedLabel}} ({{translatedLabel}}) không?"
},
"state": {
"submitted": "Đã gửi"
@@ -40,7 +41,8 @@
"end": {
"title": "Thời gian kết thúc",
"label": "Chọn thời gian kết thúc"
- }
+ },
+ "lastHour_other": "{{count}} giờ trước"
},
"name": {
"placeholder": "Đặt tên cho bản xuất"
@@ -51,12 +53,60 @@
"toast": {
"error": {
"endTimeMustAfterStartTime": "Thời gian kết thúc phải sau thời gian bắt đầu",
- "noVaildTimeSelected": "Chưa chọn khoảng thời gian hợp lệ"
- }
+ "noVaildTimeSelected": "Chưa chọn khoảng thời gian hợp lệ",
+ "failed": "Không thể bắt đầu xuất: {{error}}"
+ },
+ "success": "Đã bắt đầu xuất thành công. Xem tệp trong thư mục /exports."
},
"fromTimeline": {
"saveExport": "Lưu bản xuất",
"previewExport": "Xem trước bản xuất"
}
+ },
+ "streaming": {
+ "debugView": "Chế độ xem Gỡ lỗi",
+ "label": "Luồng",
+ "restreaming": {
+ "disabled": "Tính năng phát lại luồng không được bật cho camera này.",
+ "desc": {
+ "title": "Thiết lập go2rtc để có thêm tùy chọn xem trực tiếp và âm thanh cho camera này.",
+ "readTheDocumentation": "Đọc tài liệu"
+ }
+ },
+ "showStats": {
+ "label": "Hiển thị số liệu thống kê luồng",
+ "desc": "Bật tùy chọn này để hiển thị số liệu thống kê luồng dưới dạng lớp phủ trên nguồn cấp dữ liệu camera."
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "Xác nhận xóa",
+ "toast": {
+ "success": "Đoạn video liên quan đến các mục đánh giá đã chọn đã được xóa thành công.",
+ "error": "Không thể xóa: {{error}}"
+ },
+ "desc": {
+ "selected": "Bạn có chắc chắn muốn xóa tất cả video đã ghi liên quan đến mục đánh giá này không?
Giữ phím Shift để bỏ qua hộp thoại này trong tương lai."
+ }
+ },
+ "button": {
+ "deleteNow": "Xóa ngay",
+ "export": "Xuất",
+ "markAsReviewed": "Đánh dấu là đã xem xét"
+ }
+ },
+ "search": {
+ "saveSearch": {
+ "success": "Tìm kiếm ({{searchName}}) đã được lưu.",
+ "button": {
+ "save": {
+ "label": "Lưu tìm kiếm này"
+ }
+ },
+ "label": "Lưu tìm kiếm",
+ "desc": "Cung cấp tên cho tìm kiếm đã lưu này.",
+ "placeholder": "Nhập tên cho tìm kiếm của bạn",
+ "overwrite": "{{searchName}} đã tồn tại. Lưu sẽ ghi đè lên giá trị hiện có."
+ }
}
}
diff --git a/web/public/locales/vi/components/filter.json b/web/public/locales/vi/components/filter.json
index d8b825b31..1570067ab 100644
--- a/web/public/locales/vi/components/filter.json
+++ b/web/public/locales/vi/components/filter.json
@@ -5,6 +5,122 @@
"all": {
"title": "Tất cả các nhãn",
"short": "Nhãn"
+ },
+ "count_one": "{{count}} nhãn",
+ "count_other": "{{count}} nhãn"
+ },
+ "features": {
+ "submittedToFrigatePlus": {
+ "tips": "Trước tiên, bạn phải lọc các đối tượng được theo dõi có ảnh chụp nhanh.
Không thể gửi các đối tượng được theo dõi không có ảnh chụp nhanh tới Frigate+.",
+ "label": "Đã gửi tới Frigate+"
+ },
+ "label": "Tính năng",
+ "hasSnapshot": "Có ảnh chụp nhanh",
+ "hasVideoClip": "Có video clip"
+ },
+ "sort": {
+ "scoreDesc": "Điểm Đối tượng (Giảm dần)",
+ "speedAsc": "Tốc độ Ước tính (Tăng dần)",
+ "relevance": "Mức độ liên quan",
+ "label": "Sắp xếp",
+ "dateAsc": "Ngày (Tăng dần)",
+ "dateDesc": "Ngày (Giảm dần)",
+ "scoreAsc": "Điểm Đối tượng (Tăng dần)",
+ "speedDesc": "Tốc độ Ước tính (Giảm dần)"
+ },
+ "cameras": {
+ "label": "Bộ lọc Camera",
+ "all": {
+ "title": "Tất cả Camera",
+ "short": "Camera"
+ }
+ },
+ "review": {
+ "showReviewed": "Hiển thị đã xem xét"
+ },
+ "motion": {
+ "showMotionOnly": "Chỉ Hiển thị Chuyển động"
+ },
+ "explore": {
+ "settings": {
+ "title": "Cài đặt",
+ "defaultView": {
+ "title": "Chế độ xem Mặc định",
+ "desc": "Khi không có bộ lọc nào được chọn, hiển thị bản tóm tắt các đối tượng được theo dõi gần đây nhất cho mỗi nhãn, hoặc hiển thị lưới không được lọc.",
+ "summary": "Tóm tắt",
+ "unfilteredGrid": "Lưới không được lọc"
+ },
+ "gridColumns": {
+ "title": "Cột Lưới",
+ "desc": "Chọn số lượng cột trong chế độ xem lưới."
+ },
+ "searchSource": {
+ "label": "Nguồn Tìm kiếm",
+ "desc": "Chọn tìm kiếm hình thu nhỏ hay mô tả của các đối tượng được theo dõi của bạn.",
+ "options": {
+ "thumbnailImage": "Hình thu nhỏ",
+ "description": "Mô tả"
+ }
+ }
+ },
+ "date": {
+ "selectDateBy": {
+ "label": "Chọn một ngày để lọc theo"
+ }
+ }
+ },
+ "logSettings": {
+ "allLogs": "Tất cả nhật ký",
+ "label": "Lọc cấp độ nhật ký",
+ "filterBySeverity": "Lọc nhật ký theo mức độ nghiêm trọng",
+ "loading": {
+ "title": "Đang tải",
+ "desc": "Khi bảng nhật ký được cuộn xuống dưới cùng, nhật ký mới sẽ tự động truyền trực tuyến khi chúng được thêm vào."
+ },
+ "disableLogStreaming": "Tắt truyền phát nhật ký"
+ },
+ "trackedObjectDelete": {
+ "title": "Xác nhận Xóa",
+ "toast": {
+ "success": "Đã xóa thành công các đối tượng được theo dõi.",
+ "error": "Không thể xóa các đối tượng được theo dõi: {{errorMessage}}"
+ },
+ "desc": "Việc xóa {{objectLength}} đối tượng được theo dõi này sẽ xóa ảnh chụp nhanh, mọi nội dung nhúng đã lưu và mọi mục nhập vòng đời đối tượng liên quan. Đoạn ghi hình đã ghi của các đối tượng được theo dõi này trong chế độ xem Lịch sử sẽ KHÔNG bị xóa.
Bạn có chắc chắn muốn tiếp tục không?
Giữ phím Shift để bỏ qua hộp thoại này trong tương lai."
+ },
+ "recognizedLicensePlates": {
+ "selectPlatesFromList": "Chọn một hoặc nhiều biển số từ danh sách.",
+ "title": "Biển số xe được Nhận dạng",
+ "loadFailed": "Không thể tải biển số xe được nhận dạng.",
+ "loading": "Đang tải biển số xe được nhận dạng…",
+ "placeholder": "Nhập để tìm kiếm biển số xe…",
+ "noLicensePlatesFound": "Không tìm thấy biển số xe nào."
+ },
+ "more": "Thêm Bộ lọc",
+ "reset": {
+ "label": "Đặt lại bộ lọc về giá trị mặc định"
+ },
+ "timeRange": "Phạm vi Thời gian",
+ "subLabels": {
+ "label": "Nhãn phụ",
+ "all": "Tất cả Nhãn phụ"
+ },
+ "score": "Điểm",
+ "estimatedSpeed": "Tốc độ Ước tính ({{unit}})",
+ "dates": {
+ "selectPreset": "Chọn thiết lập sẵn…",
+ "all": {
+ "title": "Tất cả Ngày",
+ "short": "Ngày"
+ }
+ },
+ "zoneMask": {
+ "filterBy": "Lọc theo mặt nạ khu vực"
+ },
+ "zones": {
+ "label": "Khu vực",
+ "all": {
+ "title": "Tất cả Khu vực",
+ "short": "Khu vực"
}
}
}
diff --git a/web/public/locales/vi/components/input.json b/web/public/locales/vi/components/input.json
index bc5aa1a5a..c12a614b5 100644
--- a/web/public/locales/vi/components/input.json
+++ b/web/public/locales/vi/components/input.json
@@ -1,7 +1,10 @@
{
"button": {
"downloadVideo": {
- "label": "Tải xuống video"
+ "label": "Tải xuống video",
+ "toast": {
+ "success": "Video trong mục xem lại của bạn đã bắt đầu tải xuống."
+ }
}
}
}
diff --git a/web/public/locales/vi/components/player.json b/web/public/locales/vi/components/player.json
index cd4112d89..3ce29ac46 100644
--- a/web/public/locales/vi/components/player.json
+++ b/web/public/locales/vi/components/player.json
@@ -1,5 +1,51 @@
{
"noRecordingsFoundForThisTime": "Không tìm thấy bản ghi nào cho thời điểm này",
"noPreviewFound": "Không tìm thấy bản xem trước",
- "noPreviewFoundFor": "Không tìm thấy bản xem trước cho {{cameraName}}"
+ "noPreviewFoundFor": "Không tìm thấy bản xem trước cho {{cameraName}}",
+ "stats": {
+ "droppedFrameRate": "Tỷ lệ khung hình bị rớt:",
+ "droppedFrames": {
+ "short": {
+ "title": "Bị rớt",
+ "value": "{{droppedFrames}} khung hình"
+ },
+ "title": "Khung hình bị rớt:"
+ },
+ "decodedFrames": "Khung hình đã giải mã:",
+ "latency": {
+ "short": {
+ "value": "{{seconds}} giây",
+ "title": "Độ trễ"
+ },
+ "title": "Độ trễ:",
+ "value": "{{seconds}} giây"
+ },
+ "totalFrames": "Tổng số khung hình:",
+ "streamType": {
+ "title": "Loại luồng:",
+ "short": "Loại"
+ },
+ "bandwidth": {
+ "title": "Băng thông:",
+ "short": "Băng thông"
+ }
+ },
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "Đã gửi thành công khung hình tới Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "Không gửi được khung hình tới Frigate+"
+ }
+ },
+ "submitFrigatePlus": {
+ "title": "Gửi khung hình này tới Frigate+?",
+ "submit": "Gửi"
+ },
+ "livePlayerRequiredIOSVersion": "Yêu cầu iOS 17.1 trở lên cho loại luồng trực tiếp này.",
+ "streamOffline": {
+ "title": "Luồng ngoại tuyến",
+ "desc": "Không nhận được khung hình nào trên luồng detect của {{cameraName}}, hãy kiểm tra nhật ký lỗi"
+ },
+ "cameraDisabled": "Camera đã bị tắt"
}
diff --git a/web/public/locales/vi/objects.json b/web/public/locales/vi/objects.json
index e5d369d14..d7168ee4e 100644
--- a/web/public/locales/vi/objects.json
+++ b/web/public/locales/vi/objects.json
@@ -1,8 +1,8 @@
{
"mouse": "Chuột nhắt",
- "keyboard": "bàn phím nhạc",
- "blender": "tiếng máy xay",
- "sink": "tiếng bồn rửa",
+ "keyboard": "Bàn phím nhạc",
+ "blender": "Tiếng máy xay",
+ "sink": "Tiếng bồn rửa",
"animal": "Động vật",
"dog": "Chó",
"bark": "Sủa",
@@ -11,19 +11,110 @@
"goat": "Dê",
"sheep": "Cừu",
"bird": "Chim",
- "vehicle": "tiếng phương tiện",
- "boat": "tiếng thuyền",
- "car": "tiếng xe ô tô",
- "bus": "tiếng xe buýt",
- "motorcycle": "tiếng xe máy",
- "train": "tiếng tàu hỏa",
- "bicycle": "tiếng xe đạp",
- "skateboard": "tiếng ván trượt",
- "door": "tiếng cửa",
- "hair_dryer": "tiếng máy sấy tóc",
- "toothbrush": "tiếng bàn chải",
- "scissors": "tiếng kéo cắt",
- "clock": "tiếng đồng hồ",
+ "vehicle": "Tiếng phương tiện",
+ "boat": "Tiếng thuyền",
+ "car": "Tiếng xe ô tô",
+ "bus": "Tiếng xe buýt",
+ "motorcycle": "Tiếng xe máy",
+ "train": "Tiếng tàu hỏa",
+ "bicycle": "Tiếng xe đạp",
+ "skateboard": "Tiếng ván trượt",
+ "door": "Tiếng cửa",
+ "hair_dryer": "Tiếng máy sấy tóc",
+ "toothbrush": "Tiếng bàn chải",
+ "scissors": "Tiếng kéo cắt",
+ "clock": "Tiếng đồng hồ",
"person": "Người",
- "airplane": "Máy bay"
+ "airplane": "Máy bay",
+ "zebra": "Ngựa vằn",
+ "tennis_racket": "Vợt tennis",
+ "plate": "Đĩa",
+ "wine_glass": "Ly rượu vang",
+ "cup": "Cốc",
+ "fork": "Nĩa",
+ "knife": "Dao",
+ "spoon": "Thìa",
+ "bowl": "Bát",
+ "banana": "Chuối",
+ "apple": "Táo",
+ "sandwich": "Bánh mì kẹp",
+ "orange": "Cam",
+ "broccoli": "Bông cải xanh",
+ "carrot": "Cà rốt",
+ "hot_dog": "Xúc xích",
+ "pizza": "Pizza",
+ "donut": "Bánh rán",
+ "chair": "Ghế",
+ "couch": "Ghế sofa",
+ "potted_plant": "Cây trồng trong chậu",
+ "bed": "Giường",
+ "mirror": "Gương",
+ "window": "Cửa sổ",
+ "desk": "Bàn làm việc",
+ "toilet": "Nhà vệ sinh",
+ "tv": "Ti vi",
+ "microwave": "Lò vi sóng",
+ "oven": "Lò nướng",
+ "toaster": "Máy nướng bánh mì",
+ "refrigerator": "Tủ lạnh",
+ "book": "Sách",
+ "face": "Mặt",
+ "license_plate": "Biển số xe",
+ "package": "Gói hàng",
+ "bbq_grill": "Vỉ nướng BBQ",
+ "amazon": "Amazon",
+ "usps": "USPS",
+ "ups": "UPS",
+ "fedex": "FedEx",
+ "dhl": "DHL",
+ "an_post": "An Post",
+ "purolator": "Purolator",
+ "postnl": "PostNL",
+ "nzpost": "NZ Post",
+ "postnord": "PostNord",
+ "gls": "GLS",
+ "dpd": "DPD",
+ "traffic_light": "Đèn giao thông",
+ "fire_hydrant": "Trụ cứu hỏa",
+ "street_sign": "Biển báo đường phố",
+ "stop_sign": "Biển báo dừng",
+ "parking_meter": "Đồng hồ đỗ xe",
+ "bench": "Ghế dài",
+ "cow": "Bò",
+ "elephant": "Voi",
+ "bear": "Gấu",
+ "giraffe": "Hươu cao cổ",
+ "hat": "Mũ",
+ "backpack": "Ba lô",
+ "umbrella": "Ô",
+ "shoe": "Giày",
+ "snowboard": "Ván trượt tuyết",
+ "eye_glasses": "Kính mắt",
+ "handbag": "Túi xách",
+ "tie": "Cà vạt",
+ "suitcase": "Va li",
+ "frisbee": "Đĩa ném",
+ "skis": "Ván trượt tuyết",
+ "sports_ball": "Bóng thể thao",
+ "kite": "Diều",
+ "baseball_bat": "Gậy bóng chày",
+ "baseball_glove": "Găng tay bóng chày",
+ "surfboard": "Ván lướt sóng",
+ "bottle": "Chai",
+ "cake": "Bánh ngọt",
+ "dining_table": "Bàn ăn",
+ "laptop": "Máy tính xách tay",
+ "remote": "Điều khiển từ xa",
+ "cell_phone": "Điện thoại di động",
+ "vase": "Bình hoa",
+ "teddy_bear": "Gấu bông",
+ "hair_brush": "Lược chải tóc",
+ "squirrel": "Sóc",
+ "deer": "Hươu",
+ "fox": "Cáo",
+ "rabbit": "Thỏ",
+ "raccoon": "Gấu mèo",
+ "robot_lawnmower": "Máy cắt cỏ robot",
+ "waste_bin": "Thùng rác",
+ "on_demand": "Theo yêu cầu"
}
diff --git a/web/public/locales/vi/views/configEditor.json b/web/public/locales/vi/views/configEditor.json
index c9577f82a..cbd19441c 100644
--- a/web/public/locales/vi/views/configEditor.json
+++ b/web/public/locales/vi/views/configEditor.json
@@ -1,5 +1,16 @@
{
"copyConfig": "Sao chép cấu hình",
"saveAndRestart": "Lưu & Khởi động lại",
- "saveOnly": "Chỉ lưu"
+ "saveOnly": "Chỉ lưu",
+ "confirm": "Thoát mà không lưu?",
+ "toast": {
+ "error": {
+ "savingError": "Lỗi khi lưu cấu hình"
+ },
+ "success": {
+ "copyToClipboard": "Đã sao chép cấu hình vào bộ nhớ tạm."
+ }
+ },
+ "configEditor": "Trình chỉnh sửa Cấu hình",
+ "documentTitle": "Trình chỉnh sửa Cấu hình - Frigate"
}
diff --git a/web/public/locales/vi/views/events.json b/web/public/locales/vi/views/events.json
index ad469617b..4259ab2cc 100644
--- a/web/public/locales/vi/views/events.json
+++ b/web/public/locales/vi/views/events.json
@@ -1,9 +1,38 @@
{
- "camera": "tiếng máy ảnh",
+ "camera": "Tiếng máy ảnh",
"alerts": "Cảnh báo",
"detections": "Phát hiện",
"motion": {
- "only": "Chỉ chuyển động"
+ "only": "Chỉ chuyển động",
+ "label": "Chuyển động"
},
- "allCameras": "Tất cả Camera"
+ "allCameras": "Tất cả Camera",
+ "detected": "Đã phát hiện",
+ "recordings": {
+ "documentTitle": "Bản ghi - Frigate"
+ },
+ "events": {
+ "aria": "Chọn sự kiện",
+ "label": "Sự kiện",
+ "noFoundForTimePeriod": "Không tìm thấy sự kiện nào trong khoảng thời gian này."
+ },
+ "timeline.aria": "Chọn dòng thời gian",
+ "selected_one": "{{count}} đã chọn",
+ "selected_other": "{{count}} đã chọn",
+ "empty": {
+ "alert": "Không có cảnh báo nào để xem xét",
+ "detection": "Không có phát hiện nào để xem xét",
+ "motion": "Không tìm thấy dữ liệu chuyển động"
+ },
+ "timeline": "Dòng thời gian",
+ "documentTitle": "Xem lại - Frigate",
+ "calendarFilter": {
+ "last24Hours": "24 giờ qua"
+ },
+ "newReviewItems": {
+ "label": "Xem các mục mới cần xem xét",
+ "button": "Các mục mới cần xem xét"
+ },
+ "markAsReviewed": "Đánh dấu là đã xem xét",
+ "markTheseItemsAsReviewed": "Đánh dấu các mục này là đã xem xét"
}
diff --git a/web/public/locales/vi/views/explore.json b/web/public/locales/vi/views/explore.json
index 0967ef424..2829d8303 100644
--- a/web/public/locales/vi/views/explore.json
+++ b/web/public/locales/vi/views/explore.json
@@ -1 +1,205 @@
-{}
+{
+ "objectLifecycle": {
+ "lifecycleItemDesc": {
+ "header": {
+ "zones": "Vùng",
+ "ratio": "Tỷ lệ",
+ "area": "Diện tích"
+ },
+ "gone": "{{label}} đã rời đi",
+ "heard": "{{label}} đã nghe thấy",
+ "external": "{{label}} được phát hiện",
+ "visible": "{{label}} được phát hiện",
+ "entered_zone": "{{label}} đã đi vào {{zones}}",
+ "active": "{{label}} trở nên hoạt động",
+ "stationary": "{{label}} trở nên đứng yên",
+ "attribute": {
+ "faceOrLicense_plate": "Đã phát hiện {{attribute}} cho {{label}}",
+ "other": "{{label}} được nhận dạng là {{attribute}}"
+ }
+ },
+ "carousel": {
+ "previous": "Trang trước",
+ "next": "Trang tiếp theo"
+ },
+ "annotationSettings": {
+ "showAllZones": {
+ "desc": "Luôn hiển thị các vùng trên các khung hình mà đối tượng đã đi vào.",
+ "title": "Hiển thị tất cả các Vùng"
+ },
+ "offset": {
+ "millisecondsToOffset": "Số mili giây để lệch các chú thích phát hiện. Mặc định: 0",
+ "documentation": "Đọc tài liệu ",
+ "desc": "Dữ liệu này đến từ luồng phát hiện của máy quay nằm ở trên hình ảnh từ luồng ghi hình. Có khả năng hai luồng này không đồng bộ hoàn hảo. Do đó, hộp giới hạn và đoạn ghi hình sẽ không khớp nhau một cách hoàn hảo. Tuy nhiên, trường annotation_offset có thể được sử dụng để điều chỉnh điều này.",
+ "label": "Độ lệch Chú thích",
+ "tips": "MẸO: Hãy tưởng tượng có một clip sự kiện với một người đi từ trái sang phải. Nếu hộp giới hạn trên dòng thời gian sự kiện luôn ở bên trái của người đó thì giá trị nên được giảm xuống. Tương tự, nếu một người đi từ trái sang phải và hộp giới hạn luôn ở phía trước người đó thì giá trị nên được tăng lên.",
+ "toast": {
+ "success": "Độ lệch chú thích cho {{camera}} đã được lưu vào tệp cấu hình. Khởi động lại Frigate để áp dụng các thay đổi của bạn."
+ }
+ },
+ "title": "Cài đặt Chú thích"
+ },
+ "count": "{{first}} trên {{second}}",
+ "title": "Vòng đời Đối tượng",
+ "noImageFound": "Không tìm thấy hình ảnh cho dấu thời gian này.",
+ "createObjectMask": "Tạo Mặt nạ Đối tượng",
+ "adjustAnnotationSettings": "Điều chỉnh cài đặt chú thích",
+ "trackedPoint": "Điểm được theo dõi",
+ "scrollViewTips": "Cuộn để xem những khoảnh khắc quan trọng trong vòng đời của đối tượng này.",
+ "autoTrackingTips": "Vị trí hộp giới hạn sẽ không chính xác đối với các máy quay tự động theo dõi."
+ },
+ "details": {
+ "item": {
+ "title": "Chi tiết Mục Xem lại",
+ "desc": "Chi tiết mục xem lại",
+ "button": {
+ "share": "Chia sẻ mục xem lại này",
+ "viewInExplore": "Xem trong Khám phá"
+ },
+ "toast": {
+ "error": {
+ "updatedSublabelFailed": "Không thể cập nhật nhãn phụ: {{errorMessage}}",
+ "updatedLPRFailed": "Không thể cập nhật biển số xe: {{errorMessage}}",
+ "regenerate": "Không thể gọi {{provider}} để lấy mô tả mới: {{errorMessage}}"
+ },
+ "success": {
+ "regenerate": "Một mô tả mới đã được yêu cầu từ {{provider}}. Tùy thuộc vào tốc độ của nhà cung cấp của bạn, mô tả mới có thể mất một chút thời gian để tạo lại.",
+ "updatedLPR": "Cập nhật biển số xe thành công.",
+ "updatedSublabel": "Cập nhật nhãn phụ thành công."
+ }
+ },
+ "tips": {
+ "mismatch_other": "{{count}} đối tượng không khả dụng đã được phát hiện và bao gồm trong mục xem lại này. Những đối tượng đó hoặc không đủ điều kiện là một cảnh báo hoặc phát hiện hoặc đã được dọn dẹp/xóa.",
+ "hasMissingObjects": "Điều chỉnh cấu hình của bạn nếu bạn muốn Frigate lưu các đối tượng được theo dõi cho các nhãn sau: {{objects}}"
+ }
+ },
+ "expandRegenerationMenu": "Mở rộng menu tạo lại",
+ "label": "Nhãn",
+ "editSubLabel": {
+ "title": "Chỉnh sửa nhãn phụ",
+ "desc": "Nhập một nhãn phụ mới cho {{label}} này",
+ "descNoLabel": "Nhập một nhãn phụ mới cho đối tượng được theo dõi này"
+ },
+ "snapshotScore": {
+ "label": "Điểm Ảnh chụp nhanh"
+ },
+ "topScore": {
+ "info": "Điểm cao nhất là điểm trung vị cao nhất cho đối tượng được theo dõi, vì vậy điểm này có thể khác với điểm được hiển thị trên ảnh thu nhỏ của kết quả tìm kiếm.",
+ "label": "Điểm Cao nhất"
+ },
+ "estimatedSpeed": "Tốc độ ước tính",
+ "objects": "Đối tượng",
+ "timestamp": "Dấu thời gian",
+ "button": {
+ "findSimilar": "Tìm đối tượng tương tự",
+ "regenerate": {
+ "title": "Tạo lại",
+ "label": "Tạo lại mô tả đối tượng được theo dõi"
+ }
+ },
+ "description": {
+ "label": "Mô tả",
+ "placeholder": "Mô tả của đối tượng được theo dõi",
+ "aiTips": "Frigate sẽ không yêu cầu mô tả từ nhà cung cấp AI tạo sinh của bạn cho đến khi vòng đời của đối tượng được theo dõi kết thúc."
+ },
+ "tips": {
+ "descriptionSaved": "Lưu mô tả thành công",
+ "saveDescriptionFailed": "Không thể cập nhật mô tả: {{errorMessage}}"
+ },
+ "camera": "Camera",
+ "recognizedLicensePlate": "Biển số xe được nhận dạng",
+ "regenerateFromSnapshot": "Tạo lại từ Ảnh chụp nhanh",
+ "regenerateFromThumbnails": "Tạo lại từ Ảnh thu nhỏ",
+ "zones": "Vùng",
+ "editLPR": {
+ "title": "Chỉnh sửa biển số xe",
+ "desc": "Nhập một giá trị biển số xe mới cho {{label}} này",
+ "descNoLabel": "Nhập một giá trị biển số xe mới cho đối tượng được theo dõi này"
+ }
+ },
+ "itemMenu": {
+ "viewObjectLifecycle": {
+ "label": "Xem vòng đời đối tượng",
+ "aria": "Hiển thị vòng đời đối tượng"
+ },
+ "downloadSnapshot": {
+ "label": "Tải xuống ảnh chụp nhanh",
+ "aria": "Tải xuống ảnh chụp nhanh"
+ },
+ "downloadVideo": {
+ "aria": "Tải xuống video",
+ "label": "Tải xuống video"
+ },
+ "findSimilar": {
+ "label": "Tìm đối tượng tương tự",
+ "aria": "Tìm các đối tượng được theo dõi tương tự"
+ },
+ "submitToPlus": {
+ "aria": "Gửi đến Frigate Plus",
+ "label": "Gửi đến Frigate+"
+ },
+ "viewInHistory": {
+ "label": "Xem trong Lịch sử",
+ "aria": "Xem trong Lịch sử"
+ },
+ "deleteTrackedObject": {
+ "label": "Xóa đối tượng được theo dõi này"
+ }
+ },
+ "exploreIsUnavailable": {
+ "embeddingsReindexing": {
+ "step": {
+ "descriptionsEmbedded": "Mô tả đã được nhúng: ",
+ "trackedObjectsProcessed": "Đối tượng được theo dõi đã xử lý: ",
+ "thumbnailsEmbedded": "Ảnh thu nhỏ đã được nhúng: "
+ },
+ "finishingShortly": "Sẽ hoàn thành trong giây lát",
+ "context": "Tính năng Khám phá có thể được sử dụng sau khi quá trình tái lập chỉ mục dữ liệu nhúng (embeddings) của đối tượng được theo dõi hoàn tất.",
+ "startingUp": "Đang khởi động…",
+ "estimatedTime": "Thời gian ước tính còn lại:"
+ },
+ "downloadingModels": {
+ "context": "Frigate đang tải xuống các mô hình dữ liệu nhúng cần thiết để hỗ trợ tính năng Tìm kiếm theo Ngữ nghĩa. Quá trình này có thể mất vài phút tùy thuộc vào tốc độ kết nối mạng của bạn.",
+ "setup": {
+ "visionModel": "Mô hình thị giác",
+ "visionModelFeatureExtractor": "Trình trích xuất đặc trưng mô hình thị giác",
+ "textModel": "Mô hình văn bản",
+ "textTokenizer": "Trình mã hóa văn bản"
+ },
+ "tips": {
+ "context": "Bạn có thể muốn tái lập chỉ mục dữ liệu nhúng của các đối tượng được theo dõi sau khi các mô hình được tải xuống.",
+ "documentation": "Đọc tài liệu"
+ },
+ "error": "Đã xảy ra lỗi. Vui lòng kiểm tra nhật ký của Frigate."
+ },
+ "title": "Tính năng Khám phá không khả dụng"
+ },
+ "dialog": {
+ "confirmDelete": {
+ "desc": "Việc xóa đối tượng được theo dõi này sẽ xóa ảnh chụp nhanh, mọi dữ liệu nhúng đã lưu và mọi mục nhập vòng đời đối tượng liên quan. Đoạn ghi hình đã ghi của đối tượng được theo dõi này trong chế độ xem Lịch sử sẽ KHÔNG bị xóa.
Bạn có chắc chắn muốn tiếp tục không?",
+ "title": "Xác nhận Xóa"
+ }
+ },
+ "noTrackedObjects": "Không tìm thấy Đối tượng được theo dõi nào",
+ "searchResult": {
+ "deleteTrackedObject": {
+ "toast": {
+ "success": "Đã xóa đối tượng được theo dõi thành công.",
+ "error": "Không thể xóa đối tượng được theo dõi: {{errorMessage}}"
+ }
+ },
+ "tooltip": "Khớp {{type}} ở mức {{confidence}}%"
+ },
+ "exploreMore": "Khám phá thêm các đối tượng {{label}}",
+ "trackedObjectDetails": "Chi tiết Đối tượng được theo dõi",
+ "type": {
+ "details": "chi tiết",
+ "snapshot": "ảnh chụp nhanh",
+ "video": "video",
+ "object_lifecycle": "vòng đời đối tượng"
+ },
+ "fetchingTrackedObjectsFailed": "Lỗi khi tìm nạp các đối tượng được theo dõi: {{errorMessage}}",
+ "documentTitle": "Khám phá - Frigate",
+ "generativeAI": "AI Tạo sinh",
+ "trackedObjectsCount_other": "{{count}} đối tượng được theo dõi "
+}
diff --git a/web/public/locales/vi/views/exports.json b/web/public/locales/vi/views/exports.json
index ee3936522..6206f5821 100644
--- a/web/public/locales/vi/views/exports.json
+++ b/web/public/locales/vi/views/exports.json
@@ -1,3 +1,17 @@
{
- "search": "Tìm kiếm"
+ "search": "Tìm kiếm",
+ "documentTitle": "Xuất tệp - Frigate",
+ "noExports": "Không tìm thấy tệp xuất nào",
+ "deleteExport": "Xóa tệp xuất",
+ "deleteExport.desc": "Bạn có chắc chắn muốn xóa {{exportName}} không?",
+ "editExport": {
+ "title": "Đổi tên tệp xuất",
+ "desc": "Nhập tên mới cho tệp xuất này.",
+ "saveExport": "Lưu tệp xuất"
+ },
+ "toast": {
+ "error": {
+ "renameExportFailed": "Đổi tên tệp xuất thất bại: {{errorMessage}}"
+ }
+ }
}
diff --git a/web/public/locales/vi/views/faceLibrary.json b/web/public/locales/vi/views/faceLibrary.json
index 9cc90f14f..e27adcf65 100644
--- a/web/public/locales/vi/views/faceLibrary.json
+++ b/web/public/locales/vi/views/faceLibrary.json
@@ -1,9 +1,96 @@
{
"selectItem": "Chọn mục {{item}}",
"description": {
- "addFace": "Hướng dẫn thêm bộ sưu tập mới vào Thư viện khuôn mặt."
+ "addFace": "Hướng dẫn thêm bộ sưu tập mới vào Thư viện khuôn mặt.",
+ "invalidName": "Tên không hợp lệ. Tên chỉ được phép chứa chữ cái, số, khoảng trắng, dấu nháy đơn, dấu gạch dưới và dấu gạch ngang.",
+ "placeholder": "Nhập tên cho bộ sưu tập này"
},
"details": {
- "person": "Người"
+ "person": "Người",
+ "unknown": "Không xác định",
+ "subLabelScore": "Điểm nhãn phụ",
+ "scoreInfo": "Điểm nhãn phụ là điểm số có trọng số cho tất cả các độ tin cậy của khuôn mặt được nhận dạng, vì vậy điểm này có thể khác với điểm hiển thị trên ảnh chụp nhanh.",
+ "timestamp": "Dấu thời gian",
+ "face": "Chi tiết khuôn mặt",
+ "faceDesc": "Chi tiết của đối tượng được theo dõi đã tạo ra khuôn mặt này"
+ },
+ "renameFace": {
+ "title": "Đổi tên khuôn mặt",
+ "desc": "Nhập tên mới cho {{name}}"
+ },
+ "button": {
+ "renameFace": "Đổi tên khuôn mặt",
+ "deleteFaceAttempts": "Xóa khuôn mặt",
+ "addFace": "Thêm khuôn mặt",
+ "deleteFace": "Xóa khuôn mặt",
+ "uploadImage": "Tải lên hình ảnh",
+ "reprocessFace": "Xử lý lại khuôn mặt"
+ },
+ "imageEntry": {
+ "dropActive": "Thả hình ảnh vào đây…",
+ "validation": {
+ "selectImage": "Vui lòng chọn một tệp hình ảnh."
+ },
+ "dropInstructions": "Kéo và thả hình ảnh vào đây, hoặc nhấp để chọn",
+ "maxSize": "Kích thước tối đa: {{size}}MB"
+ },
+ "toast": {
+ "success": {
+ "uploadedImage": "Tải lên hình ảnh thành công.",
+ "trainedFace": "Huấn luyện khuôn mặt thành công.",
+ "updatedFaceScore": "Cập nhật điểm khuôn mặt thành công.",
+ "addFaceLibrary": "{{name}} đã được thêm thành công vào Thư viện Khuôn mặt!",
+ "deletedFace_other": "Đã xóa thành công {{count}} khuôn mặt.",
+ "deletedName_other": "{{count}} khuôn mặt đã được xóa thành công.",
+ "renamedFace": "Đổi tên khuôn mặt thành {{name}} thành công"
+ },
+ "error": {
+ "uploadingImageFailed": "Tải lên hình ảnh thất bại: {{errorMessage}}",
+ "addFaceLibraryFailed": "Đặt tên khuôn mặt thất bại: {{errorMessage}}",
+ "renameFaceFailed": "Đổi tên khuôn mặt thất bại: {{errorMessage}}",
+ "deleteFaceFailed": "Xóa thất bại: {{errorMessage}}",
+ "deleteNameFailed": "Xóa tên thất bại: {{errorMessage}}",
+ "trainFailed": "Huấn luyện thất bại: {{errorMessage}}",
+ "updateFaceScoreFailed": "Cập nhật điểm khuôn mặt thất bại: {{errorMessage}}"
+ }
+ },
+ "collections": "Bộ sưu tập",
+ "steps": {
+ "description": {
+ "uploadFace": "Tải lên một hình ảnh của {{name}} cho thấy khuôn mặt của họ từ góc nhìn trực diện. Hình ảnh không cần phải được cắt chỉ lấy khuôn mặt."
+ },
+ "faceName": "Nhập tên khuôn mặt",
+ "uploadFace": "Tải lên hình ảnh khuôn mặt",
+ "nextSteps": "Các bước tiếp theo"
+ },
+ "deleteFaceLibrary": {
+ "title": "Xóa tên",
+ "desc": "Bạn có chắc chắn muốn xóa bộ sưu tập {{name}} không? Thao tác này sẽ xóa vĩnh viễn tất cả các khuôn mặt liên quan."
+ },
+ "deleteFaceAttempts": {
+ "title": "Xóa khuôn mặt",
+ "desc_other": "Bạn có chắc chắn muốn xóa {{count}} khuôn mặt không? Hành động này không thể hoàn tác."
+ },
+ "readTheDocs": "Đọc tài liệu",
+ "trainFaceAs": "Huấn luyện khuôn mặt với tên:",
+ "trainFace": "Huấn luyện khuôn mặt",
+ "nofaces": "Không có khuôn mặt nào",
+ "createFaceLibrary": {
+ "nextSteps": "Để xây dựng một nền tảng vững chắc:
mode: {{effectiveRetainMode}}, vì vậy lần ghi hình theo yêu cầu này chỉ giữ lại các đoạn có {{effectiveRetainModeName}}."
}
}
diff --git a/web/public/locales/vi/views/recording.json b/web/public/locales/vi/views/recording.json
index 27146b13d..de52f8b7d 100644
--- a/web/public/locales/vi/views/recording.json
+++ b/web/public/locales/vi/views/recording.json
@@ -2,5 +2,11 @@
"filter": "Lọc",
"export": "Xuất",
"calendar": "Lịch",
- "filters": "Bộ lọc"
+ "filters": "Bộ lọc",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "Thời gian chọn không hợp lệ",
+ "endTimeMustAfterStartTime": "Thời gian kết thúc phải sau thời gian bắt đầu"
+ }
+ }
}
diff --git a/web/public/locales/vi/views/search.json b/web/public/locales/vi/views/search.json
index 873702ca7..d95cd175b 100644
--- a/web/public/locales/vi/views/search.json
+++ b/web/public/locales/vi/views/search.json
@@ -1,10 +1,72 @@
{
"search": "Tìm kiếm",
- "savedSearches": "Lưu tìm kiếm",
+ "savedSearches": "Tìm kiếm đã lưu",
"searchFor": "Tìm kiếm {{inputValue}}",
"button": {
"clear": "Xóa tìm kiếm",
"save": "Lưu tìm kiếm",
- "delete": "Xóa lưu tìm kiếm"
- }
+ "delete": "Xóa tìm kiếm đã lưu",
+ "filterInformation": "Thông tin bộ lọc",
+ "filterActive": "Bộ lọc đang hoạt động"
+ },
+ "filter": {
+ "tips": {
+ "desc": {
+ "step2": "Chọn một giá trị từ các gợi ý hoặc tự nhập.",
+ "step1": "Nhập tên khóa bộ lọc theo sau là dấu hai chấm (ví dụ: \"cameras:\").",
+ "step3": "Sử dụng nhiều bộ lọc bằng cách thêm chúng nối tiếp nhau, cách nhau bằng dấu cách.",
+ "step5": "Bộ lọc phạm vi thời gian sử dụng định dạng {{exampleTime}}.",
+ "exampleLabel": "Ví dụ:",
+ "step6": "Xóa bộ lọc bằng cách nhấp vào dấu 'x' bên cạnh chúng..",
+ "step4": "Bộ lọc ngày (before: và after:) sử dụng định dạng {{DateFormat}}.",
+ "text": "Bộ lọc giúp bạn thu hẹp kết quả tìm kiếm. Dưới đây là cách sử dụng chúng trong trường nhập liệu:"
+ },
+ "title": "Cách sử dụng bộ lọc văn bản"
+ },
+ "header": {
+ "activeFilters": "Bộ lọc đang hoạt động",
+ "currentFilterType": "Giá trị bộ lọc",
+ "noFilters": "Bộ lọc"
+ },
+ "label": {
+ "has_clip": "Có clip",
+ "min_score": "Điểm tối thiểu",
+ "has_snapshot": "Có ảnh chụp nhanh",
+ "max_score": "Điểm tối đa",
+ "search_type": "Loại tìm kiếm",
+ "after": "Sau",
+ "cameras": "Camera",
+ "labels": "Nhãn",
+ "zones": "Khu vực",
+ "sub_labels": "Nhãn phụ",
+ "time_range": "Phạm vi thời gian",
+ "before": "Trước",
+ "min_speed": "Tốc độ tối thiểu",
+ "max_speed": "Tốc độ tối đa",
+ "recognized_license_plate": "Biển số xe được nhận dạng"
+ },
+ "toast": {
+ "error": {
+ "afterDatebeEarlierBefore": "Ngày 'Sau' phải trước ngày 'Trước'.",
+ "beforeDateBeLaterAfter": "Ngày 'Trước' phải sau ngày 'Sau'.",
+ "minScoreMustBeLessOrEqualMaxScore": "'Điểm tối thiểu' phải nhỏ hơn hoặc bằng 'Điểm tối đa'.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "'Điểm tối đa' phải lớn hơn hoặc bằng 'Điểm tối thiểu.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "'Tốc độ tối thiểu' phải nhỏ hơn hoặc bằng 'Tốc độ tối đa'.",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "'Tốc độ tối đa' phải lớn hơn hoặc bằng 'Tốc độ tối thiểu'."
+ }
+ },
+ "searchType": {
+ "thumbnail": "Hình thu nhỏ",
+ "description": "Mô tả"
+ }
+ },
+ "similaritySearch": {
+ "title": "Tìm kiếm tương đồng",
+ "clear": "Xóa tìm kiếm tương đồng",
+ "active": "Tìm kiếm tương đồng đang hoạt động"
+ },
+ "placeholder": {
+ "search": "Tìm kiếm…"
+ },
+ "trackedObjectId": "ID đối tượng được theo dõi"
}
diff --git a/web/public/locales/vi/views/settings.json b/web/public/locales/vi/views/settings.json
index 54c2f22a2..d777ac12e 100644
--- a/web/public/locales/vi/views/settings.json
+++ b/web/public/locales/vi/views/settings.json
@@ -1,7 +1,616 @@
{
"documentTitle": {
"default": "Cài đặt - Frigate",
- "authentication": "Cài đặt xác thực - Frigate",
- "camera": "Cài đặt camera - Frigate"
+ "authentication": "Cài đặt Xác thực - Frigate",
+ "camera": "Cài đặt Camera - Frigate",
+ "enrichments": "Cài đặt Làm giàu Dữ liệu - Frigate",
+ "notifications": "Cài đặt Thông báo - Frigate",
+ "masksAndZones": "Trình chỉnh sửa Mặt nạ và Vùng - Frigate",
+ "object": "Gỡ lỗi - Frigate",
+ "general": "Cài đặt Chung - Frigate",
+ "frigatePlus": "Cài đặt Frigate+ - Frigate",
+ "motionTuner": "Bộ tinh chỉnh Chuyển động - Frigate"
+ },
+ "notification": {
+ "toast": {
+ "error": {
+ "registerFailed": "Không thể lưu đăng ký thông báo."
+ },
+ "success": {
+ "settingSaved": "Cài đặt thông báo đã được lưu.",
+ "registered": "Đã đăng ký nhận thông báo thành công. Cần khởi động lại Frigate trước khi có thể gửi bất kỳ thông báo nào (kể cả thông báo thử)."
+ }
+ },
+ "unsavedChanges": "Các thay đổi Thông báo chưa được lưu",
+ "registerDevice": "Đăng ký Thiết bị này",
+ "unregisterDevice": "Hủy đăng ký Thiết bị này",
+ "unsavedRegistrations": "Các đăng ký Thông báo chưa được lưu",
+ "suspended": "Thông báo bị đình chỉ {{time}}",
+ "cancelSuspension": "Hủy tạm dừng",
+ "email": {
+ "desc": "Một email hợp lệ là bắt buộc và sẽ được sử dụng để thông báo cho bạn nếu có bất kỳ vấn đề nào với dịch vụ đẩy.",
+ "placeholder": "ví dụ: example@email.com",
+ "title": "Email"
+ },
+ "cameras": {
+ "noCameras": "Không có máy quay nào",
+ "title": "Máy quay",
+ "desc": "Chọn máy quay nào để bật thông báo."
+ },
+ "deviceSpecific": "Cài đặt dành riêng cho thiết bị",
+ "sendTestNotification": "Gửi một thông báo thử",
+ "active": "Thông báo đang hoạt động",
+ "suspendTime": {
+ "24hours": "Tạm dừng trong 24 giờ",
+ "untilRestart": "Tạm dừng cho đến khi khởi động lại",
+ "30minutes": "Tạm dừng trong 30 phút",
+ "1hour": "Tạm dừng trong 1 giờ",
+ "suspend": "Tạm dừng",
+ "12hours": "Tạm dừng trong 12 giờ",
+ "5minutes": "Tạm dừng trong 5 phút",
+ "10minutes": "Tạm dừng trong 10 phút"
+ },
+ "notificationSettings": {
+ "desc": "Frigate có thể gửi thông báo đẩy tự nhiên đến thiết bị của bạn khi nó đang chạy trong trình duyệt hoặc được cài đặt dưới dạng PWA.",
+ "title": "Cài đặt Thông báo",
+ "documentation": "Đọc tài liệu"
+ },
+ "notificationUnavailable": {
+ "desc": "Thông báo đẩy web yêu cầu một ngữ cảnh an toàn (https://…). Đây là một hạn chế của trình duyệt. Truy cập Frigate một cách an toàn để sử dụng thông báo.",
+ "title": "Thông báo không khả dụng",
+ "documentation": "Đọc tài liệu"
+ },
+ "globalSettings": {
+ "desc": "Tạm thời đình chỉ thông báo cho các máy quay cụ thể trên tất cả các thiết bị đã đăng ký.",
+ "title": "Cài đặt Chung"
+ },
+ "title": "Thông báo"
+ },
+ "frigatePlus": {
+ "title": "Cài đặt Frigate+",
+ "apiKey": {
+ "title": "Khóa API Frigate+",
+ "validated": "Khóa API Frigate+ đã được phát hiện và xác thực",
+ "notValidated": "Khóa API Frigate+ không được phát hiện hoặc chưa được xác thực",
+ "desc": "Khóa API Frigate+ cho phép tích hợp với dịch vụ Frigate+.",
+ "plusLink": "Đọc thêm về Frigate+"
+ },
+ "snapshotConfig": {
+ "table": {
+ "camera": "Máy quay",
+ "cleanCopySnapshots": "Ảnh chụp nhanh clean_copy",
+ "snapshots": "Ảnh chụp nhanh"
+ },
+ "desc": "Việc gửi đến Frigate+ yêu cầu cả ảnh chụp nhanh và ảnh chụp nhanh clean_copy phải được bật trong cấu hình của bạn.",
+ "cleanCopyWarning": "Một số máy quay đã bật ảnh chụp nhanh nhưng đã tắt bản sao sạch. Bạn cần bật clean_copy trong cấu hình ảnh chụp nhanh của mình để có thể gửi hình ảnh từ các máy quay này đến Frigate+.",
+ "title": "Cấu hình Ảnh chụp nhanh",
+ "documentation": "Đọc tài liệu"
+ },
+ "modelInfo": {
+ "error": "Không thể tải thông tin mô hình",
+ "plusModelType": {
+ "userModel": "Đã tinh chỉnh",
+ "baseModel": "Mô hình Cơ sở"
+ },
+ "supportedDetectors": "Các bộ phát hiện được hỗ trợ",
+ "title": "Thông tin Mô hình",
+ "baseModel": "Mô hình Cơ sở",
+ "availableModels": "Các mô hình có sẵn",
+ "loadingAvailableModels": "Đang tải các mô hình có sẵn…",
+ "modelSelect": "Các mô hình có sẵn của bạn trên Frigate+ có thể được chọn ở đây. Lưu ý rằng chỉ những mô hình tương thích với cấu hình bộ phát hiện hiện tại của bạn mới có thể được chọn.",
+ "cameras": "Máy quay",
+ "loading": "Đang tải thông tin mô hình…",
+ "modelType": "Loại Mô hình",
+ "trainDate": "Ngày Huấn luyện"
+ },
+ "unsavedChanges": "Các thay đổi cài đặt Frigate+ chưa được lưu",
+ "toast": {
+ "success": "Cài đặt Frigate+ đã được lưu. Khởi động lại Frigate để áp dụng các thay đổi.",
+ "error": "Không thể lưu các thay đổi cấu hình: {{errorMessage}}"
+ },
+ "restart_required": "Yêu cầu khởi động lại (mô hình Frigate+ đã thay đổi)"
+ },
+ "camera": {
+ "title": "Cài đặt Máy quay",
+ "review": {
+ "alerts": "Cảnh báo ",
+ "detections": "Phát hiện ",
+ "title": "Xem lại",
+ "desc": "Tạm thời bật/tắt cảnh báo và phát hiện cho máy quay này cho đến khi Frigate khởi động lại. Khi bị vô hiệu hóa, sẽ không có mục xem lại mới nào được tạo ra. "
+ },
+ "reviewClassification": {
+ "title": "Phân loại mục Xem lại",
+ "unsavedChanges": "Các thay đổi cài đặt Phân loại mục Xem lại chưa được lưu cho {{camera}}",
+ "readTheDocumentation": "Đọc tài liệu",
+ "objectDetectionsTips": "Tất cả các đối tượng {{detectionsLabels}} không được phân loại trên {{cameraName}} sẽ được hiển thị dưới dạng Phát hiện bất kể chúng ở trong vùng nào.",
+ "desc": "Frigate phân loại các mục xem lại thành Cảnh báo và Phát hiện. Theo mặc định, tất cả các đối tượng người và ô tô được coi là Cảnh báo. Bạn có thể tinh chỉnh việc phân loại các mục xem lại của mình bằng cách định cấu hình các vùng bắt buộc cho chúng.",
+ "zoneObjectDetectionsTips": {
+ "text": "Tất cả các đối tượng {{detectionsLabels}} không được phân loại trong vùng {{zone}} trên {{cameraName}} sẽ được hiển thị dưới dạng Phát hiện.",
+ "notSelectDetections": "Tất cả các đối tượng {{detectionsLabels}} được phát hiện trong vùng {{zone}} trên {{cameraName}} không được phân loại là Cảnh báo sẽ được hiển thị dưới dạng Phát hiện bất kể chúng ở trong vùng nào.",
+ "regardlessOfZoneObjectDetectionsTips": "Tất cả các đối tượng {{detectionsLabels}} không được phân loại trên {{cameraName}} sẽ được hiển thị dưới dạng Phát hiện bất kể chúng ở trong vùng nào."
+ },
+ "toast": {
+ "success": "Cấu hình Phân loại mục Xem lại đã được lưu. Khởi động lại Frigate để áp dụng các thay đổi."
+ },
+ "limitDetections": "Giới hạn phát hiện trong các vùng cụ thể",
+ "selectDetectionsZones": "Chọn vùng cho Phát hiện",
+ "zoneObjectAlertsTips": "Tất cả các đối tượng {{alertsLabels}} được phát hiện trong vùng {{zone}} trên {{cameraName}} sẽ được hiển thị dưới dạng Cảnh báo.",
+ "noDefinedZones": "Không có vùng nào được xác định cho máy quay này.",
+ "objectAlertsTips": "Tất cả các đối tượng {{alertsLabels}} trên {{cameraName}} sẽ được hiển thị dưới dạng Cảnh báo.",
+ "selectAlertsZones": "Chọn vùng cho Cảnh báo"
+ },
+ "streams": {
+ "title": "Luồng phát",
+ "desc": "Tạm thời vô hiệu hóa một máy quay cho đến khi Frigate khởi động lại. Vô hiệu hóa một máy quay sẽ dừng hoàn toàn quá trình xử lý các luồng của máy quay này của Frigate. Việc phát hiện, ghi hình và gỡ lỗi sẽ không khả dụng.Hộp khu vực
Các hộp màu xanh lá cây sáng sẽ được chồng lên các khu vực quan tâm trong khung hình đang được gửi đến bộ phát hiện đối tượng.
", + "desc": "Hiển thị một hộp của khu vực quan tâm được gửi đến bộ phát hiện đối tượng" + }, + "zones": { + "title": "Vùng", + "desc": "Hiển thị đường viền của bất kỳ vùng nào đã được xác định" + }, + "mask": { + "title": "Mặt nạ chuyển động", + "desc": "Hiển thị các đa giác mặt nạ chuyển động" + }, + "title": "Gỡ lỗi", + "objectList": "Danh sách đối tượng", + "noObjects": "Không có đối tượng", + "motion": { + "desc": "Hiển thị các hộp xung quanh các khu vực phát hiện có chuyển động", + "tips": "Hộp chuyển động
Các hộp màu đỏ sẽ được chồng lên các khu vực của khung hình nơi chuyển động đang được phát hiện
", + "title": "Hộp chuyển động" + } + }, + "users": { + "title": "Người dùng", + "management": { + "title": "Quản lý Người dùng", + "desc": "Quản lý các tài khoản người dùng của phiên bản Frigate này." + }, + "table": { + "noUsers": "Không tìm thấy người dùng nào.", + "username": "Tên người dùng", + "actions": "Hành động", + "role": "Vai trò", + "changeRole": "Thay đổi vai trò người dùng", + "password": "Mật khẩu", + "deleteUser": "Xóa người dùng" + }, + "dialog": { + "form": { + "password": { + "strength": { + "strong": "Mạnh", + "title": "Độ mạnh mật khẩu: ", + "medium": "Trung bình", + "veryStrong": "Rất mạnh", + "weak": "Yếu" + }, + "title": "Mật khẩu", + "placeholder": "Nhập mật khẩu", + "confirm": { + "title": "Xác nhận Mật khẩu", + "placeholder": "Xác nhận Mật khẩu" + }, + "notMatch": "Mật khẩu không trùng khớp", + "match": "Mật khẩu trùng khớp" + }, + "newPassword": { + "placeholder": "Nhập mật khẩu mới", + "confirm": { + "placeholder": "Nhập lại mật khẩu mới" + }, + "title": "Mật khẩu mới" + }, + "usernameIsRequired": "Tên người dùng là bắt buộc", + "user": { + "title": "Tên người dùng", + "desc": "Chỉ cho phép chữ cái, số, dấu chấm và dấu gạch dưới.", + "placeholder": "Nhập tên người dùng" + }, + "passwordIsRequired": "Mật khẩu là bắt buộc" + }, + "createUser": { + "desc": "Thêm một tài khoản người dùng mới và chỉ định một vai trò để truy cập vào các khu vực của giao diện người dùng Frigate.", + "usernameOnlyInclude": "Tên người dùng chỉ có thể bao gồm chữ cái, số, . hoặc _", + "title": "Tạo Người dùng Mới", + "confirmPassword": "Vui lòng xác nhận mật khẩu của bạn" + }, + "deleteUser": { + "desc": "Hành động này không thể được hoàn tác. Điều này sẽ xóa vĩnh viễn tài khoản người dùng và xóa tất cả dữ liệu liên quan.", + "warn": "Bạn có chắc muốn xóa {{username}} không?", + "title": "Xóa Người dùng" + }, + "passwordSetting": { + "setPassword": "Đặt Mật khẩu", + "updatePassword": "Cập nhật Mật khẩu cho {{username}}", + "cannotBeEmpty": "Mật khẩu không được để trống", + "desc": "Tạo một mật khẩu mạnh để bảo mật tài khoản này.", + "doNotMatch": "Mật khẩu không khớp" + }, + "changeRole": { + "title": "Thay đổi Vai trò Người dùng", + "roleInfo": { + "intro": "Chọn vai trò thích hợp cho người dùng này:", + "admin": "Quản trị viên", + "adminDesc": "Toàn quyền truy cập vào tất cả các tính năng.", + "viewer": "Người xem", + "viewerDesc": "Chỉ giới hạn ở các bảng điều khiển Trực tiếp, Xem lại, Khám phá và Xuất file." + }, + "select": "Chọn một vai trò", + "desc": "Cập nhật quyền cho {{username}}" + } + }, + "addUser": "Thêm Người dùng", + "updatePassword": "Cập nhật Mật khẩu", + "toast": { + "error": { + "setPasswordFailed": "Không thể lưu mật khẩu: {{errorMessage}}", + "createUserFailed": "Không thể tạo người dùng: {{errorMessage}}", + "deleteUserFailed": "Không thể xóa người dùng: {{errorMessage}}", + "roleUpdateFailed": "Không thể cập nhật vai trò: {{errorMessage}}" + }, + "success": { + "roleUpdated": "Vai trò đã được cập nhật cho {{user}}", + "createUser": "Người dùng {{user}} đã được tạo thành công", + "deleteUser": "Người dùng {{user}} đã được xóa thành công", + "updatePassword": "Mật khẩu đã được cập nhật thành công." + } + } + }, + "general": { + "calendar": { + "firstWeekday": { + "sunday": "Chủ nhật", + "monday": "Thứ hai", + "label": "Ngày đầu tuần", + "desc": "Ngày bắt đầu của các tuần trong lịch xem lại." + }, + "title": "Lịch" + }, + "storedLayouts": { + "desc": "Bố cục của các máy quay trong một nhóm máy quay có thể được kéo/thay đổi kích thước. Các vị trí được lưu trữ trong bộ nhớ cục bộ của trình duyệt của bạn.", + "title": "Bố cục đã lưu", + "clearAll": "Xóa tất cả Bố cục" + }, + "cameraGroupStreaming": { + "title": "Cài đặt Phát luồng Nhóm Máy quay", + "desc": "Cài đặt phát luồng cho mỗi nhóm máy quay được lưu trữ trong bộ nhớ cục bộ của trình duyệt của bạn.", + "clearAll": "Xóa tất cả Cài đặt Phát luồng" + }, + "toast": { + "success": { + "clearStoredLayout": "Đã xóa bố cục đã lưu cho {{cameraName}}", + "clearStreamingSettings": "Đã xóa cài đặt phát luồng cho tất cả các nhóm máy quay." + }, + "error": { + "clearStoredLayoutFailed": "Không thể xóa bố cục đã lưu: {{errorMessage}}", + "clearStreamingSettingsFailed": "Không thể xóa cài đặt phát luồng: {{errorMessage}}" + } + }, + "liveDashboard": { + "automaticLiveView": { + "desc": "Tự động chuyển sang chế độ xem trực tiếp của máy quay khi phát hiện hoạt động. Việc tắt tùy chọn này sẽ khiến hình ảnh tĩnh của máy quay trên bảng điều khiển Trực tiếp chỉ cập nhật mỗi phút một lần.", + "label": "Chế độ xem trực tiếp tự động" + }, + "playAlertVideos": { + "desc": "Theo mặc định, các cảnh báo gần đây trên bảng điều khiển Trực tiếp sẽ phát dưới dạng các video lặp lại nhỏ. Tắt tùy chọn này để chỉ hiển thị hình ảnh tĩnh của các cảnh báo gần đây trên thiết bị/trình duyệt này.", + "label": "Phát video cảnh báo" + }, + "title": "Bảng điều khiển trực tiếp" + }, + "recordingsViewer": { + "defaultPlaybackRate": { + "label": "Tốc độ phát mặc định", + "desc": "Tốc độ phát mặc định cho việc xem lại các bản ghi." + }, + "title": "Trình xem Bản ghi" + }, + "title": "Cài đặt Chung" + }, + "dialog": { + "unsavedChanges": { + "desc": "Bạn có muốn lưu các thay đổi trước khi tiếp tục không?", + "title": "Bạn có các thay đổi chưa được lưu." + } + }, + "enrichments": { + "title": "Cài đặt Làm giàu Dữ liệu", + "unsavedChanges": "Các thay đổi cài đặt Làm giàu Dữ liệu chưa được lưu", + "birdClassification": { + "title": "Phân loại Chim", + "desc": "Phân loại chim xác định các loài chim đã biết bằng mô hình Tensorflow lượng tử hóa. Khi một loài chim đã biết được nhận dạng, tên thông thường của nó sẽ được thêm vào dưới dạng nhãn phụ (sub_label). Thông tin này được bao gồm trong giao diện người dùng, bộ lọc, cũng như trong các thông báo." + }, + "semanticSearch": { + "title": "Tìm kiếm theo Ngữ nghĩa", + "desc": "Tìm kiếm theo Ngữ nghĩa trong Frigate cho phép bạn tìm các đối tượng được theo dõi trong các mục xem lại của mình bằng cách sử dụng chính hình ảnh, mô tả văn bản do người dùng xác định hoặc mô tả được tạo tự động.", + "reindexNow": { + "desc": "Việc tái lập chỉ mục sẽ tạo lại các nhúng (embeddings) cho tất cả các đối tượng được theo dõi. Quá trình này chạy ở chế độ nền và có thể làm CPU của bạn hoạt động tối đa và mất một khoảng thời gian đáng kể tùy thuộc vào số lượng đối tượng bạn đã theo dõi.", + "confirmTitle": "Xác nhận Tái lập chỉ mục", + "confirmDesc": "Bạn có chắc muốn tái lập chỉ mục cho tất cả các nhúng của đối tượng được theo dõi không? Quá trình này sẽ chạy ở chế độ nền nhưng có thể làm CPU của bạn hoạt động tối đa và mất một khoảng thời gian đáng kể. Bạn có thể theo dõi tiến trình trên trang Khám phá.", + "success": "Đã bắt đầu tái lập chỉ mục thành công.", + "alreadyInProgress": "Quá trình tái lập chỉ mục đang được tiến hành.", + "error": "Không thể bắt đầu tái lập chỉ mục: {{errorMessage}}", + "label": "Tái lập chỉ mục ngay", + "confirmButton": "Tái lập chỉ mục" + }, + "modelSize": { + "label": "Kích thước Mô hình", + "desc": "Kích thước của mô hình được sử dụng cho các nhúng tìm kiếm theo ngữ nghĩa.", + "small": { + "title": "nhỏ", + "desc": "Sử dụng mô hình nhỏ sẽ dùng phiên bản lượng tử hóa của mô hình, tiêu thụ ít RAM hơn và chạy nhanh hơn trên CPU với sự khác biệt không đáng kể về chất lượng nhúng." + }, + "large": { + "title": "lớn", + "desc": "Sử dụng mô hình lớn sẽ dùng mô hình Jina đầy đủ và sẽ tự động chạy trên GPU nếu có." + } + }, + "readTheDocumentation": "Đọc tài liệu" + }, + "faceRecognition": { + "title": "Nhận dạng Khuôn mặt", + "desc": "Nhận dạng khuôn mặt cho phép gán tên cho người và khi khuôn mặt của họ được nhận dạng, Frigate sẽ gán tên của người đó làm nhãn phụ. Thông tin này được bao gồm trong giao diện người dùng, bộ lọc, cũng như trong các thông báo.", + "readTheDocumentation": "Đọc tài liệu", + "modelSize": { + "label": "Kích thước Mô hình", + "desc": "Kích thước của mô hình được sử dụng để nhận dạng khuôn mặt.", + "small": { + "title": "nhỏ", + "desc": "Sử dụng mô hình nhỏ sẽ dùng mô hình nhúng khuôn mặt FaceNet, chạy hiệu quả trên hầu hết các CPU." + }, + "large": { + "title": "lớn", + "desc": "Sử dụng mô hình lớn sẽ dùng mô hình nhúng khuôn mặt ArcFace và sẽ tự động chạy trên GPU nếu có." + } + } + }, + "licensePlateRecognition": { + "title": "Nhận dạng Biển số xe", + "desc": "Frigate có thể nhận dạng biển số xe trên các phương tiện và tự động thêm các ký tự được phát hiện vào trường recognized_license_plate hoặc một tên đã biết làm nhãn phụ cho các đối tượng thuộc loại ô tô. Một trường hợp sử dụng phổ biến có thể là đọc biển số xe ô tô đi vào đường lái xe hoặc ô tô đi ngang qua trên đường phố.", + "readTheDocumentation": "Đọc tài liệu" + }, + "restart_required": "Yêu cầu khởi động lại (cài đặt Làm giàu Dữ liệu đã thay đổi)", + "toast": { + "success": "Cài đặt Làm giàu Dữ liệu đã được lưu. Khởi động lại Frigate để áp dụng các thay đổi của bạn.", + "error": "Không thể lưu các thay đổi cấu hình: {{errorMessage}}" + } + }, + "menu": { + "frigateplus": "Frigate+", + "ui": "Giao diện người dùng", + "masksAndZones": "Mặt nạ / Vùng", + "debug": "Gỡ lỗi", + "users": "Người dùng", + "notifications": "Thông báo", + "motionTuner": "Tinh chỉnh Chuyển động", + "cameras": "Cài đặt Camera", + "enrichments": "Làm giàu Dữ liệu" + }, + "cameraSetting": { + "camera": "Camera", + "noCamera": "Không có Camera" } } diff --git a/web/public/locales/vi/views/system.json b/web/public/locales/vi/views/system.json index 7bb2dcc99..eeb841096 100644 --- a/web/public/locales/vi/views/system.json +++ b/web/public/locales/vi/views/system.json @@ -1,6 +1,180 @@ { "documentTitle": { "storage": "Thống kê lưu trữ - Frigate", - "general": "Thống kê chung - Frigate" + "general": "Thống kê Chung - Frigate", + "enrichments": "Thống kê Làm giàu Dữ liệu - Frigate", + "logs": { + "frigate": "Nhật ký Frigate - Frigate", + "go2rtc": "Nhật ký Go2RTC - Frigate", + "nginx": "Nhật ký Nginx - Frigate" + }, + "cameras": "Thống kê Camera - Frigate" + }, + "general": { + "hardwareInfo": { + "npuUsage": "Mức sử dụng NPU", + "npuMemory": "Bộ nhớ NPU", + "gpuInfo": { + "vainfoOutput": { + "title": "Đầu ra Vainfo", + "returnCode": "Mã trả về: {{code}}", + "processOutput": "Đầu ra Tiến trình:", + "processError": "Lỗi Tiến trình:" + }, + "nvidiaSMIOutput": { + "title": "Đầu ra Nvidia SMI", + "name": "Tên: {{name}}", + "driver": "Trình điều khiển: {{driver}}", + "cudaComputerCapability": "Khả năng Tính toán CUDA: {{cuda_compute}}", + "vbios": "Thông tin VBios: {{vbios}}" + }, + "closeInfo": { + "label": "Đóng thông tin GPU" + }, + "copyInfo": { + "label": "Sao chép thông tin GPU" + }, + "toast": { + "success": "Đã sao chép thông tin GPU vào clipboard" + } + }, + "title": "Thông tin Phần cứng", + "gpuUsage": "Mức sử dụng GPU", + "gpuMemory": "Bộ nhớ GPU", + "gpuEncoder": "Bộ mã hóa GPU", + "gpuDecoder": "Bộ giải mã GPU" + }, + "otherProcesses": { + "processCpuUsage": "Mức sử dụng CPU của Tiến trình", + "processMemoryUsage": "Mức sử dụng Bộ nhớ của Tiến trình", + "title": "Các Tiến trình Khác" + }, + "detector": { + "temperature": "Nhiệt độ Bộ phát hiện", + "memoryUsage": "Mức sử dụng Bộ nhớ của Bộ phát hiện", + "title": "Bộ phát hiện", + "inferenceSpeed": "Tốc độ Suy luận của Bộ phát hiện", + "cpuUsage": "Mức sử dụng CPU của Bộ phát hiện" + }, + "title": "Chung" + }, + "storage": { + "overview": "Tổng quan", + "cameraStorage": { + "title": "Lưu trữ Máy quay", + "camera": "Camera", + "unusedStorageInformation": "Thông tin Lưu trữ Chưa sử dụng", + "storageUsed": "Lưu trữ", + "percentageOfTotalUsed": "Phần trăm Tổng dung lượng Đã sử dụng", + "bandwidth": "Băng thông", + "unused": { + "title": "Chưa sử dụng", + "tips": "Giá trị này có thể không phản ánh chính xác dung lượng trống có sẵn cho Frigate nếu bạn có các tệp khác được lưu trữ trên ổ đĩa ngoài các bản ghi của Frigate. Frigate không theo dõi việc sử dụng dung lượng lưu trữ bên ngoài các bản ghi của nó." + } + }, + "title": "Lưu trữ", + "recordings": { + "title": "Bản ghi", + "tips": "Giá trị này thể hiện tổng dung lượng lưu trữ được sử dụng bởi các bản ghi trong cơ sở dữ liệu của Frigate. Frigate không theo dõi việc sử dụng dung lượng lưu trữ cho tất cả các tệp trên đĩa của bạn.", + "earliestRecording": "Bản ghi sớm nhất hiện có:" + } + }, + "cameras": { + "label": { + "detect": "phát hiện", + "skipped": "bỏ qua", + "ffmpeg": "FFmpeg", + "capture": "ghi hình", + "overallDetectionsPerSecond": "tổng số phát hiện mỗi giây", + "cameraFramesPerSecond": "{{camName}} khung hình mỗi giây", + "cameraDetectionsPerSecond": "{{camName}} phát hiện mỗi giây", + "overallFramesPerSecond": "tổng số khung hình mỗi giây", + "camera": "máy quay", + "overallSkippedDetectionsPerSecond": "tổng số phát hiện bị bỏ qua mỗi giây", + "cameraFfmpeg": "{{camName}} FFmpeg", + "cameraCapture": "{{camName}} ghi hình", + "cameraDetect": "{{camName}} phát hiện", + "cameraSkippedDetectionsPerSecond": "{{camName}} phát hiện bị bỏ qua mỗi giây" + }, + "toast": { + "success": { + "copyToClipboard": "Đã sao chép dữ liệu thăm dò vào clipboard." + }, + "error": { + "unableToProbeCamera": "Không thể thăm dò máy quay: {{errorMessage}}" + } + }, + "info": { + "stream": "Luồng {{idx}}", + "streamDataFromFFPROBE": "Dữ liệu luồng được lấy bằngffprobe.",
+ "video": "Video:",
+ "fetching": "Đang tìm nạp Dữ liệu Máy quay",
+ "codec": "Codec:",
+ "unknown": "Không xác định",
+ "audio": "Âm thanh:",
+ "error": "Lỗi: {{error}}",
+ "tips": {
+ "title": "Thông tin Thăm dò Máy quay"
+ },
+ "resolution": "Độ phân giải:",
+ "fps": "FPS:",
+ "cameraProbeInfo": "Thông tin Thăm dò Máy quay {{camera}}",
+ "aspectRatio": "tỉ lệ khung hình"
+ },
+ "overview": "Tổng quan",
+ "framesAndDetections": "Khung hình / Phát hiện",
+ "title": "Camera"
+ },
+ "lastRefreshed": "Làm mới lần cuối: ",
+ "stats": {
+ "detectIsSlow": "{{detect}} đang chậm ({{speed}} ms)",
+ "detectIsVerySlow": "{{detect}} đang rất chậm ({{speed}} ms)",
+ "cameraIsOffline": "{{camera}} đang ngoại tuyến",
+ "ffmpegHighCpuUsage": "{{camera}} có mức sử dụng CPU FFmpeg cao ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} có mức sử dụng CPU phát hiện cao ({{detectAvg}}%)",
+ "healthy": "Hệ thống đang hoạt động tốt",
+ "reindexingEmbeddings": "Đang lập chỉ mục lại các embedding (hoàn thành {{processed}}%)"
+ },
+ "enrichments": {
+ "embeddings": {
+ "image_embedding": "Embedding Hình ảnh",
+ "text_embedding_speed": "Tốc độ Embedding Văn bản",
+ "face_embedding_speed": "Tốc độ Embedding Khuôn mặt",
+ "text_embedding": "Embedding Văn bản",
+ "face_recognition": "Nhận dạng Khuôn mặt",
+ "plate_recognition": "Nhận dạng Biển số",
+ "image_embedding_speed": "Tốc độ Embedding Hình ảnh",
+ "face_recognition_speed": "Tốc độ Nhận dạng Khuôn mặt",
+ "plate_recognition_speed": "Tốc độ Nhận dạng Biển số",
+ "yolov9_plate_detection_speed": "Tốc độ Phát hiện Biển số YOLOv9",
+ "yolov9_plate_detection": "Phát hiện Biển số YOLOv9"
+ },
+ "title": "Làm giàu Dữ liệu",
+ "infPerSecond": "Suy luận Mỗi Giây"
+ },
+ "title": "Hệ thống",
+ "metrics": "Số liệu hệ thống",
+ "logs": {
+ "download": {
+ "label": "Tải xuống Nhật ký"
+ },
+ "copy": {
+ "label": "Sao chép vào Clipboard",
+ "success": "Đã sao chép nhật ký vào clipboard",
+ "error": "Không thể sao chép nhật ký vào clipboard"
+ },
+ "type": {
+ "label": "Loại",
+ "timestamp": "Dấu thời gian",
+ "tag": "Thẻ",
+ "message": "Thông báo"
+ },
+ "tips": "Nhật ký đang được truyền trực tiếp từ máy chủ",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "Lỗi khi tìm nạp nhật ký: {{errorMessage}}",
+ "whileStreamingLogs": "Lỗi trong khi truyền trực tiếp nhật ký: {{errorMessage}}"
+ }
+ }
}
}