What URL Modification settings are you using in Ploylang? If you’re using “The language is set from content” it definitely won’t work with caching. (There is probably some way to get it to work with W3TC and custom Varnish rules, but the simpler method is just to put the language in the URL.)