g | x | w | all
Bytes Lang Time Link
071Python250506T095924ZSevC_10
068Google Sheets250429T131612Zdoubleun
04105AB1E250430T071539ZKevin Cr
043Charcoal250430T001341ZNeil
039Jelly250429T200333ZJonathan
046Japt P250429T172116ZShaggy
075APL+WIN250429T123601ZGraham
064JavaScript Node.js250429T121311Zl4m2

Python, 71 bytes

Simple lambda function that takes an integer as input and uses it as index to select the correct prefix.

lambda i:'0 1 Ni San Yon Go Roku Nana Hachi Kyū Jū'.split()[i]+'tama'

Attempt This Online!

Google Sheets, 68 bytes

=index(split("0Ni0San0Yon0Go0Roku0Nana0Hachi0Kyū0Jū",0,,),A1)&"tama"

screenshot

I don't think googletranslate() is of much help here, because 6 gets 6, and six gets . You'd need bahttext() to spell out the number and Apps Script to romanize and transliterate the result, so you could as well use LanguageApp or the Cloud Translation service from the get-go. Also, googletranslate(roman(6), "en", "ja") gets VI.

05AB1E, 41 bytes

.•6Γvékm4¦^˜«’Λ³Î$+θƶÖˆÁP<½•#ć«™'b₆ûç:I<è

Try it online or verify all test cases.

Explanation:

.•6Γvékm4¦^˜«’Λ³Î$+θƶÖˆÁP<½•
                # Push compressed string "tama jb ni san yon go roku nana hachi kyb"
  #             # Split it on spaces to a list
   ć            # Extract head; push remainder-list and first item separately
    «           # Append this head ("tama") to each item in the list
     ™          # Titlecase each string
      'b       '# Push "b"
        ₆       # Push 36
         û      # Palindromize it to 363
          ç     # Convert that to a character with that codepoint: "ū"
           :    # Replace all "b"s with "ū"s
            I   # Push the input
             <  # Decrease it by 1
              è # Leave the string at that (0-based) index
                # (which is output implicitly as result)

See this 05AB1E tip of mine (section How to compress strings not part of the dictionary?) to understand why .•6Γvékm4¦^˜«’Λ³Î$+θƶÖˆÁP<½• is "tama jb ni san yon go roku nana hachi kyb".

PS: The titlecasing is done before replacing the bs with ūs, because otherwise it would titlecase the Tama after the ūs as well for some reason.. try it online.

Charcoal, 43 bytes

§⁺⁺⪪KyJ²ū⪪”(1¶S″№wΠT⊙⁹✳R?▷^Rσ⎚ujDπ” Ntama

Try it online! Link is to verbose version of code. Explanation:

    KyJ                 Literal string `KyJ`
   ⪪                    Split into substrings of length
       ²                Literal integer `2`
  ⁺                     Vectorised concatenated with
        ū               Literal string `ū` (3 bytes)
 ⁺                      Concatenated with
          ”...”         Compressed string of prefixes for `2`-`8`
         ⪪              Split on spaces
§                       Cyclically indexed by
                N       Input as a number
                        Implicitly print
                 tama   Print literal string `tama`

Jelly,  40  39 bytes

“}“dƲȦ⁵ȤƝė½ṗ€Ċọḣṡ©ȷ8h1Ẉ³“»j363ỌḲ⁸ị“tama

A full program that accepts an integer argument from \$[2,10]\$ and prints the successor's name.

Try it online!

How?

“...»j363ỌḲ⁸ị“tama - Main Link: integer, N
“...»              - compressed list of strings
                      -> ["J", " Ni San Yon Go Roku Nana Hachi Ky", ""]
     j363          - join with 363
         Ọ         - cast to ordinals (replacing the 363s with 'ū's)
                      -> "Jū Ni San Yon Go Roku Nana Hachi Kyū"
          Ḳ        - split at space characters
           ⁸ị      - {N} 1-index, cyclically, into {that}
                   - implicit print
             “tama - "tama"
                   - implicit print

Japt -P, 46 bytes

g`kyÅ«tjÅ«tnÑytgÇrk©nÂA®i`qt)¬vu p`taµ

Try it

APL+WIN, 75 bytes.

Simple lookup. Prompts for integer between 2 and 10 included

(∊('Ni' 'San' 'Yon' 'Go' 'Roku' 'Nana' 'Hachi' 'Kyu' 'Ju')[⎕-1],'tama')~' '

Try it online! Thanks to Dyalog Classic

JavaScript (Node.js), 64 bytes

n=>'00Ni0San0Yon0Go0Roku0Nana0Hachi0Kyū0Jū'.split(0)[n]+'tama'

Try it online!

Not fun