Your question of how to read a line of GAMS code is a good one. Unfortunately, you included two lines of GAMS code - that creates ambiguity. I assume you ask only about the first line. You describe this as “should be equal to”. This is quite vague. I would say it like this:
t(cn)$[booleanExpr(cn)] = p(cn);
means “for all elements of cn such that booleanExpr(cn) is true, assign the value p(cn) to t(cn)”. This implies that no assignment is made where booleanExpr(cn) is false. Also, this is an assignment that happens once, when this line of code is executed. Later you could change t and/or p and they would no longer be equal. Don’t confuse an assignment with an equation specifying an equality.
In your code, your boolean expression involved a sum over the sets n and rgn. It’s typical to see this kind of thing, but don’t let that obscure the fact that this is an assignment over (a subset of) the elements of the set cn.
Also, your code used the value cn(cn) on the RHS. This is a little strange, and probably adds confusion with no benefit. Does it even compile? If it does, cn(cn) should evaluate to 1 if a numerical value is needed, so I would just write 1 there. I didn’t any of this, but that’s what I would expect.