惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Troy Hunt's Blog
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
B
Blog RSS Feed
S
Securelist
H
Help Net Security
Security Archives - TechRepublic
Security Archives - TechRepublic
S
Secure Thoughts
Spread Privacy
Spread Privacy
C
Check Point Blog
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
L
Lohrmann on Cybersecurity
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Privacy International News Feed
T
The Exploit Database - CXSecurity.com
N
News and Events Feed by Topic
Blog — PlanetScale
Blog — PlanetScale
PCI Perspectives
PCI Perspectives
T
Tor Project blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Cyber Attacks, Cyber Crime and Cyber Security
Google Online Security Blog
Google Online Security Blog
The Hacker News
The Hacker News
宝玉的分享
宝玉的分享
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cisco Blogs
Last Week in AI
Last Week in AI
Webroot Blog
Webroot Blog
GbyAI
GbyAI
I
InfoQ
罗磊的独立博客
The GitHub Blog
The GitHub Blog
Google DeepMind News
Google DeepMind News
Latest news
Latest news
P
Palo Alto Networks Blog
博客园 - Franky
T
Threat Research - Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Security Affairs
H
Hacker News: Front Page
P
Privacy & Cybersecurity Law Blog
小众软件
小众软件
The Register - Security
The Register - Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
V
Vulnerabilities – Threatpost
人人都是产品经理
人人都是产品经理
博客园_首页
aimingoo的专栏
aimingoo的专栏

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
Japanese App Store Screenshots: Why Direct Translation From English Doesn't Work
Shotlingo · 2026-05-26 · via DEV Community

Shotlingo

Japanese App Store Screenshots: Why Direct Translation From English Doesn't Work

Localizing your app for Japan? If you just ran your English screenshot text through Google Translate, swapped the strings, and shipped it, your japanese app store screenshots are almost certainly broken in ways you cannot see from outside Japan. Wrong fonts. Suffocating line height. English punctuation embedded in Japanese sentences. Tech-app text that switches typeface mid-word.

This is the second post in our typography-and-localization data series. The German companion post showed how German expands (longer strings, more vertical space). Japanese does the opposite. It compresses the character count but increases visual density per character. Both languages break naive English layouts, just from opposite directions.

The TL;DR

Japanese app store screenshots fail when designers treat them as translated English. Japanese characters occupy roughly the same horizontal width as English (fewer characters, but each is about 2x wider), so the text block looks similar in size but becomes visually denser. Without increasing line height from 1.4 to around 1.7, switching to a CJK-aware font like Noto Sans CJK JP or Hiragino Sans, and replacing English punctuation with 「」、。, the screenshots read as machine-translated and unprofessional to Japanese users.

Japanese App Store Screenshots Aren't Just "Translated English"

The most common mistake is assuming Japanese is a 1:1 string swap. It is not. Japanese is a different visual system with three scripts (hiragana, katakana, kanji) often mixed in a single phrase.

Let's look at character math:

  • English Privacy Settings is 16 characters of narrow Latin letters.
  • Japanese プライバシー設定 is 8 characters, but each glyph is roughly 2x the visual width of a Latin letter.
  • Net horizontal width: almost identical.
  • Net visual density: dramatically higher in Japanese.

That density is the trap. Designers see the Japanese string fits the same bounding box as the English string, declare victory, and move on. But the eye reads it as a wall of text, especially at the small sizes used in App Store screenshot captions.

The flip from German is striking. German blows past English string lengths by 30-40 percent and forces you to redesign layouts vertically. Japanese fits in the same horizontal space but forces you to redesign typography, not layout.

The Font Fallback Trap

This is the single biggest visible failure in shipped japanese app store screenshots: a visible font seam in the middle of mixed Latin and Japanese text.

Here is what happens. You designed your screenshots in Figma with Helvetica or SF Pro. The Japanese characters in your localized strings do not exist in those Latin-only fonts. iOS silently falls back to the system Japanese font (Hiragino Sans or Hiragino Mincho). The result: a sentence like Pro版で全機能を解放 renders Pro in SF Pro and the kanji in Hiragino. The stroke weights do not match. The vertical alignment shifts. The character spacing breaks.

To a Japanese user, this looks exactly as amateurish as a Times New Roman headline followed by Comic Sans body copy would look to a Western user.

The Fix

Use a font family that covers both Latin and CJK in a coherent design:

  • Noto Sans CJK JP from Google. Free, open source, designed specifically to harmonize with Latin Noto Sans.
  • Source Han Sans from Adobe. Same font, different name, same family as Noto.
  • Hiragino Sans. iOS system default, but only available in Apple's design tools by default.

Pick one and use it for both the Latin and Japanese parts of every screenshot string. No fallbacks, no mixed families.

Line Height: The 1.4 vs 1.7 Rule

English screenshot captions typically use a line height between 1.2 and 1.4. Japanese needs 1.6 to 1.8. This is not a stylistic preference, it is a legibility requirement.

Kanji characters are visually heavy. A typical kanji has 8 to 15 strokes packed into a square. Stack two lines of kanji at line height 1.3 and the top strokes of the lower line almost collide with the bottom strokes of the upper line. The reader's eye cannot find the line break.

Bump line height to 1.7 and the same text breathes. The information density per pixel stays high (Japanese users prefer that, as we will see), but the reading rhythm becomes natural.

If you reuse your English line height value in your Japanese export, your screenshots will look suffocated. This is one of the fastest ways to identify a machine-localized app listing.

Common Words That Look Wrong

This table is the heart of the post. Pin it, screenshot it, share it on Twitter.

  | English 
  | Japanese 
  | Char count 
  | Visual issue 




  | Settings 
  | 設定 
  | 8 → 2 
  | Tiny text block. Looks underweight next to icon. Increase font size 10-20%. 


  | Notifications 
  | 通知 
  | 13 → 2 
  | Same problem. Two kanji feel lost in space designed for 13 Latin chars. 


  | Save time 
  | 時間を節約 
  | 9 → 5 
  | Fewer chars, similar width, much denser. Needs line height 1.7+. 


  | Get started 
  | 始めましょう 
  | 11 → 6 
  | Polite form is long. Common CTA failure. Test 始める (3 chars) for tighter spaces. 


  | Download 
  | ダウンロード 
  | 8 → 6 
  | Katakana loanword. Same visual length, but uses different script than the rest of your UI. 


  | Privacy Settings 
  | プライバシー設定 
  | 16 → 8 
  | Mixes katakana and kanji. Width identical. Density doubled. 


  | "Try it free" 
  | 「無料で試す」 
  | 13 → 7 
  | Note 「」 instead of "". Using English quotes here is the most common amateur tell. 

The pattern: Japanese almost always has fewer characters but rarely takes less horizontal space, and always takes more visual attention per character.

Punctuation Is Not Optional

Three small swaps separate professional from amateur:

  • Quotes: 「 」 not " "
  • Comma: 、 not ,
  • Period: 。 not .

A sentence like "設定" を開く. screams machine translation. 「設定」を開く。 reads as native. The visual spacing of the punctuation is also designed to sit correctly with full-width characters, where English punctuation looks cramped.

How to Design Japanese App Store Screenshots Right

A checklist, in priority order:

  • Pick one CJK-compatible font family (Noto Sans CJK JP or Source Han Sans) and use it for all text on the screenshot, Latin and Japanese.
  • Set line height to 1.6-1.8, not 1.2-1.4. Multi-line headlines are the most common failure point.
  • Resize per-string, not globally. Short strings like 設定 and 通知 often need to scale up 10-20% to maintain visual weight. Long strings stay the same.
  • Use Japanese punctuation in every string. No exceptions.
  • Embrace density. Japanese App Store listings tolerate (and culturally prefer) more information per screen than US listings. Apple's own Japanese App Store description uses a smaller font for descriptions than the English version.
  • Test mixed strings carefully. Anything like iPhone対応 or Pro版 is a font seam risk. Render at final size and inspect.
  • Read about layout direction for any vertical text or furigana (small reading aids above kanji). Most screenshots stay horizontal, but if you use vertical script you need a font that supports it.

If you are running localization for multiple markets, the broader principles are covered in our localization hub. Japan is rarely the only market where direct translation fails. Compare with German vertical expansion and you have most of the world's typography traps in two posts.

Tools and Fonts You Should Use

The minimum viable toolkit for shipping localized japanese app store screenshots:

FAQ

Do I need a Japanese designer to ship Japanese App Store screenshots?

Not strictly, but you need a Japanese-fluent reviewer. The typography rules above get you 80 percent of the way. The remaining 20 percent (natural phrasing, polite-form choice, brand voice) requires native review. Shipping without that review is the most common avoidable failure.

Can I use the same font sizes as my English screenshots?

For most strings, yes, if you also increase line height to 1.6-1.8. For very short strings like 設定 (2 chars) or 通知 (2 chars), scale up 10-20 percent so the text holds visual weight against icons and imagery. Reusing English sizing without adjusting line height is the single fastest way to make Japanese screenshots look suffocated.

Is Hiragino better than Noto Sans CJK JP?

For on-device iOS rendering, Hiragino is the system default and what users see everywhere else in the OS. For App Store screenshots that you design in Figma or Sketch, Noto Sans CJK JP is free, harmonizes with Latin Noto Sans, and looks consistent across export pipelines. Both are excellent. Pick one and stick with it across every screenshot in the same listing.

Ship Japanese Screenshots That Actually Convert

Direct translation gets you broken japanese app store screenshots. Correct typography gets you screenshots that look native, build trust, and convert. The difference is one font swap, one line-height adjustment, and three punctuation marks.

If you want a faster path: Shotlingo handles font fallback, line height, and CJK punctuation automatically when you localize a screenshot from English into Japanese. Create a free account and try localizing one screenshot. You will see the seam-free render in under a minute.


Originally published on Shotlingo