-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlanguage.py
More file actions
159 lines (134 loc) · 4.88 KB
/
language.py
File metadata and controls
159 lines (134 loc) · 4.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# -*- coding: utf-8 -*-
"""
SpinBall 게임 언어 설정 파일
Language Settings for SpinBall Game
"""
# 지원하는 언어 목록
SUPPORTED_LANGUAGES = ['ko', 'en']
DEFAULT_LANGUAGE = 'ko'
# 언어별 텍스트 사전
TEXTS = {
'ko': {
# 타이틀 화면
'game_title': 'SpinBall',
'menu_start': '게임시작',
'menu_settings': '게임 설정',
'menu_ranking': '랭킹',
'menu_quit': '게임 종료',
# 게임 플레이
'score': '점수',
'round': '라운드',
'balls': '공',
'game_over': '게임 오버',
'restart_hint': 'R키: 재시작, ESC: 타이틀',
# 설정 화면
'settings_title': '게임 설정',
'ball_speed': '공 속도',
'sound': '사운드',
'difficulty': '난이도',
'language': '언어',
'sound_on': '켜짐',
'sound_off': '꺼짐',
'back_to_title': 'ESC: 타이틀로 돌아가기',
'korean': '한국어',
'english': 'English',
# 랭킹 화면
'ranking_title': '랭킹',
# 게임 조작법
'controls_title': '조작법',
'control_aim': '마우스로 발사 각도를 조정하세요',
'control_shoot': '마우스 클릭으로 공을 발사하세요',
'control_blocks': '블록의 숫자만큼 공이 맞아야 블록이 사라집니다',
'control_gameover': '블록이 바닥에 닿으면 게임 오버!',
'control_rounds': '라운드가 지날수록 공의 개수가 늘어납니다',
# 기타
'easy': '쉬움',
'normal': '보통',
'hard': '어려움',
},
'en': {
# 타이틀 화면
'game_title': 'SpinBall',
'menu_start': 'Start Game',
'menu_settings': 'Settings',
'menu_ranking': 'Ranking',
'menu_quit': 'Quit Game',
# 게임 플레이
'score': 'Score',
'round': 'Round',
'balls': 'Balls',
'game_over': 'Game Over',
'restart_hint': 'R: Restart, ESC: Title',
# 설정 화면
'settings_title': 'Game Settings',
'ball_speed': 'Ball Speed',
'sound': 'Sound',
'difficulty': 'Difficulty',
'language': 'Language',
'sound_on': 'On',
'sound_off': 'Off',
'back_to_title': 'ESC: Back to Title',
'korean': '한국어',
'english': 'English',
# 랭킹 화면
'ranking_title': 'Ranking',
# 게임 조작법
'controls_title': 'Controls',
'control_aim': 'Move mouse to aim',
'control_shoot': 'Click to shoot balls',
'control_blocks': 'Hit blocks equal to their number to destroy',
'control_gameover': 'Game over if blocks reach bottom!',
'control_rounds': 'More balls each round',
# 기타
'easy': 'Easy',
'normal': 'Normal',
'hard': 'Hard',
}
}
class LanguageManager:
"""언어 관리 클래스"""
def __init__(self, language=DEFAULT_LANGUAGE):
self.current_language = language if language in SUPPORTED_LANGUAGES else DEFAULT_LANGUAGE
def get_text(self, key):
"""키에 해당하는 현재 언어의 텍스트를 반환"""
try:
return TEXTS[self.current_language][key]
except KeyError:
# 키가 없으면 기본 언어(한국어)에서 찾기
try:
return TEXTS[DEFAULT_LANGUAGE][key]
except KeyError:
return f"[{key}]" # 키를 찾을 수 없으면 키 이름 반환
def set_language(self, language):
"""언어 설정"""
if language in SUPPORTED_LANGUAGES:
self.current_language = language
return True
return False
def get_current_language(self):
"""현재 언어 반환"""
return self.current_language
def get_language_name(self, lang_code=None):
"""언어 코드에 해당하는 언어 이름 반환"""
if lang_code is None:
lang_code = self.current_language
if lang_code == 'ko':
return self.get_text('korean')
elif lang_code == 'en':
return self.get_text('english')
else:
return lang_code
def get_supported_languages(self):
"""지원하는 언어 목록 반환"""
return SUPPORTED_LANGUAGES.copy()
# 전역 언어 관리자 인스턴스
language_manager = LanguageManager()
def get_text(key):
"""편의 함수: 현재 언어의 텍스트 반환"""
return language_manager.get_text(key)
def set_language(language):
"""편의 함수: 언어 설정"""
return language_manager.set_language(language)
def get_current_language():
"""편의 함수: 현재 언어 반환"""
return language_manager.get_current_language()