Convert text to dot.case

dot.case joins your words with periods and lowercases everything. Paste user profile name and get user.profile.name. The format is common in i18n message keys, config file paths, log namespaces, and CSS-in-JS theme paths. For underscores, see snake_case; for dashes, see kebab-case.

Input
Line 1:1 LF cloud_done Saved locally
Result dot.case
0 lines 0 chars

Identifiers for namespaces and config keys

dot.case is the identifier style for namespaced keys: i18n message bundles (auth.login.error), config file lookups (database.host), log channel names (app.user.signin), and CSS-in-JS theme paths (theme.colors.primary). Every word is lowercase, joined with single dots, no other separators.

The engine tokenises your input the same way as the rest of the case family, then joins the lowercase tokens with .. user profile name becomes user.profile.name. Mixed-format input (camelCase, kebab-case, snake_case) all produces the same dotted key, which makes it easy to convert config or message-bundle keys between formats without losing word boundaries.

Where it shows up: i18n libraries like i18next, vue-i18n, and Rails I18n use dot.case keys for nested message bundles. Config libraries like node-config and Spring use dotted paths to look up nested values. Log frameworks like log4j use dotted logger names that map to package hierarchies. For the dash variant in URLs, use kebab-case; for the underscore variant in code, use snake_case.

How to use convert text to dot.case

  1. 1Paste or type your phrase into the input panel on the left.
  2. 2The dot.case key appears in the output panel on the right as you type.
  3. 3Mixed input is fine: userProfileName, user-profile-name, and USER PROFILE NAME all produce user.profile.name.
  4. 4Click Copy in the output header to paste the key into your i18n bundle or config file.
  5. 5For underscores, use snake_case; for dashes, use kebab-case.

Keyboard shortcuts

Drive TextResult without touching the mouse.

Shortcut Action
Ctrl FOpen the find & replace panel inside the input Plus
Ctrl ZUndo the last input change
Ctrl Shift ZRedo
Ctrl Shift EnterToggle fullscreen focus on the editor Plus
EscClose find & replace, or exit fullscreen
Ctrl KOpen the command palette to jump to any tool Plus
Ctrl SSave current workflow draft Plus
Ctrl PRun a saved workflow Plus

What this tool actually does

Word boundary detection

Same tokeniser as camelCase. Underscores, dashes, whitespace, and lowercase-to-uppercase transitions all count as word boundaries.

Lowercase joining with dots

Tokens are emitted in lowercase and joined with a single period. USER PROFILE -> user.profile. For uppercase variants, no sibling tool produces USER.PROFILE directly; combine dot.case with uppercase if you need that.

Idempotent on dotted input

Pasting user.profile.name back in produces the same result. Existing dots are not separators in the tokeniser, so they pass through; the lowercased tokens have dots in their content but no extra splitting happens. In practice, dotted input is preserved as-is.

Multiple separators collapse

Runs of underscores, dashes, or spaces collapse to a single dot. user---profile and user__profile both produce user.profile.

Pairs with the case family

Sibling tools share the same tokeniser. camelCase and PascalCase for joined identifiers, snake_case and CONSTANT_CASE for underscores, kebab-case and Train-Case for dashes.

Worked example

Spaces, dashes, and camelCase boundaries all collapse to the same dot.case result. Useful for converting i18n keys between flat and nested formats, or for normalising config paths from various sources.

Input
user profile name
app config root
DatabaseHostName
Output
user.profile.name
app.config.root
database.host.name

Settings reference

Input dot.case output
user profile user.profile
userProfile user.profile (boundary via lower-to-upper split)
user-profile user.profile
user_profile user.profile
USER PROFILE user.profile
auth.login.error auth.login.error (already-dotted input is preserved)

FAQ

Will it work for i18n message keys?
Yes. dot.case is the standard format for i18n libraries like i18next, vue-i18n, and Rails I18n. Use this tool to convert flat keys (user_profile_name) into nested paths (user.profile.name) or to normalise keys from mixed sources.
How is dot.case different from snake_case?
dot.case uses periods (user.profile); snake_case uses underscores (user_profile). Both lowercase. Use dot.case for namespaced keys (i18n, config, logs); snake_case for code identifiers.
Will it handle camelCase input?
Yes. The tokeniser splits on lowercase-to-uppercase transitions, so userProfileName produces user.profile.name.
What if my input already has dots?
Existing dots pass through. The tokeniser does not treat dots as a separator, so auth.login.error is preserved verbatim. If you want dots stripped, run remove special characters first.
How do I convert to other identifier styles?
Use camelCase or PascalCase for joined identifiers, snake_case for underscores, kebab-case for dashes, CONSTANT_CASE for upper-snake, or Train-Case for capitalised dashes.