Conversation
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 이번 PR은 앱의 다국어 지원을 위한 기반을 마련하고, 마이페이지의 UI와 데이터 구조를 전반적으로 리뉴얼하는 작업을 포함합니다. 특히, 언어 변경 시 앱 내 문구가 즉시 갱신될 수 있도록 로컬라이징 구조를 개선하고, 마이페이지의 섹션 데이터를 동적으로 관리하도록 변경하여 유지보수성과 사용자 경험을 향상시켰습니다. Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. 언어를 바꾸어 새롭게 그려, 설정의 화면에 마음을 담아. 정적인 데이터 동적으로 바꾸니, 사용자 경험이 한층 더 밝아. Footnotes
|
There was a problem hiding this comment.
Code Review
이번 풀요청은 마이페이지 UI 리팩토링과 다국어 지원 시스템 도입을 포함합니다. MyPageLabels를 고도화하고 섹션 기반의 데이터 구조를 도입하였으며, 프로필 레이아웃 수정 및 언어 설정, 약관/정책 화면을 새롭게 추가했습니다. 또한 AppLanguageManager를 통해 현지화 문자열을 관리하도록 TextLiteral 구조를 변경했습니다. 리뷰 의견으로는 디버깅용 print 문 제거와 하드코딩된 외부 URL의 상수화 관리가 제안되었습니다.
#️⃣ 관련 이슈
Resolved #275
💡작업 내용
2026-05-03.10.34.13.mov
앱 내 언어 설정 기능을 추가했습니다.
AppLanguageenum을 추가하여 앱에서 지원하는 언어를 관리하도록 했습니다.AppLanguageManager를 추가하여 현재 앱 언어, 사용자 선택 언어 저장, 기기 언어 fallback, 언어 변경 처리를 담당하도록 구성했습니다.TextLiteral의 로컬라이징 구조를 수정했습니다.static let또는static var = ...형태로 선언되어 있던 문구들을static var: String { ... }형태의 computed property로 변경했습니다.TextLiteral이 이전 언어의 문자열을 계속 들고 있지 않고 현재 선택된 언어 기준으로 다시 문자열을 가져오도록 수정했습니다.언어 설정 화면을 추가했습니다.
MyPageSectionData에서 섹션 헤더와 섹션별 메뉴 아이템 목록을 함께 관리하도록 정리했습니다.MyPageLabels의 computed property에서 제공하도록 변경했습니다.MyPageViewController에서는 indexPath로 현재 item만 가져와cell.configure(with:)에 전달하도록 수정하여, 셀 구성 로직을 단순화했습니다.MyPageRightItemData는 앱 버전 외에는 필요하지 않아 제거하고, 앱 버전은MyPageView내부에서 직접 가져오도록 변경했습니다.💬리뷰 요구사항(선택)
TextLiteral의 문구들을static var: String { ... }형태로 변경한 부분을 중점적으로 봐주시면 좋겠습니다.static let또는static var = Localization.localized(...)형태는 처음 접근한 시점의 문자열을 저장하기 때문에, 앱 실행 중 언어를 변경해도 기존 언어의 문구가 계속 표시되는 문제가 있었습니다.AppLanguageManager.shared.currentLanguage기준의 bundle에서 문자열을 다시 가져오도록 했습니다.앞으로 번역된 문자열을 생성 시점에 저장해두는 구조는 주의가 필요할 것 같습니다.
TextLiteral.xxx값을let이나static let에 직접 저장하지 않는 것이 좋습니다.viewDidLoad보다 이전 또는 앱 초기화 시점에 한 번만 생성되는 데이터String타입의title,headerTitle,description등에TextLiteral결과를 직접 넣는 데이터 모델static let sections = [...]내부에TextLiteral.MyPage.activitySection같은 값을 직접 넣으면, 섹션 데이터가 처음 생성될 때의 문자열이 캐싱됩니다.static var sections: [Section] { ... }처럼 computed property 형태로 관리해야 합니다.현재 방향은 “언어 변경 시 rootViewController를 재생성하고, 화면에서 사용하는 문구는 접근 시점에 다시 가져오는 방식”입니다.
TextLiteral을 computed property로 관리하는 방식과,MyPageSectionData.sections처럼 정적 데이터에서 문자열 캐싱을 피하는 방식이 팀 컨벤션으로 괜찮을지 의견 부탁드립니다.+)
// 잇슈 인스타그램 이동 case .instagram: // TODO: 실제 로그 이름 통일 //AnalyticsService.logEvent("click_mypage_menu", parameters: ["menu": "instagram"]) if let instagramURL = URL(string: "https://www.instagram.com/eatssu.official/") { UIApplication.shared.open(instagramURL) } case .languageSetting: // TODO: 실제 로그 이름 통일 // AnalyticsService.logEvent("click_mypage_menu", parameters: ["menu": "language_setting"]) let languageSettingViewController = LanguageSettingViewController() navigationController?.pushViewController(languageSettingViewController, animated: true)여기서 안드로이드와 통일해야하는 로그 이름이 있는지 궁금합니다!