☰ 분류

앱 현지화 AI 통합 프롬프트

SwiftUI 앱 요구를 넣으면 사용자 선택 언어 기반 현지화, 온보딩 언어 선택, AI 요청 언어 파라미터 통합을 설계합니다.

분류개발 › 코딩
태그초안작성번역개발자코드
프롬프트 (영어 본문 · 답은 한국어로 옵니다)
Act as an App Localization Expert. You are tasked with setting up a user-preference-based localization architecture in an application independent of the phone's system language.

Your task includes:
1. **LanguageManager Class**: Create a `LanguageManager` class using the `ObservableObject` protocol. Store the user's selected language in `UserDefaults`, with the default language set to 'en' (English). Display a selection screen on the first launch.
2. **Global Locale Override**: Wrap the entire `ContentView` structure in your SwiftUI app with `.environment(\.locale, .init(identifier: languageManager.selectedLanguage))` to trigger translations based on the selected language in `LanguageManager`.
3. **Onboarding Language Selection**: If no language has been selected previously, show a stylish 'Language Selection' screen with English and Turkish options on app launch. Save the selection immediately and transition to the main screen.
4. **AI (LLM) Integration**: Add the user's selected language as a parameter in AI requests (API calls). Update the system prompt to: 'User's preferred language: ${selected_language}. Respond in this language.'
5. **String Catalogs**: Integrate `.stringxcatalog` into your project and add all existing hardcoded strings in English (base) and Turkish.
6. **Dynamic Update**: Ensure that changing the language in settings updates the UI without restarting the app.
7. **User Language Change**: Allow users to change the app's language dynamically at any time.

Rules:
- Ensure seamless user experience during language selection and updates.
- Test functionality for both English and Turkish languages.

어떤 프롬프트인가

App Localization Expert 역할로 기기 언어와 독립적인 앱 언어 설정 구조를 만든다. 영어와 터키어 String Catalog, 동적 언어 변경, AI 시스템 프롬프트 반영을 포함한다.

모델 비교

ChatGPT가 정확성과 완결성에서 가장 우수하다. Gemini는 구체적이나 과도하게 길고 미완성이며, [C]는 누락됐다.

ChatGPT종합 1위
42/ 50

+ 핵심 아키텍처를 정확하고 간결하게 모두 제시했다.

- 카탈로그 실제 번역값과 실행 테스트 결과가 빠졌다.

Gemini
33/ 50

+ 온보딩·설정·AI 연동 코드가 구체적이고 실용적이다.

- 답이 중간에 끊겼고 선택 즉시 저장 요구도 어겼다.

기준ChatGPTGemini앞선 모델
지시 준수86ChatGPT +33%
정확성97ChatGPT +29%
구체성89Gemini +13%
구성·가독성97ChatGPT +29%
분량 적정성84ChatGPT +100%

gpt-5.6-sol가 모델 이름을 가린 채 1~10점으로 채점했습니다 (2026-09-25). 측정값이 아니라 AI 심사 결과입니다.

답 전문 보기

같은 입력을 세 모델에 넣어 받은 답을 그대로 옮겼습니다. 각 CLI(에이전트 하네스)에서 실행했습니다. ChatGPT·Claude 앱이나 웹에서는 답이 다를 수 있습니다.

gpt-5.6-luna (codex CLI · 에이전트 하네스) · 실행일 2026-09-24

현재 작업 공간이 읽기 전용이고 터미널/파일 편집 권한도 없어 실제 프로젝트 파일을 수정하거나 테스트할 수 없습니다. 대신 적용해야 할 구조는 다음과 같습니다.

LanguageManager.swift

import SwiftUI

@MainActor
final class LanguageManager: ObservableObject {
    private let languageKey = "selectedLanguage"
    private let didSelectLanguageKey = "didSelectLanguage"

    @Published var selectedLanguage: String {
        didSet {
            UserDefaults.standard.set(selectedLanguage, forKey: languageKey)
        }
    }

    @Published private(set) var hasSelectedLanguage: Bool

    init() {
        selectedLanguage =
            UserDefaults.standard.string(forKey: languageKey) ?? "en"

        hasSelectedLanguage =
            UserDefaults.standard.bool(forKey: didSelectLanguageKey)
    }

    func selectLanguage(_ language: String) {
        selectedLanguage = language
        hasSelectedLanguage = true
        UserDefaults.standard.set(true, forKey: didSelectLanguageKey)
    }
}

앱 진입점에서 전체 화면에 Locale을 적용합니다.

@main
struct MyApp: App {
    @StateObject private var languageManager = LanguageManager()

    var body: some Scene {
        WindowGroup {
            Group {
                if languageManager.hasSelectedLanguage {
                    ContentView()
                } else {
                    LanguageSelectionView()
                }
            }
            .environmentObject(languageManager)
            .environment(
                \.locale,
                Locale(identifier: languageManager.selectedLanguage)
            )
        }
    }
}

첫 실행 언어 선택 화면:

struct LanguageSelectionView: View {
    @EnvironmentObject private var languageManager: LanguageManager

    var body: some View {
        VStack(spacing: 24) {
            Text("language_selection_title")
                .font(.largeTitle.bold())

            Text("language_selection_subtitle")
                .foregroundStyle(.secondary)

            Button {
                languageManager.selectLanguage("en")
            } label: {
                Text("language_english")
                    .frame(maxWidth: .infinity)
            }
            .buttonStyle(.borderedProminent)

            Button {
                languageManager.selectLanguage("tr")
            } label: {
                Text("language_turkish")
                    .frame(maxWidth: .infinity)
            }
            .buttonStyle(.bordered)
        }
        .padding(32)
    }
}

설정 화면에서는 동일한 selectLanguage 메서드를 호출하면 앱 재시작 없이 UI가 갱신됩니다.

struct LanguageSettingsView: View {
    @EnvironmentObject private var languageManager: LanguageManager

    var body: some View {
        Picker("language", selection: Binding(
            get: { languageManager.selectedLanguage },
            set: { languageManager.selectLanguage($0) }
        )) {
            Text("language_english").tag("en")
            Text("language_turkish").tag("tr")
        }
        .pickerStyle(.menu)
    }
}

AI 요청에는 선택 언어와 시스템 프롬프트를 함께 전달합니다.

struct AIRequest: Encodable {
    let prompt: String
    let preferredLanguage: String
    let systemPrompt: String

    init(prompt: String, language: String) {
        self.prompt = prompt
        self.preferredLanguage = language
        self.systemPrompt =
            "User's preferred language: \(language). Respond in this language."
    }
}

문자열 카탈로그는 Xcode의 .xcstrings 형식을 사용해야 합니다. 사용자가 언급한 .stringxcatalog는 Apple의 실제 String Catalog 확장자가 아닙니다. 다음 키를 영어와 터키어로 등록하면 됩니다.

language_selection_title
language_selection_subtitle
language_english
language_turkish
language

SwiftUI에서는 모든 사용자 노출 문자열을 다음처럼 키 기반으로 사용합니다.

Text("language_selection_title")
Text("language_english")

검증 항목:

  • 신규 설치 시 언어 선택 화면 표시
  • 영어 선택 후 en 저장
  • 터키어 선택 후 tr 저장
  • 설정에서 언어 변경 시 즉시 UI 갱신
  • 앱 재실행 후 선택 언어 유지
  • AI 요청의 preferredLanguage 및 시스템 프롬프트 확인
  • 영어/터키어 String Catalog 누락 키 검사

실제 적용과 테스트를 완료하려면 프로젝트 파일 쓰기 권한이 필요합니다.

같은 분류의 프롬프트

방산 CV 12개월 로드맵 프롬프트
2046 퍼즐 게임 제작 프롬프트
React 컴포넌트 통합 프롬프트
3D 아바타 팩토리 요구 프롬프트
3D FPS 게임 개발 프롬프트