Files
Gnuboard7/plugins/_bundled/sirsoft-gdpr/lang/en/messages.php
T
chym1217 192000cfce fix(sirsoft-gdpr): 쿠키 배너 노출 토글 안내 문구 및 필드 레이아웃 정정
banner_enabled(쿠키 배너 노출) 토글 안내가 "마이페이지 동의 관리 카드"까지
함께 켜지고 꺼지는 것처럼 서술되어 있었으나, 실제로는 카드가 이 토글과
무관하게 동의/철회 이력이 있는 회원에게 항상 노출된다(GDPR Art.7(3) 철회
대칭성 보장, mypage_privacy_tab.json 회귀 가드로 이미 고정된 설계).
문구만 실제 동작과 어긋나 있어 ko/en 양쪽 hint 및 관련 코드 주석을
바로잡았다.

문구 확인 과정에서 field_legal_entity_name / field_data_storage_location /
field_banner_enabled / field_banner_position 4개 필드가 텍스트 스타일
전용 클래스(section-heading-md, grid 미정의)를 컨테이너로 잘못 사용해
안내 문구가 길어지면 입력/토글 컨트롤이 아래 줄로 밀려나던 기존 UI
결함도 함께 발견해 수정했다. 같은 파일의 field_privacy_policy_slug가
이미 쓰던 올바른 grid-3col-responsive 패턴으로 통일.
2026-07-30 10:42:04 +09:00

285 lines
16 KiB
PHP

<?php
return [
'consent' => [
'granted' => 'Consent has been saved.',
'granted_again' => 'Consent has been renewed.',
'rejected_saved' => 'Continuing without consent. Optional items will not be used.',
'revoked' => 'Consent has been revoked.',
'renew_all_success' => '{renewed} active consent item(s) renewed to the new policy version.',
'granting' => 'Granting...',
'revoking' => 'Revoking...',
'renewing' => 'Renewing...',
'already_same_state' => 'Already in the same state.',
'required_cannot_revoke' => 'Required consent cannot be revoked.',
'invalid_key' => 'Invalid consent key.',
'category_cookie_necessary' => 'Strictly Necessary',
'category_cookie_functional' => 'Functional',
'category_cookie_analytics' => 'Analytics',
'category_cookie_marketing' => 'Marketing',
],
'blocked_domains' => [
'invalid_format' => 'Invalid domain format. (FQDN only; *.example.com wildcard supported)',
'invalid_format_functional' => 'Functional — Invalid domain format. (FQDN only; *.example.com wildcard supported)',
'invalid_format_analytics' => 'Analytics — Invalid domain format. (FQDN only; *.example.com wildcard supported)',
'invalid_format_marketing' => 'Marketing — Invalid domain format. (FQDN only; *.example.com wildcard supported)',
'too_long' => 'Domain cannot exceed 253 characters.',
'too_long_functional' => 'Functional — Domain cannot exceed 253 characters.',
'too_long_analytics' => 'Analytics — Domain cannot exceed 253 characters.',
'too_long_marketing' => 'Marketing — Domain cannot exceed 253 characters.',
'must_be_array' => 'Each category must be an array of domain strings.',
],
'settings' => [
'saved' => 'Settings have been saved.',
'title' => 'GDPR Settings',
'description' => 'Operators control the cookie consent banner and the MyPage privacy card.',
'section' => [
'operator' => 'Operator / Privacy Policy',
'operator_desc' => 'Register the operator name, data storage location, and privacy policy page slug displayed in the cookie banner and policy page. (GDPR Art.13 transparency obligation)',
'cookie_banner' => 'Cookie Consent Banner',
'cookie_banner_desc' => 'Configure visibility, position, categories, and policy version of the cookie consent banner — all in one place.',
'cookie_banner_settings' => 'Banner Display Settings',
'cookie_categories' => 'Cookie Categories',
'cookie_policy_version' => 'Cookie Policy Version',
'auto_blocking' => 'Auto-blocking Policy',
'auto_blocking_desc' => 'When the Cookie Banner is ON, external tracking resources matching the blocked-domain lists below are auto-blocked until the user consents. (No separate toggle — runs automatically with the banner.)',
],
'nav' => [
'operator' => 'Operator',
'cookie_banner' => 'Cookie Banner',
'auto_blocking_policy' => 'Auto-blocking Policy',
],
'status' => [
'enabled' => 'Enabled',
'disabled' => 'Disabled',
'visible' => 'Visible',
'hidden' => 'Hidden',
],
'fields' => [
'cookie_policy_version' => [
'label' => 'Policy Version',
'hint' => "Managed automatically by the system — operators do not enter values directly.\n• Adding/removing categories, category semantic changes, privacy policy page changes → new version auto-published + all members re-consent\n• Domain add/remove, label changes, etc. → no publication",
],
'privacy_policy_slug' => [
'label' => 'Privacy Policy Page Slug',
'hint' => 'Slug of the privacy policy page registered in the Page plugin. If empty, the policy link in the cookie banner is hidden.',
'placeholder' => 'e.g., privacy-policy',
],
'legal_entity_name' => [
'label' => 'Legal Entity / Operator Name',
'hint' => 'The operator name shown in the cookie banner and MyPage.',
'placeholder' => 'e.g., Acme Corp.',
],
'data_storage_location' => [
'label' => 'Data Storage Location',
'hint' => 'Country where user data is stored, shown to users. e.g., "United States (AWS)", "Germany". Do not enter IP addresses, cloud region codes (e.g., ap-northeast-2), or datacenter addresses — these are security-sensitive.',
'placeholder' => 'e.g., Korea (self-hosted IDC) / United States (AWS)',
'sensitive_format' => 'Data Storage Location cannot contain IP addresses, CIDR, or cloud region codes (e.g., ap-northeast-2). Use country names (e.g., Korea, United States) instead.',
],
'banner_enabled' => [
'label' => 'Show Cookie Banner',
'hint' => 'When enabled, the cookie consent banner and pre-consent auto-blocking are activated together. (Auto-blocking is the enforcement mechanism for GDPR Art.6 "no processing before consent" and is unified into a single toggle to prevent operators from disabling it independently.) The MyPage consent management card is independent of this toggle and always shows for members with consent/withdrawal history.',
],
'banner_position' => [
'label' => 'Banner Position',
'hint' => 'Choose where the cookie banner appears on screen.',
'option_bottom_bar' => 'Bottom bar (full width)',
'option_bottom_left_popup' => 'Bottom-left popup',
'option_bottom_right_popup' => 'Bottom-right popup',
'option_centered_modal' => 'Centered modal',
],
'blocked_domains' => [
'warnings_title' => 'Notes',
'auto_blocking_off_hint' => 'Auto-blocking is only active when the Cookie Banner is ON. Enable Show Cookie Banner in the Cookie Banner card first.',
'warning_visual_break' => 'Be careful when classifying external font/stylesheet domains. Misclassification can break the page silently.',
'warning_policy_bump' => 'Bump the cookie policy version after changing the blocked domain list. This prevents existing consenters from being implicitly enrolled into newly added trackers.',
'warning_domain_format' => 'Domain format: at least one dot. Wildcard *.example.com supported. Single-label (localhost) and IDN domains (convert to xn-- first) are not supported.',
'tag_input_placeholder' => 'Type a domain and press Enter (e.g., google-analytics.com, *.hotjar.com)',
'tag_no_options' => 'No suggestions. Type to add.',
'category' => [
'functional' => 'Functional — Blocked Domains',
'analytics' => 'Analytics — Blocked Domains',
'marketing' => 'Marketing — Blocked Domains',
],
],
'cookie_categories' => [
'description' => 'Open each card\'s [Show details] to see the purpose of the four cookie categories and the blocked-tool examples.',
'category_required_badge' => 'Required',
'category_optional_badge' => 'Optional',
],
],
'save_success' => 'Settings have been saved.',
'save_error' => 'An error occurred while saving settings.',
'validation_error' => 'Please check your inputs.',
'policy_version' => [
'current_label' => 'Current version',
'published_at_label' => 'Published at',
'publisher_label' => 'Publisher',
'publisher_system' => 'System',
'memo_label' => 'Change reason',
'publish_success' => 'A new policy version has been published. All members will be prompted to re-consent on their next visit.',
'publishing' => 'Publishing...',
'change_type' => [
'material' => 'Triggers re-consent',
'non_material' => 'Minor change',
'initial' => 'Initial publication',
],
'history_modal' => [
'title' => 'Policy version history',
'empty' => 'No policy versions have been published yet.',
],
'history' => [
'col' => [
'version' => 'Version',
'created_at' => 'Published at',
'publisher' => 'Publisher',
'change_type' => 'Type',
'memo' => 'Reason',
'snapshot_action' => 'Snapshot',
],
],
'snapshot_view_short' => 'View',
'material_modal' => [
'title' => 'Publish new policy version + trigger re-consent',
'body' => 'The following change will trigger an automatic policy version publication and require all members to re-consent.',
'effect_bump' => 'Automatic policy version publication (monotonic increment)',
'effect_reconsent' => 'All members will see the consent banner again on their next visit',
'effect_history' => 'A new version row will be added to the history modal',
'memo_label' => 'Change reason (required)',
'memo_placeholder' => 'e.g., Added analytics category (Hotjar integration)',
'confirm' => 'Publish new version and save',
],
'snapshot_modal' => [
'title' => 'Policy version v:version snapshot',
'description' => 'Full snapshot of settings at publication time — categories, privacy policy slug, blocked domains. Used by DPO as evidence in consent disputes.',
'section_categories' => 'Cookie categories',
'section_privacy_policy' => 'Privacy policy slug',
'section_blocked_domains' => 'Blocked domain catalog',
'category_required_badge' => 'Required',
'no_categories' => 'No categories registered.',
'no_blocked_domains' => 'No blocked domains registered.',
'view_button' => 'View v:version snapshot',
'close' => 'Close',
'open_policy_page' => 'Open policy page',
'no_policy_slug' => 'No privacy policy page registered.',
],
'not_found' => 'Policy version not found.',
],
],
'admin' => [
'consent_log' => [
'title' => 'GDPR Consent Log',
'description' => 'Audit consent and revocation history of members and guests. IP and User-Agent are included.',
'refresh' => 'Refresh',
'empty' => 'No consent log entries found.',
'clear_filters' => 'Clear filters',
'guest_label' => 'Guest',
'view_member_tooltip' => 'Open member detail page',
'search_placeholder' => 'Search by Email or Session ID',
'search_button' => 'Search',
'search_type' => [
'email' => 'Email',
'session_id' => 'Session ID',
],
'filter' => [
'consent_key_label' => 'Consent Key',
'action_label' => 'Action',
'source_label' => 'Source',
'option_all' => 'All',
],
'action' => [
'granted' => 'Granted',
'revoked' => 'Revoked',
'rejected' => 'Rejected',
],
'source' => [
'banner' => 'Banner',
'preference_center' => 'Preferences',
'mypage' => 'MyPage',
],
'col' => [
'created_at' => 'Time',
'subject' => 'Subject',
'consent_key' => 'Consent Key',
'action' => 'Action',
'source' => 'Source',
'policy_version' => 'Policy Version',
'ip' => 'IP',
],
'detail' => [
'session_id_label' => 'Session ID',
'user_agent_label' => 'User-Agent',
'categories_label' => 'Categories Snapshot',
'categories_hint' => "The member's category-by-category choices at the time of consent. This record stays immutable even after the policy is updated.",
'snapshot_granted' => 'Granted',
'snapshot_revoked' => 'Not Consented',
],
],
],
'mypage' => [
'privacy' => [
'title' => 'Cookie Consent',
'description' => 'Change or revoke your consent for the cookies this site uses.',
'section_consents' => 'My Consents',
'section_consents_hint' => 'Changes apply immediately. Required items cannot be revoked.',
'col_consent_key' => 'Consent',
'col_consented' => 'Status',
'col_consented_at' => 'Consented At',
'col_revoked_at' => 'Revoked At',
'col_policy_version' => 'Policy Version',
'col_action' => 'Action',
'consented' => 'Consented',
'revoked' => 'Revoked',
'rejected_label' => 'Rejected',
// Issue #430 — per-item status verb chosen by the Resource (status_label) from status.
'status' => [
'granted' => 'Consented',
'consented' => 'Consented',
'revoked' => 'Revoked',
'rejected' => 'Rejected',
],
// Issue #430 (button redesign) — status badge text. Resource(status_badge_label).
'badge' => [
'required' => 'Always on',
'consented' => 'Consented',
'rejected' => 'Declined',
'unset' => 'Not set',
],
'revoke' => 'Revoke',
'grant' => 'Consent',
'grant_again' => 'Consent Again',
'required_label' => 'Required',
'required_hint' => 'This item is required for service operation and cannot be revoked.',
'revoke_confirm_title' => 'Revoke Consent',
'revoke_confirm_message' => 'Are you sure you want to revoke this consent? Revoking consent may limit features related to that category.',
'no_consents' => 'No active consent items.',
'needs_renewal' => 'The cookie policy has been updated. Please renew your consent.',
'needs_renewal_with_version' => 'The cookie policy has been updated to version {version}. Please review the optional consent items.',
'needs_renewal_hint' => 'Strictly necessary cookies are essential for site operation and remain unchanged regardless of policy updates.',
'btn_renew_all' => 'Renew Current Consent',
'btn_renew_this_item' => 'Renew Policy',
'renew_all_success' => 'Renewed {renewed} active item(s) to the new policy version.',
],
],
'common' => [
'loading' => 'Loading...',
'refresh' => 'Refresh',
],
'banner' => [
're_appear_reason' => 'The cookie policy has been updated to version :version. Please review your consent.',
'consent_required_hint' => 'Features related to declined categories may be limited.',
'btn_renew_consent' => 'Renew Current Consent',
'title' => 'Cookie Notice',
'description' => 'This site uses cookies to improve user experience and for analytics. You can choose which cookies to allow.',
'accept_all' => 'Accept All',
'reject_continue' => 'Continue without consent',
'preferences' => 'Select Consent',
'save' => 'Save Selection',
'policy_link' => 'Privacy Policy',
'preferences_title' => 'Cookie Preferences',
'preferences_description' => 'You can grant or revoke each category individually. Required categories cannot be turned off.',
'category_required_badge' => 'Required',
'view_policy_label' => 'View updated policy',
],
];