こんばんは、kanakoさん。
こんな言い方はいかがでしょうか。
I have→私には…がいます
a non-Japanese friend who speaks Japanese→日本語が話せる外国人の(日本人でない)友達
語句の意味を確認しますね。
non-Japanese=非日本(人, 語)(の)
(ジーニアス英和大辞典)
speak=〈外国語を〉話す, 使う
(新英和大辞典)
「a non-Japanese friend」は「日本人でない友人」という意味です。
「foreign」を使うよりも、聞き手にとってわかりやすい表現になると思います。
(例)
I have a friend who lives in Chicago.→私にはシカゴに住む友人がいます。
I have a friend whose son has autism.→私には自閉症の息子を持つ友人がいます。
いかがでしょうか。
いろいろな言い方ができると思います。
一例をご紹介しました。
お力になれましたら幸いです。
ありがとうございました。
ちょっと質問者様の「外国人」を特定化させて、答えを工夫させていただきました。
「① I have a friend from XXX who speaks Japanese」(XXX国の友達がいて、その人は日本語を話せます。)
さて、何故外国人でなく国名を特定するのかというと、foreignerって、あまり綺麗な言葉じゃないんですよ。
部外者、外人、すなわち、私たちと同じではないことをニュアンスとして込まれているのです。
私はあまりforeignerを使うことを勧められません。こういうところは文化や価値観の違いと思いますね。
例えば、I have a friend from Brazil who speaks Japanese と言うと一番フレンドリーに聞こえます。
友達間に国境を置くのは良くないという発想ですかね。それなら、ちょっと言い方変えて国名を入れてあげるのが、スムーズなコミュニケーションに繋がると本当に思います。
ジュリアン