Python3, 204 bytes
A bit longer than I hoped, but hopefully interesting enough.
Try it online! (all testcases included)
Alphabet = "cenayhglmodrtvifspw" #Alphabet to convert strings to numbers and vice versa
def StringToNumber (s): #Identify the word by the second letter
def NumberToString (O):
def F(x): # the 'magic' function. Note that we can use floats with fewer decimals due to rounding
return 177638 + (172739/3 + (1074106505/264 + (-(32699060621/7392) + (1986769150133/22176 - (2050733259611*(-7 + x))/332640)*(-8 + x))*(-12 + x))* (-1 + x))*(-4 + x)
Since most answers seem to be literally writing the words or looking them up in a dictionary to output them, I was interested in not doing that, as that could be an improvement for most non-golfing languages.
The basic idea is simple: change the input into a number x,
calculate F(x) and change that back into a word.
Of course, F(x) is chosen such that the number corresponding to "war" maps to the number for "peace", etc.
This is done using Lagrange interpolation, which gives the unique minimum degree polynomial such that F(x_1)=y_1, F(x_2)=y_2, etc.
To reduce the constants in the formula a bit, the characters in the alphabet are placed such that characters in the end of the longer words come first. The first character in the alphabet cannot be at the end of a word, since this means we have to distinguish trialing zeros, which we cannot (int("0039")==int("39")).
Still, the formula is quite big. This approach would probably work better if the strings were over a smaller alphabet, as that reduces the constants in F.