Skip to content

[#275] 앱 영어 지원 추가 & 마이페이지 리뉴얼#418

Open
wjdalswl wants to merge 16 commits intodevelopfrom
feat/#275
Open

[#275] 앱 영어 지원 추가 & 마이페이지 리뉴얼#418
wjdalswl wants to merge 16 commits intodevelopfrom
feat/#275

Conversation

@wjdalswl
Copy link
Copy Markdown
Contributor

@wjdalswl wjdalswl commented May 3, 2026

#️⃣ 관련 이슈

Resolved #275

💡작업 내용

이번 PR에서 작업한 내용을 간략히 설명해주세요(이미지 첨부 가능)

2026-05-03.10.34.13.mov
  • 앱 내 언어 설정 기능을 추가했습니다.

    • AppLanguage enum을 추가하여 앱에서 지원하는 언어를 관리하도록 했습니다.
    • AppLanguageManager를 추가하여 현재 앱 언어, 사용자 선택 언어 저장, 기기 언어 fallback, 언어 변경 처리를 담당하도록 구성했습니다.
    • 사용자가 앱에서 직접 언어를 선택한 경우 해당 언어를 우선 사용하고, 선택 이력이 없는 경우 기기 언어를 따르도록 구현했습니다.
  • TextLiteral의 로컬라이징 구조를 수정했습니다.

    • 기존 static let 또는 static var = ... 형태로 선언되어 있던 문구들을 static var: String { ... } 형태의 computed property로 변경했습니다.
    • 앱 실행 중 언어가 변경되었을 때, TextLiteral이 이전 언어의 문자열을 계속 들고 있지 않고 현재 선택된 언어 기준으로 다시 문자열을 가져오도록 수정했습니다.
  • 언어 설정 화면을 추가했습니다.

    • 마이페이지에서 언어 설정 화면으로 이동할 수 있도록 메뉴를 추가했습니다.
    • 언어 선택 시 현재 화면의 타이틀과 선택 상태가 즉시 갱신되도록 처리했습니다.
    • 언어 변경 후 뒤로가기 시 rootViewController를 새로 구성하여 탭바와 마이페이지 화면이 변경된 언어 기준으로 다시 그려지도록 구현했습니다.
  • 마이페이지 섹션/셀 데이터 구조를 통합했습니다.
    • MyPageSectionData에서 섹션 헤더와 섹션별 메뉴 아이템 목록을 함께 관리하도록 정리했습니다.
    • 각 메뉴의 title, subtitle, rightText 등 셀 표시 정보는 MyPageLabels의 computed property에서 제공하도록 변경했습니다.
    • MyPageViewController에서는 indexPath로 현재 item만 가져와 cell.configure(with:)에 전달하도록 수정하여, 셀 구성 로직을 단순화했습니다.
    • 기존에 우측 표시 값을 관리하던 MyPageRightItemData는 앱 버전 외에는 필요하지 않아 제거하고, 앱 버전은 MyPageView 내부에서 직접 가져오도록 변경했습니다.

💬리뷰 요구사항(선택)

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요

ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭이 있을까요?

  • TextLiteral의 문구들을 static var: String { ... } 형태로 변경한 부분을 중점적으로 봐주시면 좋겠습니다.

    • 기존 static let 또는 static var = Localization.localized(...) 형태는 처음 접근한 시점의 문자열을 저장하기 때문에, 앱 실행 중 언어를 변경해도 기존 언어의 문구가 계속 표시되는 문제가 있었습니다.
    • 이를 해결하기 위해 사용자에게 표시되는 문구는 computed property로 변경하여, 접근할 때마다 현재 AppLanguageManager.shared.currentLanguage 기준의 bundle에서 문자열을 다시 가져오도록 했습니다.
  • 앞으로 번역된 문자열을 생성 시점에 저장해두는 구조는 주의가 필요할 것 같습니다.

    • 특히 아래 조건에 해당하는 경우에는 TextLiteral.xxx 값을 let이나 static let에 직접 저장하지 않는 것이 좋습니다.
      • 앱 실행 중 언어 변경 이후에도 유지되는 전역/static 데이터
      • viewDidLoad보다 이전 또는 앱 초기화 시점에 한 번만 생성되는 데이터
      • 테이블 섹션/셀 메뉴 목록처럼 배열 형태로 미리 만들어두고 재사용하는 데이터
      • String 타입의 title, headerTitle, description 등에 TextLiteral 결과를 직접 넣는 데이터 모델
    • 예를 들어 테이블 섹션 헤더처럼 static let sections = [...] 내부에 TextLiteral.MyPage.activitySection 같은 값을 직접 넣으면, 섹션 데이터가 처음 생성될 때의 문자열이 캐싱됩니다.
    • 이 경우 언어를 변경해도 섹션 헤더가 바뀌지 않는 문제가 발생할 수 있어, 이런 데이터는 static var sections: [Section] { ... }처럼 computed property 형태로 관리해야 합니다.
  • 현재 방향은 “언어 변경 시 rootViewController를 재생성하고, 화면에서 사용하는 문구는 접근 시점에 다시 가져오는 방식”입니다.

    • 이 방식이 UIKit 기반 현재 구조에서 적절한지 봐주시면 좋겠습니다.
    • 특히 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)

여기서 안드로이드와 통일해야하는 로그 이름이 있는지 궁금합니다!

@wjdalswl wjdalswl linked an issue May 3, 2026 that may be closed by this pull request
@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello, 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

  • 앱 언어 지원 추가: AppLanguage enum과 AppLanguageManager를 도입하여 앱 내 언어 설정 기능을 구현했습니다. 사용자가 선택한 언어 또는 기기 언어를 기반으로 앱 언어를 동적으로 관리합니다.
  • TextLiteral 로컬라이징 구조 개선: 기존 static let으로 선언되었던 문자열들을 computed property로 변경하여, 앱 실행 중 언어 변경 시 즉시 반영되도록 수정했습니다.
  • 마이페이지 리뉴얼: 마이페이지의 섹션 데이터 구조를 개선하고, 언어 설정 및 약관 화면을 추가했습니다. 또한, 마이페이지 내 사용자 정보 표시 로직을 최적화했습니다.

🧠 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 Assist

The 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 /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

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 .gemini/ folder in the base of the repository. Detailed instructions can be found here.

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

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@wjdalswl wjdalswl self-assigned this May 3, 2026
Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

이번 풀요청은 마이페이지 UI 리팩토링과 다국어 지원 시스템 도입을 포함합니다. MyPageLabels를 고도화하고 섹션 기반의 데이터 구조를 도입하였으며, 프로필 레이아웃 수정 및 언어 설정, 약관/정책 화면을 새롭게 추가했습니다. 또한 AppLanguageManager를 통해 현지화 문자열을 관리하도록 TextLiteral 구조를 변경했습니다. 리뷰 의견으로는 디버깅용 print 문 제거와 하드코딩된 외부 URL의 상수화 관리가 제안되었습니다.

@wjdalswl wjdalswl requested a review from Hrepay May 3, 2026 14:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] 앱의 영어 지원

1 participant