How to tell them apart
てある describes a state that already exists because someone did something earlier — the action is finished and you're observing the result, like 窓が開けてある. ておく focuses on the act of doing something now in preparation for later, like ビールを買っておいた. Swapping them is unnatural because てある won't convey the preparatory intent and ておく won't describe a visible resultant state.
- てある Use てある when you're describing a current state that results from a completed action.
- おく Use ておく when you do something now in preparation for a future need.
てある tearu
Has been done
Have been done; has been done; be done | Something has been done to something and the resultant state of that action remains.
-
それはもうジョンに話してある・あります。
It's been told to John already.
-
窓が開けてある。
The window has been open/is open.
おく oku
Do in advance
Do something in advance; go ahead and do something; let someone/something remain as he/it is | Do something in advance for future convenience.
-
今日は昼に客が来るので昼ご飯を早目に食べておいた。
Since I'm having a guest at noon today, I had my lunch earlier.
-
明日パーティーをするのでビールを買っておいた・おきました。
Since we are having a party tomorrow, I bought some beer for it.
てある and おく are both JLPT N4 grammar points that Japanese learners often mix up. This page compares them side by side — meanings, usage and example sentences — so you can tell them apart.